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>
This commit is contained in:
@@ -0,0 +1,291 @@
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <Creature/CreatureManager.h>
|
||||
#include <Creature/Character/Character.h>
|
||||
#include <Creature/Character/ExpTable.h>
|
||||
#include <Creature/Character/CharRespawnMgr.h>
|
||||
|
||||
#include <Map/FieldMap/VirtualArea/VirtualArea.h>
|
||||
#include <Map/FieldMap/VirtualArea/VirtualAreaMgr.h>
|
||||
|
||||
#include <Network/Dispatch/ParseUtils.h>
|
||||
#include <Network/Dispatch/Chat/ChatDispatch.h>
|
||||
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharItemPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
|
||||
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharConfigPacket.h>
|
||||
#include <Network/Packet/PacketStruct/RankingPacket.h>
|
||||
|
||||
#include <Network/Dispatch/GameClient/SendCharAttack.h>
|
||||
|
||||
#include <Utility/Setup/ServerSetup.h>
|
||||
#include <Ranking/RankingMgr.h>
|
||||
|
||||
#include "GameClientDispatch.h"
|
||||
#include "SendCharEtc.h"
|
||||
#include "ParseCharEtc.h"
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD>
|
||||
bool GameClientParsePacket::ParseCharSuicide(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktSC), GameClientDispatch);
|
||||
|
||||
PktSC* lpPktSC = static_cast<PktSC*>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
unsigned long dwCharID = lpPktSC->m_dwCharID;
|
||||
Position Pos = Position::Position();
|
||||
|
||||
lpCharacter->Dead(NULL);
|
||||
if (0 != lpCharacter->GetMapIndex())
|
||||
{
|
||||
VirtualArea::CVirtualArea* lpVirtualArea = VirtualArea::CVirtualAreaMgr::GetInstance().GetVirtualArea( lpCharacter->GetMapIndex() );
|
||||
if (NULL != lpVirtualArea)
|
||||
{
|
||||
Pos = lpVirtualArea->GetRespawnPosition(lpCharacter->GetRace(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
lpCharacter->Respawn(CCharRespawnMgr::RST_TOWN, Pos);
|
||||
lpCharacter->SaveToDBData();
|
||||
|
||||
if (0 != lpCharacter->GetPID())
|
||||
{
|
||||
// <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD>.
|
||||
GameClientSendPacket::SendCharDeadToParty(lpCharacter, 0, PktDeadInfo::RESPAWN);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool GameClientParsePacket::ParseCharBindPosition(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktBP), GameClientDispatch);
|
||||
|
||||
PktBP* lpPktBP = static_cast<PktBP*>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
unsigned long dwNPCID = lpPktBP->m_dwNPCID;
|
||||
unsigned char cCmd = lpPktBP->m_cCmd;
|
||||
POS &Pos = lpPktBP->m_Pos;
|
||||
char cZone = lpPktBP->m_cZone;
|
||||
|
||||
Position DestPos = Pos;
|
||||
|
||||
switch (cCmd)
|
||||
{
|
||||
case PktBP::BP_SAVE_POSITION: // <20><> <20><>ġ <20><><EFBFBD><EFBFBD>
|
||||
lpCharacter->BindPositionToNPC(dwNPCID);
|
||||
break;
|
||||
|
||||
case PktBP::BP_WARP: // <20><><EFBFBD><EFBFBD>
|
||||
DETLOG5(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. NewPos : %.1f, %.1f, %.1f, Zone : %d",
|
||||
lpCharacter->GetCID(), Pos.fPointX, Pos.fPointY, Pos.fPointZ, cZone);
|
||||
lpCharacter->MoveTo(DestPos, false);
|
||||
break;
|
||||
}
|
||||
|
||||
return GameClientSendPacket::SendCharBindPosition(*lpCharacter,
|
||||
dwNPCID, cCmd, Pos, cZone, 0);
|
||||
}
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
bool GameClientParsePacket::ParseCharQuickSlotMove(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktQSM), GameClientDispatch);
|
||||
|
||||
PktQSM* lpPktQSM = static_cast<PktQSM*>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
TakeType takeType = lpPktQSM->m_TakeType;
|
||||
unsigned short usSkillID = lpPktQSM->m_usSkillID;
|
||||
unsigned char cLockCount = lpPktQSM->m_cLockCount;
|
||||
unsigned char cSkillLevel = lpPktQSM->m_cSkillLevel;
|
||||
|
||||
unsigned short usError = 0;
|
||||
|
||||
if (false == lpCharacter->MoveQuickSlot(takeType, usSkillID, cLockCount, cSkillLevel))
|
||||
{
|
||||
usError = PktQSM::FAIL_MOVE;
|
||||
}
|
||||
|
||||
return GameClientSendPacket::SendCharQuickSlotMove(
|
||||
GameClientDispatch.GetSendStream(), takeType, usSkillID, usError);
|
||||
}
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool GameClientParsePacket::ParseCharControlOption(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktCOp), GameClientDispatch);
|
||||
|
||||
PktCOp* lpPktCOp = static_cast<PktCOp*>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
unsigned long dwCharID = lpPktCOp->m_dwCharID;
|
||||
RejectOption Reject = lpPktCOp->m_RejectOption;
|
||||
|
||||
unsigned short usError = 0;
|
||||
|
||||
// <20>ź<EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (false == lpCharacter->ControlOption(Reject, false))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:0x%08x ij<><C4B3><EFBFBD><EFBFBD> <20>ź<EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.", dwCharID);
|
||||
return false;
|
||||
}
|
||||
|
||||
return GameClientSendPacket::SendCharControlOption(GameClientDispatch.GetSendStream(), dwCharID, Reject);
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>dzڿ<C7B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool GameClientParsePacket::ParseCharAuthorizePanel(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktAP), GameClientDispatch);
|
||||
|
||||
PktAP* lpPktAP = static_cast<PktAP *>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
unsigned long dwAffectedID = lpPktAP->m_dwAffectedID;
|
||||
unsigned long dwCasterID = lpPktAP->m_dwCasterID;
|
||||
unsigned char cCmd = lpPktAP->m_cCmd;
|
||||
|
||||
switch (cCmd)
|
||||
{
|
||||
case PktAP::AP_RESURRECTION:
|
||||
{
|
||||
if (0 == lpCharacter->GetStatus().m_nNowHP)
|
||||
{
|
||||
if (SERVER_ID::ZONE3 == CServerSetup::GetInstance().GetServerZone())
|
||||
{
|
||||
CCreatureManager::GetInstance().PopRespawnQueue(lpCharacter);
|
||||
}
|
||||
|
||||
if (false == lpCharacter->Respawn(CCharRespawnMgr::RST_RESURRECTION, lpCharacter->GetCurrentPos()))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:0x%08x ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD>.", dwAffectedID);
|
||||
}
|
||||
|
||||
if (0 != lpCharacter->GetPID())
|
||||
{
|
||||
// <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD>.
|
||||
GameClientSendPacket::SendCharDeadToParty(lpCharacter,
|
||||
CCreatureManager::GetInstance().GetCharacter(dwCasterID), PktDeadInfo::RESURRECT);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
case PktAP::AP_RECALL:
|
||||
{
|
||||
CCharacter* lpCaster = CCreatureManager::GetInstance().GetCharacter(dwCasterID);
|
||||
if (NULL == lpCaster)
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.", dwCasterID);
|
||||
break;
|
||||
}
|
||||
|
||||
const Position& Pos = lpCaster->GetCastingPos();
|
||||
lpCharacter->MoveTo(Pos, false);
|
||||
|
||||
// edith 2009.03.07 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POS DestPos;
|
||||
DestPos.fPointX = Pos.m_fPointX;
|
||||
DestPos.fPointY = Pos.m_fPointY+0.3f;
|
||||
DestPos.fPointZ = Pos.m_fPointZ;
|
||||
|
||||
return GameClientSendPacket::SendCharBindPosition(*lpCharacter,
|
||||
dwCasterID, PktBP::BP_RECALL, DestPos, CServerSetup::GetInstance().GetServerZone(), 0);
|
||||
|
||||
} break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>嵵) <20><><EFBFBD><EFBFBD> <20><>û
|
||||
bool GameClientParsePacket::ParseCharFameInfo(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktFI), GameClientDispatch);
|
||||
|
||||
PktFI* lpPktFI = static_cast<PktFI *>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
unsigned long dwCharID = lpPktFI->m_dwCharID;
|
||||
|
||||
return GameClientSendPacket::SendCharFameInfo(GameClientDispatch.GetSendStream(),
|
||||
lpCharacter, "", "", 0, 0, PktFIAck::FAME_INFO, PktBase::NO_SERVER_ERR);
|
||||
}
|
||||
|
||||
|
||||
// <20><>ŷ <20><><EFBFBD><EFBFBD>
|
||||
bool GameClientParsePacket::ParseCharRankingInfo(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktRankingInfo), GameClientDispatch);
|
||||
|
||||
PktRankingInfo* lpRankingInfo = static_cast<PktRankingInfo *>(lpPktBase);
|
||||
CCharacter* lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
unsigned long dwCharID = lpRankingInfo->m_dwCharID;
|
||||
unsigned char cClass = lpRankingInfo->m_cClass;
|
||||
unsigned char cPage = lpRankingInfo->m_cPage;
|
||||
|
||||
return CRankingMgr::GetInstance().SendRankingInfo(dwCharID, cClass, cPage);
|
||||
}
|
||||
|
||||
bool GameClientParsePacket::ParseCastObjectInfo(CGameClientDispatch& GameClientDispatch, PktBase* lpPktBase)
|
||||
{
|
||||
CHECK_FIXED_PACKETSIZE(lpPktBase, sizeof(PktCOInfo), GameClientDispatch);
|
||||
|
||||
PktCOInfo* lpPktCOInfo = static_cast<PktCOInfo*>(lpPktBase);
|
||||
CCharacter*lpCharacter = GameClientDispatch.GetCharacter();
|
||||
|
||||
CHECK_CHARACTER_PTR(lpCharacter, GameClientDispatch, lpPktBase->GetCmd());
|
||||
|
||||
if(lpCharacter->GetCID() == lpPktCOInfo->m_dwSenderID)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49><44> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD>.
|
||||
CCell* lpCell = lpCharacter->GetCellPos().m_lpCell;
|
||||
|
||||
if(0 != lpCell)
|
||||
{
|
||||
lpCell->SendCastObjectInfo(lpPktCOInfo->m_dwSenderID,
|
||||
lpPktCOInfo->m_dwReceiverID, lpPktCOInfo->m_sCastObject);
|
||||
}
|
||||
}
|
||||
else if (lpCharacter->IsRideArms() && lpCharacter->GetRideArmsCID() == lpPktCOInfo->m_dwSenderID)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49><44> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD>.
|
||||
CCell* lpCell = lpCharacter->GetCellPos().m_lpCell;
|
||||
|
||||
if(0 != lpCell)
|
||||
{
|
||||
lpCell->SendCastObjectInfo(lpPktCOInfo->m_dwSenderID,
|
||||
lpPktCOInfo->m_dwReceiverID, lpPktCOInfo->m_sCastObject);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user