Files
Client/Server/RylServerProject/RylGameLibrary/Network/Dispatch/GameClient/ParseCharCommunity.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

2550 lines
88 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include <Log/ItemLog.h>
#include <Log/GuildLog.h>
#include <Log/LogStruct.h>
#include <Utility/Setup/ServerSetup.h>
#include <Item/Container/ExchangeContainer.h>
#include <Item/Container/StallContainer.h>
#include <Community/Party/PartyMgr.h>
#include <Community/Guild/GuildMgr.h>
#include <Community/Guild/Guild.h>
#include <Network/Dispatch/ParseUtils.h>
#include <Network/Dispatch/DBAgent/DBAgentDispatch.h>
#include <Network/Dispatch/DBAgent/DBAgentRequest.h>
#include <Network/Dispatch/Chat/ChatDispatch.h>
#include <Network/Packet/ChatPacket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/PartyPacket.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include <Network/Packet/PacketStruct/FriendPacket.h>
#include <Creature/EnemyCheck.h>
#include <Creature/CreatureManager.h>
#include <Creature/Character/Character.h>
#include <Creature/Siege/SiegeObjectMgr.h>
#include <GameTime/GameTimeConstants.h>
#include <GameTime/GameTimeMgr.h>
#include "SendCharCommunity.h"
#include "ParseCharCommunity.h"
#include "GameClientDispatch.h"
bool GameClientParsePacket::ParseCharExchangeCmd(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
using namespace GameClientSendPacket;
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktExC), GameClientDispatch);
PktExC* lpPktExC = reinterpret_cast<PktExC*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
CSendStream& SendStream = GameClientDispatch.GetSendStream();
unsigned long dwSenderID = lpPktExC->m_dwSenderID;
unsigned long dwRecverID = lpPktExC->m_dwRecverID;
unsigned char cCmd = lpPktExC->m_cCmd;
// ij¸¯ÅÍ ¾ò±â
CCreatureManager& CreatureManager = CCreatureManager::GetInstance();
CCharacter* lpSenderCharacter = CreatureManager.GetCharacter(dwSenderID);
CCharacter* lpRecverCharacter = CreatureManager.GetCharacter(dwRecverID);
if (NULL == lpSenderCharacter || NULL == lpRecverCharacter)
{
SendCharExchangeCmd(SendStream, dwSenderID, dwRecverID, cCmd, PktExC::SERVER_ERROR);
ERRLOG1(g_Log, "CID:%10u ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", dwRecverID);
return true;
}
// Dispatcher¾ò±â
CGameClientDispatch* lpSenderDispatch = lpSenderCharacter->GetDispatcher();
CGameClientDispatch* lpRecverDispatch = lpRecverCharacter->GetDispatcher();
if (NULL == lpSenderDispatch || NULL == lpRecverDispatch)
{
SendCharExchangeCmd(SendStream, dwSenderID, dwRecverID, cCmd, PktExC::SERVER_ERROR);
ERRLOG1(g_Log, "CID:%10u À¯Àú ¼¼¼Ç ¾ò±â ½ÇÆÐ.", dwRecverID);
return true;
}
CSendStream& SenderSendStream = lpSenderDispatch->GetSendStream();
CSendStream& RecverSendStream = lpRecverDispatch->GetSendStream();
Item::CExchangeContainer& SenderExchageContainer = lpSenderCharacter->GetExchange();
Item::CExchangeContainer& RecverExchageContainer = lpRecverCharacter->GetExchange();
switch (cCmd)
{
case PktExC::EXC_PROPOSE: // Á¦¾È
{
if (NULL != SenderExchageContainer.GetExchangeCharacter() ||
NULL != RecverExchageContainer.GetExchangeCharacter())
{
SendCharExchangeCmd(SendStream,
dwSenderID, dwRecverID, cCmd, PktExC::FAIL_EXCHANGING_CHAR);
break;
}
// Changed by Sparrowhawk ( 2003/04/14 14½Ã47ºÐ)
if (lpRecverCharacter->GetRejectOption().Reject.m_Exchange ||
lpRecverCharacter->GetBanList().IsBan(lpCharacter->GetCID(), lpCharacter->GetCharacterName()))
{
SendCharExchangeCmd(SendStream,
dwSenderID, dwRecverID, cCmd, PktExC::FAIL_REJECT);
break;
}
SendCharExchangeCmd(RecverSendStream,
dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
} break;
case PktExC::EXC_ACCEPT: // ¼ö¶ô
{
if(!lpSenderCharacter->GetExchangeID() && !lpRecverCharacter->GetExchangeID())
{
SenderExchageContainer.SetExchangeCharacter(lpRecverCharacter);
RecverExchageContainer.SetExchangeCharacter(lpSenderCharacter);
lpSenderCharacter->SetExchangeID(dwRecverID);
lpRecverCharacter->SetExchangeID(dwSenderID);
SendCharExchangeCmd(SenderSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
}
} break;
case PktExC::EXC_REFUSE: // °ÅÀý
{
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
} break;
case PktExC::EXC_LOCK: // ¶ôÇϱâ
{
SenderExchageContainer.SetLock(true);
SendCharExchangeCmd(SenderSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
} break;
case PktExC::EXC_UNLOCK: // ¶ô ÇØÁ¦
{
if (SenderExchageContainer.GetAccept())
{
SendCharExchangeCmd(SendStream, dwSenderID, dwRecverID, cCmd, PktExC::SERVER_ERROR);
ERRLOG1(g_Log, "CID:%10u È®ÀÎ ¹öưÀ» ´©¸¥ »óÅ¿¡¼­ ¶ôÀ» ÇØÁ¦ÇÏ·Á ÇÔ.", dwSenderID);
break;
}
if (RecverExchageContainer.GetAccept())
{
RecverExchageContainer.SetAccept(false);
SendCharExchangeCmd(SenderSendStream, dwRecverID, dwSenderID, PktExC::EXC_CANCEL, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwRecverID, dwSenderID, PktExC::EXC_CANCEL, PktExC::NO_SERVER_ERR);
RecverExchageContainer.SetLock(false);
SendCharExchangeCmd(SenderSendStream, dwRecverID, dwSenderID, PktExC::EXC_UNLOCK, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwRecverID, dwSenderID, PktExC::EXC_UNLOCK, PktExC::NO_SERVER_ERR);
}
SenderExchageContainer.SetLock(false);
SendCharExchangeCmd(SenderSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
} break;
case PktExC::EXC_OK: // È®ÀÎ
{
if (false == SenderExchageContainer.GetLock() || false == RecverExchageContainer.GetLock())
{
SendCharExchangeCmd(SendStream, dwSenderID, dwRecverID, cCmd, PktExC::SERVER_ERROR);
ERRLOG1(g_Log, "CID:%10u ¶ôÇÏÁö ¾ÊÀº »óÅ¿¡¼­ È®ÀÎÇÏ·¯ ÇÔ.", dwSenderID);
break;
}
SenderExchageContainer.SetAccept(true);
SendCharExchangeCmd(SenderSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
} break;
case PktExC::EXC_CANCEL: // È®ÀÎ Ãë¼Ò
{
SenderExchageContainer.ExchangeCancel();
} break;
case PktExC::EXC_EXCHANGE: // °Å·¡ ¼º¸³
{
if (!RecverExchageContainer.GetAccept())
{
SendCharExchangeCmd(SendStream, dwSenderID, dwRecverID, cCmd, PktExC::FAIL_NOT_ALL_OK);
ERRLOG2(g_Log, "¾çÂÊ ¸ðµÎ È®ÀÎÇÏÁö ¾ÊÀº »óÅ¿¡¼­ °Å·¡ ¼º¸³ ¿äû. dwSenderID: 0x%08x, dwRecverID: 0x%08x",
dwSenderID, dwRecverID);
break;
}
// ¼ö¶ôÇÒ¶§¿¡ ij¸¯ÅͶû °°ÀºÁö üũ
if (lpSenderCharacter->GetExchangeID() != dwRecverID || lpRecverCharacter->GetExchangeID() != dwSenderID)
{
// Rodin : Ŭ¶óÀÌ¾ðÆ®´ÜÀÇ ¿¡·¯ ¸Þ¼¼Áö 󸮰¡ ¾ø½À´Ï´Ù.
// ±×¸®°í ±»ÀÌ Ä³¸¯ÅÍ¿¡ ExchangeID¸¦ µÖ¼­ ºñ±³ÇÒ Çʿ䰡 ÀÖÀ»±î¿ä?
// ExchangeContainerÀÇ ExchangeCharacter¸¦ ÀÌ¿ëÇØ¼­ Ã¼Å©ÇØ¼­ ±¦ÂúÀ» µí Çѵ¥...
SendCharExchangeCmd(SendStream, dwSenderID, dwRecverID, cCmd, PktExC::FAIL_EXCHANGING_ID);
ERRLOG2(g_Log, "°Å·¡ ¼º¸³ ¿äûÀ» ÇÑ Ä³¸¯ÅͰ¡ ¼ö¶ôÇÒ¶§¿¡ ij¸¯ÅͶû ´Ù¸£´Ù. dwSenderID: 0x%08x, dwRecverID: 0x%08x",
dwSenderID, dwRecverID);
break;
}
lpSenderCharacter->SetExchangeID(0);
lpRecverCharacter->SetExchangeID(0);
SenderExchageContainer.SetAccept(true);
if (!SenderExchageContainer.ExchangeOK(true))
{
ERRLOG2(g_Log, "°Å·¡ »óŰ¡ ¾ø´Â ij¸¯ÅÍÀÔ´Ï´Ù. dwSenderID : 0x%08x, dwRecverID : 0x%08x",
dwSenderID, dwRecverID);
}
SendCharExchangeCmd(SenderSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
} break;
case PktExC::EXC_QUIT: // °Å·¡ Ãë¼Ò
{
if (!SenderExchageContainer.ExchangeOK(false))
{
ERRLOG2(g_Log, "°Å·¡ »ó´ë°¡ ¾ø´Â ij¸¯ÅÍÀÔ´Ï´Ù. dwSenderID : 0x%08x, dwRecverID : 0x%08x",
dwSenderID, dwRecverID);
}
SendCharExchangeCmd(SenderSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
SendCharExchangeCmd(RecverSendStream, dwSenderID, dwRecverID, cCmd, PktExC::NO_SERVER_ERR);
lpSenderCharacter->SetExchangeID(0);
lpRecverCharacter->SetExchangeID(0);
} break;
}
return true;
}
bool GameClientParsePacket::ParseCharPartyCmd(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
int nPacketLength = lpPktBase->GetLen();
if (nPacketLength < sizeof(PktPC))
{
ERRLOG0(g_Log, "ÆÐŶ ±æÀ̰¡ ¸ÂÁö ¾Ê½À´Ï´Ù.");
return false;
}
PktPC* lpPktPC = static_cast<PktPC*>(lpPktBase);
unsigned long dwPartyID = lpPktPC->m_dwPartyID;
unsigned long dwSenderID = lpPktPC->m_dwSenderID;
unsigned long dwReferenceID = lpPktPC->m_dwReferenceID;
unsigned short usCmd = lpPktPC->m_wCmd;
unsigned short usError = 0;
// Ưº°È÷ szSenderNameÀÌ ÇÊ¿ä¾ø´Â °æ¿ì¿¡ µé¾î°¡´Â ¾²·¹±â°ª
char* szSenderName = "·Îµò";
CSendStream& SendStream = GameClientDispatch.GetSendStream();
AddressInfo SenderAddress;
using namespace GameClientSendPacket;
switch (usCmd)
{
case PktPC::PC_INVITE: // ÃÊ´ë
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
CGameClientDispatch* lpRecvGameClientDispatch = NULL;
if (NULL == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwSenderID != lpSendCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpSendCharacter->GetCID(), dwSenderID);
}
else
{
CCharacter* lpRecvCharacter = CCreatureManager::GetInstance().GetCharacter(dwReferenceID);
if (NULL == lpRecvCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", dwReferenceID);
}
else if (lpRecvCharacter->GetRejectOption().Reject.m_Party ||
lpRecvCharacter->GetBanList().IsBan(lpSendCharacter->GetCID(), lpSendCharacter->GetCharacterName()))
{
// °ÅºÎ ¿É¼Ç üũ
usError = PktPC::FAIL_REJECT;
}
else if (NULL != lpRecvCharacter->GetParty())
{
usError = PktPC::CHAR_JOINED;
ERRLOG1(g_Log, "CID:%10u ÀÌ¹Ì ÆÄƼ¿¡ °¡ÀԵǾî ÀÖ½À´Ï´Ù.", dwReferenceID);
}
else
{
lpRecvGameClientDispatch = lpRecvCharacter->GetDispatcher();
if (NULL == lpRecvGameClientDispatch)
{
usError = PktPC::FAIL_INVITE;
ERRLOG1(g_Log, "CID:%10u ÀÌ¹Ì ·Î±×¾Æ¿ôÇÑ »ó´ë¿¡°Ô ÆÄƼ °¡ÀÔ ½ÅûÇÏ¿´½À´Ï´Ù.", dwReferenceID);
}
}
}
SendCharPartyCmd((0 == usError) ? lpRecvGameClientDispatch->GetSendStream() : SendStream,
dwPartyID, SenderAddress, (0 == usError) ? lpSendCharacter->GetCharacterName() : szSenderName,
dwSenderID, dwReferenceID, usCmd, usError);
} break;
case PktPC::PC_ACCEPT: // ÆÄƼ °¡ÀÔ
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
if (NULL == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwSenderID != lpSendCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpSendCharacter->GetCID(), dwSenderID);
}
else if (NULL != lpSendCharacter->GetParty())
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÀÌ¹Ì °¡ÀÔµÈ Ä³¸¯ÅͰ¡ °¡ÀÔÀ» Áߺ¹ ¼ö¶ô", dwSenderID);
}
else
{
CCharacter* lpRecvCharacter = CCreatureManager::GetInstance().GetCharacter(dwReferenceID);
if (NULL == lpRecvCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", dwReferenceID);
}
else
{
CCharacterParty* lpParty = reinterpret_cast<CCharacterParty*>(lpRecvCharacter->GetParty());
if (NULL == lpParty)
{
// ÆÄƼ »ý¼º
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 == lpDBAgentDispatch)
{
usError = PktPC::SERVER_ERROR;
ERRLOG0(g_Log, "¿¡ÀÌÀüÆ® ¾ò±â ½ÇÆÐ.");
}
else
{
PARTYLOG(DETLOG2(g_Log, "ÆÄƼ ·Î±×(»ý¼º ¿äû) - PID:0x00000000 ¸®´õ:0x%08x °¡ÀÔÀÚ:0x%08x",
dwReferenceID, dwSenderID));
// ij¸¯ÅÍ Á¤º¸(Ŭ·¡½º, ·¹º§) //
SendCharPartyCreateToDBAgent(lpDBAgentDispatch->GetSendStream(), dwReferenceID, dwSenderID, CServerSetup::GetInstance().GetServerZone(),
lpRecvCharacter->GetClass(), lpRecvCharacter->GetLevel(), lpRecvCharacter->GetGID(),
lpSendCharacter->GetClass(), lpSendCharacter->GetLevel(), lpSendCharacter->GetGID());
}
}
else
{
if (PARTY::MAX_MEM == lpParty->GetMemberNum())
{
usError = PktPC::OVER_MEMBER;
ERRLOG0(g_Log, "ÆÄƼ Àοø Ãʰú.");
}
else
{
PARTYLOG(DETLOG2(g_Log, "ÆÄƼ ·Î±×(°¡ÀÔ ¿äû) - PID:0x%08x °¡ÀÔÀÚ:0x%08x", lpParty->GetUID(), dwSenderID));
lpParty->SendPartyMemberDataToDBAgent(dwSenderID, lpSendCharacter->GetGID(), lpSendCharacter->GetClass(), CServerSetup::GetInstance().GetServerID(),
lpSendCharacter->GetLevel(), lpSendCharacter->GetCharacterName(), PktDD::SCmdInsertPartyMem);
}
}
}
}
if (0 != usError)
{
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress, szSenderName,
dwSenderID, dwReferenceID, usCmd, usError);
}
} break;
case PktPC::PC_REFUSE: // °ÅÀý
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
CCharacter* lpRecvCharacter = NULL;
CGameClientDispatch* lpRecvGameClientDispatch = NULL;
if (NULL == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwSenderID != lpSendCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpSendCharacter->GetCID(), dwSenderID);
}
else
{
lpRecvCharacter = CCreatureManager::GetInstance().GetCharacter(dwReferenceID);
if (NULL == lpRecvCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", dwReferenceID);
}
else
{
// À¯Àú ¼¼¼Ç ¾ò±â
lpRecvGameClientDispatch = lpRecvCharacter->GetDispatcher();
if (0 == lpRecvGameClientDispatch)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u À¯Àú ¼¼¼Ç ¾ò±â ½ÇÆÐ.", dwReferenceID);
}
}
}
SendCharPartyCmd((0 == usError) ? lpRecvGameClientDispatch->GetSendStream() : SendStream,
dwPartyID, SenderAddress, (0 == usError) ? lpSendCharacter->GetCharacterName() : NULL,
dwSenderID, dwReferenceID, usCmd, usError);
} break;
case PktPC::PC_BANISH: // ÅðÀå
{
CCharacter* lpRecvCharacter = GameClientDispatch.GetCharacter();
if (NULL == lpRecvCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwReferenceID != lpRecvCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpRecvCharacter->GetCID(), dwReferenceID);
}
else
{
CCharacterParty* lpRecvParty = reinterpret_cast<CCharacterParty*>(lpRecvCharacter->GetParty());
if (NULL == lpRecvParty)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ¾ò±â ½ÇÆÐ.", dwReferenceID);
}
else
{
if (false == lpRecvParty->IsMember(dwSenderID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ÆÄƼ¿øÀÌ ¾Æ´Ñ »ç¶÷À» Å»Åð ½ÃŰ·Á Çϰí ÀÖÀ½. Å»ÅðÀÚ:0x%08x", dwReferenceID, dwSenderID);
}
else
{
if (false == lpRecvParty->IsLeader(dwReferenceID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¸®´õ°¡ ¾Æ´Ñ ij¸¯ÅͰ¡ Å»Åð ¿äû. Å»ÅðÀÚ:0x%08x", dwReferenceID, dwSenderID);
}
else
{
PARTYLOG(DETLOG3(g_Log, "ÆÄƼ ·Î±×(ű ¿äû) - PID:0x%08x Å»ÅðÀÚ:0x%08x ¸®´õ:0x%08x",
lpRecvParty->GetUID(), dwSenderID, dwReferenceID));
lpRecvParty->SendPartyMemberDataToDBAgent(dwSenderID, dwReferenceID, 0, 0, 0, "ű", PktDD::SCmdDeletePartyMem);
}
}
}
}
if (0 != usError)
{
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress, szSenderName,
dwSenderID, dwReferenceID, usCmd, usError);
}
} break;
case PktPC::PC_SECESSION: // Å»Åð
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
if (NULL == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwSenderID != lpSendCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpSendCharacter->GetCID(), dwSenderID);
}
else
{
CCharacterParty* lpParty = reinterpret_cast<CCharacterParty*>(lpSendCharacter->GetParty());
if (NULL == lpParty)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ¾ò±â ½ÇÆÐ.", dwSenderID);
}
else
{
PARTYLOG(DETLOG2(g_Log, "ÆÄƼ ·Î±×(Å»Åð ¿äû) - PID:0x%08x Å»ÅðÀÚ:0x%08x", lpParty->GetUID(), dwSenderID));
lpParty->SendPartyMemberDataToDBAgent(dwSenderID, dwSenderID, 0, 0, 0,
lpSendCharacter->GetCharacterName(), PktDD::SCmdDeletePartyMem);
}
}
if (0 != usError)
{
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress, szSenderName,
dwSenderID, dwReferenceID, usCmd, usError);
}
} break;
case PktPC::PC_TRANSFER: // ¸®´õ ¾çµµ
{
CCharacter* lpRecvCharacter = GameClientDispatch.GetCharacter();
if (NULL == lpRecvCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwReferenceID != lpRecvCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpRecvCharacter->GetCID(), dwReferenceID);
}
else
{
CCharacterParty* lpRecvParty = reinterpret_cast<CCharacterParty*>(lpRecvCharacter->GetParty());
if (NULL == lpRecvParty)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ¾ò±â ½ÇÆÐ.", dwReferenceID);
}
else
{
if (false == lpRecvParty->IsMember(dwSenderID) || false == lpRecvParty->IsLeader(dwReferenceID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "Reference°¡ ¸®´õ°¡ ¾Æ´Ï°Å³ª Sender°¡ ÆÄƼ¿øÀÌ ¾Æ´Õ´Ï´Ù. SenderID:0x%08x, ReferenceID:0x%08x",
dwSenderID, dwReferenceID);
}
else
{
PARTYLOG(DETLOG3(g_Log, "ÆÄƼ ·Î±×(¸®´õ¾çµµ ¿äû) - PID:0x%08x »õ¸®´õ:0x%08x ±âÁ¸¸®´õ:0x%08x",
lpRecvParty->GetUID(), dwSenderID, dwReferenceID));
lpRecvParty->SendPartyMemberDataToDBAgent(dwSenderID, dwReferenceID, 0, 0, 0, "¸®´õ¾çµµ", PktDD::SCmdTransferLeader);
}
}
}
if (0 != usError)
{
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress,
szSenderName, dwSenderID, dwReferenceID, usCmd, usError);
}
} break;
case PktPC::PC_DESTROY: // ÆÄ±«
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
if (0 == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else if (dwSenderID != lpSendCharacter->GetCID())
{
usError = PktPC::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¿äûÀÚ Ä³¸¯ÅÍ ¾ÆÀÌµð Æ²¸² CID:%10u", lpSendCharacter->GetCID(), dwSenderID);
}
else
{
CParty* lpParty = lpSendCharacter->GetParty();
if (NULL == lpParty)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ¾ò±â ½ÇÆÐ.", dwSenderID);
}
else if (lpParty->IsLeader(dwSenderID))
{
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 == lpDBAgentDispatch)
{
usError = PktPC::SERVER_ERROR;
ERRLOG0(g_Log, "¿¡ÀÌÀüÆ® ¾ò±â ½ÇÆÐ.");
}
else
{
PARTYLOG(DETLOG1(g_Log, "ÆÄƼ ·Î±×(ÇØÃ¼ ¿äû) - PID:0x%08x", lpParty->GetUID()));
SendCharPartyDestroyToDBAgent(lpDBAgentDispatch->GetSendStream(), lpParty->GetUID());
}
}
}
if (0 != usError)
{
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress,
szSenderName, dwSenderID, dwReferenceID, usCmd, usError);
}
} break;
case PktPC::PC_FINDPARTY: // ÆÄƼ ã±â
{
if (0 != dwPartyID)
{
usError = PktPC::ALREADY_PARTY;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ¿¡ °¡ÀÔµÈ ³à¼®ÀÌ ÆÄƼ ã±â¿¡ µî·ÏÇÏ·Á ÇÕ´Ï´Ù.", dwSenderID);
}
else if (0 == dwReferenceID)
{
if (false == CPartyMgr::GetInstance().DeleteFindPartyList(dwSenderID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ã±â ¸®½ºÆ®¿¡¼­ »èÁ¦ ½ÇÆÐ.", dwSenderID);
}
}
else
{
if (false == CPartyMgr::GetInstance().AddFindPartyList(dwSenderID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ã±â ¸®½ºÆ®¿¡ Ãß°¡ ½ÇÆÐ.", dwSenderID);
}
}
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress, szSenderName,
dwSenderID, dwReferenceID, usCmd, usError);
} break;
case PktPC::PC_FINDMEMBER: // ÆÄƼ¿ø ã±â
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
if (NULL == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else
{
CParty* lpParty = lpSendCharacter->GetParty();
if (NULL == lpParty)
{
usError = PktPC::FAIL_NOT_PARTY;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ¾ò±â ½ÇÆÐ.", lpSendCharacter->GetCID());
}
else if (false == lpParty->IsLeader(dwSenderID))
{
usError = PktPC::FAIL_NOT_LEADER;
ERRLOG1(g_Log, "CID:%10u ¸®´õµµ ¾Æ´Ñ ³ðÀÌ ÆÄƼ ¸â¹ö ã±â¿¡ µî·ÏÇÏ·Á ÇÕ´Ï´Ù.", dwSenderID);
}
else if (0 == dwReferenceID)
{
if (false == CPartyMgr::GetInstance().DeleteFindMemberList(dwPartyID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ¿ø ã±â ¸®½ºÆ®¿¡¼­ »èÁ¦ ½ÇÆÐ.", dwSenderID);
}
}
else
{
if (false == CPartyMgr::GetInstance().AddFindMemberList(dwPartyID))
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ¿ø ã±â ¸®½ºÆ®¿¡ Ãß°¡ ½ÇÆÐ.", dwSenderID);
}
}
}
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress,
szSenderName, dwSenderID, dwReferenceID, usCmd, usError);
} break;
case PktPC::PC_AUTOROUTING_ON: // ¿ÀÅä·çÆÃ Äѱâ
case PktPC::PC_AUTOROUTING_OFF: // ¿ÀÅä·çÆÃ ²ô±â
{
CCharacter* lpSendCharacter = GameClientDispatch.GetCharacter();
if (NULL == lpSendCharacter)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "UID:0x%08x ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.", GameClientDispatch.GetUID());
}
else
{
CCharacterParty* lpParty = reinterpret_cast<CCharacterParty*>(lpSendCharacter->GetParty());
if (NULL == lpParty)
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ÆÄƼ ¾ò±â ½ÇÆÐ.", lpSendCharacter->GetCID());
}
else if (false == lpParty->IsLeader(lpSendCharacter->GetCID()))
{
usError = PktPC::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ¸®´õµµ ¾Æ´Ñ ³ðÀÌ ¿ÀÅä·çÆÃÀ» Á¶Á¤ÇÏ·Á ÇÕ´Ï´Ù.", dwSenderID);
}
else
{
PARTYLOG(DETLOG3(g_Log, "ÆÄƼ ·Î±×(¿ÀÅä·çÆÃ Äѱâ/²ô±â) CID°¡ 0À̸é ALL- PID:0x%08x CID:%10u On:%d",
lpParty->GetUID(), dwSenderID, ((PktPC::PC_AUTOROUTING_ON == usCmd) ? true : false)));
if (usCmd == PktPC::PC_AUTOROUTING_ON)
{
lpParty->SendPartyMemberDataToDBAgent(dwSenderID, dwReferenceID, 0, 0, 0, "¿ÀÅä·çÆÃ", PktDD::SCmdAutoRoutingOn);
}
else
{
lpParty->SendPartyMemberDataToDBAgent(dwSenderID, dwReferenceID, 0, 0, 0, "¿ÀÅä·çÆÃ", PktDD::SCmdAutoRoutingOff);
}
}
}
if (0 != usError)
{
SendCharPartyCmd(SendStream, dwPartyID, SenderAddress,
szSenderName, dwSenderID, dwReferenceID, usCmd, usError);
}
} break;
}
return true;
}
bool GameClientParsePacket::ParseCharPartyFind(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktPF), GameClientDispatch);
PktPF* lpPktPF = reinterpret_cast<PktPF*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
// ÆÄƼ ã±â
CPartyMgr::GetInstance().SendPartyFind(lpCharacter);
return true;
}
bool GameClientParsePacket::ParseCharStallOpen(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktStO), GameClientDispatch);
PktStO* lpPktStO = reinterpret_cast<PktStO*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCharID = lpPktStO->m_dwCharID;
char strStallName[PktStO::MAX_STALL_NAME_LEN];
strncpy(strStallName, lpPktStO->m_StallName, PktStO::MAX_STALL_NAME_LEN);
if (0 == strcmp(strStallName, ""))
{
if (false == lpCharacter->GetStall().Close())
{
ERRLOG1(g_Log, "CID:%10u ÀÌ¹Ì ³ëÁ¡»óÀ» ´ÝÀº »óÅÂÀÔ´Ï´Ù.", dwCharID);
}
}
else
{
if (false == lpCharacter->GetStall().Open(strStallName))
{
ERRLOG1(g_Log, "CID:%10u ÀÌ¹Ì ³ëÁ¡»óÀ» ¿­Àº »óÅÂÀÔ´Ï´Ù.", dwCharID);
}
}
return lpCharacter->GetStall().SendCharStallOpen(strStallName);
}
bool GameClientParsePacket::ParseCharStallRegisterItem(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktStRI), GameClientDispatch);
PktStRI* lpPktStRI = reinterpret_cast<PktStRI*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
TakeType takeType = lpPktStRI->m_TakeType;
unsigned long dwCharID = lpPktStRI->m_dwCharID;
unsigned long dwShopID = lpPktStRI->m_dwShopID;
unsigned long dwPrice = lpPktStRI->m_dwPrice;
Item::CItem* lpItem = NULL;
unsigned short usError = PktBase::NO_SERVER_ERR;
unsigned char cCmd = lpPktStRI->m_cCmd;
switch (cCmd)
{
case PktStRI::SC_REGISTER:
{
lpItem = lpCharacter->GetItem(takeType.m_srcPos);
if (NULL == lpItem)
{
usError = PktStRI::FAIL_NOT_ITEM;
}
else if (false == lpItem->GetItemInfo().m_DetailData.m_bExchangeAndDrop )
{
usError = PktStRI::FAIL_NOT_SELL;
}
else if (takeType.m_dstPos.m_cPos != TakeType::TS_STALL)
{
usError = PktBase::SERVER_ERROR;
ERRLOG1(g_Log, "CID:%10u ¾ÆÀÌÅÛÀ» ³ëÁ¡»ó¿¡ À߸ø ¿Ã·Á ³õ¾Ò½À´Ï´Ù."
"RegisterPacket¿¡ DstPos°¡ StallÀÌ ¾Æ´Õ´Ï´Ù.", lpCharacter->GetCID());
}
else
{
lpItem->SetStallPrice(dwPrice);
if (false == lpCharacter->MoveItem(takeType))
{
usError = PktBase::SERVER_ERROR;
}
}
break;
}
case PktStRI::SC_CANCEL:
{
lpItem = lpCharacter->GetItem(takeType.m_dstPos);
if (false == lpCharacter->RemoveItem(takeType.m_dstPos))
{
usError = PktBase::SERVER_ERROR;
}
else
{
GAMELOG::LogStallRegisterRemoveItem(*lpCharacter, lpItem, takeType, cCmd, usError);
return true;
}
break;
}
case PktStRI::SC_CAMP_REGISTER:
{
Item::CShopContainer* lpContainer = CCreatureManager::GetInstance().GetShopContainer(dwShopID);
if (NULL == lpContainer || Creature::CT_SIEGE_OBJECT != Creature::GetCreatureType(dwShopID))
{
usError = PktBase::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¾ÆÀÌÅÛ µî·Ï ½ÇÆÐ : ±æµå ¿ä»õ »óÁ¡ÀÌ ¾Æ´Õ´Ï´Ù. ShopID:%10u",
lpCharacter->GetCID(), dwShopID);
}
else
{
Item::CCampShopContainer* lpCampShopContainer = reinterpret_cast<Item::CCampShopContainer*>(lpContainer);
lpItem = lpCampShopContainer->RegisterCancelItem(lpCharacter, takeType, dwPrice, cCmd);
if (NULL == lpItem)
{
usError = PktBase::SERVER_ERROR;
}
}
break;
}
case PktStRI::SC_CAMP_CANCEL:
{
Item::CShopContainer* lpContainer = CCreatureManager::GetInstance().GetShopContainer(dwShopID);
if (NULL == lpContainer || Creature::CT_SIEGE_OBJECT != Creature::GetCreatureType(dwShopID))
{
usError = PktBase::SERVER_ERROR;
ERRLOG2(g_Log, "CID:%10u ¾ÆÀÌÅÛ µî·Ï Ãë¼Ò ½ÇÆÐ : ±æµå ¿ä»õ »óÁ¡ÀÌ ¾Æ´Õ´Ï´Ù. ShopID:%10u",
lpCharacter->GetCID(), dwShopID);
}
else
{
Item::CCampShopContainer* lpCampShopContainer = reinterpret_cast<Item::CCampShopContainer*>(lpContainer);
lpItem = lpCampShopContainer->RegisterCancelItem(lpCharacter, takeType, dwPrice, cCmd);
if (NULL == lpItem)
{
usError = PktBase::SERVER_ERROR;
}
}
break;
}
}
// ³ëÁ¡»ó·Î±× : ¾ÆÀÌÅÛ ¿Ã¸®±â ¹× ³»¸®±â (TakeItem°ú °°Àº Çü½ÄÀ¸·Î...)
GAMELOG::LogStallRegisterRemoveItem(*lpCharacter, lpItem, takeType, cCmd, usError);
return GameClientSendPacket::SendCharStallRegisterItem(GameClientDispatch.GetSendStream(),
dwCharID, dwShopID, takeType, dwPrice, cCmd, usError);
}
bool GameClientParsePacket::ParseCharStallEnter(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktStE), GameClientDispatch);
PktStE* lpPktStE = reinterpret_cast<PktStE*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCustomerID = lpPktStE->m_dwCustomerID;
unsigned long dwOwnerID = lpPktStE->m_dwOwnerID;
unsigned short usError = PktStE::SUCCESS;
CCharacter* lpCustomer = CCreatureManager::GetInstance().GetCharacter(dwCustomerID);
if (NULL == lpCustomer)
{
ERRLOG0(g_Log, "ij¸¯ÅÍ ¾ò±â ½ÇÆÐ.");
usError = PktStE::SERVER_ERROR;
}
else
{
// ÀÌ¹Ì »óÁ¡¿¡ µé¾î°¡ ÀÖ´ÂÁö¸¦ È®ÀÎÇÑ´Ù.
unsigned long dwOtherOwner = lpCustomer->GetStall().GetOtherOwner();
if (0 == dwOwnerID)
{
// ³ëÁ¡»óÀ» ³ª°¡´Â °æ¿ì
Item::CShopContainer* lpContainer = CCreatureManager::GetInstance().GetShopContainer(dwOtherOwner);
if (NULL == lpContainer)
{
ERRLOG2(g_Log, "CID:%10u ³ëÁ¡»ó ¿À·ù : ³ª¿À·Á´Â ³ëÁ¡»ó(%10u)ÀÇ ¾ÆÀ̵𰡠ÀÌ»óÇÕ´Ï´Ù.",
lpCustomer->GetCID(), dwOtherOwner);
usError = PktStE::FAIL_LEAVE;
}
else
{
if (0 != dwOtherOwner)
{
lpContainer->SendCharStallEnter(lpCustomer->GetCID(), 0);
lpContainer->Leave(lpCustomer);
return true;
}
else
{
ERRLOG1(g_Log, "CID:%10u ³ëÁ¡»ó ¿À·ù : ÀÌ¹Ì ³ëÁ¡»óÀ» ³ª¿Â »óÅÂÀÔ´Ï´Ù.", lpCustomer->GetCID());
usError = PktStE::FAIL_LEAVE;
}
}
}
else
{
// ³ëÁ¡»ó¿¡ µé¾î°¡´Â °æ¿ì
Item::CShopContainer* lpContainer = CCreatureManager::GetInstance().GetShopContainer(dwOwnerID);
if (NULL == lpContainer)
{
ERRLOG2(g_Log, "CID:%10u ³ëÁ¡»ó ¿À·ù : µé¾î°¡·Á´Â ³ëÁ¡»ó(%10u)ÀÇ ¾ÆÀ̵𰡠ÀÌ»óÇÕ´Ï´Ù.",
lpCustomer->GetCID(), dwOwnerID);
usError = PktStE::FAIL_ENTER;
}
else
{
if (0 == dwOtherOwner)
{
if (false == lpContainer->Enter(lpCustomer))
{
usError = PktStE::FAIL_FULL_STALL;
}
else
{
return lpContainer->SendCharStallEnter(lpCustomer->GetCID(), dwOwnerID);
}
}
else
{
ERRLOG3(g_Log, "CID:%10u ³ëÁ¡»ó ¿À·ù : ÀÌ¹Ì ³ëÁ¡»ó¿¡ µé¾î°£ »óÅÂÀÔ´Ï´Ù. µé¾î°¡°íÀÚ ÇÏ´Â °÷ : %10u, µé¾î°¡ÀÖ´Â °÷ : %10u",
lpCustomer->GetCID(), dwOwnerID, dwOtherOwner);
usError = PktStE::FAIL_ENTER;
}
}
}
}
return GameClientSendPacket::SendCharStallEnter(GameClientDispatch.GetSendStream(),
dwCustomerID, dwOwnerID, usError);
}
// Ä£±¸(°ÅºÎ)¸®½ºÆ® Ãß°¡
bool GameClientParsePacket::ParseCharFriendAdd(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktFriendAddReq), GameClientDispatch);
PktFriendAddReq* lpPktFriendAddRequest = reinterpret_cast<PktFriendAddReq*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwOwnerCID = lpCharacter->GetCID();
unsigned short usError = 0;
unsigned char cAckCmd = PktFriendAck::UNKNOWN_ERROR_ACK;
switch (lpPktFriendAddRequest->m_cCmd)
{
case PktFriendAddReq::ADD_FRIEND_REQ: cAckCmd = PktFriendAck::ADD_FRIEND_ACK; break;
case PktFriendAddReq::BAN_FRIEND_REQ: cAckCmd = PktFriendAck::ADD_BAN_ACK; break;
default: usError = PktFriendAck::CLIENT_ERROR; break;
}
unsigned long dwFriendUID = 0;
unsigned long dwFriendCID = 0;
const char* szFriendName = NULL;
unsigned long dwGID = 0;
unsigned short wClass = 0;
char cLevel = 0;
if (0 == usError)
{
// Ä£±¸(ȤÀº °ÅºÎ ¸®½ºÆ® Ãß°¡)
CCharacter* lpFriendCharacter = CCreatureManager::GetInstance().GetCharacter(
lpPktFriendAddRequest->m_szName);
if (NULL == lpFriendCharacter)
{
usError = PktFriendAck::NOT_LOGINED;
}
else
{
switch (lpPktFriendAddRequest->m_cCmd)
{
case PktFriendAddReq::ADD_FRIEND_REQ:
dwGID = lpFriendCharacter->GetGID();
wClass = lpFriendCharacter->GetClass();
cLevel = lpFriendCharacter->GetLevel();
if (lpFriendCharacter->GetRejectOption().Reject.m_Friend ||
lpFriendCharacter->GetBanList().IsBan(dwOwnerCID, lpCharacter->GetCharacterName()))
{
// »ó´ë°¡ Ä£±¸ °ÅºÎ¸¦ Ç߰ųª, ³»°¡ »ó´ëÀÇ Ban List¿¡ ¼ÓÇØ ÀÖÀ½.
usError = PktFriendAck::REJECTED;
}
else if (EnemyCheck::EC_ENEMY == lpCharacter->IsEnemy(lpFriendCharacter))
{
// Àû±ºÀº ¸®½ºÆ®¿¡ Ãß°¡ÇÒ ¼ö ¾ø´Ù.
usError = PktFriendAck::FAIL_ENEMY;
}
else if (false == lpCharacter->GetFriendList().Add(
lpFriendCharacter->GetCID(), lpFriendCharacter->GetCharacterName(),
lpFriendCharacter->GetGID(), lpFriendCharacter->GetClass(), lpFriendCharacter->GetLevel(),
CServerSetup::GetInstance().GetServerID()))
{
// ¸®½ºÆ® Ãß°¡ ½ÇÆÐ
usError = PktFriendAck::LIST_FULL;
ERRLOG2(g_Log, "CID:%10u ¸®½ºÆ®°¡ ²Ë Â÷¼­, ´õ ÀÌ»ó Ä£±¸¸¦ µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ¸®½ºÆ® ¼ö:%d",
dwOwnerCID, lpCharacter->GetFriendList().GetFriendNum());
}
else
{
// lpFriendCharacter ¿¡°Ô lpCharacter°¡ ÀÚ½ÅÀ» Ä£±¸·Î µî·ÏÇß´Ù´Â ¸Þ½ÃÁö¸¦ º¸³» ÁØ´Ù.
CGameClientDispatch* lpFriendDispatch = lpFriendCharacter->GetDispatcher();
if (NULL != lpFriendDispatch)
{
GameClientSendPacket::SendCharFriendAdded(lpFriendDispatch->GetSendStream(),
lpCharacter->GetCID(), lpCharacter->GetCharacterName());
}
// ¸¸ÀÏ Ä£±¸ Ãß°¡ÇÑ ³à¼®ÀÌ ³» °ÅºÎ ¸®½ºÆ®¿¡ ÀÖÀ» °æ¿ì, ±×³à¼®À» Á¦°ÅÇÑ´Ù.
if (lpCharacter->GetBanList().Remove(lpFriendCharacter->GetCID()))
{
cAckCmd = PktFriendAck::MOVE_BAN_TO_FRIEND;
}
// DBAgent·Î Ä£±¸ Ãß°¡ Àü¼Û
szFriendName = lpFriendCharacter->GetCharacterName();
dwFriendUID = lpFriendCharacter->GetUID();
dwFriendCID = lpFriendCharacter->GetCID();
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
GET_SINGLE_DISPATCH(lpChatDispatch, CChatDispatch,
CChatDispatch::GetDispatchTable());
if (NULL != lpDBAgentDispatch && NULL != lpChatDispatch)
{
CSendStream& DBAgentSendStream = lpDBAgentDispatch->GetSendStream();
CSendStream& ChatSendStream = lpChatDispatch->GetSendStream();
GameClientSendPacket::SendFriendListChangeToDB(DBAgentSendStream, lpCharacter->GetUID(), dwOwnerCID, dwFriendUID, dwFriendCID, 0,
lpFriendCharacter->GetGID(), lpFriendCharacter->GetClass(), lpFriendCharacter->GetLevel(),
CServerSetup::GetInstance().GetServerID(), PktFriendDB::ADD_FRIEND);
GameClientSendPacket::SendFriendListChangeToDB(ChatSendStream, lpCharacter->GetUID(), dwOwnerCID, dwFriendUID, dwFriendCID, 0,
lpFriendCharacter->GetGID(), lpFriendCharacter->GetClass(), lpFriendCharacter->GetLevel(),
CServerSetup::GetInstance().GetServerID(), PktFriendDB::ADD_FRIEND);
if (PktFriendAck::MOVE_BAN_TO_FRIEND == cAckCmd)
{
// Ãß°¡ÇÑ ³à¼®ÀÌ ³» °ÅºÎ ¸®½ºÆ®¿¡ ÀÖÀ» °æ¿ì, ±× ³à¼®À» °ÅºÎ ¸®½ºÆ®¿¡¼­ Á¦°Å.
GameClientSendPacket::SendFriendListChangeToDB(DBAgentSendStream, lpCharacter->GetUID(),
dwOwnerCID, dwFriendUID, dwFriendCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_BAN);
GameClientSendPacket::SendFriendListChangeToDB(ChatSendStream, lpCharacter->GetUID(),
dwOwnerCID, dwFriendUID, dwFriendCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_BAN);
}
}
}
break;
case PktFriendAddReq::BAN_FRIEND_REQ:
// edith 2009.07.30 °ÅºÎ¸®½ºÆ®¿¡ Àû±ºµµ °ÅºÎÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤. ´Ù¸¸ Á¾Á·ÀÌ ´Ù¸¦°æ¿ì¿¡µµ °¡´ÉÇÏ°Ô ¼öÁ¤
/* if (EnemyCheck::EC_ENEMY == lpCharacter->IsEnemy(lpFriendCharacter))
{
// Àû±ºÀº ¸®½ºÆ®¿¡ Ãß°¡ÇÒ ¼ö ¾ø´Ù.
usError = PktFriendAck::FAIL_ENEMY;
}
else */
if (false == lpCharacter->GetBanList().Add(lpFriendCharacter->GetCID(), lpFriendCharacter->GetCharacterName(),
lpFriendCharacter->GetGID(), lpFriendCharacter->GetClass(), lpFriendCharacter->GetLevel(), CServerSetup::GetInstance().GetServerID()))
{
usError = PktFriendAck::LIST_FULL;
ERRLOG2(g_Log, "CID:%10u ¸®½ºÆ®°¡ ²Ë Â÷¼­, ´õ ÀÌ»ó °ÅºÎ ´ë»óÀ» µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ¸®½ºÆ® ¼ö:%d",
dwOwnerCID, lpCharacter->GetBanList().GetBanNum());
}
else
{
dwGID = lpFriendCharacter->GetGID();
wClass = lpFriendCharacter->GetClass();
cLevel = lpFriendCharacter->GetLevel();
// lpFriendCharacter °¡ ÀÚ½ÅÀ» Ä£±¸·Î µî·ÏÇϰí ÀÖÀ¸¸é, ³»°¡ ·Î±×¾Æ¿ôÇϰí ÀÖ´Â °Íó·³ º¸ÀÌ°Ô ÇÑ´Ù.
CFriendList::Rebind* lpRebind = lpFriendCharacter->GetFriendList().GetFriend(dwOwnerCID);
if (NULL != lpRebind && lpRebind->IsFriend(lpCharacter->GetCharacterName()))
{
CGameClientDispatch* lpFriendDispatch = lpFriendCharacter->GetDispatcher();
if (NULL != lpFriendDispatch)
{
GameClientSendPacket::SendCharFriendAck(lpFriendDispatch->GetSendStream(),
PktFriendAck::FRIEND_LOGOUT, dwOwnerCID, lpCharacter->GetCharacterName(), 0, 0, 0, 0, 0);
}
}
// ¸¸ÀÏ °ÅºÎ Ãß°¡ÇÑ ³à¼®ÀÌ ³» Ä£±¸ ¸®½ºÆ®¿¡ ÀÖÀ» °æ¿ì, ±×³à¼®À» Á¦°ÅÇÑ´Ù.
if (lpCharacter->GetFriendList().Remove(lpFriendCharacter->GetCID()))
{
cAckCmd = PktFriendAck::MOVE_FRIEND_TO_BAN;
}
szFriendName = lpFriendCharacter->GetCharacterName();
dwFriendUID = lpFriendCharacter->GetUID();
dwFriendCID = lpFriendCharacter->GetCID();
// DBAgent, äÆÃ ¼­¹ö·Î Ban Ãß°¡ Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
GET_SINGLE_DISPATCH(lpChatDispatch, CChatDispatch,
CChatDispatch::GetDispatchTable());
if (NULL != lpDBAgentDispatch && NULL != lpChatDispatch)
{
CSendStream& DBAgentStream = lpDBAgentDispatch->GetSendStream();
CSendStream& ChatStream = lpChatDispatch->GetSendStream();
GameClientSendPacket::SendFriendListChangeToDB(DBAgentStream, lpCharacter->GetUID(),
dwOwnerCID, dwFriendUID, dwFriendCID, 0, lpFriendCharacter->GetGID(), lpFriendCharacter->GetClass(),
lpFriendCharacter->GetLevel(), CServerSetup::GetInstance().GetServerID(), PktFriendDB::ADD_BAN);
GameClientSendPacket::SendFriendListChangeToDB(ChatStream, lpCharacter->GetUID(),
dwOwnerCID, dwFriendUID, dwFriendCID, 0, lpFriendCharacter->GetGID(), lpFriendCharacter->GetClass(),
lpFriendCharacter->GetLevel(), CServerSetup::GetInstance().GetServerID(), PktFriendDB::ADD_BAN);
if (PktFriendAck::MOVE_FRIEND_TO_BAN == cAckCmd)
{
GameClientSendPacket::SendFriendListChangeToDB(DBAgentStream, lpCharacter->GetUID(),
dwOwnerCID, dwFriendUID, dwFriendCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_FRIEND);
GameClientSendPacket::SendFriendListChangeToDB(ChatStream, lpCharacter->GetUID(),
dwOwnerCID, dwFriendUID, dwFriendCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_FRIEND);
}
}
}
break;
default:
usError = PktFriendAck::CLIENT_ERROR;
ERRLOG2(g_Log, "CID:%10u Ŭ¶óÀÌ¾ðÆ®¿¡¼­ À߸øµÈ Ä£±¸ Ä¿¸Çµå¸¦ º¸³» ¿Ô½À´Ï´Ù. Ä¿¸Çµå:%d",
dwOwnerCID, lpPktFriendAddRequest->m_cCmd);
};
}
}
return GameClientSendPacket::SendCharFriendAck(GameClientDispatch.GetSendStream(),
cAckCmd, dwFriendCID, szFriendName, dwGID, wClass, cLevel, CServerSetup::GetInstance().GetServerID(), usError);
}
// Ä£±¸(°ÅºÎ)¸®½ºÆ® »èÁ¦
bool GameClientParsePacket::ParseCharFriendRemove(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktFriendRemoveReq), GameClientDispatch);
PktFriendRemoveReq* lpPktFriendRemoveRequest = reinterpret_cast<PktFriendRemoveReq*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwOwnerCID = lpCharacter->GetCID();
unsigned short usError = 0;
unsigned char cAckCmd = PktFriendAck::UNKNOWN_ERROR_ACK;
char szTargetName[PktFriendAck::MAX_NAME];
char szRemovedName[PktFriendAck::MAX_NAME];
memset(szTargetName, 0, sizeof(PktFriendAck::MAX_NAME));
memset(szRemovedName, 0, sizeof(PktFriendAck::MAX_NAME));
// PktFriendRemoveReq::NOFRIEND_REQ À϶§ »ç¿ë
memcpy(szTargetName, lpPktFriendRemoveRequest->m_szName, PktFriendAck::MAX_NAME);
switch (lpPktFriendRemoveRequest->m_cCmd)
{
// edith 2009.08.28 NoFriend Ãß°¡
case PktFriendRemoveReq::NOFRIEND_REQ:
{
// szTargetName ÀÇ À¯Àú¿¡¼­ ³ªÀÚ½ÅÀ» »«´Ù.
cAckCmd = PktFriendAck::NOFRIEND_ACK;
CCharacter* lpTargetCharacter = CCreatureManager::GetInstance().GetCharacter(szTargetName);
if(lpTargetCharacter)
{
CFriendList& friendList = lpTargetCharacter->GetFriendList();
CFriendList::Rebind* lpRebind = friendList.GetFriend(dwOwnerCID);
if (NULL != lpRebind)
{
memcpy(szRemovedName, lpRebind->GetCharacterName(), PktFriendAck::MAX_NAME);
}
if (lpTargetCharacter->GetFriendList().Remove(dwOwnerCID))
{
// DBAgent, ChattingÀ¸·Î Ä£±¸ »èÁ¦ Å뺸 º¸³¿.
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
GET_SINGLE_DISPATCH(lpChatDispatch, CChatDispatch,
CChatDispatch::GetDispatchTable());
if (NULL != lpDBAgentDispatch && NULL != lpChatDispatch)
{
GameClientSendPacket::SendFriendListChangeToDB(lpDBAgentDispatch->GetSendStream(),
lpTargetCharacter->GetUID(), lpTargetCharacter->GetCID(), 0, dwOwnerCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_FRIEND);
GameClientSendPacket::SendFriendListChangeToDB(lpChatDispatch->GetSendStream(),
lpTargetCharacter->GetUID(), lpTargetCharacter->GetCID(), 0, dwOwnerCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_FRIEND);
}
// »©¾ßÇÒ »ç¶÷ÀÇ ¸®½ºÆ®¿¡¼­ °­Á¦·Î »©ÁØ´Ù.
GameClientSendPacket::SendCharFriendAck(lpTargetCharacter->GetDispatcher()->GetSendStream(),
cAckCmd, dwOwnerCID, szRemovedName, 0, 0, 0, 0, usError);
// µÇµ¹·ÁÁÙ À̸§ ¼öÁ¤.
memcpy(szRemovedName, szTargetName, PktFriendAck::MAX_NAME);
}
else
{
usError = PktFriendAck::NOT_IN_LIST;
ERRLOG1(g_Log, "CID:%10u Ä£±¸ ¸®½ºÆ®¿¡ ¾ø´Â ij¸¯Å͸¦ Á¦°ÅÇÏ·Á ÇÏ¿´½À´Ï´Ù.", dwOwnerCID);
}
}
else
{
usError = PktFriendAck::NOT_LOGINED;
ERRLOG1(g_Log, "CID:%10u ·Î±×¾Æ¿ô µÇ¾î Àְųª ´Ù¸¥Á¸¿¡ ÀÖ´Â »ó´ë¿¡°Ô´Â »ç¿ëÇϽǼö ¾ø½À´Ï´Ù.", dwOwnerCID);
}
break;
}
case PktFriendRemoveReq::REMOVE_FRIEND_REQ:
{
cAckCmd = PktFriendAck::REMOVE_FRIEND_ACK;
CFriendList& friendList = lpCharacter->GetFriendList();
CFriendList::Rebind* lpRebind = friendList.GetFriend(lpPktFriendRemoveRequest->m_dwCID);
if (NULL != lpRebind)
{
memcpy(szRemovedName, lpRebind->GetCharacterName(), PktFriendAck::MAX_NAME);
}
if (lpCharacter->GetFriendList().Remove(lpPktFriendRemoveRequest->m_dwCID))
{
// DBAgent, ChattingÀ¸·Î Ä£±¸ »èÁ¦ Å뺸 º¸³¿.
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
GET_SINGLE_DISPATCH(lpChatDispatch, CChatDispatch,
CChatDispatch::GetDispatchTable());
if (NULL != lpDBAgentDispatch && NULL != lpChatDispatch)
{
GameClientSendPacket::SendFriendListChangeToDB(lpDBAgentDispatch->GetSendStream(),
lpCharacter->GetUID(), dwOwnerCID, 0, lpPktFriendRemoveRequest->m_dwCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_FRIEND);
GameClientSendPacket::SendFriendListChangeToDB(lpChatDispatch->GetSendStream(),
lpCharacter->GetUID(), dwOwnerCID, 0, lpPktFriendRemoveRequest->m_dwCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_FRIEND);
}
}
else
{
usError = PktFriendAck::NOT_IN_LIST;
ERRLOG1(g_Log, "CID:%10u Ä£±¸ ¸®½ºÆ®¿¡ ¾ø´Â ij¸¯Å͸¦ Á¦°ÅÇÏ·Á ÇÏ¿´½À´Ï´Ù.", dwOwnerCID);
}
}
break;
case PktFriendRemoveReq::REMOVE_BAN_REQ:
{
cAckCmd = PktFriendAck::REMOVE_BAN_ACK;
CBanList& banList = lpCharacter->GetBanList();
const char* szBanName = banList.GetBanName(lpPktFriendRemoveRequest->m_dwCID);
if (NULL != szBanName)
{
memcpy(szRemovedName, szBanName, PktFriendAck::MAX_NAME);
}
if (lpCharacter->GetBanList().Remove(lpPktFriendRemoveRequest->m_dwCID))
{
// DBAgent·Î °ÅºÎ »èÁ¦ Å뺸 º¸³¿.
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
GET_SINGLE_DISPATCH(lpChatDispatch, CChatDispatch,
CChatDispatch::GetDispatchTable());
if (NULL != lpDBAgentDispatch && NULL != lpChatDispatch)
{
GameClientSendPacket::SendFriendListChangeToDB(lpDBAgentDispatch->GetSendStream(),
lpCharacter->GetUID(), dwOwnerCID, 0, lpPktFriendRemoveRequest->m_dwCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_BAN);
GameClientSendPacket::SendFriendListChangeToDB(lpChatDispatch->GetSendStream(),
lpCharacter->GetUID(), dwOwnerCID, 0, lpPktFriendRemoveRequest->m_dwCID, 0, 0, 0, 0, 0, PktFriendDB::REMOVE_BAN);
}
}
else
{
usError = PktFriendAck::NOT_IN_LIST;
ERRLOG1(g_Log, "CID:%10u Ä£±¸ ¸®½ºÆ®¿¡ ¾ø´Â ij¸¯Å͸¦ Á¦°ÅÇÏ·Á ÇÏ¿´½À´Ï´Ù.", dwOwnerCID);
}
}
break;
default:
usError = PktFriendAck::CLIENT_ERROR;
ERRLOG2(g_Log, "0x%08x À߸øµÈ Ŭ¶óÀÌ¾ðÆ® Ä£±¸ ¸®½ºÆ® ¸í·ÉÀÔ´Ï´Ù. %d",
dwOwnerCID, lpPktFriendRemoveRequest->m_cCmd);
break;
}
return GameClientSendPacket::SendCharFriendAck(GameClientDispatch.GetSendStream(),
cAckCmd, dwOwnerCID, szRemovedName, 0, 0, 0, 0, usError);
}
// ±âŸ ó¸®(±×·ì ¼³Á¤ µî)
bool GameClientParsePacket::ParseCharFriendEtc(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktFriendEtc), GameClientDispatch);
PktFriendEtc* lpPktFriendEtc = reinterpret_cast<PktFriendEtc*>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
switch (lpPktFriendEtc->m_cCmd)
{
case PktFriendEtc::SETGROUP:
{
// ±×·ì ¼³Á¤Àº Ack¾øÀ½.
CFriendList::Rebind* lpRebind = lpCharacter->GetFriendList().GetFriend(lpPktFriendEtc->m_dwCID);
if (NULL != lpRebind)
{
if (lpRebind->SetGroup(lpPktFriendEtc->m_dwData))
{
// DBAgent·Î SetGroupÀü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
GET_SINGLE_DISPATCH(lpChatDispatch, CChatDispatch,
CChatDispatch::GetDispatchTable());
if (NULL != lpDBAgentDispatch && NULL != lpChatDispatch)
{
GameClientSendPacket::SendFriendListChangeToDB(lpDBAgentDispatch->GetSendStream(),
lpCharacter->GetUID(), lpCharacter->GetCID(), 0, lpPktFriendEtc->m_dwCID, lpPktFriendEtc->m_dwData, 0, 0, 0, 0,
PktFriendDB::SETGROUP);
GameClientSendPacket::SendFriendListChangeToDB(lpChatDispatch->GetSendStream(),
lpCharacter->GetUID(), lpCharacter->GetCID(), 0, lpPktFriendEtc->m_dwCID, lpPktFriendEtc->m_dwData, 0, 0, 0, 0,
PktFriendDB::SETGROUP);
}
}
}
break;
}
}
return true;
}
using namespace Guild;
// ±æµå »ý¼º
bool GameClientParsePacket::ParseCharCreateGuild(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktCreateGuild), GameClientDispatch);
PktCreateGuild* lpPktCreateGuild = reinterpret_cast<PktCreateGuild *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CCharacter* lpMaster = 0;
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned short wError = PktBase::NO_SERVER_ERR;
lpPktCreateGuild->m_szGuildName[Guild::MAX_GUILD_NAME_LEN - 1] = 0;
if (!Guild::CheckGuildName(lpPktCreateGuild->m_szGuildName))
{
wError = PktCreateGuild::FAIL_INVALID_NAME;
}
else if (NULL == (lpMaster = CCreatureManager::GetInstance().GetCharacter(lpPktCreateGuild->m_dwCID)))
{
wError = PktBase::SERVER_ERROR;
}
else
{
CGuild* lpGuild = Guild::CGuildMgr::GetInstance().GetGuild(lpPktCreateGuild->m_szGuildName);
if (NULL != lpGuild)
{
wError = PktCreateGuild::FAIL_ALREADY_NAME;
}
else
{
// edith 2008.02.27 ±æµå»ý¼º ·¹º§ Á¦¿Ü
// unsigned char cCreateLevel = CREATE_LEVEL;
unsigned long dwCreateGold = Guild::ms_arySetLevelGold[0];
/*
if (GameRYL::CHINA == CServerSetup::GetInstance().GetNationType())
{
cCreateLevel = CREATE_LEVEL_FOR_CHINA;
dwCreateGold = Guild::ms_arySetLevelGoldForChina[0];
}
*/
/*
if (cCreateLevel > lpCharacter->GetStatus().m_nLevel)
{
wError = PktBase::SERVER_ERROR;
}
else
*/
if (dwCreateGold > lpCharacter->GetGold())
{
wError = PktBase::SERVER_ERROR;
}
else
{
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 == lpDBAgentDispatch)
{
wError = PktBase::SERVER_ERROR;
}
else
{
GAMELOG::LogGuildCreate(GAMELOG::sGuildLog::REQUEST, 0, lpPktCreateGuild->m_dwCID, 0, 0);
return GameClientSendPacket::SendCharCreateGuild(lpDBAgentDispatch->GetSendStream(),
lpPktCreateGuild->m_dwCID, 0, lpCharacter->GetNation(), lpPktCreateGuild->m_szGuildName, wError);
}
}
}
}
GAMELOG::LogGuildCreate(GAMELOG::sGuildLog::REQUEST, 0, lpPktCreateGuild->m_dwCID, 0, wError);
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharCreateGuild(lpDispatch->GetSendStream(),
lpPktCreateGuild->m_dwCID, 0, lpPktCreateGuild->m_cInclination, lpPktCreateGuild->m_szGuildName, wError);
}
return true;
}
// ±æµå ¸â¹ö °ü·Ã ¸í·É
bool GameClientParsePacket::ParseCharGuildCmd(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktGuildCmd), GameClientDispatch);
PktGuildCmd* lpPktGuildCmd = reinterpret_cast<PktGuildCmd *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwGID = lpPktGuildCmd->m_dwGID;
unsigned long dwSenderID = lpPktGuildCmd->m_dwSenderID;
unsigned long dwReferenceID = lpPktGuildCmd->m_dwReferenceID;
unsigned short wCmd = lpPktGuildCmd->m_wCmd;
unsigned short wError = PktGuildCmd::NO_SERVER_ERR;
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(dwGID);
if (NULL == lpGuild)
{
ERRLOG4(g_Log, "GID:0x%08x Á¸ÀçÇÏÁö ¾Ê´Â ±æµå¿¡°Ô ¸â¹ö ¸í·ÉÀ» ¿äûÇÏ¿´½À´Ï´Ù. SenderID:0x%08x, ReferenceID:0x%08x, Cmd:%d",
dwGID, dwSenderID, dwReferenceID, wCmd);
wError = PktBase::SERVER_ERROR;
}
else
{
switch (wCmd)
{
// Send : ÃÊ´ë ¹ÞÀº ij¸¯ÅÍ
// Reference : ±æµå ¸â¹ö
case PktGuildCmd::GC_INVITE:
{
lpGuild->InviteMember(dwReferenceID, dwSenderID, wError);
break;
}
// Send : (Ãʴ븦) ¼ö¶ôÇϴ ij¸¯ÅÍ
// Reference : ±æµå ¸â¹ö
case PktGuildCmd::GC_JOIN:
{
lpGuild->JoinMember(dwSenderID, Guild::COMMON, wError);
GAMELOG::LogGuildJoin(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), dwSenderID, Guild::COMMON, wError);
break;
}
// Send : (Ãʴ븦) °ÅÀýÇϴ ij¸¯ÅÍ
// Reference : ±æµå ¸â¹ö
case PktGuildCmd::GC_REFUSE:
{
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwReferenceID);
if (NULL == lpMember) { return true; }
CGameClientDispatch* lpDispatch = lpMember->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildCmd(lpDispatch->GetSendStream(),
dwGID, dwSenderID, dwReferenceID, lpCharacter->GetCharacterName(), lpGuild->GetName(), wCmd, wError);
}
break;
}
// Send : °¡ÀÔ ¿äûÇϴ ij¸¯ÅÍ
// Reference : None
case PktGuildCmd::GC_ASK_ENTER:
{
lpGuild->JoinMember(dwSenderID, Guild::JOIN_WAIT, wError);
GAMELOG::LogGuildJoin(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), dwSenderID, Guild::JOIN_WAIT, wError);
break;
}
// Send : Å»Åð ¿äûÇÏ´Â ¸â¹ö
// Reference : None
case PktGuildCmd::GC_ASK_LEAVE:
{
lpGuild->SetTitle(dwSenderID, dwSenderID, LEAVE_WAIT, wError);
GAMELOG::LogGuildMemberLevelAdjust(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), dwSenderID, dwSenderID, LEAVE_WAIT, wError);
GAMELOG::LogGuildLeave(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), dwSenderID, dwSenderID, wError);
break;
}
// Send : Å»Åð ´çÇÏ´Â ¸â¹ö
// Reference : Å»Åð ½ÃŰ´Â ¸â¹ö
case PktGuildCmd::GC_KICK:
{
// ±æµåÀü ½Ã°£ÀÌ ¾Æ´Ò¶§¸¸ Å»Åð °¡´É
if (!CGameTimeMgr::GetInstance().IsGuildWarTime())
{
lpGuild->KickMember(dwReferenceID, dwSenderID, wError);
GAMELOG::LogGuildLeave(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), dwReferenceID, dwSenderID, wError);
}
else
{
wError = PktGuildCmd::FAIL_GUILDWAR_TIME_KICK;
}
break;
}
// Send : Á÷À§ º¯°æµÇ´Â ¸â¹ö
// Reference : º¯°æ ÈÄÀÇ Á÷À§
case PktGuildCmd::GC_SETUP_TITLE:
{
// ±æµåÀü ½Ã°£ÀÌ ¾Æ´Ò¶§¸¸ Å»Åð °¡´É
if (CGameTimeMgr::GetInstance().IsGuildWarTime() && Guild::LEAVE_WAIT == dwReferenceID)
{
wError = PktGuildCmd::FAIL_GUILDWAR_TIME_KICK;
}
else
{
lpGuild->SetTitle(lpCharacter->GetCID(), dwSenderID,
static_cast<unsigned char>(dwReferenceID), wError);
GAMELOG::LogGuildMemberLevelAdjust(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), 0, dwSenderID, dwReferenceID, wError);
}
break;
}
// ¿ëº´ ½Åû
case PktGuildCmd::GC_TACTICS:
{
lpGuild->TacticsMember(dwSenderID, Guild::JOIN_WAIT, PktGuildCmd::GC_TACTICS, wError);
GAMELOG::LogGuildJoin(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), dwSenderID, Guild::TACTICS_WAIT, wError);
break;
}
// ¿ëº´ ½Åû ±ÇÀ¯.
case PktGuildCmd::GC_TACTICS_JOIN:
{
// edith 2009.08.05 ¿ëº´½Åû ±ÇÀ¯´Â ¸·¾Æ¹ö¸°´Ù.
// lpGuild->TacticsMember(dwSenderID, Guild::JOIN_WAIT, PktGuildCmd::GC_TACTICS_JOIN, wError);
// GAMELOG::LogGuildJoin(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), dwSenderID, Guild::TACTICS_WAIT, wError);
break;
}
// ¿ëº´ Çã°¡.
case PktGuildCmd::GC_TACTICS_TITLE:
{
lpGuild->SetTacticsTitle(lpCharacter->GetCID(), dwSenderID, wCmd, static_cast<unsigned char>(dwReferenceID), 0, wError);
GAMELOG::LogGuildMemberLevelAdjust(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), 0, dwSenderID, dwReferenceID, wError);
break;
}
// ¿ëº´ Áö¿ø.
case PktGuildCmd::GC_TACTICS_REQUEST:
{
lpGuild->SetTacticsTitle(lpCharacter->GetCID(), dwSenderID, wCmd, static_cast<unsigned char>(dwReferenceID), 1, wError);
GAMELOG::LogGuildMemberLevelAdjust(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), 0, dwSenderID, dwReferenceID, wError);
break;
}
case PktGuildCmd::GC_TACTICS_KICK:
case PktGuildCmd::GC_TACTICS_LEAVE:
{
// ±æµåÀü ½Ã°£ÀÌ ¾Æ´Ò¶§¸¸ Å»Åð °¡´É
if (!CGameTimeMgr::GetInstance().IsGuildWarTime())
{
lpGuild->KickTacticsMember(dwSenderID, dwReferenceID, wCmd, wError);
GAMELOG::LogGuildLeave(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), dwReferenceID, dwSenderID, wError);
}
else
{
// ±æµåÀü ½Ã°£¿¡ ¿ëº´ Å»Åð´Â °¡´ÉÇÏ´Ù..
if ( lpGuild->IsTacticsWaitMember(dwSenderID) )
{
lpGuild->KickTacticsMember(dwSenderID, dwReferenceID, wCmd, wError);
GAMELOG::LogGuildLeave(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), dwReferenceID, dwSenderID, wError);
}
else
{
wError = PktGuildCmd::FAIL_GUILDWAR_TIME_KICK;
}
}
break;
}
default:
{
ERRLOG4(g_Log, "GID:0x%08x À߸øµÈ ±æµå ¸â¹ö ¸í·ÉÀÔ´Ï´Ù. SenderID:0x%08x, ReferenceID:0x%08x, Cmd:%d",
dwGID, dwSenderID, dwReferenceID, wCmd);
wError = PktBase::SERVER_ERROR;
break;
}
}
}
if (PktBase::NO_SERVER_ERR != wError)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildCmd(lpDispatch->GetSendStream(),
dwGID, dwSenderID, dwReferenceID, "¿¡·¯", "¿¡·¯", wCmd, wError);
}
}
return true;
}
// ±æµå ¸¶Å© º¯°æ
bool GameClientParsePacket::ParseCharGuildMark(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktGuildMark), GameClientDispatch);
PktGuildMark* lpPktGuildMark = reinterpret_cast<PktGuildMark *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildMark->m_dwCID;
unsigned long dwGID = lpPktGuildMark->m_dwGID;
unsigned short wError = PktBase::NO_SERVER_ERR;
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(dwGID);
if (NULL == lpGuild)
{
ERRLOG1(g_Log, "CID:%10u Á¸ÀçÇÏÁö¾Ê´Â ±æµåÀÇ ¸¶Å©¸¦ º¯°æÇÏ·Á ÇÕ´Ï´Ù.", dwGID);
wError = PktGuildMark::FAIL_INVALID_GUILD;
}
else
{
wError = lpGuild->SetMark(dwCID, lpPktGuildMark->m_szMark);
GAMELOG::LogGuildMarkChange(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(),
dwCID, lpGuild->GetGold(), lpGuild->GetGold(),
lpPktGuildMark->m_szMark, MAX_MARK_SIZE, wError);
}
if (PktBase::NO_SERVER_ERR != wError)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildMark(lpDispatch->GetSendStream(),
dwCID, dwGID, lpPktGuildMark->m_szMark, 0, wError);
}
}
return true;
}
// ±æµå ·¹º§ º¯°æ
bool GameClientParsePacket::ParseCharGuildLevel(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktGuildLevel), GameClientDispatch);
PktGuildLevel* lpPktGuildLevel = reinterpret_cast<PktGuildLevel *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildLevel->m_dwUID;
unsigned char cLevel = lpPktGuildLevel->m_cLevel;
unsigned short wError = PktBase::NO_SERVER_ERR;
CCharacter* lpMaster = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL == lpMaster)
{
wError = PktBase::SERVER_ERROR;
}
else
{
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMaster->GetGID());
if (NULL == lpGuild)
{
ERRLOG1(g_Log, "CID:%10u ±æµå¿¡ ¼ÓÇÏÁö ¾ÊÀº ij¸¯ÅͰ¡ ±æµå ·¹º§À» º¯°æÇÏ·Á ÇÕ´Ï´Ù.", dwCID);
wError = PktBase::SERVER_ERROR;
}
else
{
if (false == lpGuild->SetLevel(dwCID, cLevel))
{
wError = PktBase::SERVER_ERROR;
}
GAMELOG::LogGuildLevel(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(), dwCID,
cLevel, lpGuild->GetGold(), lpGuild->GetGold(), 0);
}
}
if (PktBase::NO_SERVER_ERR != wError)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildLevel(lpDispatch->GetSendStream(),
dwCID, cLevel, 0, wError);
}
}
return true;
}
// ±æµå °ü°è º¯°æ
bool GameClientParsePacket::ParseCharGuildRelation(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktGuildRelation), GameClientDispatch);
PktGuildRelation* lpPktGuildRelation = reinterpret_cast<PktGuildRelation *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildRelation->m_dwCID;
unsigned long dwGID = lpPktGuildRelation->m_dwGID;
unsigned long dwTargetGID = lpPktGuildRelation->m_dwTargetGID;
unsigned long dwValue = lpPktGuildRelation->m_dwValue;
unsigned char cSubCmd = lpPktGuildRelation->m_cSubCmd;
char szTargetGuildName[Guild::MAX_GUILD_NAME_LEN] = "";
char szTempGuildName[Guild::MAX_GUILD_NAME_LEN] = "";
unsigned short wError = PktBase::NO_SERVER_ERR;
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL == lpMember)
{
wError = PktGuildRelation::FAIL_NOT_MEMBER;
}
else
{
if (PktGuildRelation::GR_HOSTILITY == cSubCmd &&
GameTime::GT_NORMAL != CGameTimeMgr::GetInstance().GetCurrentGuildTime())
{
ERRLOG1(g_Log, "CID:%10u Àû´ë ¼±¾ðÀ» ÇÒ ¼ö ¾ø´Â ½Ã°£¿¡ °ü°è º¯°æÀ» ¿äûÇÕ´Ï´Ù.", dwCID);
wError = PktGuildRelation::FAIL_NOT_HOSTILITY_TIME;
}
if (PktGuildRelation::GR_ALERT == cSubCmd &&
GameTime::GT_GUILD_WAR != CGameTimeMgr::GetInstance().GetCurrentGuildTime() &&
GameTime::GT_PREPARE_END_30 != CGameTimeMgr::GetInstance().GetCurrentGuildTime())
{
ERRLOG1(g_Log, "CID:%10u °æ°è Àû´ë ¼±¾ðÀ» ÇÒ ¼ö ¾ø´Â ½Ã°£¿¡ °ü°è º¯°æÀ» ¿äûÇÕ´Ï´Ù.", dwCID);
wError = PktGuildRelation::FAIL_NOT_ALERT_TIME;
}
if (PktGuildRelation::GR_COUNTER == cSubCmd &&
GameTime::GT_GUILD_WAR != CGameTimeMgr::GetInstance().GetCurrentGuildTime() &&
GameTime::GT_PREPARE_END_30 != CGameTimeMgr::GetInstance().GetCurrentGuildTime())
{
ERRLOG1(g_Log, "CID:%10u Ä«¿îÅÍ Àû´ë ¼±¾ðÀ» ÇÒ¼ö ¾ø´Â ½Ã°£¿¡ °ü°è º¯°æÀ» ¿äûÇÕ´Ï´Ù.", dwCID);
wError = PktGuildRelation::FAIL_NOT_COUNTER_TIME;
}
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMember->GetGID());
if (NULL == lpGuild)
{
ERRLOG1(g_Log, "CID:%10u ±æµå¿¡ ¼ÓÇÏÁö ¾ÊÀº ij¸¯ÅͰ¡ ±æµå °ü°èÀ» º¯°æÇÏ·Á ÇÕ´Ï´Ù.", dwCID);
wError = PktGuildRelation::FAIL_NOT_EXIST_GUILD;
}
else
{
if (lpGuild->GetMaster().m_dwCID != dwCID)
{
ERRLOG1(g_Log, "CID:%10u ±æµå ¸¶½ºÅͰ¡ ¾Æ´Ñ ij¸¯ÅͰ¡ ±æµå °ü°è¸¦ º¯°æÇÏ·Á ÇÕ´Ï´Ù.", dwCID);
wError = PktGuildRelation::FAIL_NOT_MASTER;
}
}
CGuild* lpTargetGuild = CGuildMgr::GetInstance().GetGuild(dwTargetGID);
if (NULL == lpTargetGuild)
{
ERRLOG2(g_Log, "CID:%10u ±æµå °ü°è¸¦ º¯°æÇÒ·Á´Â »ó´ë ±æµå°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. GID:0x%08x", dwCID, dwTargetGID);
wError = PktGuildRelation::FAIL_NOT_EXIST_GUILD;
}
else
{
strncpy(szTargetGuildName, lpTargetGuild->GetName(), Guild::MAX_GUILD_NAME_LEN);
}
if (wError == PktBase::NO_SERVER_ERR)
{
switch (cSubCmd)
{
case PktGuildRelation::GR_HOSTILITY:
{
// ÀÚ½ÅÀÇ ±æµå¿¡°Ô Àû´ë ¼±¾ð üũ
if (lpGuild->GetGID() == dwTargetGID)
{
ERRLOG1(g_Log, "GID:0x%08x ÀÚ½ÅÀÇ ±æµå¿¡°Ô Àû´ë ¼±¾ðÀ» ÇÏ·ÁÇÕ´Ï´Ù.", lpGuild->GetGID());
wError = PktGuildRelation::FAIL_SELF_GUILD;
}
// ÀÌ¹Ì Àû´ë °ü°èÀÎÁö üũ
if (Guild::HOSTILITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_HOSTILITY;
}
// ³»°¡ Àû´ë »óŸ¦ ¹ÞÀº »óÅÂÀÎÁö : Å©·Î½º Àû´ë¸¦ ¹æÁöÇϱâ À§Çؼ­
// »ó´ë¹æÀÌ ÀÌ¹Ì ³ª¸¦ Àû´ë ½ÅûÀ» ÇßÀ¸¸é..
if (Guild::HOSTILITY == lpGuild->GetRelation(dwTargetGID, BY_TARGET) ||
Guild::TARGET_NEUTRALITY == lpGuild->GetRelation(dwTargetGID, BY_TARGET) )
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_HOSTILITY;
}
// Àû´ë ¼±¾ð±Ç Ãʰú üũ
if (lpGuild->GetNumOfRelation(Guild::HOSTILITY) >= Guild::MAX_HOSTILITY_NUM)
{
dwValue = lpGuild->GetRelationGID(Guild::HOSTILITY);
CGuild* lpTempGuild = CGuildMgr::GetInstance().GetGuild(dwValue);
if (NULL != lpTempGuild)
{
strncpy(szTempGuildName, lpTempGuild->GetName(), Guild::MAX_GUILD_NAME_LEN);
}
wError = PktGuildRelation::FAIL_REQUEST_WINDOW;
}
// »ó´ë¹æÀÌ ¹ÞÀ»¼ö ÀÖ´Â Àû´ë °ü°è ÃÖ´ëÄ¡ Ãʰú üũ
if (lpTargetGuild->GetNumOfRelation(Guild::ALL_HOSTILITY, Guild::BY_TARGET) >= Guild::MAX_HOSTILITY_APPLY_NUM)
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå°¡ ¹ÞÀ» ¼ö ÀÖ´Â Àû´ë °ü°è ÇѰèÄ¡ÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_TARGET_HOSTILITY_FULL;
}
// Àû´ë ¼±¾ð
if (wError == PktBase::NO_SERVER_ERR)
{
// DB Áß°è ¼­¹ö·Î Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildRelation(lpDBAgentDispatch->GetSendStream(),
dwCID, lpGuild->GetGID(), dwTargetGID, 0, PktGuildRelation::GR_HOSTILITY, 0);
}
}
break;
}
case PktGuildRelation::GR_PEACE:
{
// ÀÚ½ÅÀÇ ±æµå¿¡°Ô ÆòÈ­ ¼±¾ð üũ
if (lpGuild->GetGID() == dwTargetGID)
{
ERRLOG1(g_Log, "GID:0x%08x ÀÚ½ÅÀÇ ±æµå¿¡°Ô ÆòÈ­ ¼±¾ðÀ» ÇÏ·ÁÇÕ´Ï´Ù.", lpGuild->GetGID());
wError = PktGuildRelation::FAIL_SELF_GUILD;
}
// Á߸³ °ü°èÀÇ ±æµå¿¡°Ô ÆòÈ­ ¼±¾ð üũ
if (Guild::NEUTRALITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x Á߸³ °ü°è ±æµå¿¡°Ô ÆòÈ­ ¼±¾ðÀ» ÇÏ·Á ÇÕ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_NEUTRALITY;
}
// ÆòÈ­ ¼±¾ð
if (wError == PktBase::NO_SERVER_ERR)
{
// DB Áß°è ¼­¹ö·Î Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildRelation(lpDBAgentDispatch->GetSendStream(),
dwCID, lpGuild->GetGID(), dwTargetGID, 0, PktGuildRelation::GR_PEACE, 0);
}
}
break;
}
case PktGuildRelation::GR_HOSTILITYDEL:
{
// ÀÚ½ÅÀÇ ±æµå¿¡°Ô ÆòÈ­ ¼±¾ð üũ
if (lpGuild->GetGID() == dwTargetGID)
{
ERRLOG1(g_Log, "GID:0x%08x ÀÚ½ÅÀÇ ±æµå¿¡°Ô ÆòÈ­ ¼±¾ðÀ» ÇÏ·ÁÇÕ´Ï´Ù.", lpGuild->GetGID());
wError = PktGuildRelation::FAIL_SELF_GUILD;
}
// ÇØ´ç Ÿ°Ù±æµå°¡ µé¾î°¡ÀÖÁö ¾Ê´Ù¸é
if (Guild::TARGET_NEUTRALITY != lpGuild->GetRelation(dwTargetGID, Guild::BY_TARGET))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x Çã¶ô´ë±â °ü°è ±æµå°¡ ¾Æ´Ñµ¥ ÆòÈ­ ¼±¾ðÀ» ÇÏ·Á ÇÕ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_NEUTRALITY;
}
// ÆòÈ­ ¼±¾ð
if (wError == PktBase::NO_SERVER_ERR)
{
// DB Áß°è ¼­¹ö·Î Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildRelation(lpDBAgentDispatch->GetSendStream(),
dwCID, lpGuild->GetGID(), dwTargetGID, 0, PktGuildRelation::GR_HOSTILITYDEL, 0);
}
}
break;
}
case PktGuildRelation::GR_ALERT:
{
// ÀÚ½ÅÀÇ ±æµå¿¡°Ô °æ°è Àû´ë ¼±¾ð üũ
if (lpGuild->GetGID() == dwTargetGID)
{
ERRLOG1(g_Log, "GID:0x%08x ÀÚ½ÅÀÇ ±æµå¿¡°Ô °æ°è Àû´ë ¼±¾ðÀ» ÇÏ·ÁÇÕ´Ï´Ù.", lpGuild->GetGID());
wError = PktGuildRelation::FAIL_SELF_GUILD;
}
// ÀÌ¹Ì Àû´ë °ü°èÀÎÁö üũ
if (Guild::HOSTILITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_HOSTILITY;
}
// ÀÌ¹Ì Ä«¿îÅÍ Àû´ë °ü°èÀÎÁö üũ
if (Guild::COUNTER_HOSTILITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì Ä«¿îÅÍ Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_COUNTER_HOSTILITY;
}
// ÀÌ¹Ì °æ°è Àû´ë °ü°èÀÎÁö üũ
if (Guild::ALERT_HOSTILITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì °æ°è Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_ALERT_HOSTILITY;
}
// °æ°è Àû´ë ¼±¾ð±Ç Ãʰú üũ
if (lpGuild->GetNumOfRelation(Guild::ALERT_HOSTILITY) >= Guild::MAX_ALERT_NUM)
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x °æ°è Àû´ë ¼±¾ð±Ç Ãʰú·Î °æ°è Àû´ë ¼±¾ð ½ÇÆÐ",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_MAX_ALERT_NUM;
}
// »ó´ë¹æÀÌ ¹ÞÀ»¼ö ÀÖ´Â Àû´ë °ü°è ÃÖ´ëÄ¡ Ãʰú üũ
if (lpTargetGuild->GetNumOfRelation(Guild::ALL_HOSTILITY, Guild::BY_TARGET) >= Guild::MAX_HOSTILITY_APPLY_NUM)
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå°¡ ¹ÞÀ» ¼ö ÀÖ´Â Àû´ë °ü°è ÇѰèÄ¡ÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_TARGET_HOSTILITY_FULL;
}
// ±¸ÃàÁßÀÎ ¿ä»õ À¯¹« üũ
bool bHasDevelopingCamp = false, bHasCompleteCamp = false;
CSiegeObjectMgr::GetInstance().HasCampByGID(dwTargetGID, bHasDevelopingCamp, bHasCompleteCamp);
if (!bHasDevelopingCamp)
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå°¡ ±¸ÃàÁßÀÎ ±æµå ¿ä»õ¸¦ °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_NOT_HAVE_DEVELOPING_CAMP;
}
// °æ°è Àû´ë ¼±¾ð
if (wError == PktBase::NO_SERVER_ERR)
{
// DB Áß°è ¼­¹ö·Î Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildRelation(lpDBAgentDispatch->GetSendStream(),
dwCID, lpGuild->GetGID(), dwTargetGID, 0, PktGuildRelation::GR_ALERT, 0);
}
}
break;
}
case PktGuildRelation::GR_COUNTER:
{
// ÀÌ¹Ì Àû´ë °ü°èÀÎÁö üũ
if (Guild::HOSTILITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_HOSTILITY;
}
// ÀÌ¹Ì Ä«¿îÅÍ Àû´ë °ü°èÀÎÁö üũ
if (Guild::COUNTER_HOSTILITY == lpGuild->GetRelation(dwTargetGID))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå¿Í ÀÌ¹Ì Ä«¿îÅÍ Àû´ë °ü°èÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_ALREADY_COUNTER_HOSTILITY;
}
// ´ë»ó ±æµå°¡ ³ª¿¡°Ô °æ°è Àû´ë ¼±¾ðÀ» ÇÏ¿´´ÂÁö üũ
if (Guild::ALERT_HOSTILITY != lpTargetGuild->GetRelation(lpGuild->GetGID()))
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå°¡ °æ°è Àû´ë¸¦ ½ÅûÇÏÁö ¾Ê¾Ò´Âµ¥ Ä«¿îÅÍ Àû´ë ½ÅûÀ» ÇÏ·ÁÇÕ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_NOT_HAVE_ALERT;
}
// »ó´ë¹æÀÌ ¹ÞÀ»¼ö ÀÖ´Â Àû´ë °ü°è ÃÖ´ëÄ¡ Ãʰú üũ
if (lpTargetGuild->GetNumOfRelation(Guild::ALL_HOSTILITY, Guild::BY_TARGET) >= Guild::MAX_HOSTILITY_APPLY_NUM)
{
ERRLOG2(g_Log, "GID:0x%08x TargetGID:0x%08x ´ë»ó ±æµå°¡ ¹ÞÀ» ¼ö ÀÖ´Â Àû´ë °ü°è ÇѰèÄ¡ÀÔ´Ï´Ù.",
lpGuild->GetGID(), dwTargetGID);
wError = PktGuildRelation::FAIL_TARGET_HOSTILITY_FULL;
}
// Ä«¿îÅÍ Àû´ë ¼±¾ð
if (wError == PktBase::NO_SERVER_ERR)
{
// DB Áß°è ¼­¹ö·Î Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildRelation(lpDBAgentDispatch->GetSendStream(),
dwCID, lpGuild->GetGID(), dwTargetGID, 0, PktGuildRelation::GR_COUNTER, 0);
}
}
break;
}
case PktGuildRelation::GR_REQUEST:
{
// Áö±Ý Àû´ë ¼±¾ðÁßÀÎ ±æµå¿Í ÆòÈ­ ¼±¾ðÈÄ ´ë»ó ±æµå¿Í Àû´ë ¼±¾ð
if (wError == PktBase::NO_SERVER_ERR)
{
// DB Áß°è ¼­¹ö·Î Àü¼Û
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildRelation(lpDBAgentDispatch->GetSendStream(),
dwCID, dwGID, dwTargetGID, dwValue, PktGuildRelation::GR_REQUEST, 0);
}
}
break;
}
}
}
}
if (PktBase::NO_SERVER_ERR != wError)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
if (PktGuildRelation::FAIL_REQUEST_WINDOW == wError)
{
return GameClientSendPacket::SendCharGuildRelation(lpDispatch->GetSendStream(),
dwCID, dwGID, dwTargetGID, dwValue, cSubCmd, wError, szTargetGuildName, szTempGuildName);
}
else
{
return GameClientSendPacket::SendCharGuildRelation(lpDispatch->GetSendStream(),
dwCID, dwGID, dwTargetGID, dwValue, cSubCmd, wError);
}
}
}
return true;
}
// ±æµå ¼ºÇâ º¯°æ
bool GameClientParsePacket::ParseCharGuildInclination(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
// ´õÀÌ»ó ±æµå ±¹ÀûÀº º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù. (2004-11-22 by ·Îµò)
/*
PktGuildInclination* lpPktGuildInclination = reinterpret_cast<PktGuildInclination *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildInclination->m_dwUID;
unsigned char cInclination = lpPktGuildInclination->m_cInclination;
unsigned short wError = PktBase::NO_SERVER_ERR;
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL == lpMember)
{
wError = PktBase::SERVER_ERROR;
}
else
{
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMember->GetGID());
if (NULL == lpGuild)
{
ERRLOG1(g_Log, "CID:%10u ±æµå¿¡ ¼ÓÇÏÁö ¾ÊÀº ij¸¯ÅͰ¡ ±æµå ¼ºÇâÀ» º¯°æÇÏ·Á ÇÕ´Ï´Ù.", dwCID);
wError = PktBase::SERVER_ERROR;
}
else
{
lpGuild->SetInclination(dwCID, cInclination, wError);
}
}
if (PktBase::NO_SERVER_ERR != wError)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildInclination(lpDispatch->GetSendStream(),
dwCID, cInclination, wError);
}
}
*/
return true;
}
// ±æµå ¸®½ºÆ®
bool GameClientParsePacket::ParseCharGuildList(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
PktGuildList* lpPktGuildList = reinterpret_cast<PktGuildList *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildList->m_dwCID;
unsigned char cSortCmd = lpPktGuildList->m_cSortCmd;
unsigned char cPage = lpPktGuildList->m_cPage;
unsigned char cNodeNum = lpPktGuildList->m_cSmallNodeNum;
GuildCheckSumNode* lpNode = reinterpret_cast<GuildCheckSumNode *>(lpPktGuildList + 1);
return CGuildMgr::GetInstance().SendGuildList(dwCID, cSortCmd, cPage, cNodeNum, lpNode);
}
// ±æµå ±ÇÇÑ ¼³Á¤
bool GameClientParsePacket::ParseCharGuildRight(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
PktGuildRight* lpPktGuildRight = reinterpret_cast<PktGuildRight *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildRight->m_dwUID;
GuildRight guildRight = lpPktGuildRight->m_GuildRight;
unsigned short wError = PktBase::NO_SERVER_ERR;
CCharacter* lpMaster = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL == lpMaster)
{
wError = PktBase::SERVER_ERROR;
}
else
{
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMaster->GetGID());
if (NULL == lpGuild)
{
ERRLOG1(g_Log, "CID:%10u ±æµå¿¡ ¼ÓÇÏÁö ¾ÊÀº ij¸¯ÅͰ¡ ±æµå ·¹º§À» º¯°æÇÏ·Á ÇÕ´Ï´Ù.", dwCID);
wError = PktBase::SERVER_ERROR;
}
else
{
if (false == lpGuild->SetRight(dwCID, guildRight))
{
wError = PktBase::SERVER_ERROR;
}
GAMELOG::LogGuildRightsChange(GAMELOG::sGuildLog::REQUEST, lpGuild->GetGID(),
dwCID, reinterpret_cast<const char*>(guildRight.m_aryRight), MAX_RIGHT_SIZE, wError);
}
}
if (PktBase::NO_SERVER_ERR != wError)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildRight(lpDispatch->GetSendStream(),
dwCID, guildRight, wError);
}
}
return true;
}
// ±æµå ¸â¹ö ¸®½ºÆ®
bool GameClientParsePacket::ParseCharGuildMemberList(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
PktGuildMemberList* lpPktGuildMemberList = reinterpret_cast<PktGuildMemberList *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildMemberList->m_dwCID;
unsigned char cMemberType = lpPktGuildMemberList->m_cMemberType;
unsigned char cSortCmd = lpPktGuildMemberList->m_cSortCmd;
unsigned char cPage = lpPktGuildMemberList->m_cPage;
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL != lpMember)
{
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMember->GetGID());
if (NULL != lpGuild)
{
lpGuild->SendMemberList(lpMember, cMemberType, cSortCmd, cPage);
}
}
return true;
}
// ±æµå ±Ý°í
bool GameClientParsePacket::ParseCharGuildSafe(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
// edith 2008.07.07 ±æµå±Ý°í ¹ö±×·Î ÀÎÇØ ÀϽÃÀûÀ¸·Î ±æµå±Ý°í¸¦ Á¦ÇÑÇÔ.
// return true;
PktGuildSafe* lpPktGuildSafe = reinterpret_cast<PktGuildSafe *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildSafe->m_dwCID;
unsigned long dwGold = lpPktGuildSafe->m_dwGold;
unsigned char cCmd = lpPktGuildSafe->m_cCmd;
unsigned short wError = PktBase::NO_SERVER_ERR;
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL != lpMember)
{
unsigned long dwCharGold = lpMember->GetGold();
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMember->GetGID());
// edith 2008.03.15 ij¸¯ÀÌ DB¿¡ ÀÔÃâ±Ý °ü·Ã ÆÐŶÀ» º¸³Â´ÂÁö È®ÀÎ
if (NULL == lpGuild)
{
wError = PktBase::SERVER_ERROR;
}
else if(lpMember->GetGuildSafe() != -1 || lpGuild->GetGuildSafe() != -1)
{
wError = PktGuildSafe::FAIL_REQUEST_DATA;
}
else
{
unsigned long dwPostChangeGold = 0;
// dwCharGold : ÆÐŶÀ» º¸³½ ´ë»óÀÇ µ·
// dwGold : Ŭ¶óÀÌ¾ðÆ®°¡ º¸³»¿Â ±Ý¾×
lpMember->SetGuildSafe(cCmd);
lpGuild->SetGuildSafe(cCmd);
switch (cCmd)
{
// Ãâ±Ý
case PktGuildSafe::SC_WITHDRAWAL:
{
if (lpGuild->GetTitle(lpMember->GetCID()) > lpGuild->GetRight().m_aryRight[GuildRight::USE_SAFE])
{
ERRLOG2(g_Log, "CID:%10u ±æµå ±Ý°í »ç¿ë ±ÇÇÑÀÌ ¾ø´Â ±æµå¿øÀÌ ±Ý°í¿¡¼­ Ãâ±ÝÇÏ·Á ÇÕ´Ï´Ù. GID:0x%08x",
lpMember->GetCID(), lpGuild->GetGID());
wError = PktBase::SERVER_ERROR;
}
else
{
// ±æµå¿¡¼­ µ·À» Ãâ±ÝÇß´Ù.
if (dwCharGold > ULONG_MAX - dwGold)
{
//ij¸¯ÅͰ¡ ÃÖ´ë °®À»¼ö Àִµ· 4,294,967,295ÀÌ ³Ñ´ÂÁö È®ÀÎ.
wError = PktBase::SERVER_ERROR;
}
else
{
// ·Î±×¿ë. (â°í¿¡¼­ µ· »©°í ³²Àº ±Ý¾× °è»ê)
// ±æµå¿¡ ÀÖ´Â ±Ý¾×º¸´Ù ²¨³½±Ý¾×ÀÌ Å©¸é
if (dwGold <= lpGuild->GetGold())
{
dwPostChangeGold = lpGuild->GetGold() - dwGold;
}
else
{
dwPostChangeGold = 0;
wError = PktBase::SERVER_ERROR;
}
}
}
break;
}
case PktGuildSafe::SC_DEPOSIT:
{
// ÀÔ±ÝÀº ±Ý°í »ç¿ë ±ÇÇÑ ¾øÀÌ °¡´É
if (dwGold > dwCharGold)
{
wError = PktBase::SERVER_ERROR;
}
else
{
dwPostChangeGold = lpGuild->GetGold() + dwGold;
}
break;
}
case PktGuildSafe::SC_REFER:
// TODO : ±Ý°í »ç¿ë ³»¿ª Á¶È¸
break;
case PktGuildSafe::SC_RELEASE:
{
if (lpGuild->GetTitle(lpMember->GetCID()) > lpGuild->GetRight().m_aryRight[GuildRight::USE_SAFE])
{
ERRLOG2(g_Log, "CID:%10u ±æµå ±Ý°í »ç¿ë ±ÇÇÑÀÌ ¾ø´Â ±æµå¿øÀÌ ±Ý°í ¹æÃâÀ» ÇÏ·Á ÇÕ´Ï´Ù. GID:0x%08x",
lpMember->GetCID(), lpGuild->GetGID());
wError = PktBase::SERVER_ERROR;
}
// Áß°è ¼­¹ö¿¡¼­ ó¸®ÇÑ´Ù.
break;
}
default:
wError = PktBase::SERVER_ERROR;
break;
}
GAMELOG::LogGuildStoreGoldChange(GAMELOG::sGuildLog::REQUEST,
lpGuild->GetGID(), dwCID, cCmd, lpGuild->GetGold(), dwPostChangeGold, wError);
if (PktBase::NO_SERVER_ERR == wError)
{
// Á¤»ó ó¸®
GET_SINGLE_DISPATCH(lpDBAgentDispatch,
CDBAgentDispatch, CDBAgentDispatch::GetDispatchTable());
if (0 != lpDBAgentDispatch)
{
return GameClientSendPacket::SendCharGuildSafe(lpDBAgentDispatch->GetSendStream(),
dwCID, lpGuild->GetGID(), 0, dwGold, cCmd, lpMember->GetCharacterName(), wError);
}
}
else
{
// dwCharGold : ÆÐŶÀ» º¸³½ ´ë»óÀÇ µ·
// dwGold : Ŭ¶óÀÌ¾ðÆ®°¡ º¸³»¿Â ±Ý¾×
lpMember->SetGuildSafe(-1);
lpGuild->SetGuildSafe(-1);
}
}
// ¿¡·¯°¡ ³­ °æ¿ì
CGameClientDispatch* lpDispatch = lpMember->GetDispatcher();
if (NULL != lpDispatch)
{
return GameClientSendPacket::SendCharGuildSafe(lpDispatch->GetSendStream(),
dwCID, 0, 0, dwGold, cCmd, lpMember->GetCharacterName(), wError);
}
}
return true;
}
// Àû´ë ±æµå ÇüȲ ¸®½ºÆ®
bool GameClientParsePacket::ParseCharGuildHostilityList(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
PktGuildHostilityList* lpPktGuildHostilityList = reinterpret_cast<PktGuildHostilityList *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildHostilityList->m_dwCID; // ij¸¯ÅÍ ¾ÆÀ̵ð
unsigned char cCurrentPage = lpPktGuildHostilityList->m_cCurrentPage; // ÇöÀç ÆäÀÌÁö
unsigned char cPageState = lpPktGuildHostilityList->m_cPageState; // ¿äûÇÑ ÆäÀÌÁöÀÇ »óÅÂ
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL != lpMember)
{
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMember->GetGID());
if (NULL != lpGuild)
{
lpGuild->SendHostilityList(lpMember, cCurrentPage, cPageState);
}
}
return true;
}
// ±æµåÀÇ °ü°è ¸®½ºÆ® ¿äû
bool GameClientParsePacket::ParseCharGuildRelationInfo(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
{
PktGuildRelationInfo* lpPktGuildRelationInfo = reinterpret_cast<PktGuildRelationInfo *>(lpPktBase);
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
unsigned long dwCID = lpPktGuildRelationInfo->m_dwCID; // ¿äûÇÑ Ä³¸¯ÅÍ ¾ÆÀ̵ð
unsigned long dwGID = lpPktGuildRelationInfo->m_dwGID; // ¿äûÇÑ Ä³¸¯ÅÍÀÇ ±æµå ¾ÆÀ̵ð
CCharacter* lpMember = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL != lpMember)
{
CGuild* lpGuild = CGuildMgr::GetInstance().GetGuild(lpMember->GetGID());
if (NULL != lpGuild)
{
CGuildMgr::GetInstance().SendGuildRelationInfo(dwCID, dwGID);
}
}
return true;
}