void TNotice::MakeNoticeMsg(void * lpNotice, BYTE btType, char * szNoticeMsg)
{
PMSG_NOTICE* pNotice = (PMSG_NOTICE*)lpNotice;
pNotice->type = btType;
memcpy(pNotice->Notice, szNoticeMsg, strlen(szNoticeMsg));
wsprintf(pNotice->Notice, szNoticeMsg);
PHeadSetB((LPBYTE)pNotice, 0x0D, strlen(pNotice->Notice) + sizeof(PMSG_NOTICE) - sizeof(pNotice->Notice) + 1);
// PMSG_NOTICE * pNotice = (PMSG_NOTICE *)lpNotice;
//
// pNotice->dwColor = 0;
//
// char szTempMsg[4096] = { 256, };
// memset(pNotice->Notice, 256, sizeof(pNotice->Notice));
//
// va_list pArguments;
// //va_start(pArguments, szNoticeMsg);
// vsprintf(szTempMsg, szNoticeMsg, pArguments);
// va_end(pArguments);
//
// MultiByteToWideChar(DEFAULT_CODEPAGE, 0, (char*)szNoticeMsg, strlen(szNoticeMsg), (WCHAR*)szTempMsg, sizeof(szTempMsg));
// memcpy(pNotice->Notice, szTempMsg, sizeof(pNotice->Notice));
// pNotice->Notice[sizeof(pNotice->Notice) - 2] = 0;
// pNotice->Notice[sizeof(pNotice->Notice) - 1] = 0;
// PHeadSetB((LPBYTE)pNotice, 0x0D, sizeof(PMSG_NOTICE) - sizeof(pNotice->Notice) + (wcslen((WCHAR*)pNotice->Notice) * 2 + 2));
}
void TNotice::MakeNoticeMsgEx(void * lpNotice, BYTE btType, char * szNoticeMsg, ...)
{
PMSG_NOTICE* pNotice = (PMSG_NOTICE*)lpNotice;
pNotice->type = btType;
va_list pArguments;
va_start(pArguments, szNoticeMsg);
vsprintf((char*)pNotice->Notice, (char*)szNoticeMsg, pArguments);
va_end(pArguments);
PHeadSetB((LPBYTE)pNotice, 0x0D, strlen(pNotice->Notice) + sizeof(PMSG_NOTICE) - sizeof(pNotice->Notice) + 1);
/*PMSG_NOTICE * pNotice = (PMSG_NOTICE *)lpNotice;
pNotice->dwColor = 0;
char szTempMsg[4096] = { 0, };
memset(pNotice->Notice, 0, sizeof(pNotice->Notice));
va_list pArguments;
va_start(pArguments, szNoticeMsg);
vsprintf(szTempMsg, szNoticeMsg, pArguments);
va_end(pArguments);
MultiByteToWideChar(DEFAULT_CODEPAGE, 0, (char*)szTempMsg, strlen(szTempMsg), (WCHAR*)pNotice->Notice, sizeof(pNotice->Notice));
pNotice->Notice[sizeof(pNotice->Notice) - 2] = 0;
pNotice->Notice[sizeof(pNotice->Notice) - 1] = 0;
PHeadSetB((LPBYTE)pNotice, 0x0D, sizeof(PMSG_NOTICE) - sizeof(pNotice->Notice) + (wcslen((WCHAR*)pNotice->Notice) * 2 + 2));*/
}
void TNotice::SetNoticeProperty(void * lpNotice, BYTE btType, DWORD dwColor, BYTE btCount, WORD wDelay, BYTE btSpeed)
{
PMSG_NOTICE * pNotice =(PMSG_NOTICE *) lpNotice;
pNotice->type = btType;
pNotice->dwColor = dwColor;
pNotice->btCount = btCount;
pNotice->wDelay = wDelay;
pNotice->btSpeed = btSpeed;
}
void TNotice::SendNoticeToAllUser(void * lpNotice)
{
PMSG_NOTICE * pNotice = (PMSG_NOTICE *)lpNotice;
for ( int n = g_ConfigRead.server.GetObjectStartUserIndex() ; n < g_ConfigRead.server.GetObjectMax() ; n++)
{
if ( gObj[n].Connected == PLAYER_PLAYING )
{
if ( gObj[n].Type == OBJ_USER )
{
IOCP.DataSend(n, (unsigned char*)pNotice , pNotice->h.size );
}
}
}
}
void TNotice::SendNoticeToUser(int aIndex, void * lpNotice)
{
PMSG_NOTICE * pNotice = (PMSG_NOTICE *)lpNotice;
IOCP.DataSend(aIndex, (unsigned char*)pNotice, pNotice->h.size );
}
void TNotice::AllSendServerMsg(LPSTR chatmsg)
{
PMSG_NOTICE pNotice;
MakeNoticeMsg((TNotice *)&pNotice, 0, chatmsg);
for ( int n = g_ConfigRead.server.GetObjectStartUserIndex() ; n < g_ConfigRead.server.GetObjectMax() ; n++)
{
if ( gObj[n].Connected == PLAYER_PLAYING )
{
if ( gObj[n].Type == OBJ_USER )
{
IOCP.DataSend(n, (unsigned char*)&pNotice , pNotice.h.size );
}
}
}
}
void TNotice::GCServerMsgStringSend(LPSTR szMsg, int aIndex, BYTE type)
{
PMSG_NOTICE pNotice;
MakeNoticeMsg(&pNotice, type, szMsg);
IOCP.DataSend(aIndex, (unsigned char*)&pNotice, pNotice.h.size);
}
TNotice::TNotice(BYTE btType)
{
this->m_Notice.btCount = 1;
this->m_Notice.btSpeed = 20;
this->m_Notice.dwColor = _ARGB(255, 255, 200, 80 );
this->m_Notice.wDelay = 0;
this->m_Notice.type = btType;
}
void TNotice::SendToAllUser(LPSTR szMsg, ...)
{
va_list pArguments;
va_start(pArguments, szMsg);
vsprintf(this->m_Notice.Notice, (char*)szMsg, pArguments);
va_end(pArguments);
PHeadSetB((LPBYTE)&this->m_Notice, 0x0D, strlen(this->m_Notice.Notice) + sizeof(PMSG_NOTICE) - sizeof(this->m_Notice.Notice) + 1);
for (int n = g_ConfigRead.server.GetObjectStartUserIndex(); n < g_ConfigRead.server.GetObjectMax(); n++)
{
if (gObj[n].Connected == PLAYER_PLAYING)
{
if (gObj[n].Type == OBJ_USER)
{
IOCP.DataSend(n, (LPBYTE)&this->m_Notice, this->m_Notice.h.size);
}
}
}
}
void TNotice::SendToUser(int aIndex, LPSTR szMsg, ...)
{
char szTempMsg[4096] = { 0, };
memset(m_Notice.Notice, 0, sizeof(m_Notice.Notice));
va_list pArguments;
va_start(pArguments, szMsg);
vsprintf(szTempMsg, szMsg, pArguments);
va_end(pArguments);
MultiByteToWideChar(DEFAULT_CODEPAGE, 0, (char*)szTempMsg, strlen(szTempMsg), (WCHAR*)m_Notice.Notice, sizeof(m_Notice.Notice));
m_Notice.Notice[sizeof(m_Notice.Notice) - 2] = 0;
m_Notice.Notice[sizeof(m_Notice.Notice) - 1] = 0;
PHeadSetB((LPBYTE)&m_Notice, 0x0D, sizeof(PMSG_NOTICE) - sizeof(m_Notice.Notice) + (wcslen((WCHAR*)m_Notice.Notice) * 2 + 2));
IOCP.DataSend(aIndex, (LPBYTE)&this->m_Notice , this->m_Notice.h.size );
}
void TNotice::GCNoticeSend(int aIndex, BYTE type, BYTE count, BYTE opacity, WORD delay, DWORD color, BYTE speed, char* message, ...) // OK
{
char buff[256] = { };
va_list arg;
va_start(arg, message);
vsprintf_s(buff, message, arg);
va_end(arg);
int size = strlen(buff);
size = ((size>MAX_MESSAGE_SIZE) ? MAX_MESSAGE_SIZE : size);
PMSG_NOTICE_SEND pMsg;
pMsg.header.set((LPBYTE)&pMsg, 0x0D, (sizeof(pMsg) - (sizeof(pMsg.message) - (size + 1))));
pMsg.type = type;
pMsg.count = count;
pMsg.opacity = opacity;
pMsg.delay = delay;
pMsg.color = color;
pMsg.speed = speed;
memcpy(pMsg.message, buff, size);
pMsg.message[size] = 0;
IOCP.DataSend(aIndex, (BYTE*)&pMsg, pMsg.header.size);
}
void TNotice::GCNoticeSendToAll(BYTE type, BYTE count, BYTE opacity, WORD delay, DWORD color, BYTE speed, char* message, ...) // OK
{
char buff[256] = { 0};
va_list arg;
va_start(arg, message);
vsprintf_s(buff, message, arg);
va_end(arg);
int size = strlen(buff);
size = ((size>MAX_MESSAGE_SIZE) ? MAX_MESSAGE_SIZE : size);
PMSG_NOTICE_SEND pMsg;
pMsg.header.set((LPBYTE)&pMsg, 0x0D, (sizeof(pMsg) - (sizeof(pMsg.message) - (size + 1))));
pMsg.type = type;
pMsg.count = count;
pMsg.opacity = opacity;
pMsg.delay = delay;
pMsg.color = color;
pMsg.speed = speed;
memcpy(pMsg.message, buff, size);
pMsg.message[size] = 0;
for (int n = g_ConfigRead.server.GetObjectStartUserIndex(); n < g_ConfigRead.server.GetObjectMax(); n++)
{
if (gObjIsConnectedGP(n) != 0)
{
IOCP.DataSend(n, (BYTE*)&pMsg, pMsg.header.size);
}
}
}