void CUdpSocket::RecvCreateKnights( char* pBuf ) { int index = 0, send_index = 0, knightsindex = 0, nation = 0, community = 0; char knightsname[MAX_ID_SIZE+1], chiefname[MAX_ID_SIZE+1]; CKnights* pKnights = NULL; community = GetByte( pBuf, index ); knightsindex = GetShort( pBuf, index ); nation = GetByte( pBuf, index ); if (!GetKOString(pBuf, knightsname, index, MAX_ID_SIZE) || !GetKOString(pBuf, chiefname, index, MAX_ID_SIZE)) return; pKnights = new CKnights(); pKnights->m_sIndex = knightsindex; pKnights->m_byFlag = community; pKnights->m_byNation = nation; strcpy(pKnights->m_strName, knightsname); strcpy(pKnights->m_strChief, chiefname); m_pMain->m_KnightsArray.PutData( pKnights->m_sIndex, pKnights ); // 클랜정보에 추가 m_pMain->m_KnightsManager.AddKnightsUser( knightsindex, chiefname ); //TRACE("UDP - RecvCreateKnights - knname=%s, name=%s, index=%d\n", knightsname, chiefname, knightsindex); }
void CUser::SelCharToAgent(char *pBuf) { int index = 0, send_index = 0, retvalue = 0; char userid[MAX_ID_SIZE+1], accountid[MAX_ID_SIZE+1]; memset( userid, NULL, MAX_ID_SIZE+1 ); memset( accountid, NULL, MAX_ID_SIZE+1 ); char send_buff[256]; memset( send_buff, NULL, 256); CUser* pUser = NULL; CTime t = CTime::GetCurrentTime(); BYTE bInit = 0x01; if (!GetKOString(pBuf, accountid, index, MAX_ID_SIZE) || !GetKOString(pBuf, userid, index, MAX_ID_SIZE)) goto fail_return; bInit = GetByte( pBuf, index ); if( _strnicmp( accountid, m_strAccountID, MAX_ID_SIZE ) != 0 ) { Close(); return; } pUser = m_pMain->GetUserPtr(userid, TYPE_CHARACTER); if( pUser && (pUser->GetSocketID() != GetSocketID()) ) { pUser->Close(); goto fail_return; } SetByte( send_buff, WIZ_SEL_CHAR, send_index ); SetShort( send_buff, m_Sid, send_index ); SetKOString(send_buff, m_strAccountID, send_index); SetKOString(send_buff, userid, send_index); SetByte( send_buff, bInit, send_index ); m_pMain->WriteLog("[SelCharToAgent : %d:%d:%d] - acname=%s, name=%s, TH: %lu, Rear : %d\r\n", t.GetHour(), t.GetMinute(), t.GetSecond(), m_strAccountID, userid, GetCurrentThreadId(), m_pMain->m_LoggerSendQueue.GetRearPointer()); retvalue = m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ); if (retvalue < SMQ_FULL) return; DEBUG_LOG("SelChar Send Fail : %d", retvalue); fail_return: send_index = 0; SetByte( send_buff, WIZ_SEL_CHAR, send_index ); SetByte( send_buff, 0x00, send_index ); Send( send_buff, send_index ); }
void CUdpSocket::RecvJoinKnights( char* pBuf, BYTE command ) { int send_index = 0, knightsindex = 0, index = 0; char charid[MAX_ID_SIZE+1], send_buff[128], finalstr[128]; CKnights* pKnights = NULL; knightsindex = GetShort( pBuf, index ); if (!GetKOString(pBuf, charid, index, MAX_ID_SIZE)) return; pKnights = m_pMain->m_KnightsArray.GetData( knightsindex ); if( command == KNIGHTS_JOIN ) { sprintf( finalstr, "#### %s님이 가입하셨습니다. ####", charid ); // 클랜정보에 추가 m_pMain->m_KnightsManager.AddKnightsUser( knightsindex, charid ); TRACE("UDP - RecvJoinKnights - 가입, name=%s, index=%d\n", charid, knightsindex); } else { // 탈퇴.. // 클랜정보에 추가 m_pMain->m_KnightsManager.RemoveKnightsUser( knightsindex, charid ); sprintf( finalstr, "#### %s님이 탈퇴하셨습니다. ####", charid ); TRACE("UDP - RecvJoinKnights - 탈퇴, name=%s, index=%d\n", charid, knightsindex ); } //TRACE("UDP - RecvJoinKnights - command=%d, name=%s, index=%d\n", command, charid, knightsindex); send_index = 0; SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, KNIGHTS_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetKOString( send_buff, finalstr, send_index ); m_pMain->Send_KnightsMember( knightsindex, send_buff, send_index ); }
void CAISocket::RecvSystemMsg(char* pBuf) { int index = 0, send_index = 0; char send_buff[256], strSysMsg[256]; BYTE bType; short sWho; bType = GetByte(pBuf,index); sWho = GetShort(pBuf,index); if (!GetKOString(pBuf, strSysMsg, index, sizeof(strSysMsg) - 1)) return; //TRACE("RecvSystemMsg - type=%d, who=%d, len=%d, msg=%s\n", bType, sWho, sLength, strSysMsg); switch(sWho) { case SEND_ME: break; case SEND_REGION: break; case SEND_ALL: SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, bType, send_index ); SetByte( send_buff, 0x01, send_index ); // nation SetShort( send_buff, -1, send_index ); // sid SetKOString( send_buff, strSysMsg, send_index ); m_pMain->Send_All( send_buff, send_index ); break; case SEND_ZONE: break; } }
/*** * We've been told from another server that someone has joined (or rejected joining) a clan. ***/ void CUdpSocket::RecvJoinKnights(char* pBuf, BYTE command) { int knightsindex = 0, index = 0; char charid[MAX_ID_SIZE+1]; CString clanNotice; knightsindex = GetShort( pBuf, index ); if (!GetKOString(pBuf, charid, index, MAX_ID_SIZE)) return; CKnights *pKnights = g_pMain->GetClanPtr(knightsindex); if (pKnights == NULL) return; if (command == KNIGHTS_JOIN) { clanNotice = g_pMain->GetServerResource(IDS_KNIGHTS_JOIN); pKnights->AddUser(charid); TRACE("UDP - RecvJoinKnights - name=%s, index=%d\n", charid, knightsindex); } else { clanNotice = g_pMain->GetServerResource(IDS_KNIGHTS_WITHDRAW); pKnights->RemoveUser(charid); TRACE("UDP - RecvJoinKnights - name=%s, index=%d\n", charid, knightsindex ); } pKnights->SendChat(clanNotice, charid); }
void CUdpSocket::ServerChat(char *pBuf) { int index = 0; char chatstr[512]; if (!GetKOString(pBuf, chatstr, index, sizeof(chatstr))) return; DEBUG_LOG(chatstr); }
void CUser::NewCharToAgent(char *pBuf) { int index = 0, idlen = 0, send_index = 0, retvalue = 0; int charindex = 0, race = 0, Class = 0, hair = 0, face = 0, str = 0, sta = 0, dex = 0, intel = 0, cha = 0; char charid[MAX_ID_SIZE+1]; memset( charid, NULL, MAX_ID_SIZE+1 ); char send_buff[256]; memset( send_buff, NULL, 256); BYTE result; int sum = 0; _CLASS_COEFFICIENT* p_TableCoefficient = NULL; charindex = GetByte( pBuf, index ); if (!GetKOString(pBuf, charid, index, MAX_ID_SIZE)) { result = 0x05; goto fail_return; } race = GetByte( pBuf, index ); Class = GetShort( pBuf, index ); face = GetByte( pBuf, index ); hair = GetDWORD( pBuf, index ); str = GetByte( pBuf, index ); sta = GetByte( pBuf, index ); dex = GetByte( pBuf, index ); intel = GetByte( pBuf, index ); cha = GetByte( pBuf, index ); if( charindex > 4 || charindex < 0 ) { result = 0x01; goto fail_return; } if( !IsValidName( charid ) ) { result = 0x05; goto fail_return; } p_TableCoefficient = m_pMain->m_CoefficientArray.GetData( Class ); if( !p_TableCoefficient ) { result = 0x02; goto fail_return; } sum = str + sta + dex + intel + cha; if( sum > 300 ) { result = 0x02; goto fail_return; } if (str < 50 || sta < 50 || dex < 50 || intel < 50 || cha < 50) { result = 0x11; goto fail_return; } SetByte( send_buff, WIZ_NEW_CHAR, send_index ); SetShort( send_buff, m_Sid, send_index ); SetKOString( send_buff, m_strAccountID, send_index ); SetByte( send_buff, charindex, send_index ); SetKOString(send_buff, charid, send_index); SetByte( send_buff, race, send_index ); SetShort( send_buff, Class, send_index ); SetByte( send_buff, face, send_index ); SetDWORD( send_buff, hair, send_index ); SetByte( send_buff, str, send_index ); SetByte( send_buff, sta, send_index ); SetByte( send_buff, dex, send_index ); SetByte( send_buff, intel, send_index ); SetByte( send_buff, cha, send_index ); retvalue = m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ); if (retvalue < SMQ_FULL) return; DEBUG_LOG("NewChar Send Fail : %d", retvalue); fail_return: send_index = 0; SetByte( send_buff, WIZ_NEW_CHAR, send_index ); SetByte( send_buff, result, send_index ); Send( send_buff, send_index ); }
void CUdpSocket::RecvBattleEvent(char *pBuf) { int index = 0, send_index = 0, udp_index = 0; int nType = 0, nResult = 0, nLen = 0, nKillKarus = 0, nElmoKill = 0; char strMaxUserName[MAX_ID_SIZE+1]; memset( strMaxUserName, 0x00, MAX_ID_SIZE+1 ); char strKnightsName[MAX_ID_SIZE+1]; memset( strKnightsName, 0x00, MAX_ID_SIZE+1 ); char chatstr[256]; memset( chatstr, NULL, 1024 ); char finalstr[1024]; memset( finalstr, NULL, 1024); char send_buff[1024]; memset( send_buff, NULL, 1024); std::string buff; nType = GetByte( pBuf, index ); nResult = GetByte(pBuf, index); if( nType == BATTLE_EVENT_OPEN ) { } else if( nType == BATTLE_MAP_EVENT_RESULT ) { if( m_pMain->m_byBattleOpen == NO_BATTLE ) { TRACE("#### UDP RecvBattleEvent Fail : battleopen = %d, type = %d\n", m_pMain->m_byBattleOpen, nType); return; } if( nResult == KARUS ) { //TRACE("--> UDP RecvBattleEvent : 카루스 땅으로 넘어갈 수 있어\n"); m_pMain->m_byKarusOpenFlag = 1; // 카루스 땅으로 넘어갈 수 있어 } else if( nResult == ELMORAD ) { //TRACE("--> UDP RecvBattleEvent : 엘모 땅으로 넘어갈 수 있어\n"); m_pMain->m_byElmoradOpenFlag = 1; // 엘모 땅으로 넘어갈 수 있어 } } else if( nType == BATTLE_EVENT_RESULT ) { if( m_pMain->m_byBattleOpen == NO_BATTLE ) { TRACE("#### UDP RecvBattleEvent Fail : battleopen = %d, type=%d\n", m_pMain->m_byBattleOpen, nType); return; } if( nResult == KARUS ) { //TRACE("--> UDP RecvBattleEvent : 카루스가 승리하였습니다.\n"); } else if( nResult == ELMORAD ) { //TRACE("--> UDP RecvBattleEvent : 엘모라드가 승리하였습니다.\n"); } m_pMain->m_bVictory = nResult; m_pMain->m_byOldVictory = nResult; m_pMain->m_byKarusOpenFlag = 0; // 카루스 땅으로 넘어갈 수 없도록 m_pMain->m_byElmoradOpenFlag = 0; // 엘모 땅으로 넘어갈 수 없도록 m_pMain->m_byBanishFlag = 1; } else if( nType == BATTLE_EVENT_MAX_USER ) { nLen = GetByte(pBuf, index); if (!GetKOString(pBuf, strKnightsName, index, MAX_ID_SIZE) || GetKOString(pBuf, strMaxUserName, index, MAX_ID_SIZE)) return; int nResourceID = 0; switch (nResult) { case 1: // captain nResourceID = IDS_KILL_CAPTAIN; break; case 2: // keeper case 7: // warders? case 8: nResourceID = IDS_KILL_GATEKEEPER; break; case 3: // Karus sentry nResourceID = IDS_KILL_KARUS_GUARD1; break; case 4: // Karus sentry nResourceID = IDS_KILL_KARUS_GUARD2; break; case 5: // El Morad sentry nResourceID = IDS_KILL_ELMO_GUARD1; break; case 6: // El Morad sentry nResourceID = IDS_KILL_ELMO_GUARD2; break; } if (nResourceID == 0) { TRACE("RecvBattleEvent: could not establish resource for result %d", nResult); return; } _snprintf(finalstr, sizeof(finalstr), m_pMain->GetServerResource(nResourceID), strKnightsName, strMaxUserName); SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, WAR_SYSTEM_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetShort( send_buff, strlen(finalstr), send_index ); SetString( send_buff, finalstr, strlen(finalstr), send_index ); m_pMain->Send_All( send_buff, send_index ); memset( send_buff, NULL, 256 ); send_index = 0; SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, PUBLIC_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetShort( send_buff, strlen(finalstr), send_index ); SetString( send_buff, finalstr, strlen(finalstr), send_index ); m_pMain->Send_All( send_buff, send_index ); } else if( nType == BATTLE_EVENT_KILL_USER ) { if( nResult == 1 ) { nKillKarus = GetShort( pBuf, index ); nElmoKill = GetShort( pBuf, index ); m_pMain->m_sKarusDead = m_pMain->m_sKarusDead + nKillKarus; m_pMain->m_sElmoradDead = m_pMain->m_sElmoradDead + nElmoKill; //TRACE("--> UDP RecvBattleEvent type = 1 : 적국 유저 죽인수 : karus=%d->%d, elmo=%d->%d\n", nKillKarus, m_pMain->m_sKarusDead, nElmoKill, m_pMain->m_sElmoradDead); SetByte( send_buff, UDP_BATTLE_EVENT_PACKET, send_index ); SetByte( send_buff, BATTLE_EVENT_KILL_USER, send_index ); SetByte( send_buff, 2, send_index ); // karus의 정보 전송 SetShort( send_buff, m_pMain->m_sKarusDead, send_index ); SetShort( send_buff, m_pMain->m_sElmoradDead, send_index ); m_pMain->Send_UDP_All( send_buff, send_index ); } else if( nResult == 2 ) { nKillKarus = GetShort( pBuf, index ); nElmoKill = GetShort( pBuf, index ); //TRACE("--> UDP RecvBattleEvent type = 2 : 적국 유저 죽인수 : karus=%d->%d, elmo=%d->%d\n", m_pMain->m_sKarusDead, nKillKarus, m_pMain->m_sElmoradDead, nElmoKill); m_pMain->m_sKarusDead = nKillKarus; m_pMain->m_sElmoradDead = nElmoKill; } } }
void CUdpSocket::RecvModifyFame( char* pBuf, BYTE command ) { int index = 0, send_index = 0, knightsindex = 0, vicechief = 0; char send_buff[128], finalstr[128], userid[MAX_ID_SIZE+1]; CUser* pTUser = NULL; CKnights* pKnights = NULL; knightsindex = GetShort( pBuf, index ); if (!GetKOString(pBuf, userid, index, MAX_ID_SIZE)) return; pTUser = m_pMain->GetUserPtr(userid, TYPE_CHARACTER); pKnights = m_pMain->m_KnightsArray.GetData( knightsindex ); switch( command ) { case KNIGHTS_REMOVE: if( pTUser ) { pTUser->m_pUserData->m_bKnights = 0; pTUser->m_pUserData->m_bFame = 0; sprintf( finalstr, "#### %s님이 추방되셨습니다. ####", pTUser->m_pUserData->m_id ); m_pMain->m_KnightsManager.RemoveKnightsUser( knightsindex, pTUser->m_pUserData->m_id ); } else { m_pMain->m_KnightsManager.RemoveKnightsUser( knightsindex, userid ); } break; case KNIGHTS_ADMIT: if( pTUser ) pTUser->m_pUserData->m_bFame = KNIGHT; break; case KNIGHTS_REJECT: if( pTUser ) { pTUser->m_pUserData->m_bKnights = 0; pTUser->m_pUserData->m_bFame = 0; m_pMain->m_KnightsManager.RemoveKnightsUser( knightsindex, pTUser->m_pUserData->m_id ); } break; case KNIGHTS_CHIEF+0x10: if( pTUser ) { pTUser->m_pUserData->m_bFame = CHIEF; m_pMain->m_KnightsManager.ModifyKnightsUser( knightsindex, pTUser->m_pUserData->m_id ); sprintf( finalstr, "#### %s님이 단장으로 임명되셨습니다. ####", pTUser->m_pUserData->m_id ); } break; case KNIGHTS_VICECHIEF+0x10: if( pTUser ) { pTUser->m_pUserData->m_bFame = VICECHIEF; m_pMain->m_KnightsManager.ModifyKnightsUser( knightsindex, pTUser->m_pUserData->m_id ); sprintf( finalstr, "#### %s님이 부단장으로 임명되셨습니다. ####", pTUser->m_pUserData->m_id ); } break; case KNIGHTS_OFFICER+0x10: if( pTUser ) pTUser->m_pUserData->m_bFame = OFFICER; break; case KNIGHTS_PUNISH+0x10: if( pTUser ) pTUser->m_pUserData->m_bFame = PUNISH; break; } if( pTUser ) { //TRACE("UDP - RecvModifyFame - command=%d, nid=%d, name=%s, index=%d, fame=%d\n", command, pTUser->GetSocketID(), pTUser->m_pUserData->m_id, knightsindex, pTUser->m_pUserData->m_bFame); send_index = 0; SetByte( send_buff, WIZ_KNIGHTS_PROCESS, send_index ); SetByte( send_buff, KNIGHTS_MODIFY_FAME, send_index ); SetByte( send_buff, 0x01, send_index ); if( command == KNIGHTS_REMOVE ) { SetShort( send_buff, pTUser->GetSocketID(), send_index ); SetShort( send_buff, pTUser->m_pUserData->m_bKnights, send_index ); SetByte( send_buff, pTUser->m_pUserData->m_bFame, send_index ); m_pMain->Send_Region( send_buff, send_index, pTUser->GetMap(), pTUser->m_RegionX, pTUser->m_RegionZ, NULL, false ); } else { SetShort( send_buff, pTUser->GetSocketID(), send_index ); SetShort( send_buff, pTUser->m_pUserData->m_bKnights, send_index ); SetByte( send_buff, pTUser->m_pUserData->m_bFame, send_index ); pTUser->Send( send_buff, send_index ); } if( command == KNIGHTS_REMOVE ) { send_index = 0; SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, KNIGHTS_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetKOString( send_buff, finalstr, send_index ); pTUser->Send( send_buff, send_index ); } } send_index = 0; SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, KNIGHTS_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetKOString( send_buff, finalstr, send_index ); m_pMain->Send_KnightsMember( knightsindex, send_buff, send_index ); }
void CAISocket::RecvBattleEvent(char* pBuf) { int index = 0, send_index = 0, udp_index = 0, retvalue = 0; int nType = 0, nResult = 0, nLen = 0; char strMaxUserName[MAX_ID_SIZE+1], strKnightsName[MAX_ID_SIZE+1]; char chatstr[1024], finalstr[1024], send_buff[1024], udp_buff[1024]; CUser* pUser = NULL; CKnights* pKnights = NULL; nType = GetByte( pBuf, index ); nResult = GetByte(pBuf, index); if( nType == BATTLE_EVENT_OPEN ) { } else if( nType == BATTLE_MAP_EVENT_RESULT ) { if( m_pMain->m_byBattleOpen == NO_BATTLE ) { TRACE("#### RecvBattleEvent Fail : battleopen = %d, type = %d\n", m_pMain->m_byBattleOpen, nType); return; } if( nResult == KARUS ) { //TRACE("--> RecvBattleEvent : 카루스 땅으로 넘어갈 수 있어\n"); m_pMain->m_byKarusOpenFlag = 1; // 카루스 땅으로 넘어갈 수 있어 } else if( nResult == ELMORAD ) { //TRACE("--> RecvBattleEvent : 엘모 땅으로 넘어갈 수 있어\n"); m_pMain->m_byElmoradOpenFlag = 1; // 엘모 땅으로 넘어갈 수 있어 } SetByte( udp_buff, UDP_BATTLE_EVENT_PACKET, udp_index ); SetByte( udp_buff, nType, udp_index ); SetByte( udp_buff, nResult, udp_index ); } else if( nType == BATTLE_EVENT_RESULT ) { if( m_pMain->m_byBattleOpen == NO_BATTLE ) { TRACE("#### RecvBattleEvent Fail : battleopen = %d, type=%d\n", m_pMain->m_byBattleOpen, nType); return; } if( nResult == KARUS ) { //TRACE("--> RecvBattleEvent : 카루스가 승리하였습니다.\n"); } else if( nResult == ELMORAD ) { //TRACE("--> RecvBattleEvent : 엘모라드가 승리하였습니다.\n"); } nLen = GetByte(pBuf, index); if( nLen > 0 && nLen < MAX_ID_SIZE+1 ) { GetString( strMaxUserName, pBuf, nLen, index ); if( m_pMain->m_byBattleSave == 0 ) { send_index = 0; // 승리국가를 sql에 저장 SetByte( send_buff, WIZ_BATTLE_EVENT, send_index ); SetByte( send_buff, nType, send_index ); SetByte( send_buff, nResult, send_index ); SetByte( send_buff, nLen, send_index ); SetString( send_buff, strMaxUserName, nLen, send_index ); retvalue = m_pMain->m_LoggerSendQueue.PutData( send_buff, send_index ); if (retvalue >= SMQ_FULL) DEBUG_LOG("WIZ_BATTLE_EVENT Send Fail : %d, %d", retvalue, nType); m_pMain->m_byBattleSave = 1; } } m_pMain->m_bVictory = nResult; m_pMain->m_byOldVictory = nResult; m_pMain->m_byKarusOpenFlag = 0; // 카루스 땅으로 넘어갈 수 없도록 m_pMain->m_byElmoradOpenFlag = 0; // 엘모 땅으로 넘어갈 수 없도록 m_pMain->m_byBanishFlag = 1; SetByte( udp_buff, UDP_BATTLE_EVENT_PACKET, udp_index ); // udp로 다른서버에 정보 전달 SetByte( udp_buff, nType, udp_index ); SetByte( udp_buff, nResult, udp_index ); } else if( nType == BATTLE_EVENT_MAX_USER ) { if (GetKOString(pBuf, strMaxUserName, index, MAX_ID_SIZE, sizeof(BYTE))) { pUser = m_pMain->GetUserPtr(strMaxUserName, TYPE_CHARACTER); if( pUser ) { pKnights = m_pMain->m_KnightsArray.GetData( pUser->m_pUserData->m_bKnights ); if( pKnights ) { strcpy_s( strKnightsName, sizeof(strKnightsName), pKnights->m_strName ); } } int nResourceID = 0; switch (nResult) { case 1: // captain nResourceID = IDS_KILL_CAPTAIN; break; case 2: // keeper case 7: // warders? case 8: nResourceID = IDS_KILL_GATEKEEPER; break; case 3: // Karus sentry nResourceID = IDS_KILL_KARUS_GUARD1; break; case 4: // Karus sentry nResourceID = IDS_KILL_KARUS_GUARD2; break; case 5: // El Morad sentry nResourceID = IDS_KILL_ELMO_GUARD1; break; case 6: // El Morad sentry nResourceID = IDS_KILL_ELMO_GUARD2; break; } if (nResourceID == 0) { TRACE("RecvBattleEvent: could not establish resource for result %d", nResult); return; } _snprintf(chatstr, sizeof(chatstr), m_pMain->GetServerResource(nResourceID), strKnightsName, strMaxUserName); send_index = 0; sprintf( finalstr, m_pMain->GetServerResource(IDP_ANNOUNCEMENT), chatstr ); SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, WAR_SYSTEM_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetKOString( send_buff, finalstr, send_index ); m_pMain->Send_All( send_buff, send_index ); send_index = 0; SetByte( send_buff, WIZ_CHAT, send_index ); SetByte( send_buff, PUBLIC_CHAT, send_index ); SetByte( send_buff, 1, send_index ); SetShort( send_buff, -1, send_index ); SetKOString( send_buff, finalstr, send_index ); m_pMain->Send_All( send_buff, send_index ); SetByte( udp_buff, UDP_BATTLE_EVENT_PACKET, udp_index ); SetByte( udp_buff, nType, udp_index ); SetByte( udp_buff, nResult, udp_index ); SetKOString(udp_buff, strKnightsName, udp_index); SetKOString(udp_buff, strMaxUserName, udp_index); } } m_pMain->Send_UDP_All( udp_buff, udp_index ); }
/*** * We've been told from another server that a user's status in the clan has changed. ***/ void CUdpSocket::RecvModifyFame(char* pBuf, BYTE command) { CString clanNotice; int index = 0, knightsindex = 0, vicechief = 0; char userid[MAX_ID_SIZE+1]; knightsindex = GetShort(pBuf, index); if (!GetKOString(pBuf, userid, index, MAX_ID_SIZE)) return; CUser *pTUser = g_pMain->GetUserPtr(userid, TYPE_CHARACTER); CKnights *pKnights = g_pMain->GetClanPtr(knightsindex); if (pKnights == NULL) return; switch (command) { case KNIGHTS_REMOVE: case KNIGHTS_REJECT: if (pTUser) { pTUser->SetClanID(0); pTUser->m_pUserData->m_bFame = 0; if (command == KNIGHTS_REMOVE) clanNotice = g_pMain->GetServerResource(IDS_KNIGHTS_REMOVE); } g_pMain->m_KnightsManager.RemoveKnightsUser(knightsindex, userid); break; case KNIGHTS_ADMIT: if (pTUser) pTUser->m_pUserData->m_bFame = KNIGHT; break; case KNIGHTS_CHIEF+0x10: if (pTUser) { pTUser->m_pUserData->m_bFame = CHIEF; clanNotice = g_pMain->GetServerResource(IDS_KNIGHTS_CHIEF); } break; case KNIGHTS_VICECHIEF+0x10: if (pTUser) { pTUser->m_pUserData->m_bFame = VICECHIEF; clanNotice = g_pMain->GetServerResource(IDS_KNIGHTS_VICECHIEF); } break; case KNIGHTS_OFFICER+0x10: if (pTUser) pTUser->m_pUserData->m_bFame = OFFICER; break; case KNIGHTS_PUNISH+0x10: if (pTUser) pTUser->m_pUserData->m_bFame = PUNISH; break; } if (pTUser != NULL) pTUser->SendClanUserStatusUpdate(command == KNIGHTS_REMOVE); if (clanNotice.GetLength() == 0) return; Packet result; // Construct the clan system chat packet pKnights->ConstructChatPacket(result, clanNotice, pTUser != NULL ? pTUser->m_pUserData->m_id : userid); // If we've been removed from a clan, tell the user as well (since they're no longer in the clan) if (command == KNIGHTS_REMOVE && pTUser != NULL) pTUser->Send(&result); // Otherwise, since we're actually in the clan, we don't need to be explicitly told what happened. if (pKnights != NULL) pKnights->Send(&result); }