void JGAnsMapSvrAuth(PMSG_ANS_MAPSVRAUTH * lpMsg) { if ( !OBJMAX_RANGE(lpMsg->iIndex)) { LogAddC(2, "[MapServerMng] Packet Error JG [0x7B] - Index out of bound : %d", lpMsg->iIndex); return; } LPOBJ lpObj = &gObj[lpMsg->iIndex]; memcpy(lpObj->Name, lpMsg->szCharName, MAX_ACCOUNT_LEN); if ( lpObj->m_bMapSvrMoveReq == false ) { LogAddC(2, "[MapServerMng] MapSvr MoveReq Error JG [0x7B] - No Request [%s] (%d)", lpObj->AccountID, lpObj->m_Index); gObjDel(lpMsg->iIndex); return; } BOOL bAuthOK = FALSE; int iSendResult = 0; char szId[11]; char szJN[21] = ""; int iIndex = lpMsg->iIndex; SDHP_DBCHARINFOREQUEST pMsg; char szName[11]; memset(szId, 0, sizeof(szId)); memcpy(szId, lpMsg->szAccountID, MAX_ACCOUNT_LEN); memcpy(szJN, lpMsg->cJoominNumber, sizeof(lpMsg->cJoominNumber)); switch ( lpMsg->iResult ) { case 0: iSendResult = 0; bAuthOK = FALSE; if ( !gObjSetAccountLogin(iIndex, szId, lpMsg->iUserNumber, lpMsg->iDBNumber, szJN)) { GJPAccountFail(iIndex, szId, lpMsg->iDBNumber, lpMsg->iUserNumber); lpMsg->iResult = 4; } else { LogAddTD(lMsg.Get(MSGGET(1, 211)), gObj[iIndex].Ip_addr, szId, lpMsg->iUserNumber, lpMsg->iDBNumber); iSendResult = 1; bAuthOK = TRUE; } if ( lpMsg->iUserNumber == 0 && lpMsg->iDBNumber == 0 ) { LogAddTD(lMsg.Get(MSGGET(1, 212)), szId, lpMsg->iUserNumber, lpMsg->iDBNumber); } switch ( lpMsg->btBlockCode ) { case 70: // 0x46 gObj[iIndex].m_cAccountItemBlock = 1; break; } break; default: iSendResult = 0; bAuthOK = FALSE; break; } GCAnsMapSvrAuth(iIndex, iSendResult); if ( bAuthOK == FALSE ) { LogAddC(2, "[MapServerMng] [%s][%s] JG [0x7B] - Join Result Failed : RST:%d, BLK:%c", szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode); gObjDel(lpMsg->iIndex); return; } gObj[iIndex].m_sPrevMapSvrCode = lpMsg->wPrevMapSvrCode; gObj[iIndex].m_sDestMapNumber = lpMsg->wMapNumber; gObj[iIndex].m_btDestX = lpMsg->btX; gObj[iIndex].m_btDestY = lpMsg->btY; gObj[iIndex].bEnableDelCharacter = FALSE; #if (ENABLETEST_ARCA == 1) if( g_ArcaBattle.IsArcaBattleServer() ) { g_ArcaBattle.SendArcaBattlePlayInfo(gObj[iIndex], 1); g_ArcaBattle.SendArcaBattleCurrentState(gObj[iIndex]); } #endif PHeadSetB((LPBYTE)&pMsg, 0x06, sizeof(pMsg)); memset(szName, 0, sizeof(szName)); memcpy(szName, lpMsg->szCharName, MAX_ACCOUNT_LEN); BuxConvert(szName, MAX_ACCOUNT_LEN); memcpy(pMsg.Name, szName, MAX_ACCOUNT_LEN); strcpy(pMsg.AccountID, lpMsg->szAccountID); pMsg.Number = lpObj->m_Index; cDBSMng.Send((PCHAR)&pMsg, pMsg.h.size); LogAddTD("[MapServerMng] [%s][%s] JG [0x7B] - Join Result OK : RST:%d, BLK:%c", szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode); }
void JGAnsMapSvrAuth(PMSG_ANS_MAPSVRAUTH * lpMsg) { if ( !OBJMAX_RANGE(lpMsg->iIndex)) { LogAdd( "[MapServerMng] Packet Error JG [0x7B] - Index out of bound : %d", lpMsg->iIndex); return; } LPOBJ lpObj = &gObj[lpMsg->iIndex]; memcpy(lpObj->Name, lpMsg->szCharName, MAX_ACCOUNT_LEN); if ( lpObj->m_bMapSvrMoveReq == false ) { LogAdd( "[MapServerMng] MapSvr MoveReq Error JG [0x7B] - No Request [%s] (%d)", lpObj->AccountID, lpObj->m_Index); gObjDel(lpMsg->iIndex); return; } BOOL bAuthOK = FALSE; int iSendResult = 0; char szId[11]; char szJN[14] = ""; int iIndex = lpMsg->iIndex; SDHP_DBCHARINFOREQUEST pMsg; char szName[11]; memset(szId, 0, sizeof(szId)); memcpy(szId, lpMsg->szAccountID, MAX_ACCOUNT_LEN); memcpy(szJN, lpMsg->cJoominNumber, sizeof(lpMsg->cJoominNumber)); switch ( lpMsg->iResult ) { case 0: iSendResult = 0; bAuthOK = FALSE; if ( !gObjSetAccountLogin(iIndex, szId, lpMsg->iUserNumber, lpMsg->iDBNumber, szJN)) { GJPAccountFail(iIndex, szId, lpMsg->iDBNumber, lpMsg->iUserNumber); lpMsg->iResult = 4; } else { LogAdd("***0467*** login : (%s)[%s] number:%d/ db:%d", gObj[iIndex].Ip_addr, szId, lpMsg->iUserNumber, lpMsg->iDBNumber); iSendResult = 1; bAuthOK = TRUE; } if ( lpMsg->iUserNumber == 0 && lpMsg->iDBNumber == 0 ) { LogAdd("Both user number and DB number are 0 (%s) %d %d", szId, lpMsg->iUserNumber, lpMsg->iDBNumber); } switch ( lpMsg->btBlockCode ) { case 70: // 0x46 gObj[iIndex].m_cAccountItemBlock = 1; break; } break; default: iSendResult = 0; bAuthOK = FALSE; break; } GCAnsMapSvrAuth(iIndex, iSendResult); if ( bAuthOK == FALSE ) { LogAdd( "[MapServerMng] [%s][%s] JG [0x7B] - Join Result Failed : RST:%d, BLK:%c", szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode); gObjDel(lpMsg->iIndex); return; } gObj[iIndex].m_sPrevMapSvrCode = lpMsg->wPrevMapSvrCode; gObj[iIndex].m_sDestMapNumber = lpMsg->wMapNumber; gObj[iIndex].m_btDestX = lpMsg->btX; gObj[iIndex].m_btDestY = lpMsg->btY; gObj[iIndex].bEnableDelCharacter = FALSE; PHeadSetB((LPBYTE)&pMsg, 0x06, sizeof(pMsg)); memset(szName, 0, sizeof(szName)); memcpy(szName, lpMsg->szCharName, MAX_ACCOUNT_LEN); BuxConvert(szName, MAX_ACCOUNT_LEN); memcpy(pMsg.Name, szName, MAX_ACCOUNT_LEN); strcpy_s(pMsg.AccountID, sizeof(pMsg.AccountID), lpMsg->szAccountID); pMsg.Number = lpObj->m_Index; wsDataServerCli.DataSend((PCHAR)&pMsg, pMsg.h.size); LogAdd("[MapServerMng] [%s][%s] JG [0x7B] - Join Result OK : RST:%d, BLK:%c", szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode); }
void JGPAccountRequest(SDHP_IDPASSRESULT * lpMsg) { char szId[11]; int aIndex; char szJN[20]=""; memset(szId, 0, sizeof(szId)); memcpy(szId, lpMsg->Id , sizeof(lpMsg->Id)); memcpy(szJN, lpMsg->JoominNumber , sizeof(lpMsg->JoominNumber)); aIndex = lpMsg->Number ; switch ( lpMsg->result ) { case 1: case 15: if (gObjSetAccountLogin(aIndex, szId, lpMsg->UserNumber , lpMsg->DBNumber, szJN ) == 0 ) { GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber ); lpMsg->result = 4; } else { LogAddTD(lMsg.Get(MSGGET(1, 211)), gObj[aIndex].Ip_addr, szId, lpMsg->UserNumber , lpMsg->DBNumber ); } if ( lpMsg->UserNumber == 0 && lpMsg->DBNumber == 0) { LogAddTD(lMsg.Get(MSGGET(1, 212)), szId, lpMsg->UserNumber , lpMsg->DBNumber ); } } #if (ENABLE_CUSTOM_OFFLINETRADE==1) if( lpMsg->result == 6 ) { for (int n=OBJ_STARTUSERINDEX;n<OBJMAX; n++) { if ( gObj[n].Connected >= PLAYER_PLAYING) { if ( gObj[n].AccountID[0] == *szId ) { if ( strcmp(&gObj[n].AccountID[0] , szId) == 0) { if( gObj[n].bOffTrade ) { gObjDel(n); } break; } } } } lpMsg->result = 3; } #else if( lpMsg->result == 6 ) lpMsg->result = 3; #endif if ( lpMsg->result == 0 ) lpMsg->result = 2; if ( lpMsg->result == 15 ) { lpMsg->result = 1; gObj[aIndex].m_cAccountItemBlock = 1; } gObj[aIndex].LoginMsgSnd = 0; if (gObj[aIndex].LoginMsgCount >= 3 ) { lpMsg->result = 8; } GCJoinResult(lpMsg->result , aIndex); if ( lpMsg->result != 1 ) { if ( gObj[aIndex].LoginMsgCount > 3 ) { CloseClient(aIndex); } } }
void JGPAccountRequest(SDHP_IDPASSRESULT * lpMsg) { char szId[11]; int aIndex; char szJN[14]=""; memset(szId, 0, sizeof(szId)); memcpy(szId, lpMsg->Id , sizeof(lpMsg->Id)); memcpy(szJN, lpMsg->JoominNumber , sizeof(lpMsg->JoominNumber)); aIndex = lpMsg->Number ; if ( lpMsg->result == 1 || lpMsg->result == 15 ) { if ( gNonPK == 0 && gLanguage == 0 ) { if (gJoomin15Check(szJN) == 0 ) { GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber ); lpMsg->result = 17; } } if ( gPkLimitFree == 1 && gLanguage == 0 ) { if (gJoominCheck(szJN, 18) == 0 ) { GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber ); lpMsg->result = 17; } } } switch ( lpMsg->result ) { case 1: case 15: if (gObjSetAccountLogin(aIndex, szId, lpMsg->UserNumber , lpMsg->DBNumber, szJN ) == 0 ) { GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber ); lpMsg->result = 4; } else { LogAdd("***0467*** login : (%s)[%s] number:%d/ db:%d", gObj[aIndex].Ip_addr, szId, lpMsg->UserNumber , lpMsg->DBNumber ); } if ( lpMsg->UserNumber == 0 && lpMsg->DBNumber == 0) { LogAdd("Both user number and DB number are 0 (%s) %d %d", szId, lpMsg->UserNumber , lpMsg->DBNumber ); } } if ( lpMsg->result == 0 ) lpMsg->result = 2; if ( lpMsg->result == 15 ) { lpMsg->result = 1; gObj[aIndex].m_cAccountItemBlock = 1; } gObj[aIndex].LoginMsgSnd = 0; if (gObj[aIndex].LoginMsgCount >= 3 ) { lpMsg->result = 8; } GCJoinResult(lpMsg->result , aIndex); if ( lpMsg->result != 1 ) { if ( gObj[aIndex].LoginMsgCount > 3 ) { CloseClient(aIndex); } } }