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], strKnightsName[MAX_ID_SIZE+1]; char finalstr[1024], send_buff[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 ); 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 ); } 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 CUser::PartyRequest(int memberid, BOOL bCreate) { int index = 0, send_index = 0, result = -1, i=0; CUser* pUser = NULL; _PARTY_GROUP* pParty = NULL; char send_buff[256]; memset( send_buff, 0x00, 256 ); pUser = m_pMain->GetUserPtr(memberid); if (pUser == NULL || pUser->m_sPartyIndex != -1) goto fail_return; if (getNation() != pUser->getNation()) { result = -3; goto fail_return; } if( !( ( pUser->m_pUserData->m_bLevel <= (int)(m_pUserData->m_bLevel * 1.5) && pUser->m_pUserData->m_bLevel >= (int)(m_pUserData->m_bLevel * 1.5)) || ( pUser->m_pUserData->m_bLevel <= (m_pUserData->m_bLevel+8) && pUser->m_pUserData->m_bLevel >= ((int)(m_pUserData->m_bLevel)-8) ) ) ) { result = -2; goto fail_return; } if( !bCreate ) { // ????? ????? ?????? ??? pParty = m_pMain->m_PartyArray.GetData(m_sPartyIndex); if( !pParty ) goto fail_return; for(i=0; i<8; i++) { if( pParty->uid[i] < 0 ) break; } if( i==8 ) goto fail_return; // ??? ??? Full } if( bCreate ) { if( m_sPartyIndex != -1 ) goto fail_return; // can't create a party ifw e're already in one if (!m_pMain->CreateParty(this)) goto fail_return; // AI Server send_index = 0; memset( send_buff, 0x00, 256 ); SetByte( send_buff, AG_USER_PARTY, send_index ); SetByte( send_buff, PARTY_CREATE, send_index ); SetShort( send_buff, pParty->wIndex, send_index ); SetShort( send_buff, pParty->uid[0], send_index ); //SetShort( send_buff, pParty->sHp[0], send_index ); //SetByte( send_buff, pParty->bLevel[0], send_index ); //SetShort( send_buff, pParty->sClass[0], send_index ); m_pMain->Send_AIServer(m_pUserData->m_bZone, send_buff, send_index); } pUser->m_sPartyIndex = m_sPartyIndex; /* ??? BBS?? ??? ???... if (pUser->m_bNeedParty == 2 && pUser->m_sPartyIndex != -1) { pUser->m_bNeedParty = 1; // ?? ?? ??? ????? ??????? ??? ^^; memset( send_buff, 0x00, 256 ); send_index = 0; SetByte(send_buff, 2, send_index); SetByte(send_buff, pUser->m_bNeedParty, send_index); pUser->StateChange(send_buff); } if (m_bNeedParty == 2 && m_sPartyIndex != -1) { m_bNeedParty = 1; // ?? ?? ??? ????? ??????? ??? ^^; memset( send_buff, 0x00, 256 ); send_index = 0; SetByte(send_buff, 2, send_index); SetByte(send_buff, m_bNeedParty, send_index); StateChange(send_buff); } */ send_index = 0; memset( send_buff, 0x00, 256 ); SetByte( send_buff, WIZ_PARTY, send_index ); SetByte( send_buff, PARTY_PERMIT, send_index ); SetShort( send_buff, m_Sid, send_index ); SetKOString(send_buff, m_pUserData->m_id, send_index); pUser->Send( send_buff, send_index ); return; fail_return: SetByte( send_buff, WIZ_PARTY, send_index ); SetByte( send_buff, PARTY_INSERT, send_index ); SetShort( send_buff, result, send_index ); Send( send_buff, send_index ); }
void CUser::PartyInsert() // ?????? ??? ???. ????? ??Y?? ???°??? ??? { int send_index = 0, i = 0; CUser* pUser = NULL; _PARTY_GROUP* pParty = NULL; char send_buff[256]; memset( send_buff, 0x00, 256 ); if( m_sPartyIndex == -1 ) return; pParty = m_pMain->m_PartyArray.GetData( m_sPartyIndex ); if( !pParty ) { // ????? ??? m_sPartyIndex = -1; return; } for(int i=0; i<8; i++) { // Send your info to the rest of the party members. if (pParty->uid[i] == GetSocketID()) continue; pUser = m_pMain->GetUserPtr(pParty->uid[i]); if (pUser == NULL) continue; memset( send_buff, 0x00, 256 ); send_index = 0; SetByte( send_buff, WIZ_PARTY, send_index ); SetByte( send_buff, PARTY_INSERT, send_index ); SetShort( send_buff, pParty->uid[i], send_index ); SetKOString(send_buff, pUser->m_pUserData->m_id, send_index); SetShort( send_buff, pParty->sMaxHp[i], send_index ); SetShort( send_buff, pParty->sHp[i], send_index ); SetByte( send_buff, pParty->bLevel[i], send_index ); SetShort( send_buff, pParty->sClass[i], send_index ); SetShort( send_buff, pUser->m_iMaxMp, send_index ); SetShort( send_buff, pUser->m_pUserData->m_sMp, send_index ); Send( send_buff, send_index ); } for(i=0; i<8; i++ ) { if( pParty->uid[i] == -1 ) { pParty->uid[i] = m_Sid; pParty->sMaxHp[i] = m_iMaxHp; pParty->sHp[i] = m_pUserData->m_sHp; pParty->bLevel[i] = m_pUserData->m_bLevel; pParty->sClass[i] = m_pUserData->m_sClass; break; } } pUser = m_pMain->GetUserPtr(pParty->uid[0]); if (pUser == NULL) return; if (pUser->m_bNeedParty == 2 && pUser->m_sPartyIndex != -1) { pUser->m_bNeedParty = 1; memset( send_buff, 0x00, 256 ); send_index = 0; SetByte(send_buff, 2, send_index); SetByte(send_buff, pUser->m_bNeedParty, send_index); pUser->StateChange(send_buff); } if (m_bNeedParty == 2 && m_sPartyIndex != -1) { m_bNeedParty = 1; memset( send_buff, 0x00, 256 ); send_index = 0; SetByte(send_buff, 2, send_index); SetByte(send_buff, m_bNeedParty, send_index); StateChange(send_buff); } memset( send_buff, 0x00, 256 ); send_index = 0; SetByte( send_buff, WIZ_PARTY, send_index ); SetByte( send_buff, PARTY_INSERT, send_index ); SetShort( send_buff, m_Sid, send_index ); SetKOString( send_buff, m_pUserData->m_id, send_index ); SetShort( send_buff, m_iMaxHp, send_index ); SetShort( send_buff, m_pUserData->m_sHp, send_index ); SetByte( send_buff, m_pUserData->m_bLevel, send_index ); SetShort( send_buff, m_pUserData->m_sClass, send_index ); SetShort( send_buff, m_iMaxMp, send_index ); SetShort( send_buff, m_pUserData->m_sMp, send_index ); m_pMain->Send_PartyMember( m_sPartyIndex, send_buff, send_index ); // AI Server BYTE byIndex = i; send_index = 0; memset( send_buff, 0x00, 256 ); SetByte( send_buff, AG_USER_PARTY, send_index ); SetByte( send_buff, PARTY_INSERT, send_index ); SetShort( send_buff, pParty->wIndex, send_index ); SetByte( send_buff, byIndex, send_index ); SetShort( send_buff, pParty->uid[i], send_index ); //SetShort( send_buff, pParty->sHp[i], send_index ); //SetByte( send_buff, pParty->bLevel[i], send_index ); //SetShort( send_buff, pParty->sClass[i], send_index ); m_pMain->Send_AIServer(m_pUserData->m_bZone, send_buff, send_index); }
void CUser::PartyBBSNeeded(char *pBuf, BYTE type) { CUser* pUser = NULL; // Basic Initializations. int index = 0, send_index = 0; BYTE result = 0; short bbs_len = 0; char send_buff[256]; memset( send_buff, NULL, 256 ); short page_index = 0; short start_counter = 0; BYTE valid_counter = 0 ; int i = 0, j = 0; short BBS_Counter = 0; page_index = GetShort(pBuf, index); start_counter = page_index * MAX_BBS_PAGE; if ( start_counter < 0 ) goto fail_return; if ( start_counter > MAX_USER ) goto fail_return; result = 1; SetByte(send_buff, WIZ_PARTY_BBS, send_index); SetByte(send_buff, type, send_index); SetByte(send_buff, result, send_index); for (i = 0 ; i < MAX_USER ; i++) { pUser = m_pMain->GetUnsafeUserPtr(i); if (pUser == NULL || pUser->getNation() != getNation() || pUser->m_bNeedParty == 1) continue; if( !( ( pUser->m_pUserData->m_bLevel <= (int)(m_pUserData->m_bLevel * 1.5) && pUser->m_pUserData->m_bLevel >= (int)(m_pUserData->m_bLevel * 1.5)) || ( pUser->m_pUserData->m_bLevel <= (m_pUserData->m_bLevel+8) && pUser->m_pUserData->m_bLevel >= ((int)(m_pUserData->m_bLevel)-8) ) ) ) continue; BBS_Counter++; if (i < start_counter) continue; // Range check codes. if (valid_counter >= MAX_BBS_PAGE) continue; SetKOString(send_buff, pUser->m_pUserData->m_id, send_index); SetByte(send_buff, pUser->m_pUserData->m_bLevel, send_index); SetShort(send_buff, pUser->m_pUserData->m_sClass, send_index); valid_counter++; // Increment counters. // BBS_Counter++; } if ( valid_counter < MAX_BBS_PAGE ) { // You still need to fill up ten slots. for (j = valid_counter ; j < MAX_BBS_PAGE ; j++) { SetShort(send_buff, 0, send_index); SetString(send_buff, NULL, 0, send_index); SetByte(send_buff, 0, send_index); SetShort(send_buff, 0, send_index); } } SetShort(send_buff, page_index, send_index); SetShort(send_buff, BBS_Counter, send_index); Send(send_buff, send_index); return; fail_return: SetByte(send_buff, WIZ_PARTY_BBS, send_index); SetByte(send_buff, PARTY_BBS_NEEDED, send_index); SetByte(send_buff, result, send_index); Send(send_buff, send_index); return; }
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 ); }