i fixed character in use bug.
WL checks see if Map server registered to WL if not it sets accoutn to null / sends message Main telling accounts not in use*
Code: Select all
void CWorldLog::EnterGame(int iClientH, char * pData)
{
char cData[256], cCharNameCheck[11], cMapName[11], cCharacterName[11], cAccountName[11], cAccountPassword[11], cAddress[16];
int iPort, iCode, iLevel, iRet;
char * cp;
WORD *wp;
DWORD *dwp;
int i;
bool bflag;
bflag = FALSE;
if (m_pClientList[iClientH] == NULL) return;
ZeroMemory(cData, sizeof(cData));
ZeroMemory(cCharNameCheck, sizeof(cCharNameCheck));
ZeroMemory(cMapName, sizeof(cMapName));
ZeroMemory(cCharacterName, sizeof(cCharacterName));
ZeroMemory(cAccountName, sizeof(cAccountName));
ZeroMemory(cAccountPassword, sizeof(cAccountPassword));
ZeroMemory(cAddress, sizeof(cAddress));
cp = (char *)(pData + DEF_INDEX2_MSGTYPE + 2);
memcpy(cCharacterName, cp, 10);
cp += 10;
memcpy(cMapName, cp, 10);
cp += 10;
memcpy(cAccountName, cp, 10);
cp += 10;
memcpy(cAccountPassword, cp, 10);
cp += 10;
iCode = iGetMapInformation(cMapName, cAddress, &iPort, iClientH);
wsprintf(G_cTxt, "(TestLog) ReqEnterGame: Accnt(%s) Pass(%s) Char(%s) Map(%s) Addr(%s) Port(%d) Code(%d)", cAccountName, cAccountPassword, cCharacterName, cMapName, cAddress, iPort, iCode);
PutLogList(G_cTxt);
//game char fix
for (i = 0; i < DEF_MAXGAMESERVERSMAPS; i++)
if((m_cMapList[i] != NULL) && (strcmp(m_cMapList[i]->m_cName, cMapName) == 0)) bflag = TRUE;
if (iCode == -1) {
dwp = (DWORD *)(cData);
*dwp = MSGID_RESPONSE_ENTERGAME;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_ENTERGAMERESTYPE_REJECT;
cp = (char *)(cData + DEF_INDEX2_MSGTYPE + 2);
*cp = 3;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 7, DEF_USE_ENCRYPTION);
if(bflag == FALSE) {
wsprintf(G_cTxt, "(TestLog) ReqEnterGame Reject! Account(%s) status NULL", cAccountName);
PutLogList(G_cTxt);
SendEventToMLS(MSGID_REQUEST_CLEARACCOUNTSTATUS, DEF_MSGTYPE_CONFIRM, cData, 10, -1);
OnPlayerAccountMessage(DEF_MSGACCOUNTSET_NULL, cAccountName, NULL, NULL, NULL);
return;
}
}
else if (iCode == -2) {
dwp = (DWORD *)(cData);
*dwp = MSGID_RESPONSE_ENTERGAME;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_ENTERGAMERESTYPE_REJECT;
cp = (char *)(cData + DEF_INDEX2_MSGTYPE + 2);
*cp = 5;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 7, DEF_USE_ENCRYPTION);
if(bflag == FALSE) {
wsprintf(G_cTxt, "(TestLog) ReqEnterGame Reject! Account(%s) status NULL", cAccountName);
PutLogList(G_cTxt);
SendEventToMLS(MSGID_REQUEST_CLEARACCOUNTSTATUS, DEF_MSGTYPE_CONFIRM, cData, 10, -1);
OnPlayerAccountMessage(DEF_MSGACCOUNTSET_NULL, cAccountName, NULL, NULL, NULL);
return;
}
}
else {
if (iGetCharacterInformation(cAccountName, cCharNameCheck, &iLevel) == FALSE) {
delete m_pClientList[iClientH];
m_pClientList[iClientH] = NULL;
wsprintf(G_cTxt, "(TestLog) ReqEnterGame Reject! Account(%s) status NULL", cAccountName);
PutLogList(G_cTxt);
SendEventToMLS(MSGID_REQUEST_CLEARACCOUNTSTATUS, DEF_MSGTYPE_CONFIRM, cData, 10, -1);
OnPlayerAccountMessage(DEF_MSGACCOUNTSET_NULL, cAccountName, NULL, NULL, NULL);
return;
}
dwp = (DWORD *)(cData);
*dwp = MSGID_RESPONSE_ENTERGAME;
wp = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
*wp = DEF_ENTERGAMERESTYPE_CONFIRM;
cp = (char *)(cData + DEF_INDEX2_MSGTYPE + 2);
memcpy(cp, cAddress, 16);
cp += 16;
wp = (WORD *)cp;
*wp = iPort;
cp += 2;
iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 24, DEF_USE_ENCRYPTION);
}
switch(iRet) {
case DEF_XSOCKEVENT_QUENEFULL:
case DEF_XSOCKEVENT_SOCKETERROR:
case DEF_XSOCKEVENT_CRITICALERROR:
case DEF_XSOCKEVENT_SOCKETCLOSED:
delete m_pClientList[iClientH];
m_pClientList[iClientH] = NULL;
return;
}
}