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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,147 @@
#include "stdafx.h"
#include "ParseAuthServer.h"
#include <Network/Packet/PacketStruct/ClientToAuthServer.h>
#include <Network/Packet/PacketStruct/UnifiedCharPacket.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleAuthAccount(PktBase* lpPktBase, unsigned long& UserID_Out,
unsigned char& cAgentServerType_Out, unsigned char& cFirstLogin_Out)
{
PktAUAck* lpPktAUAck = static_cast<PktAUAck*>(lpPktBase);
UserID_Out = lpPktAUAck->m_dwUserID;
cAgentServerType_Out = lpPktAUAck->m_cAgentServerType;
cFirstLogin_Out = lpPktAUAck->m_cFirstLogin;
return lpPktAUAck->GetError();
}
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long ParsePacket::HandleUserLogin(PktBase* lpPktBase, unsigned long *SessionID_Out, unsigned long *UserID_Out,
CHAR_VIEW* CharRecode_Out, sGuildData* CharGuildRecode_Out, unsigned char *cAccountNation,
time_t* currentTime, int* nPlayTime_Out, unsigned short* usAdminLevel_Out,
unsigned char* cBillingType_Out, unsigned char* cBillingUser_Out, unsigned char* cLoginType_Out,
unsigned long* dwTabFlag)
{
PktULiAck* lpPktULiAck = static_cast<PktULiAck*>(lpPktBase);
*SessionID_Out = lpPktULiAck->m_dwSessionID;
*UserID_Out = lpPktULiAck->m_dwUserID;
*currentTime = lpPktULiAck->m_dwCurrentTime;
*nPlayTime_Out = lpPktULiAck->m_nPlayTime;
*usAdminLevel_Out = lpPktULiAck->m_usAdminLevel;
*cBillingType_Out = lpPktULiAck->m_cBillingType;
*cBillingUser_Out = lpPktULiAck->m_cBillingUser;
*cLoginType_Out = lpPktULiAck->m_cLoginType;
*dwTabFlag = lpPktULiAck->m_dwTabFlag;
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
*cAccountNation = lpPktULiAck->m_cAccountNation;
memcpy(CharRecode_Out, lpPktULiAck->m_CharView, sizeof(CHAR_VIEW) * PktULiAck::MAX_CHAR_VIEW);
memcpy(CharGuildRecode_Out, lpPktULiAck->m_GuildData, sizeof(sGuildData) * PktULiAck::MAX_CHAR_VIEW);
return lpPktULiAck->GetError();
}
unsigned long ParsePacket::HandleCharCreate(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned long *SlotNum_Out, CHAR_VIEW* lpCharView_Out)
{
PktCCAck* lpPktCCAck = static_cast<PktCCAck*>(lpPktBase);
*CharID_Out = lpPktCCAck->m_dwCharID;
*SlotNum_Out = lpPktCCAck->m_dwSlotNum;
memcpy(lpCharView_Out, &(lpPktCCAck->m_CharView), sizeof(CHAR_VIEW));
return lpPktCCAck->GetError();
}
unsigned long ParsePacket::HandleCharSelect(PktBase* lpPktBase, unsigned char *Zone_Out,
unsigned short *lpChannelNum_Out)
{
PktCSAck* lpPktCSAck = static_cast<PktCSAck*>(lpPktBase);
*Zone_Out = lpPktCSAck->m_cZone;
memcpy(lpChannelNum_Out, lpPktCSAck->m_wChannelNum, sizeof(unsigned short) * PktCSAck::MAX_CHANNEL_NUM);
return lpPktCSAck->GetError();
}
unsigned long ParsePacket::HandleCharDelete(PktBase* lpPktBase,
unsigned long *UserID_Out, unsigned long *SlotNum_Out)
{
PktCDAck* lpPktCDAck = static_cast<PktCDAck*>(lpPktBase);
*UserID_Out = lpPktCDAck->m_dwUserID;
*SlotNum_Out = lpPktCDAck->m_dwSlotNum;
return lpPktCDAck->GetError();
}
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long ParsePacket::HandleSelectAccountNation(PktBase* lpPktBase, unsigned long *UserID_Out,
unsigned char *cType, unsigned char *cAccountNation_Out)
{
PktSelectAccountNation* lpPktSANAck = static_cast<PktSelectAccountNation*>(lpPktBase);
*UserID_Out = lpPktSANAck->m_dwUserID;
*cType = lpPktSANAck->m_cType;
*cAccountNation_Out = lpPktSANAck->m_cAccountNation;
return lpPktSANAck->GetError();
}
// WORK_LIST 2.3 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleNationChangeResult(PktBase* lpPktBase, unsigned long *UserID_Out,
unsigned long* aryGID_Out, unsigned long* aryFame_Out)
{
PktNationChangeResult* lpPktNCAck = static_cast<PktNationChangeResult*>(lpPktBase);
*UserID_Out = lpPktNCAck->m_dwUserID;
::memcpy(aryGID_Out, lpPktNCAck->m_dwGID, sizeof(unsigned long) * PktNationChangeResult::MAX_CHAR_VIEW);
::memcpy(aryFame_Out, lpPktNCAck->m_dwFame, sizeof(unsigned long) * PktNationChangeResult::MAX_CHAR_VIEW);
return lpPktNCAck->GetError();
}
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleUnifiedCharInfo(PktBase* lpPktBase,
unsigned char& cRestrictedPart1ToPart2Level,
unsigned char& cRemainCharTransferCount,
USER_INFO& userInfo,
UnifiedStoreInfo** lppUnifiedStoreInfo,
unsigned long& dwStoreInfoNum_Out,
UnifiedCharData** lppUnifiedCharData,
unsigned long& dwCharDataNum_Out)
{
PktUnifiedCharInfo* lpPktUnifiedCharInfo =
static_cast<PktUnifiedCharInfo*>(lpPktBase);
userInfo = lpPktUnifiedCharInfo->userInfo;
cRestrictedPart1ToPart2Level = lpPktUnifiedCharInfo->cRestrictedPart1ToPart2Level;
cRemainCharTransferCount = lpPktUnifiedCharInfo->cRemainCharTransferCount;
*lppUnifiedStoreInfo = lpPktUnifiedCharInfo->unifiedStoreInfo;
dwStoreInfoNum_Out = lpPktUnifiedCharInfo->cStoreInfoNum;
*lppUnifiedCharData = lpPktUnifiedCharInfo->unifiedCharData;
dwCharDataNum_Out = lpPktUnifiedCharInfo->cCharDataNum;
return lpPktBase->GetError();
}
// <20><><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20>ڵ尪<DAB5><E5B0AA> <20>޴´<DEB4>.
unsigned long ParsePacket::HandleUnifiedCharSelectAck(PktBase* lpPktBase)
{
return lpPktBase->GetError();
}

View File

@@ -0,0 +1,44 @@
#ifndef _PARSE_AUTH_SERVER_PACKET_H_
#define _PARSE_AUTH_SERVER_PACKET_H_
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktBase;
#include <ctime>
#include <DB/DBDefine.h>
namespace ParsePacket
{
// AuthServer
unsigned long HandleAuthAccount(PktBase* lpPktBase, unsigned long& UserID_Out,
unsigned char& cAgentServerType_Out, unsigned char& cFirstLogin_Out);
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long HandleUserLogin(PktBase* lpPktBase, unsigned long *SessionID_Out, unsigned long *UserID_Out, CHAR_VIEW* CharRecode_Out,
sGuildData* CharGuildRecode_Out, unsigned char* cAccountNation, time_t* currentTime, int* nPlayTime_Out,
unsigned short* usAdminLevel_Out, unsigned char* cBillingType_Out, unsigned char* cBillingUser_Out, unsigned char* cLoginType_Out,
unsigned long* dwTabFlag);
unsigned long HandleCharSelect(PktBase* lpPktBase, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out);
unsigned long HandleCharCreate(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *SlotNum_Out, CHAR_VIEW* lpCharView_Out);
unsigned long HandleCharDelete(PktBase* lpPktBase, unsigned long *UserID_Out, unsigned long *SlotNum_Out);
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long HandleSelectAccountNation(PktBase* lpPktBase, unsigned long *UserID_Out, unsigned char *cType, unsigned char *cAccountNation_Out);
// WORK_LIST 2.3 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleNationChangeResult(PktBase* lpPktBase, unsigned long *UserID_Out, unsigned long* aryGID_Out, unsigned long* aryFame_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleUnifiedCharInfo(PktBase* lpPktBase,
unsigned char& cRestrictedPart1ToPart2Level, unsigned char& cRemainCharTransferCount,
USER_INFO& userInfo,
UnifiedStoreInfo** lppUnifiedStoreInfo, unsigned long& dwStoreInfoNum_Out,
UnifiedCharData** lppUnifiedCharData, unsigned long& dwCharDataNum_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack - <20><><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20>ڵ尪<DAB5><E5B0AA> <20>޴´<DEB4>.
unsigned long HandleUnifiedCharSelectAck(PktBase* lpPktBase);
};
#endif

View File

@@ -0,0 +1,63 @@
#include "stdafx.h"
#include "ParseBGServer.h"
#include <windows.h>
#include <Network/Packet/PacketStruct/BGServerPacket.h>
#include "GMMemory.h"
// <20><> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>, Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharBGServerMapList(PktBase* lpPktBase, bool* bAll, unsigned char* cMapInfoNodeNum,
BGServerMapInfoNode* lpMapInfo)
{
LPPktBGServerMapList lpPktBGServerMapList = (LPPktBGServerMapList)lpPktBase;
*bAll = lpPktBGServerMapList->m_bAll;
*cMapInfoNodeNum = lpPktBGServerMapList->m_cMapInfoNodeNum;
BGServerMapInfoNode* lpMapInfoNode = reinterpret_cast<BGServerMapInfoNode*>(lpPktBGServerMapList + 1);
CopyMemory(lpMapInfo, lpMapInfoNode, sizeof(BGServerMapInfoNode) * lpPktBGServerMapList->m_cMapInfoNodeNum);
return lpPktBGServerMapList->GetError();
}
unsigned long ParsePacket::HandleCharBGServerResultList(PktBase* lpPktBase, bool* bAll, unsigned char* cResultInfoNodeNum,
BGServerResultInfoNode* lpResultInfo)
{
LPPktBGServerResultList lpPktBGServerResultList = (LPPktBGServerResultList)lpPktBase;
*bAll = lpPktBGServerResultList->m_bAll;
*cResultInfoNodeNum = lpPktBGServerResultList->m_cResultInfoNodeNum;
BGServerResultInfoNode* lpResultInfoNode = reinterpret_cast<BGServerResultInfoNode*>(lpPktBGServerResultList + 1);
CopyMemory(lpResultInfo, lpResultInfoNode, sizeof(BGServerResultInfoNode) * lpPktBGServerResultList->m_cResultInfoNodeNum);
return lpPktBGServerResultList->GetError();
}
unsigned long ParsePacket::HandleCharBGServerMoveZone(PktBase* lpPktBase, unsigned char* cZone, unsigned char* cMoveType)
{
LPPktBGServerMoveZone lpPktBGServerMoveZone = (LPPktBGServerMoveZone)lpPktBase;
*cZone = lpPktBGServerMoveZone->m_cZone;
*cMoveType = lpPktBGServerMoveZone->m_cMoveType;
return lpPktBGServerMoveZone->GetError();
}
unsigned long ParsePacket::HandleCharBGServerMileageChange(PktBase* lpPktBase, unsigned long* dwCID,
unsigned char* cGroup, unsigned char* cCmd,
unsigned long* dwGold, unsigned long* dwMileage)
{
PktBGServerMileageChange* lpPktBGServerMileageChange = static_cast<PktBGServerMileageChange *>(lpPktBase);
*dwCID = lpPktBGServerMileageChange->m_dwCID;
*cGroup = lpPktBGServerMileageChange->m_cGroup;
*cCmd = lpPktBGServerMileageChange->m_cCmd;
*dwGold = lpPktBGServerMileageChange->m_dwGold;
*dwMileage = lpPktBGServerMileageChange->m_dwMileage;
return lpPktBGServerMileageChange->GetError();
}

View File

@@ -0,0 +1,20 @@
#ifndef _GAMA_CLIENT_PARSE_BATTLEGROUND_SERVER_PACKET_H_
#define _GAMA_CLIENT_PARSE_BATTLEGROUND_SERVER_PACKET_H_
#include <DB/DBDefine.h>
#include <Network/Packet/PacketStruct/BGServerPacket.h>
// forward decl.
struct PktBase;
namespace ParsePacket
{
// BATTLEGROUND SERVER
unsigned long HandleCharBGServerMapList(PktBase* lpPktBase, bool* bAll, unsigned char* cMapInfoNodeNum, BGServerMapInfoNode* lpMapInfo);
unsigned long HandleCharBGServerResultList(PktBase* lpPktBase, bool* bAll, unsigned char* cResultInfoNodeNum, BGServerResultInfoNode* lpResultInfo);
unsigned long HandleCharBGServerMoveZone(PktBase* lpPktBase, unsigned char* cZone, unsigned char* cMoveType);
unsigned long HandleCharBGServerMileageChange(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cGroup, unsigned char* cCmd, unsigned long* dwGold, unsigned long* dwMileage);
};
#endif

View File

@@ -0,0 +1,433 @@
#include "stdafx.h"
#include "ParseCastle.h"
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharCreateCastle(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNation, unsigned char* cZone,
unsigned char* cNameID, unsigned char* cUpgradeStep, unsigned char* cInvincibleCount,
unsigned short* wTotalSiegeCount, unsigned long* dwTotalTaxMoney, float* fPosX,
float* fPosY, float* fPosZ, unsigned short* wItemID, unsigned char* cItemNum,
CastleRight* castleRight, CastleTaxInfo* castleTaxInfo)
{
LPPktCreateCastle lpPktCreateCastle = (LPPktCreateCastle)lpPktBase;
*dwCastleID = lpPktCreateCastle->m_dwCastleID;
*cNation = lpPktCreateCastle->m_cNation;
*cZone = lpPktCreateCastle->m_cZone;
*cNameID = lpPktCreateCastle->m_cNameID;
*cUpgradeStep = lpPktCreateCastle->m_cUpgradeStep;
*cInvincibleCount = lpPktCreateCastle->m_cInvincibleCount;
*wTotalSiegeCount = lpPktCreateCastle->m_wTotalSiegeCount;
*dwTotalTaxMoney = lpPktCreateCastle->m_dwTotalTaxMoney;
*fPosX = lpPktCreateCastle->m_fPosX;
*fPosY = lpPktCreateCastle->m_fPosY;
*fPosZ = lpPktCreateCastle->m_fPosZ;
*wItemID = lpPktCreateCastle->m_wItemID;
*castleRight = lpPktCreateCastle->m_CastleRight;
for (int i=0; i<Castle::EMBLEM_UPGRADE_JEWEL_POS_NUM; ++i)
{
cItemNum[ i ] = lpPktCreateCastle->m_cItemNum[ i ] ;
}
for (int i=0; i<Castle::MAX_TAX_TYPE; ++i)
{
castleTaxInfo[ i ] = lpPktCreateCastle->m_CastleTax[ i ];
}
return lpPktCreateCastle->GetError();
}
unsigned long ParsePacket::HandleCharCreateCamp(PktBase* lpPktBase, unsigned long* dwActorCID, unsigned long* dwCID, unsigned long* dwCampID,
unsigned long* dwGID, unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState,
unsigned char* cSubState, unsigned char* cUpgradeStep, unsigned char* cNation, CampRight* campRight,
float* fPointX, float* fPointY, float* fPointZ, unsigned char* cMaterial)
{
LPPktCreateCamp lpPktCreateCamp = (LPPktCreateCamp)lpPktBase;
*dwActorCID = lpPktCreateCamp->m_dwActorCID;
*dwCID = lpPktCreateCamp->m_dwCID;
*dwCampID = lpPktCreateCamp->m_dwCampID;
*dwGID = lpPktCreateCamp->m_dwGID;
*dwHP = lpPktCreateCamp->m_dwHP;
*wObjectType = lpPktCreateCamp->m_wObjectType;
*cState = lpPktCreateCamp->m_cState;
*cSubState = lpPktCreateCamp->m_cSubState;
*cUpgradeStep = lpPktCreateCamp->m_cUpgradeStep;
*cNation = lpPktCreateCamp->m_cNation;
*campRight = lpPktCreateCamp->m_CampRight;
*fPointX = lpPktCreateCamp->m_Pos.fPointX;
*fPointY = lpPktCreateCamp->m_Pos.fPointY;
*fPointZ = lpPktCreateCamp->m_Pos.fPointZ;
*cMaterial = lpPktCreateCamp->m_cMaterial;
return lpPktCreateCamp->GetError();
}
unsigned long ParsePacket::HandleCharCreateSiegeArms(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID, unsigned char* cNation,
unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState, unsigned char* cUpgradeStep,
float* fPointX, float* fPointY, float* fPointZ)
{
LPPktCreateSiegeArms lpPktCreateSiegeArms = (LPPktCreateSiegeArms)lpPktBase;
*dwCID = lpPktCreateSiegeArms->m_dwCID;
*dwOwnerID = lpPktCreateSiegeArms->m_dwOwnerID;
*cNation = lpPktCreateSiegeArms->m_cNation;
*dwHP = lpPktCreateSiegeArms->m_dwHP;
*wObjectType = lpPktCreateSiegeArms->m_wObjectType;
*cState = lpPktCreateSiegeArms->m_cState;
*cUpgradeStep = lpPktCreateSiegeArms->m_cUpgradeStep;
*fPointX = lpPktCreateSiegeArms->m_Pos.fPointX;
*fPointY = lpPktCreateSiegeArms->m_Pos.fPointY;
*fPointZ = lpPktCreateSiegeArms->m_Pos.fPointZ;
return lpPktCreateSiegeArms->GetError();
}
unsigned long ParsePacket::HandleCharCastleCmd(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned long* dwCastleObjectID, unsigned long* dwValue1,
unsigned long* dwValue2, unsigned char* cState, unsigned char* cSubCmd)
{
LPPktCastleCmd lpPktCastleCmd = (LPPktCastleCmd)lpPktBase;
*dwCastleID = lpPktCastleCmd->m_dwCastleID;
*dwCastleObjectID = lpPktCastleCmd->m_dwCastleObjectID;
*dwValue1 = lpPktCastleCmd->m_dwValue1;
*dwValue2 = lpPktCastleCmd->m_dwValue2;
*cState = lpPktCastleCmd->m_cState;
*cSubCmd = lpPktCastleCmd->m_cSubCmd;
return lpPktCastleCmd->GetError();
}
unsigned long ParsePacket::HandleCharCampCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID,
unsigned char* cState, unsigned long* dwValue1, unsigned long* dwValue2,
unsigned char* cSubCmd)
{
LPPktCampCmd lpPktCampCmd = (LPPktCampCmd)lpPktBase;
*dwCID = lpPktCampCmd->m_dwCID;
*dwCampID = lpPktCampCmd->m_dwCampID;
*cState = lpPktCampCmd->m_cState;
*dwValue1 = lpPktCampCmd->m_dwValue1;
*dwValue2 = lpPktCampCmd->m_dwValue2;
*cSubCmd = lpPktCampCmd->m_cSubCmd;
return lpPktCampCmd->GetError();
}
unsigned long ParsePacket::HandleCharSiegeArmsCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwArmsID,
unsigned long* dwValue, unsigned char* cState, unsigned char* cSubCmd)
{
LPPktSiegeArmsCmd lpPktSACmd = (LPPktSiegeArmsCmd)lpPktBase;
*dwCID = lpPktSACmd->m_dwCID;
*dwArmsID = lpPktSACmd->m_dwArmsID;
*dwValue = lpPktSACmd->m_dwValue;
*cState = lpPktSACmd->m_cState;
*cSubCmd = lpPktSACmd->m_cSubCmd;
return lpPktSACmd->GetError();
}
unsigned long ParsePacket::HandleCharCastleRight(PktBase* lpPktBase, unsigned long* dwCastleID, CastleRight* castleRight)
{
LPPktCastleRight lpPktCR = (LPPktCastleRight)lpPktBase;
*dwCastleID = lpPktCR->m_dwCastleID;
::memcpy(castleRight, &lpPktCR->m_CastleRight, sizeof(CastleRight));
return lpPktCR->GetError();
}
unsigned long ParsePacket::HandleCharCampRight(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, CampRight* campRight)
{
LPPktCampRight lpPktCR = (LPPktCampRight)lpPktBase;
*dwCampID = lpPktCR->m_dwCampID;
*dwCID = lpPktCR->m_dwCID ;
::memcpy(campRight, &lpPktCR->m_CampRight, sizeof(CampRight));
return lpPktCR->GetError();
}
unsigned long ParsePacket::HandleCharSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID,
unsigned long* dwGID, unsigned short* wObjectType, unsigned long* dwNowHP,
unsigned long* dwMaxHP, unsigned char* cState, unsigned char* cSubState,
unsigned char* cUpgradeStep, unsigned char* cUpgradeType, float* fDefaultDir,
unsigned long* ppdwRidersID, CNetworkPos* netPos)
{
// CASTLE_TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20><>Ŷ <20>ڵ鷯 <20>Լ<EFBFBD>
LPPktSiegeBroadCast lpPktSBC = (LPPktSiegeBroadCast)lpPktBase;
*dwCID = lpPktSBC->m_dwCID;
*dwOwnerID = lpPktSBC->m_dwOwnerID;
*dwGID = lpPktSBC->m_dwGID;
*wObjectType = lpPktSBC->m_wObjectType;
*dwNowHP = lpPktSBC->m_dwNowHP;
*dwMaxHP = lpPktSBC->m_dwMaxHP;
*cState = lpPktSBC->m_cState;
*cSubState = lpPktSBC->m_cSubState;
*cUpgradeStep = lpPktSBC->m_cUpgradeStep;
*cUpgradeType = lpPktSBC->m_cUpgradeType;
*fDefaultDir = lpPktSBC->m_fDefaultDir;
for (int i=0; i<Siege::AIRSHIP_RIDER_NUM; ++i)
{
ppdwRidersID[i] = lpPktSBC->m_dwRiderID[i];
}
*netPos = lpPktSBC->m_NetworkPos;
return lpPktSBC->GetError();
}
unsigned long ParsePacket::HandleCharSiegeBroadCast2nd(PktBase* lpPktBase, unsigned long* dwObjectCount,
PktSiegeBroadCast* siegeObjectArray)
{
// CASTLE_TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20><>Ŷ <20>ڵ鷯 <20>Լ<EFBFBD>
LPPktSiegeBroadCast2nd lpPktSBC = (LPPktSiegeBroadCast2nd)lpPktBase;
int nDataLen = lpPktSBC->GetLen() - sizeof(PktSiegeBroadCast2nd);
int nParseLen = 0;
int nIndex = 0;
if(0 < nDataLen)
{
PktSiegeBroadCast* szData = reinterpret_cast<PktSiegeBroadCast*>(lpPktSBC + 1);
while (nParseLen < nDataLen)
{
siegeObjectArray[nIndex] = *szData;
nParseLen += sizeof(PktSiegeBroadCast);
++szData;
++nIndex;
}
}
*dwObjectCount = static_cast<unsigned long>(nIndex);
return lpPktSBC->GetError();
}
unsigned long ParsePacket::HandleCharNewSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cBroadCastType)
{
LPPktNewSiegeBroadCast lpPktNSBC = (LPPktNewSiegeBroadCast)lpPktBase;
*dwCID = lpPktNSBC->m_dwCID;
*cBroadCastType = lpPktNSBC->m_cType;
return lpPktNSBC->GetError();
}
unsigned long ParsePacket::HandleCharGameTimeInfo(PktBase* lpPktBase, GuildTimeInfo* lpGuildTimeInfo, RealmTimeInfo* lpRealmTimeInfo,
SiegeTimeInfo* lpSiegeTimeInfo, EnterTimeInfo* lpEnterTimeInfo, unsigned char* cType, unsigned char* cCastleNum,
CastleSiegeInfo* lpCastleSiegeInfo)
{
LPPktGameTimeInfo lpPktGTI = (LPPktGameTimeInfo)lpPktBase;
CastleSiegeInfo* lpCastleInfo = (CastleSiegeInfo*)(lpPktGTI + 1);
::memcpy(lpGuildTimeInfo, &lpPktGTI->m_GuildTimeInfo, sizeof(GuildTimeInfo));
::memcpy(lpRealmTimeInfo, &lpPktGTI->m_RealmTimeInfo, sizeof(GuildTimeInfo));
::memcpy(lpSiegeTimeInfo, &lpPktGTI->m_SiegeTimeInfo, sizeof(GuildTimeInfo));
::memcpy(lpEnterTimeInfo, &lpPktGTI->m_EnterTimeInfo, sizeof(GuildTimeInfo));
*cType = lpPktGTI->m_cType;
*cCastleNum = lpPktGTI->m_cCastleNum;
for (int i=0; i<lpPktGTI->m_cCastleNum; ++i)
{
::memcpy(&lpCastleSiegeInfo[i], lpCastleInfo, sizeof(CastleSiegeInfo));
++lpCastleInfo;
}
return lpPktGTI->GetError();
}
unsigned long ParsePacket::HandleCharStealthInfo(PktBase* lpPktBase, bool* bUseStealth)
{
LPPktStealthInfo lpPktSI = (LPPktStealthInfo)lpPktBase;
*bUseStealth = lpPktSI->m_bUseStealth;
return lpPktSI->GetError();
}
unsigned long ParsePacket::HandleCharCastleSiegeCount(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cSiegeCount,
unsigned char* cInvincibleCount, unsigned short* wTotalSiegeCount)
{
LPPktCastleSiegeCount lpPktCSC = (LPPktCastleSiegeCount)lpPktBase;
*dwCastleID = lpPktCSC->m_dwCastleID;
*cSiegeCount = lpPktCSC->m_cSiegeCount;
*cInvincibleCount = lpPktCSC->m_cInvincibleCount;
*wTotalSiegeCount = lpPktCSC->m_wTotalSiegeCount;
return lpPktCSC->GetError();
}
unsigned long ParsePacket::HandleCharCastleTaxMove(PktBase* lpPktBase, unsigned long* dwCastleID,
unsigned long* dwMoveTempMoney, unsigned long* dwResultTaxMoney)
{
LPPktCastleTaxMove lpPktCTM = (LPPktCastleTaxMove)lpPktBase;
*dwCastleID = lpPktCTM->m_dwCastleID;
for (int i=0; i<Castle::MAX_TAX_TYPE; ++i)
{
dwMoveTempMoney[ i ] = lpPktCTM->m_dwMoveTempMoney[ i ];
dwResultTaxMoney[ i ] = lpPktCTM->m_dwResultTaxMoney[ i ];
}
return lpPktCTM->GetError();
}
unsigned long ParsePacket::HandleCharCampMessage(PktBase* lpPktBase, char* szGuildName, char* szMasterName, char* szPCName, unsigned char* cMsgCmd,
unsigned long* dwCampID, unsigned char* cZone, unsigned char* cRemainTime, unsigned char* cNation,
PktCampMessage::sRight* Right, bool* bNotify, int* nValue1, int* nValue2, unsigned char* cTimeChk)
{
LPPktCampMessage lpPktCM = (LPPktCampMessage)lpPktBase;
::strcpy(szGuildName, lpPktCM->m_szGuildName);
::strcpy(szMasterName, lpPktCM->m_szMasterName);
::strcpy(szPCName, lpPktCM->m_szPCName);
*cMsgCmd = lpPktCM->m_cMsgCmd;
*dwCampID = lpPktCM->m_dwCampID;
*cZone = lpPktCM->m_cZone;
*cRemainTime = lpPktCM->m_cRemainTime;
*cNation = lpPktCM->m_cNation;
*Right = lpPktCM->m_Right;
*bNotify = lpPktCM->m_bNotify;
*nValue1 = lpPktCM->m_nValue1;
*nValue2 = lpPktCM->m_nValue2;
*cTimeChk = lpPktCM->m_cTimeChk;
return lpPktCM->GetError();
}
// ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long ParsePacket::HandleCharMiningCampMineralInfo(PktBase* lpPktBase, unsigned long* dwCampID, unsigned char* cState, unsigned long* dwRemainTime,
unsigned char* cMineralType, unsigned char* cNum, CampMineralInfo* lpMineralList)
{
LPPktMiningCampMineralInfo lpPktMI = (LPPktMiningCampMineralInfo)lpPktBase;
CampMineralInfo* lpInfo = reinterpret_cast<CampMineralInfo*>(lpPktMI + 1);
*dwCampID = lpPktMI->m_dwCampID;
*cState = lpPktMI->m_cState;
*dwRemainTime = lpPktMI->m_dwRemainTime;
*cMineralType = lpPktMI->m_cMineralType;
*cNum = lpPktMI->m_cNum;
if ( lpMineralList )
{
for (int i=0; i<*cNum; ++i, ++lpMineralList, ++lpInfo)
{
lpMineralList->m_wMineralID = lpInfo->m_wMineralID;
lpMineralList->m_wAmount = lpInfo->m_wAmount;
}
}
return lpPktMI->GetError();
}
// <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharTakeCastleJewel(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCastleID, unsigned char* cSubCmd,
unsigned short* wItemID, unsigned char* cIndex, unsigned char* cNum, Item::ItemPos* pos)
{
LPPktTakeCastleJewel lpPktTCJ = (LPPktTakeCastleJewel)lpPktBase;
*dwCID = lpPktTCJ->m_dwCID;
*dwCastleID = lpPktTCJ->m_dwCastleID;
*cSubCmd = lpPktTCJ->m_cSubCmd;
*wItemID = lpPktTCJ->m_wItemID;
*cIndex = lpPktTCJ->m_cIndex;
*cNum = lpPktTCJ->m_cNum;
*pos = lpPktTCJ->m_Pos;
return lpPktTCJ->GetError();
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharTakeMaterial(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, unsigned char* cSubCmd,
unsigned char* cNum, Item::ItemPos* pos)
{
LPPktTakeMaterial lpPktTM = (LPPktTakeMaterial)lpPktBase;
*dwCID = lpPktTM->m_dwCID;
*dwCampID = lpPktTM->m_dwCampID;
*cSubCmd = lpPktTM->m_cSubCmd;
*cNum = lpPktTM->m_cNum;
*pos = lpPktTM->m_Pos;
return lpPktTM->GetError();
}
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long ParsePacket::HandleCharCastleMineralInfo(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNum, CastleMineral* lpMineralList)
{
LPPktCastleMineralInfo lpPktCMI = (LPPktCastleMineralInfo)lpPktBase;
CastleMineral* lpInfo = reinterpret_cast<CastleMineral*>(lpPktCMI + 1);
*dwCastleID = lpPktCMI->m_dwCastleID;
*cNum = lpPktCMI->m_cNum;
if ( lpMineralList )
{
for (int i=0; i<*cNum; ++i, ++lpMineralList, ++lpInfo)
{
lpMineralList->m_wMineralID = lpInfo->m_wMineralID;
lpMineralList->m_wAmount = lpInfo->m_wAmount;
}
}
return lpPktCMI->GetError();
}
unsigned long ParsePacket::HandleCharWarOnOff(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cFlag, unsigned char* cType)
{
PktWarOnOff* lpPktWarOnOff = (PktWarOnOff*)(lpPktBase);
*dwCID = lpPktWarOnOff->m_dwCID;
*cFlag = lpPktWarOnOff->m_cFlag;
*cType = lpPktWarOnOff->m_cType;
return lpPktWarOnOff->GetError();
}
unsigned long ParsePacket::HandleCharRealmPoint(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cRealmPoint, unsigned char* cType)
{
PktRealmPoint* lpPktRealmPoint = (PktRealmPoint*)(lpPktBase);
*dwCID = lpPktRealmPoint->m_dwCID;
*cRealmPoint = lpPktRealmPoint->m_cRealmPoint;
*cType = lpPktRealmPoint->m_cType;
return lpPktRealmPoint->GetError();
}
unsigned long ParsePacket::HandleCharRealmStatueDisplayInfo(PktBase* lpPktBase, unsigned short* wSubCmd, unsigned long* dwRealmStatueNum,
StatueDisplayInfo* lpDisplayInfo)
{
LPPktStatueCmd lpPktStatueCmd = (LPPktStatueCmd)lpPktBase;
StatueDisplayInfo* lpInfo = reinterpret_cast<StatueDisplayInfo*>(lpPktStatueCmd + 1);
*wSubCmd = lpPktStatueCmd->m_wSubCmd;
*dwRealmStatueNum = lpPktStatueCmd->m_dwValue;
if ( lpDisplayInfo )
{
for (unsigned long i=0; i<*dwRealmStatueNum; ++i, ++lpDisplayInfo, ++lpInfo)
{
*lpDisplayInfo = *lpInfo;
}
}
return lpPktStatueCmd->GetError();
}

View File

@@ -0,0 +1,104 @@
#ifndef _GAMA_CLIENT_PARSE_CASTLE_PACKET_H_
#define _GAMA_CLIENT_PARSE_CASTLE_PACKET_H_
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include <Network/Packet/PacketStruct/CharMovePacket.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktBase;
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCreateCastle(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNation, unsigned char* cZone,
unsigned char* cNameID, unsigned char* cUpgradeStep, unsigned char* cInvincibleCount,
unsigned short* wTotalSiegeCount, unsigned long* dwTotalTaxMoney, float* fPosX,
float* fPosY, float* fPosZ, unsigned short* wItemID, unsigned char* cItemNum,
CastleRight* castleRight, CastleTaxInfo* castleTaxInfo);
unsigned long HandleCharCreateCamp(PktBase* lpPktBase, unsigned long* dwActorCID, unsigned long* dwCID, unsigned long* dwCampID,
unsigned long* dwGID, unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState,
unsigned char* cSubState, unsigned char* cUpgradeStep, unsigned char* cNation, CampRight* campRight,
float* fPointX, float* fPointY, float* fPointZ, unsigned char* cMaterial);
unsigned long HandleCharCreateSiegeArms(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID, unsigned char* cNation,
unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState, unsigned char* cUpgradeStep,
float* fPointX, float* fPointY, float* fPointZ);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCastleCmd(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned long* dwCastleObjectID, unsigned long* dwValue1,
unsigned long* dwValue2, unsigned char* cState, unsigned char* cSubCmd);
unsigned long HandleCharCampCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, unsigned char* cState,
unsigned long* dwValue1, unsigned long* dwValue2, unsigned char* cSubCmd);
unsigned long HandleCharSiegeArmsCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwArmsID,
unsigned long* dwValue, unsigned char* cState, unsigned char* cSubCmd);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCastleRight(PktBase* lpPktBase, unsigned long* dwCastleID, CastleRight* castleRight);
unsigned long HandleCharCampRight(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, CampRight* campRight);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20><>Ŷ
unsigned long HandleCharSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID, unsigned long* dwGID,
unsigned short* wObjectType, unsigned long* dwNowHP, unsigned long* dwMaxHP,
unsigned char* cState, unsigned char* cSubState, unsigned char* cUpgradeStep,
unsigned char* cUpgradeType, float* fDefaultDir, unsigned long* ppdwRidersID, CNetworkPos* netPos);
unsigned long HandleCharSiegeBroadCast2nd(PktBase* lpPktBase, unsigned long* dwObjectCount, PktSiegeBroadCast* siegeObjectArray);
unsigned long HandleCharNewSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cBroadCastType);
// <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><>Ŷ
unsigned long HandleCharGameTimeInfo(PktBase* lpPktBase, GuildTimeInfo* lpGuildTimeInfo, RealmTimeInfo* lpRealmTimeInfo, SiegeTimeInfo* lpSiegeTimeInfo, EnterTimeInfo* lpEnterTimeInfo,
unsigned char* cType, unsigned char* cCastleNum, CastleSiegeInfo* lpCastleSiegeInfo);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EBB0A1> <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharStealthInfo(PktBase* lpPktBase, bool* bUseStealth);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
unsigned long HandleCharCastleSiegeCount(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cSiegeCount,
unsigned char* cInvincibleCount, unsigned short* wTotalSiegeCount);
// <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharCastleTaxMove(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned long* dwMoveTempMoney, unsigned long* dwResultTaxMoney);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD> <20><>Ŷ
unsigned long HandleCharCampMessage(PktBase* lpPktBase, char* szGuildName, char* szMasterName, char* szPCName, unsigned char* cMsgCmd,
unsigned long* dwCampID, unsigned char* cZone, unsigned char* cRemainTime, unsigned char* cNation,
PktCampMessage::sRight* Right, bool* bNotify, int* nValue1, int* nValue2, unsigned char* cTimeChk);
// ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharMiningCampMineralInfo(PktBase* lpPktBase, unsigned long* dwCampID, unsigned char* cState, unsigned long* dwRemainTime,
unsigned char* cMineralType, unsigned char* cNum, CampMineralInfo* lpMineralList);
// <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long HandleCharTakeCastleJewel(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCastleID, unsigned char* cSubCmd,
unsigned short* wItemID, unsigned char* cIndex, unsigned char* cNum, Item::ItemPos* pos);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long HandleCharTakeMaterial(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, unsigned char* cSubCmd,
unsigned char* cNum, Item::ItemPos* pos);
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCastleMineralInfo(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNum, CastleMineral* lpMineralList);
// <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, Ż<><C5BB>.
unsigned long HandleCharWarOnOff(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cFlag, unsigned char* cType);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ.
unsigned long HandleCharRealmPoint(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cRealmPoint, unsigned char* cType);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharRealmStatueDisplayInfo(PktBase* lpPktBase, unsigned short* wSubCmd, unsigned long* dwRealmStatueNum,
StatueDisplayInfo* lpDisplayInfo);
};
#endif

View File

@@ -0,0 +1,104 @@
#include "stdafx.h"
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include "ParseCharInfo.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharLevelUp(PktBase* lpPktBase, unsigned long *CharID,
unsigned char *Level, ChState* lpChState)
{
PktLU* lpLUPt = static_cast<PktLU *>(lpPktBase);
*CharID = lpLUPt->m_dwCharID;
*Level = lpLUPt->m_cLevel;
*lpChState = lpLUPt->m_State;
return lpLUPt->GetError();
}
unsigned long ParsePacket::HandleCharLevelUpInfo(PktBase* lpPktBase, unsigned long *CharID, unsigned char *Level)
{
PktLUInfo* lpLUInfoPt = static_cast<PktLUInfo *>(lpPktBase);
*CharID = lpLUInfoPt->m_dwCharID;
*Level = lpLUInfoPt->m_cLevel;
return lpLUInfoPt->GetError();
}
unsigned long ParsePacket::HandleCharIncreasePoint(PktBase* lpPktBase, unsigned long *CharID, ChState* lpChState)
{
PktIPAck* lpIPAckPt = static_cast<PktIPAck *>(lpPktBase);
*CharID = lpIPAckPt->m_dwCharID;
*lpChState = lpIPAckPt->m_State;
return lpIPAckPt->GetError();
}
unsigned long ParsePacket::HandleCharClassUpgrade(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cClassID, unsigned char *cLevel,
ChState* lpState, unsigned long *dwFame)
{
PktCUAck* lpCUAckPt = static_cast<PktCUAck *>(lpPktBase);
*dwCharID = lpCUAckPt->m_dwCharID;
*cClassID = lpCUAckPt->m_cClass;
*cLevel = lpCUAckPt->m_cLevel;
*lpState = lpCUAckPt->m_State;
*dwFame = lpCUAckPt->m_dwFame;
return lpCUAckPt->GetError();
}
unsigned long ParsePacket::HandleCharHPRegen(PktBase* lpPktBase, unsigned long *CharID,
unsigned short *HP, unsigned short *MP)
{
PktHP* lpHPPt = static_cast<PktHP *>(lpPktBase);
*CharID = lpHPPt->m_dwCharID;
*HP = lpHPPt->m_sHP;
*MP = lpHPPt->m_sMP;
return lpHPPt->GetError();
}
unsigned long ParsePacket::HandleCharQuickSlotMove(PktBase* lpPktBase, TakeType* lpTakeType)
{
PktQSM* lpQSMPt = static_cast<PktQSM *>(lpPktBase);
*lpTakeType = lpQSMPt->m_TakeType;
return lpQSMPt->GetError();
}
unsigned long ParsePacket::HandleCharSwitchEQ(PktBase* lpPktBase, unsigned char *Type, unsigned char *Select)
{
PktSwEQ* lpSwHPt = static_cast<PktSwEQ *>(lpPktBase);
*Type = lpSwHPt->m_cType;
*Select = lpSwHPt->m_cSelect;
return lpSwHPt->GetError();
}
unsigned long ParsePacket::HandleCharEliteBonus(PktBase* lpPktBase, char *cEliteBonus)
{
PktEB* lpEBPt = static_cast<PktEB *>(lpPktBase);
*cEliteBonus = lpEBPt->m_cEliteBonus;
return lpEBPt->GetError();
}

View File

@@ -0,0 +1,26 @@
#ifndef _GAMA_CLIENT_PARSE_CHAR_INFO_H_
#define _GAMA_CLIENT_PARSE_CHAR_INFO_H_
#include <Network/Packet/PacketStruct/CharStatusPacketStruct.h>
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
// forward decl.
struct PktBase;
namespace ParsePacket
{
//ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharLevelUp(PktBase* lpPktBase, unsigned long *CharID, unsigned char *Level, LPChState lpChState);
unsigned long HandleCharIncreasePoint(PktBase* lpPktBase, unsigned long *CharID, ChState* lpChState);
unsigned long HandleCharClassUpgrade(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cClassID, unsigned char *cLevel, ChState* lpState, unsigned long *dwFame);
unsigned long HandleCharHPRegen(PktBase* lpPktBase, unsigned long *CharID, unsigned short *HP, unsigned short *MP);
unsigned long HandleCharQuickSlotMove(PktBase* lpPktBase, TakeType* lpTakeType);
unsigned long HandleCharSwitchEQ(PktBase* lpPktBase, unsigned char *Type, unsigned char *Select);
unsigned long HandleCharEliteBonus(PktBase* lpPktBase, char *cEliteBonus);
// TODO : REMOVE UDP Packets
unsigned long HandleCharLevelUpInfo(PktBase* lpPktBase, unsigned long *CharID, unsigned char *Level);
};
#endif

View File

@@ -0,0 +1,520 @@
#include "stdafx.h"
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/FriendPacket.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include <Network/Packet/PacketStruct/PartyPacket.h>
#include "ParseCommunity.h"
#include "GMMemory.h"
//--------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharCreateGuild(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID,
unsigned char *cInclination, char* szGuildName)
{
PktCreateGuild* lpCGPt = static_cast<PktCreateGuild *>(lpPktBase);
*dwCID = lpCGPt->m_dwCID;
*dwGID = lpCGPt->m_dwGID;
*cInclination = lpCGPt->m_cInclination;
strncpy(szGuildName, lpCGPt->m_szGuildName, Guild::MAX_GUILD_NAME_LEN);
return lpCGPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildCmd(PktBase* lpPktBase, unsigned long *dwGID, unsigned long *dwSenderID, unsigned long *dwReferenceID,
char* szGuildName, char* szSenderName, unsigned short *wCmd)
{
PktGuildCmd* lpGCPt = static_cast<PktGuildCmd *>(lpPktBase);
*dwGID = lpGCPt->m_dwGID;
*dwSenderID = lpGCPt->m_dwSenderID;
*dwReferenceID = lpGCPt->m_dwReferenceID;
strncpy(szGuildName, lpGCPt->m_szGuildName, Guild::MAX_GUILD_NAME_LEN);
strncpy(szSenderName, lpGCPt->m_szSenderName, Guild::MAX_MEMBER_NAME_LEN);
*wCmd = lpGCPt->m_wCmd;
return lpGCPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildMark(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwGID,
char* szMark, unsigned long *dwGold)
{
PktGuildMark* lpGMPt = static_cast<PktGuildMark *>(lpPktBase);
*dwCID = lpGMPt->m_dwCID;
*dwGID = lpGMPt->m_dwGID;
::memcpy(szMark, lpGMPt->m_szMark, Guild::MAX_MARK_SIZE);
*dwGold = lpGMPt->m_dwGold;
return lpGMPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildLevel(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cLevel, unsigned long *dwGold)
{
PktGuildLevel* lpGLPt = static_cast<PktGuildLevel *>(lpPktBase);
*dwGID = lpGLPt->m_dwUID;
*cLevel = lpGLPt->m_cLevel;
*dwGold = lpGLPt->m_dwGold;
return lpGLPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildRelation(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID,
unsigned long *dwTargetGID, unsigned long *dwValue, unsigned char *cSubCmd,
char* szGuildName, char* szTempGuildName)
{
PktGuildRelation* lpGRPt = static_cast<PktGuildRelation *>(lpPktBase);
*dwCID = lpGRPt->m_dwCID;
*dwGID = lpGRPt->m_dwGID;
*dwTargetGID = lpGRPt->m_dwTargetGID;
*dwValue = lpGRPt->m_dwValue;
*cSubCmd = lpGRPt->m_cSubCmd;
strncpy(szGuildName, lpGRPt->m_szGuildName, Guild::MAX_GUILD_NAME_LEN);
strncpy(szTempGuildName, lpGRPt->m_szTempGuildName, Guild::MAX_GUILD_NAME_LEN);
return lpGRPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildInclination(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cInclination)
{
PktGuildInclination* lpGIPt = static_cast<PktGuildInclination *>(lpPktBase);
*dwGID = lpGIPt->m_dwUID;
*cInclination = lpGIPt->m_cInclination;
return lpGIPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildList(PktBase* lpPktBase, unsigned long *dwCID,
unsigned char *cSortCmd, unsigned char *cPage,
unsigned char *cSmallNodeNum, GuildSmallInfoNode* lpSmallNode,
unsigned char *cLargeNodeNum, GuildLargeInfoNode* lpLargeNode)
{
PktGuildList* lpGLPt = static_cast<PktGuildList *>(lpPktBase);
*dwCID = lpGLPt->m_dwCID;
*cSortCmd = lpGLPt->m_cSortCmd;
*cPage = lpGLPt->m_cPage;
*cSmallNodeNum = lpGLPt->m_cSmallNodeNum;
*cLargeNodeNum = lpGLPt->m_cLargeNodeNum;
GuildSmallInfoNode* lpRecvSmallNode = reinterpret_cast<GuildSmallInfoNode *>(lpGLPt + 1);
GuildLargeInfoNode* lpRecvLargeNode = reinterpret_cast<GuildLargeInfoNode *>(lpRecvSmallNode + lpGLPt->m_cSmallNodeNum);
CopyMemory(lpSmallNode, lpRecvSmallNode, sizeof(GuildSmallInfoNode) * lpGLPt->m_cSmallNodeNum);
CopyMemory(lpLargeNode, lpRecvLargeNode, sizeof(GuildLargeInfoNode) * lpGLPt->m_cLargeNodeNum);
return lpGLPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildRight(PktBase* lpPktBase, unsigned long *dwGID, GuildRight *guildRight)
{
PktGuildRight* lpGRPt = static_cast<PktGuildRight *>(lpPktBase);
*dwGID = lpGRPt->m_dwUID;
*guildRight = lpGRPt->m_GuildRight;
return lpGRPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildMemberList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char* cMemberType,
unsigned char *cSortCmd, unsigned char *cPage, unsigned char *cTotalMemberNum,
unsigned char *cNodeNum, GuildMemberInfoNode* lpMemberNode)
{
PktGuildMemberList* lpGMLPt = static_cast<PktGuildMemberList *>(lpPktBase);
*dwCID = lpGMLPt->m_dwCID;
*cMemberType = lpGMLPt->m_cMemberType;
*cSortCmd = lpGMLPt->m_cSortCmd;
*cPage = lpGMLPt->m_cPage;
*cTotalMemberNum = lpGMLPt->m_cTotalMemberNum;
*cNodeNum = lpGMLPt->m_cNodeNum;
GuildMemberInfoNode* lpRecvNode = reinterpret_cast<GuildMemberInfoNode *>(lpGMLPt + 1);
CopyMemory(lpMemberNode, lpRecvNode, sizeof(GuildMemberInfoNode) * lpGMLPt->m_cNodeNum);
return lpGMLPt->GetError();
}
unsigned long ParsePacket::HandleCharMyGuildInfo(PktBase* lpPktBase, unsigned long *dwGold,
GuildRight *guildRight, unsigned char *cTitle)
{
PktMyGuildInfo* lpMGIPt = static_cast<PktMyGuildInfo *>(lpPktBase);
*dwGold = lpMGIPt->m_dwGold;
*guildRight = lpMGIPt->m_GuildRight;
*cTitle = lpMGIPt->m_cTitle;
return lpMGIPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildSafe(PktBase* lpPktBase, unsigned long *dwCID, char* szCharName,
unsigned long *dwSafeGold, unsigned long *dwCharGold, unsigned char *cCmd)
{
PktGuildSafeAck* lpGSAckPt = static_cast<PktGuildSafeAck *>(lpPktBase);
*dwCID = lpGSAckPt->m_dwCID;
*dwSafeGold = lpGSAckPt->m_dwSafeGold;
*dwCharGold = lpGSAckPt->m_dwCharGold;
*cCmd = lpGSAckPt->m_cCmd;
strncpy(szCharName, lpGSAckPt->m_szCharName, Guild::MAX_MEMBER_NAME_LEN);
return lpGSAckPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildHostilityList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char *cCurrentPage,
unsigned char *cPageState, unsigned char* cNodeNum, unsigned short* wTotalItemNum,
char* szHostility, char* szAlert, GuildHostilityInfoNode* lpHostilityNode)
{
PktGuildHostilityList* lpGHLPt = static_cast<PktGuildHostilityList *>(lpPktBase);
*dwCID = lpGHLPt->m_dwCID;
*cCurrentPage = lpGHLPt->m_cCurrentPage;
*cPageState = lpGHLPt->m_cPageState;
*cNodeNum = lpGHLPt->m_cNodeNum;
*wTotalItemNum = lpGHLPt->m_wTotalItemNum;
strncpy(szHostility, lpGHLPt->m_szHostility, Guild::MAX_GUILD_NAME_LEN);
strncpy(szAlert, lpGHLPt->m_szAlert, Guild::MAX_GUILD_NAME_LEN);
GuildHostilityInfoNode* lpRecvNode = reinterpret_cast<GuildHostilityInfoNode *>(lpGHLPt + 1);
CopyMemory(lpHostilityNode, lpRecvNode, sizeof(GuildHostilityInfoNode) * lpGHLPt->m_cNodeNum);
return lpGHLPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildRelationInfo(PktBase* lpPktBase, unsigned long *dwCID,
unsigned long *dwGID, unsigned short *wNodeNum,
GuildRelationInfoNode* lpRelationNode )
{
PktGuildRelationInfo* lpGRIPt = static_cast<PktGuildRelationInfo *>(lpPktBase);
*dwCID = lpGRIPt->m_dwCID;
*dwGID = lpGRIPt->m_dwGID;
*wNodeNum = lpGRIPt->m_wNodeNum;
GuildRelationInfoNode* lpRecvNode = reinterpret_cast<GuildRelationInfoNode* >( lpGRIPt + 1 );
CopyMemory(lpRelationNode, lpRecvNode, sizeof(GuildRelationInfoNode) * lpGRIPt->m_wNodeNum);
return lpGRIPt->GetError();
}
//--------------------------------------------------------------------------------------------------------------
// <20><>Ƽ
unsigned long ParsePacket::HandleCharPartyInfo(PktBase* lpPktBase, PARTY_EX* lpParty)
{
PktPI* lpPIPt = static_cast<PktPI *>(lpPktBase);
*lpParty = lpPIPt->m_Party;
return lpPIPt->GetError();
}
unsigned long ParsePacket::HandleCharPartyCmd(PktBase* lpPktBase, AddressInfo* SenderAddress,
char *SenderName, unsigned long *dwSenderID, unsigned long *dwReferenceID,
unsigned long *dwPartyID, unsigned short *Cmd)
{
PktPCAck* lpPCAckPt = static_cast<PktPCAck *>(lpPktBase);
strncpy(SenderName, lpPCAckPt->m_strSenderName, 16);
*SenderAddress = lpPCAckPt->m_SenderAddressInfo;
*dwSenderID = lpPCAckPt->m_dwSenderID;
*dwReferenceID = lpPCAckPt->m_dwReferenceID;
*dwPartyID = lpPCAckPt->m_dwPartyID;
*Cmd = lpPCAckPt->m_cCmd;
return lpPCAckPt->GetError();
}
unsigned long ParsePacket::HandleCharPartyCmdInfo(PktBase* lpPktBase, unsigned long *dwMemberID,
unsigned long *dwPartyID, unsigned short *Cmd)
{
PktPCInfo* lpPCInfoPt = static_cast<PktPCInfo *>(lpPktBase);
*dwMemberID = lpPCInfoPt->m_dwMemberID;
*dwPartyID = lpPCInfoPt->m_dwPartyID;
*Cmd = lpPCInfoPt->m_cCmd;
return lpPCInfoPt->GetError();
}
unsigned long ParsePacket::HandleCharPartyMemData(PktBase* lpPktBase, unsigned long& dwPartyID, unsigned long& dwSenderID, unsigned long& dwGID,
unsigned long& dwServerID, unsigned short& wClass, char& cLevel,
const char*& szSenderName, unsigned short& wCmd)
{
if (sizeof(PktPMD) != lpPktBase->GetLen())
{
return 1;
}
PktPMD* lpPktPMD = reinterpret_cast<PktPMD*>(lpPktBase);
dwPartyID = lpPktPMD->m_dwPartyID;
dwSenderID = lpPktPMD->m_dwSenderID;
dwGID = lpPktPMD->m_dwGID;
cLevel = lpPktPMD->m_cLevel;
wClass = lpPktPMD->m_wClass;
dwServerID = lpPktPMD->m_dwServerID;
szSenderName = lpPktPMD->m_strSenderName;
wCmd = lpPktPMD->m_wCmd;
return lpPktBase->GetError();
}
inline void COPY_AND_ADVANCE_SRC(void* dst, const char*& src, size_t size)
{
memcpy(dst, src, size); src += size;
}
unsigned long ParsePacket::HandleCharPartyMemInfo(PktBase* lpPktBase, PartyMemberData* lpPartyMemberData,
unsigned int& nMemberDataNum)
{
memset(lpPartyMemberData, 0, sizeof(PartyMemberData) * nMemberDataNum);
const char* szDataPos = reinterpret_cast<char*>(lpPktBase + 1);
const char* szDataEnd = szDataPos + ((sizeof(PktBase) < lpPktBase->GetLen()) ? lpPktBase->GetLen() - sizeof(PktBase) : 0);
PartyMemberData* lpPMDPos = lpPartyMemberData;
PartyMemberData* lpPMDEnd = lpPartyMemberData + nMemberDataNum;
for(nMemberDataNum = 0 ;
szDataPos + sizeof(unsigned long) + sizeof(unsigned short) < szDataEnd && lpPMDPos < lpPMDEnd;
++lpPMDPos)
{
COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwCID, szDataPos, sizeof(unsigned long));
COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usDataChanged, szDataPos, sizeof(unsigned short));
unsigned short usDataChanged = lpPMDPos->m_usDataChanged;
// ------------------------------------------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
if (usDataChanged & PartyMemberData::CHANGED_XPOS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_fXPos, szDataPos, sizeof(float)); }
if (usDataChanged & PartyMemberData::CHANGED_YPOS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_fYPos, szDataPos, sizeof(float)); }
if (usDataChanged & PartyMemberData::CHANGED_ZPOS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_fZPos, szDataPos, sizeof(float)); }
if (usDataChanged & PartyMemberData::CHANGED_MAX_HP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usMaxHP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_MAX_MP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usMaxMP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_CUR_HP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usCurHP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_CUR_MP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usCurMP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_LEVEL) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_cLevel, szDataPos, sizeof(unsigned char)); }
if (usDataChanged & PartyMemberData::CHANGED_CLASS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_cClass, szDataPos, sizeof(unsigned char)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_0) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[0], szDataPos, sizeof(unsigned long)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_1) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[1], szDataPos, sizeof(unsigned long)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_2) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[2], szDataPos, sizeof(unsigned long)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_3) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[3], szDataPos, sizeof(unsigned long)); }
// ------------------------------------------------------------------------------------------------------------------------------------------------------
}
nMemberDataNum = static_cast<unsigned int>(lpPMDPos - lpPartyMemberData);
return lpPktBase->GetError();
}
unsigned long ParsePacket::HandleCharPartyFind(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *MemberFindPartyNum,
unsigned char *PartyFindMemberNum,
MemberFindParty **lppMemberFindParty,
PartyFindMember **lppPartyFindMember)
{
PktPFAck* lpPFAckPt = static_cast<PktPFAck *>(lpPktBase);
*dwCharID = lpPFAckPt->m_dwCharID;
*MemberFindPartyNum = lpPFAckPt->m_cMemberFindPartyNum;
*PartyFindMemberNum = lpPFAckPt->m_cPartyFindMemberNum;
*lppMemberFindParty = (MemberFindParty*)(reinterpret_cast<char*>(lpPFAckPt + 1));
*lppPartyFindMember = (PartyFindMember*)(reinterpret_cast<char*>(lpPFAckPt + 1) +
(*MemberFindPartyNum * sizeof(MemberFindParty)));
return lpPFAckPt->GetError();
}
//--------------------------------------------------------------------------------------------------------------
// ģ<><C4A3>
unsigned long ParsePacket::HandleCharFriendDB(PktBase* lpPktBase, unsigned char* cDataType,
char **ppFriendListData, unsigned long *dwDataSize)
{
PktFriendDB* lpPktFriendDB = static_cast<PktFriendDB *>(lpPktBase);
switch(lpPktFriendDB->m_cCmd)
{
case PktFriendDB::FRIEND_LIST:
case PktFriendDB::BAN_LIST:
*cDataType = lpPktFriendDB->m_cCmd;
*dwDataSize = lpPktFriendDB->m_dwData;
*ppFriendListData = reinterpret_cast<char*>(lpPktFriendDB + 1);
break;
default:
return 1;
}
return lpPktFriendDB->GetError();
}
unsigned long ParsePacket::HandleCharFriendAck(PktBase* lpPktBase, unsigned char* cCmd, unsigned long *dwCID, char **ppszName,
unsigned long* dwGID, unsigned short* wClass, char* cLevel, unsigned long* dwServerID)
{
PktFriendAck* lpPktFriendAck = static_cast<PktFriendAck *>(lpPktBase);
*cCmd = lpPktFriendAck->m_cCmd;
*dwCID = lpPktFriendAck->m_dwCID;
*dwGID = lpPktFriendAck->m_dwGID;
*wClass = lpPktFriendAck->m_wClass;
*cLevel = lpPktFriendAck->m_cLevel;
*ppszName = lpPktFriendAck->m_szName;
*dwServerID = lpPktFriendAck->m_dwServerID;
return lpPktFriendAck->GetError();
}
unsigned long ParsePacket::HandleCharFriendRegistered(PktBase* lpPktBase, unsigned long* dwCID, char* szName)
{
PktFriendAddReq* lpPktFriendAddRequest = static_cast<PktFriendAddReq *>(lpPktBase);
memcpy(szName, lpPktFriendAddRequest->m_szName, PktFriendAddReq::MAX_NAME);
*dwCID = lpPktFriendAddRequest->m_dwCID;
return lpPktFriendAddRequest->GetError();
}
//--------------------------------------------------------------------------------------------------------------
// <20><>Ÿ
unsigned long ParsePacket::HandleCharChat(PktBase* lpPktBase, unsigned long& dwSenderCID, unsigned short *Cmd, unsigned short *Lang, char *Message)
{
PktChat* lpPktChat = static_cast<PktChat*>(lpPktBase);
int nLen = lpPktChat->GetLen();
*Cmd = lpPktChat->m_cCmd;
*Lang = lpPktChat->m_usLang;
dwSenderCID = lpPktChat->m_dwSenderCID;
char* szMessagePos = reinterpret_cast<char*>(lpPktChat + 1);
char* szMessageEnd = reinterpret_cast<char*>(lpPktChat) + nLen;
if (0 != lpPktChat->m_cNum)
{
if (szMessagePos + sizeof(char) * CHAR_INFOST::MAX_NAME_LEN * lpPktChat->m_cNum < szMessageEnd)
{
szMessagePos += sizeof(char) * CHAR_INFOST::MAX_NAME_LEN * lpPktChat->m_cNum;
}
}
std::copy(szMessagePos, szMessageEnd, Message);
Message[szMessageEnd - szMessagePos - 1] = 0;
return lpPktChat->GetError();
}
unsigned long ParsePacket::HandleCharWhisper(PktBase* lpPktBase, char *SenderName,
char *RecverName, char *Message)
{
PktWh* lpWhPt = static_cast<PktWh *>(lpPktBase);
strncpy(SenderName, lpWhPt->m_SenderName, 16);
strncpy(RecverName, lpWhPt->m_RecverName, 16);
int nLen = lpWhPt->GetLen();
if (sizeof(PktWh) < nLen && nLen <= PktWh::PktWhMaxSize + sizeof(PktWh))
{
memcpy(Message, reinterpret_cast<char*>(lpWhPt + 1), nLen - sizeof(PktWh));
Message[nLen - sizeof(PktWh) - 1] = NULL;
}
return lpWhPt->GetError();
}
unsigned long ParsePacket::HandleCharChatBan(PktBase* lpPktBase, bool& bChatBan)
{
PktChatBan* lpCBPtAck = static_cast<PktChatBan *>(lpPktBase);
bChatBan = (0 == lpCBPtAck->m_dwMinutes) ? false : true;
return lpCBPtAck->GetError();
}
unsigned long ParsePacket::HandleCharAuthorizePanel(PktBase* lpPktBase, unsigned long *dwCasterID,
char *szCasterName, unsigned char *cCmd)
{
PktAPAck* lpAPPtAck = static_cast<PktAPAck *>(lpPktBase);
*dwCasterID = lpAPPtAck->m_dwCasterID;
*cCmd = lpAPPtAck->m_cCmd;
strncpy(szCasterName, lpAPPtAck->m_szCasterName, CHAR_INFOST::MAX_NAME_LEN);
return lpAPPtAck->GetError();
}
unsigned long ParsePacket::HandleCharFameInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cOtherNation, unsigned char *cOtherClass,
unsigned long *dwFame, unsigned long *dwMileage,
unsigned char *RankingByRace, unsigned char *RankingByClass,
unsigned char *cCmd, char *szWinCharName, char *szLoseCharName)
{
PktFIAck* lpFIAckPt = static_cast<PktFIAck *>(lpPktBase);
*dwCharID = lpFIAckPt->m_dwCharID;
*cOtherNation = (unsigned char)lpFIAckPt->m_cOtherNation;
*cOtherClass = lpFIAckPt->m_cOtherClass;
*dwFame = lpFIAckPt->m_dwFame;
*dwMileage = lpFIAckPt->m_dwMileage;
*RankingByRace = lpFIAckPt->m_cRankingByRace;
*RankingByClass = lpFIAckPt->m_cRankingByClass;
*cCmd = lpFIAckPt->m_cCmd;
strncpy(szWinCharName, lpFIAckPt->m_szWinCharName, PktFIAck::MAX_NAME_LEN);
strncpy(szLoseCharName, lpFIAckPt->m_szLoseCharName, PktFIAck::MAX_NAME_LEN);
return lpFIAckPt->GetError();
}
unsigned long ParsePacket::HandleCharRankingInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cClass, unsigned char *cPage,
unsigned short *wNum, RankingNode **lppRankingNode)
{
PktRankingInfo* lpRankingInfo = static_cast<PktRankingInfo *>(lpPktBase);
*dwCharID = lpRankingInfo->m_dwCharID;
*cClass = lpRankingInfo->m_cClass;
*cPage = lpRankingInfo->m_cPage;
*wNum = lpRankingInfo->m_wNum;
*lppRankingNode = reinterpret_cast<RankingNode *>(lpRankingInfo + 1);
return lpRankingInfo->GetError();
}

View File

@@ -0,0 +1,66 @@
#ifndef _GAMA_CLIENT_PARSE_COMMUNITY_PACKET_H_
#define _GAMA_CLIENT_PARSE_COMMUNITY_PACKET_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
#include <Network/Packet/PacketStruct/AddressPacket.h>
#include <Network/Packet/PacketStruct/CharCommunityPacketStruct.h>
#include <Network/Packet/PacketStruct/RankingPacket.h>
struct GuildSmallInfoNode;
struct GuildLargeInfoNode;
struct GuildRight;
struct GuildMemberInfoNode;
struct PartyMemberData;
struct GuildHostilityInfoNode;
struct GuildRelationInfoNode;
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>
unsigned long HandleCharCreateGuild(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID, unsigned char *cInclination, char* szGuildName);
unsigned long HandleCharGuildCmd(PktBase* lpPktBase, unsigned long *dwGID, unsigned long *dwSenderID, unsigned long *dwReferenceID, char* szGuildName, char* szSenderName, unsigned short *wCmd);
unsigned long HandleCharGuildMark(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwGID, char* szMark, unsigned long* dwGold);
unsigned long HandleCharGuildLevel(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cLevel, unsigned long *dwGold);
unsigned long HandleCharGuildRelation(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID, unsigned long *dwTargetGID, unsigned long *dwValue, unsigned char *cSubCmd, char* szGuildName, char* szTempGuildName);
unsigned long HandleCharGuildInclination(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cInclination);
unsigned long HandleCharGuildList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char *cSortCmd, unsigned char *cPage, unsigned char *cSmallNodeNum, GuildSmallInfoNode* lpSmallNode, unsigned char *cLargeNodeNum, GuildLargeInfoNode* lpLargeNode);
unsigned long HandleCharGuildRight(PktBase* lpPktBase, unsigned long *dwGID, GuildRight *guildRight);
unsigned long HandleCharGuildMemberList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char* cMemberType, unsigned char *cSortCmd, unsigned char *cPage, unsigned char *cTotalMemberNum, unsigned char *cNodeNum, GuildMemberInfoNode* lpMemberNode);
unsigned long HandleCharMyGuildInfo(PktBase* lpPktBase, unsigned long *dwGold, GuildRight *guildRight, unsigned char *cTitle);
unsigned long HandleCharGuildSafe(PktBase* lpPktBase, unsigned long *dwCID, char* szCharName, unsigned long *dwSafeGold, unsigned long *dwCharGold, unsigned char *cCmd);
unsigned long HandleCharGuildHostilityList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char *cCurrentPage, unsigned char *cPageState, unsigned char* cNodeNum, unsigned short* wTotalItemNum, char* szHostility, char* szAlert, GuildHostilityInfoNode* lpHostilityNode);
unsigned long HandleCharGuildRelationInfo(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID, unsigned short *wNodeNum, GuildRelationInfoNode* lpRelationNode ) ;
// <20><>Ƽ
unsigned long HandleCharPartyInfo(PktBase* lpPktBase, PARTY_EX* lpParty);
unsigned long HandleCharPartyCmd(PktBase* lpPktBase, AddressInfo* SenderAddress, char *SenderName, unsigned long *dwSenderID, unsigned long *dwReferenceID, unsigned long *dwPartyID, unsigned short *Cmd);
unsigned long HandleCharPartyCmdInfo(PktBase* lpPktBase, unsigned long *dwMemberID, unsigned long *dwPartyID, unsigned short *Cmd);
unsigned long HandleCharPartyFind(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *MemberFindPartyNum, unsigned char *PartyFindMemberNum, MemberFindParty** lppMemberFindParty, PartyFindMember** lppPartyFindMember);
unsigned long HandleCharPartyMemData(PktBase* lpPktBase, unsigned long& dwPartyID, unsigned long& dwSenderID, unsigned long& dwGID, unsigned long& dwServerID, unsigned short& wClass, char& cLevel, const char*& szSenderName, unsigned short& wCmd);
unsigned long HandleCharPartyMemInfo(PktBase* lpPktBase, PartyMemberData* lpPartyMemberData, unsigned int& nMemberDataNum);
// ģ<><C4A3>
unsigned long HandleCharFriendDB(PktBase* lpPktBase, unsigned char* cDataType, char **ppFriendListData, unsigned long *dwDataSize);
unsigned long HandleCharFriendRegistered(PktBase* lpPktBase, unsigned long* dwCID, char* szName);
unsigned long HandleCharFriendAck(PktBase* lpPktBase, unsigned char* cCmd, unsigned long *dwCID, char **ppszName, unsigned long* dwGID,
unsigned short* wClass, char* cLevel, unsigned long* dwServerID);
// ä<><C3A4>
unsigned long HandleCharChat(PktBase* lpPktBase, unsigned long& dwSenderCID, unsigned short *Cmd, unsigned short *Lang, char *Message);
unsigned long HandleCharWhisper(PktBase* lpPktBase, char *SenderName, char *RecverName, char *Message);
unsigned long HandleCharChatBan(PktBase* lpPktBase, bool& bChatBan);
// <20><>Ÿ Ŀ<>´<EFBFBD>Ƽ
unsigned long HandleCharAuthorizePanel(PktBase* lpPktBase, unsigned long *dwCasterID, char *szCasterName, unsigned char *cCmd);
unsigned long HandleCharFameInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cOtherNation, unsigned char *cOtherClass, unsigned long *dwFame, unsigned long *dwMileage, unsigned char *RankingByRace, unsigned char *RankingByClass, unsigned char *cCmd, char *szWinCharName, char *szLoseCharName);
unsigned long HandleCharRankingInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cClass, unsigned char *cPage, unsigned short *wNum, RankingNode **lppRankingNode);
};
#endif

View File

@@ -0,0 +1,115 @@
#include "stdafx.h"
#include "ParseEtc.h"
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharConfigPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
#include "GMMemory.h"
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharBillingTimeoutInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char* cRemainMinute, unsigned char* cBillingType)
{
PktBTN* lpPktBTN = reinterpret_cast<PktBTN *>(lpPktBase);
*dwCharID = lpPktBTN->m_dwCharID;
*cRemainMinute = lpPktBTN->m_cRemainMinute;
*cBillingType = lpPktBTN->m_cBillingType;
return lpPktBTN->GetError();
}
unsigned long ParsePacket::HandleCharBillingTimeCheckNotify(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char* cRemainMinute, unsigned char* cBillingType)
{
PktBTN* lpPktBTN = reinterpret_cast<PktBTN *>(lpPktBase);
*dwCharID = lpPktBTN->m_dwCharID;
*cRemainMinute = lpPktBTN->m_cRemainMinute;
*cBillingType = lpPktBTN->m_cBillingType;
return lpPktBTN->GetError();
}
unsigned long ParsePacket::HandleCharBindPos(PktBase* lpPktBase, unsigned long *NPCID_Out,
unsigned char *Cmd_Out, POS* lpPos_Out, char *Zone_Out)
{
PktBP* lpBPPt = reinterpret_cast<PktBP *>(lpPktBase);
*lpPos_Out = lpBPPt->m_Pos;
*NPCID_Out = lpBPPt->m_dwNPCID;
*Cmd_Out = lpBPPt->m_cCmd;
*Zone_Out = lpBPPt->m_cZone;
return lpBPPt->GetError();
}
unsigned long ParsePacket::HandleControlOption(PktBase* lpPktBase, unsigned long *CharID_Out, RejectOption* Reject_Out)
{
PktCOp* lpCOpPt = reinterpret_cast<PktCOp *>(lpPktBase);
*CharID_Out = lpCOpPt->m_dwCharID;
*Reject_Out = lpCOpPt->m_RejectOption;
return lpCOpPt->GetError();
}
unsigned long ParsePacket::HandleCharStateRedistribution(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out)
{
PktSRAck* lpSRPtAck = reinterpret_cast<PktSRAck *>(lpPktBase);
*lpChState_Out = lpSRPtAck->m_State;
*lpSkill_Out = lpSRPtAck->m_Skill;
return lpSRPtAck->GetError();
}
unsigned long ParsePacket::HandleCharStatusRetrain(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out,
Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out)
{
PktSRTAck* lpSRTPtAck = reinterpret_cast<PktSRTAck *>(lpPktBase);
*lpChState_Out = lpSRTPtAck->m_State;
*lpSkill_Out = lpSRTPtAck->m_Skill;
*lpIndex_Out = lpSRTPtAck->m_ItemPos;
*Gold_Out = lpSRTPtAck->m_dwGold;
return lpSRTPtAck->GetError();
}
unsigned long ParsePacket::HandleCharLotteryResult(PktBase* lpPktBase, unsigned long *CharID_Out,
Item::ItemPos* lpIndex_Out, unsigned long *dwSize_Out,
char **lppBuffer_Out)
{
PktLotteryResult* lpPktLR = reinterpret_cast<PktLotteryResult *>(lpPktBase);
*CharID_Out = lpPktLR->m_dwCharID;
*lpIndex_Out = lpPktLR->m_itemPos;
*dwSize_Out = lpPktLR->m_dwSize;
*lppBuffer_Out = reinterpret_cast<char*>(lpPktLR + 1);
return lpPktLR->GetError();
}
unsigned long ParsePacket::HandleCharAdmin(PktBase* lpPktBase)
{
PktAdmin* lpPktAdmin = reinterpret_cast<PktAdmin *>(lpPktBase);
return lpPktAdmin->GetError();
}
unsigned long ParsePacket::HandleCharNameChange(PktBase* lpPktBase, char*& szChangedName,
unsigned char* cNameChangeCount)
{
PktCharNameChange* lpCharNameChange =
reinterpret_cast<PktCharNameChange*>(lpPktBase);
*cNameChangeCount = lpCharNameChange->m_cNameChangeCount;
szChangedName = lpCharNameChange->m_szCharName;
return lpPktBase->GetError();
}

View File

@@ -0,0 +1,28 @@
#ifndef _GAMA_CLIENT_PARSE_ETC_PACKET_H_
#define _GAMA_CLIENT_PARSE_ETC_PACKET_H_
#include <DB/DBDefine.h>
#include <Item/ItemStructure.h>
#include <Network/Packet/PacketStruct/CharStatusPacketStruct.h>
#include <Network/Packet/PacketStruct/CharConfigPacketStruct.h>
// forward decl.
struct PktBase;
namespace ParsePacket
{
// ETC
unsigned long HandleCharBillingTimeoutInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char* cRemainMinute, unsigned char* cBillingType);
unsigned long HandleCharBillingTimeCheckNotify(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char* cRemainMinute, unsigned char* cBillingType);
unsigned long HandleCharStateRedistribution(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out);
unsigned long HandleCharStatusRetrain(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out, Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out);
unsigned long HandleControlOption(PktBase* lpPktBase, unsigned long *CharID_Out, RejectOption* Reject_Out);
unsigned long HandleCharBindPos(PktBase* lpPktBase, unsigned long *NPCID_Out, unsigned char *Cmd_Out, POS* lpPos_Out, char *Zone_Out);
unsigned long HandleCharLotteryResult(PktBase* lpPktBase, unsigned long *CharID_Out, Item::ItemPos* lpIndex_Out, unsigned long *dwSize_Out, char **lppBuffer_Out);
unsigned long HandleCharAdmin(PktBase* lpPktBase);
unsigned long HandleCharNameChange(PktBase* lpPktBase, char*& szChangedName, unsigned char* cNameChangeCount);
};
#endif

View File

@@ -0,0 +1,254 @@
#include "stdafx.h"
#include "ParseFight.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharAttack(PktBase* lpPktBase, unsigned long *CharID_Out, AtType* lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out,
unsigned short* MPHeal_Out, char *Judge_Out, unsigned char *DefenserNum_Out, DefenserNode** lppNode_Out)
{
PktAtAck* lpAtAckPt = static_cast<PktAtAck*>(lpPktBase);
*CharID_Out = lpAtAckPt->m_dwCharID;
*lpAtType_Out = lpAtAckPt->m_AtType;
*HP_Out = lpAtAckPt->m_wHP;
*MP_Out = lpAtAckPt->m_wMP;
*MPHeal_Out = lpAtAckPt->m_wMPHeal;
*Judge_Out = lpAtAckPt->m_cJudge;
*DefenserNum_Out = lpAtAckPt->m_cDefenserNum;
*lppNode_Out = reinterpret_cast<DefenserNode*>(lpAtAckPt + 1);
return lpAtAckPt->GetError();
}
unsigned long ParsePacket::HandleCharAttacked(PktBase* lpPktBase, unsigned long *AtCharID_Out, unsigned long *MyID_Out,
AtType *AtType_Out, POS* lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out,
unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned short* MyMPHeal_Out)
{
PktAted* lpAtedPt = static_cast<PktAted*>(lpPktBase);
*AtCharID_Out = lpAtedPt->m_dwCharID;
*MyID_Out = lpAtedPt->m_dwMyID;
*AtType_Out = lpAtedPt->m_AtType;
*lpAtPos_Out = lpAtedPt->m_Postion;
*AtDir_Out = lpAtedPt->m_fDir;
*Judge_Out = lpAtedPt->m_cJudge;
*MyHP_Out = lpAtedPt->m_wMyHP;
*MyMP_Out = lpAtedPt->m_wMyMP;
*MyMPHeal_Out = lpAtedPt->m_wMyMPHeal;
return lpAtedPt->GetError();
}
unsigned long ParsePacket::HandleCharAttackInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
AtType* lpAtType_Out, unsigned char *DefenserNum_Out,
DefenserNode **lppNode_Out)
{
PktAtInfo* lpPktAtInfo = static_cast<PktAtInfo*>(lpPktBase);
*CharID_Out = lpPktAtInfo->m_dwCharID;
*lpAtType_Out = lpPktAtInfo->m_AtType;
*DefenserNum_Out = lpPktAtInfo->m_cDefenserNum;
*lppNode_Out = reinterpret_cast<DefenserNode*>(lpPktAtInfo + 1);
return lpPktAtInfo->GetError();
}
unsigned long ParsePacket::HandleCharEquipDurability(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cIndex, unsigned char *cValue)
{
PktEquipDurability* lpEDPt = static_cast<PktEquipDurability*>(lpPktBase);
*dwCharID = lpEDPt->m_dwCharID;
*cIndex = lpEDPt->m_cIndex;
*cValue = lpEDPt->m_cValue;
return lpEDPt->GetError();
}
unsigned long ParsePacket::HandleCharRespawn(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *HP_Out, unsigned short *MP_Out,
POS* lpPos_Out, __int64 *Exp_Out,
unsigned long *dwGold_Out)
{
PktRsAck* lpPktRsAck = static_cast<PktRsAck*>(lpPktBase);
*CharID_Out = lpPktRsAck->m_dwCharID;
*HP_Out = lpPktRsAck->m_wHP;
*MP_Out = lpPktRsAck->m_wMP;
*lpPos_Out = lpPktRsAck->m_Position;
*Exp_Out = lpPktRsAck->m_dlExp;
*dwGold_Out = lpPktRsAck->m_dwGold;
return lpPktRsAck->GetError();
}
unsigned long ParsePacket::HandleCharRespawnInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned char* cRsAreaNum, unsigned short* wSize, RespawnArea* pRespawnArea)
{
PktRsInfoAck* lpPktRsInfoAck = static_cast<PktRsInfoAck*>(lpPktBase);
*CharID_Out = lpPktRsInfoAck->m_dwCharID;
*cRsAreaNum = lpPktRsInfoAck->m_cRsAreaNum;
*wSize = lpPktRsInfoAck->m_wSize;
RespawnArea* lpRespawnAreaNode = reinterpret_cast<RespawnArea *>(lpPktRsInfoAck + 1);
for (int i=0; i<lpPktRsInfoAck->m_cRsAreaNum; ++i)
{
CopyMemory(&pRespawnArea[i], lpRespawnAreaNode, sizeof(RespawnArea));
++lpRespawnAreaNode;
}
return lpPktRsInfoAck->GetError();
}
unsigned long ParsePacket::HandleCharRespawnAreaInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned long* dwTownID,
unsigned short* wWaitOrder, unsigned char* cHour, unsigned char* cMin,
unsigned char* cSec, bool* bCount)
{
PktRsAreaInfoAck* lpPktRsAreaInfoAck = static_cast<PktRsAreaInfoAck*>(lpPktBase);
*CharID_Out = lpPktRsAreaInfoAck->m_dwCharID;
*dwTownID = lpPktRsAreaInfoAck->m_dwTownID;
*wWaitOrder = lpPktRsAreaInfoAck->m_nWaitOrder; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*cHour = lpPktRsAreaInfoAck->m_cRemainHour; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>)
*cMin = lpPktRsAreaInfoAck->m_cRemainMin; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>)
*cSec = lpPktRsAreaInfoAck->m_cRemainSec; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>)
*bCount = lpPktRsAreaInfoAck->m_bCount; // <20>ð<EFBFBD> ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD>
return lpPktRsAreaInfoAck->GetError();
}
unsigned long ParsePacket::HandleCharBattleGroundRespawn(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *wTurn_Out, unsigned short *wWaitNum_Out,
unsigned short *wLeftTime_Out, unsigned short *wHumanNum_Out,
unsigned short *wAkhanNum_Out)
{
PktBGRsAck* lpPktBGRAck = static_cast<PktBGRsAck*>(lpPktBase);
*CharID_Out = lpPktBGRAck->m_dwCharID;
*wTurn_Out = lpPktBGRAck->m_wTurn;
*wWaitNum_Out = lpPktBGRAck->m_wWaitNum;
*wLeftTime_Out = lpPktBGRAck->m_wLeftTime;
*wHumanNum_Out = lpPktBGRAck->m_wHumanNum;
*wAkhanNum_Out = lpPktBGRAck->m_wAkhanNum;
return lpPktBGRAck->GetError();
}
unsigned long ParsePacket::HandleCharRespawnWaitQueue(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *wWaitNum_Out)
{
PktRsWaitQueueAck* lpRsWQAckPt = static_cast<PktRsWaitQueueAck*>(lpPktBase);
*CharID_Out = lpRsWQAckPt->m_dwCharID;
::memcpy(wWaitNum_Out, lpRsWQAckPt->m_wWaitNum,
PktRsWaitQueueAck::MAX_POINT_NUM_PER_RACE);
return lpRsWQAckPt->GetError();
}
unsigned long ParsePacket::HandleCharDuelCmd(PktBase* lpPktBase, unsigned long *SenderID_Out,
unsigned long *RecverID_Out, unsigned char *Cmd_Out)
{
PktDuC* lpDuCPt = static_cast<PktDuC*>(lpPktBase);
*SenderID_Out = lpDuCPt->m_dwSenderID;
*RecverID_Out = lpDuCPt->m_dwRecverID;
*Cmd_Out = lpDuCPt->m_cCmd;
return lpDuCPt->GetError();
}
unsigned long ParsePacket::HandleCharTeamBattleInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
char *ChallengerName_Out, unsigned char *Cmd_Out,
unsigned char *MemberNum_Out, unsigned long *MemberID_Out,
unsigned char *MemberLevel_Out)
{
PktTBInfo* lpPktTBInfo = static_cast<PktTBInfo*>(lpPktBase);
*CharID_Out = lpPktTBInfo->m_dwCharID;
*Cmd_Out = lpPktTBInfo->m_cCmd;
*MemberNum_Out = lpPktTBInfo->m_cMemberNum;
::strncpy(ChallengerName_Out, lpPktTBInfo->m_strChallengerName, CHAR_INFOST::MAX_NAME_LEN);
for (int nIndex = 0; nIndex < *MemberNum_Out; nIndex++)
{
MemberID_Out[nIndex] = *(reinterpret_cast<unsigned long *>(
reinterpret_cast<char*>(lpPktTBInfo + 1) +
nIndex * (sizeof(unsigned long) + sizeof(unsigned char))));
MemberLevel_Out[nIndex] = *(reinterpret_cast<unsigned char *>(
reinterpret_cast<char*>(lpPktTBInfo + 1) +
nIndex * (sizeof(unsigned long) + sizeof(unsigned char)) + sizeof(unsigned long)));
}
return lpPktTBInfo->GetError();
}
unsigned long ParsePacket::HandleCharPeaceMode(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned char *cLeftTime_Out, bool *bPeace_Out)
{
PktPeace* lpPeacePtAck = static_cast<PktPeace*>(lpPktBase);
*dwCharID_Out = lpPeacePtAck->m_dwCharID;
*cLeftTime_Out = lpPeacePtAck->m_cLeftTime;
*bPeace_Out = lpPeacePtAck->m_bPeace;
return lpPeacePtAck->GetError();
}
unsigned long ParsePacket::HandleCharAward(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *Exp_Out)
{
PktAw* lpAwPt = static_cast<PktAw*>(lpPktBase);
*CharID_Out = lpAwPt->m_dwCharID;
*Exp_Out = lpAwPt->m_dwExp;
return lpAwPt->GetError();
}
unsigned long ParsePacket::HandleStatueInfo(PktBase* lpPktBase, unsigned char *cIndex, unsigned short *wKID, unsigned char *cState, unsigned short *wNowHP,
unsigned long *dwMileage, unsigned short *wHumanNum, unsigned short *wAkhanNum)
{
PktStatueInfo* lpPktSI = static_cast<PktStatueInfo*>(lpPktBase);
*dwMileage = lpPktSI->m_dwMileage;
*wHumanNum = lpPktSI->m_wHumanNum;
*wAkhanNum = lpPktSI->m_wAkhanNum;
*wNowHP = lpPktSI->m_wNowHP;
*wKID = lpPktSI->m_wKID;
*cState = lpPktSI->m_cState;
*cIndex = lpPktSI->m_cIndex;
return lpPktSI->GetError();
}
unsigned long ParsePacket::HandleCameraScript(PktBase* lpPktBase, unsigned long *dwDeleteObject, unsigned long *dwNewObject, POS* NewPos)
{
PktCameraScript* lpPktCS = static_cast<PktCameraScript*>(lpPktBase);
*dwDeleteObject = lpPktCS->m_dwDeleteObject;
*dwNewObject = lpPktCS->m_dwNewObject;
*NewPos = lpPktCS->m_NewPos;
return lpPktCS->GetError();
}

View File

@@ -0,0 +1,36 @@
#ifndef _GAMA_CLIENT_PARSE_FIGHT_PACKET_H_
#define _GAMA_CLIENT_PARSE_FIGHT_PACKET_H_
#include <winsock2.h>
#include <windows.h>
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>
unsigned long HandleCharAttack(PktBase* lpPktBase, unsigned long *CharID_Out, AtType* lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out, unsigned short* MPHeal_Out, char *Judge_Out, unsigned char *DefenserNum_Out, DefenserNode** lppNode_Out);
unsigned long HandleCharAttacked(PktBase* lpPktBase, unsigned long *AtCharID_Out, unsigned long *MyID_Out, AtType *AtType_Out, POS* lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out, unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned short* MyMPHeal_Out);
// <20><><EFBFBD>񳻱<EFBFBD><F1B3BBB1><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharEquipDurability(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cIndex, unsigned char *cValue);
unsigned long HandleCharRespawn(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out, POS* Pos_Out, __int64 *Exp_Out, unsigned long *dwGold_Out);
unsigned long HandleCharRespawnInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned char* cReAreaNum, unsigned short* wSize, RespawnArea* pRespawnArea);
unsigned long HandleCharRespawnAreaInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned long* dwTownID, unsigned short* wWaitOrder, unsigned char* cHour, unsigned char* cMin, unsigned char* cSec, bool* bCount);
unsigned long HandleCharBattleGroundRespawn(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *wTurn_Out, unsigned short *wWaitNum_Out, unsigned short *wLeftTime_Out, unsigned short *wHumanNum_Out, unsigned short *wAkhanNum_Out);
unsigned long HandleCharRespawnWaitQueue(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *wWaitNum_Out);
unsigned long HandleCharDuelCmd(PktBase* lpPktBase, unsigned long *SenderID_Out, unsigned long *RecverID_Out, unsigned char *Cmd_Out);
unsigned long HandleCharTeamBattleInfo(PktBase* lpPktBase, unsigned long *CharID_Out, char *ChallengerName_Out, unsigned char *Cmd_Out, unsigned char *MemberNum_Out, unsigned long *MemberID_Out, unsigned char *MemberLevel_Out);
unsigned long HandleCharPeaceMode(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned char *cLeftTime_Out, bool *bPeace_Out);
unsigned long HandleCharAward(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *Exp_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleStatueInfo(PktBase* lpPktBase, unsigned char *cIndex, unsigned short *wKID, unsigned char *cState, unsigned short *wNowHP, unsigned long *dwMileage, unsigned short *wHumanNum, unsigned short *wAkhanNum);
unsigned long HandleCameraScript(PktBase* lpPktBase, unsigned long *dwDeleteObject, unsigned long *dwNewObject, POS* NewPos);
// TODO : REMOVE UDP Packets
unsigned long HandleCharAttackInfo(PktBase* lpPktBase, unsigned long *CharID_Out, AtType* lpAtType_Out, unsigned char *DefenserNum_Out, DefenserNode **lppNode_Out);
};
#endif

View File

@@ -0,0 +1,524 @@
#include "stdafx.h"
#include "ParseItem.h"
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include "GMMemory.h"
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20>ּ<EFBFBD><D6BC><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD>.
unsigned long ParsePacket::HandleCharPickUp(PktBase* lpPktBase, unsigned long *dwCharID, unsigned __int64 *nObjectID,
Item::ItemPos* lpIndex, unsigned long *dwGold, unsigned long *dwSize,
unsigned char* cNum, char **lppBuffer)
{
PktPUAck* lpPktPUAck = static_cast<PktPUAck *>(lpPktBase);
*dwCharID = lpPktPUAck->m_dwCharID;
*nObjectID = lpPktPUAck->m_nObjectID;
*lpIndex = lpPktPUAck->m_itemPos;
*cNum = lpPktPUAck->m_cNum;
switch (lpPktPUAck->m_cType)
{
case PktPUAck::Item:
*dwGold = 0;
*dwSize = lpPktPUAck->m_dwSize;
*lppBuffer = reinterpret_cast<char *>(lpPktPUAck + 1);
break;
case PktPUAck::Gold:
*dwGold = lpPktPUAck->m_dwSize;
*dwSize = 0;
*lppBuffer = NULL;
break;
}
return lpPktPUAck->GetError();
}
unsigned long ParsePacket::HandleCharPickUpInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned __int64 *nObjectID)
{
PktPUInfo* lpPktPUInfo = static_cast<PktPUInfo *>(lpPktBase);
*dwCharID = lpPktPUInfo->m_dwCharID;
*nObjectID = lpPktPUInfo->m_nObjectID;
return lpPktPUInfo->GetError();
}
unsigned long ParsePacket::HandleCharPullDown(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpIndex, FieldObject* lpFieldObject)
{
PktPDAck* lpPktPDAck = static_cast<PktPDAck *>(lpPktBase);
*dwCharID = lpPktPDAck->m_dwCharID;
*lpFieldObject = lpPktPDAck->m_FieldObject;
*lpIndex = lpPktPDAck->m_itemPos;
return lpPktPDAck->GetError();
}
unsigned long ParsePacket::HandleCharPullDownInfo(PktBase* lpPktBase, unsigned long *dwCharID,
FieldObject* lpFieldObject)
{
PktPDInfo* lpPktPDInfo = static_cast<PktPDInfo *>(lpPktBase);
*dwCharID = lpPktPDInfo->m_dwCharID;
*lpFieldObject = lpPktPDInfo->m_FieldObject;
return lpPktPDInfo->GetError();
}
unsigned long ParsePacket::HandleCharTakeItem(PktBase* lpPktBase,
unsigned long *dwCharID, TakeType* lpTakeType)
{
PktTI* lpPktTI = static_cast<PktTI *>(lpPktBase);
*dwCharID = lpPktTI->m_dwCharID;
*lpTakeType = lpPktTI->m_TakeType;
return lpPktTI->GetError();
}
unsigned long ParsePacket::HandleCharSwapItem(PktBase* lpPktBase, unsigned long *dwCharID,
TakeType* lpSrcType, TakeType* lpDstType)
{
PktSwI* lpPktSwI = static_cast<PktSwI *>(lpPktBase);
*dwCharID = lpPktSwI->m_dwCharID;
*lpSrcType = lpPktSwI->m_SwapSrc;
*lpDstType = lpPktSwI->m_SwapDst;
return lpPktSwI->GetError();
}
unsigned long ParsePacket::HandleCharTradeItem(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwNPCID,
unsigned long *dwGold, unsigned long *dwMileage, Item::ItemPos* CouponPos,
Item::ItemPos* lpIndex, unsigned char *Num,
unsigned short *Size, char **lppBuffer)
{
PktTrAck* lpPktTrAck = static_cast<PktTrAck *>(lpPktBase);
*dwCharID = lpPktTrAck->m_dwCharID;
*dwNPCID = lpPktTrAck->m_dwNPCID;
*dwGold = lpPktTrAck->m_dwGold;
*dwMileage = lpPktTrAck->m_dwMileage;
*CouponPos = lpPktTrAck->m_CouponPos;
*lpIndex = lpPktTrAck->m_itemPos;
*Num = lpPktTrAck->m_cNum;
if (0 == lpPktTrAck->m_wSize)
{
*Size = 0;
*lppBuffer = NULL;
}
else
{
*Size = lpPktTrAck->m_wSize;
*lppBuffer = reinterpret_cast<char *>(lpPktTrAck + 1);
}
return lpPktTrAck->GetError();
}
unsigned long ParsePacket::HandleCharEquipShopInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwNPCID,
unsigned long *dwTime, unsigned char *cRace, unsigned char *cTabPage,
unsigned char *cNum, unsigned short *aryItemID, unsigned char *aryItemGrade)
{
PktEquipShopInfo* lpESIAck = static_cast<PktEquipShopInfo *>(lpPktBase);
*dwCharID = lpESIAck->m_dwCharID;
*dwNPCID = lpESIAck->m_dwNPCID;
*dwTime = lpESIAck->m_dwTime;
*cRace = lpESIAck->m_cRace;
*cTabPage = lpESIAck->m_cTabPage;
*cNum = lpESIAck->m_cNum;
unsigned short* lpItemID = reinterpret_cast<unsigned short *>(lpESIAck + 1);
for (unsigned char cIDIndex = 0; cIDIndex < *cNum; ++cIDIndex)
{
aryItemID[cIDIndex] = *lpItemID;
++lpItemID;
}
unsigned char* lpItemGrade = reinterpret_cast<unsigned char *>(lpItemID);
for (unsigned char cGradeIndex = 0; cGradeIndex < *cNum; ++cGradeIndex)
{
aryItemGrade[cGradeIndex] = *lpItemGrade;
++lpItemGrade;
}
return lpESIAck->GetError();
}
unsigned long ParsePacket::HandleCharRepairItem(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpIndex, unsigned long *dwGold)
{
PktRpI* lpPktRpI = static_cast<PktRpI *>(lpPktBase);
*dwCharID = lpPktRpI->m_dwCharID;
*dwGold = lpPktRpI->m_dwGold;
*lpIndex = lpPktRpI->m_itemPos;
return lpPktRpI->GetError();
}
unsigned long ParsePacket::HandleCharRepairAllItem(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwGold)
{
PktRpAI* lpPktRpAI = static_cast<PktRpAI *>(lpPktBase);
*dwCharID = lpPktRpAI->m_dwCharID;
*dwGold = lpPktRpAI->m_dwGold;
return lpPktRpAI->GetError();
}
unsigned long ParsePacket::HandleCharUseItem(PktBase* lpPktBase,
unsigned long& dwSenderID,
unsigned long& dwRecver, Item::ItemPos& index,
unsigned char& cRemainItemNum)
{
PktUI* lpPktUI = static_cast<PktUI *>(lpPktBase);
dwSenderID = lpPktUI->m_dwSender;
dwRecver = lpPktUI->m_dwRecver;
index = lpPktUI->m_itemPos;
cRemainItemNum = lpPktUI->m_cRemainItemNum;
return lpPktUI->GetError();
}
unsigned long ParsePacket::HandleCharCastObject(PktBase* lpPktBase, unsigned long *dwSenderID,
unsigned long *dwRecverID, CastObject* lpCastObject)
{
PktCO* lpPktCO = static_cast<PktCO *>(lpPktBase);
*dwSenderID = lpPktCO->m_dwSenderID;
*dwRecverID = lpPktCO->m_dwReceiverID;
*lpCastObject = lpPktCO->m_sCastObject;
return lpPktCO->GetError();
}
unsigned long ParsePacket::HandleCharCastObjectInfo(PktBase* lpPktBase, unsigned long *dwSenderID,
unsigned long *dwRecverID, CastObject* lpCastObject)
{
PktCOInfo* lpPktCOInfo = static_cast<PktCOInfo *>(lpPktBase);
*dwSenderID = lpPktCOInfo->m_dwSenderID;
*dwRecverID = lpPktCOInfo->m_dwReceiverID;
*lpCastObject = lpPktCOInfo->m_sCastObject;
return lpPktCOInfo->GetError();
}
unsigned long ParsePacket::HandleCharInstallSocket(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpEquipIndex,
Item::ItemPos* lpSocket,
unsigned char *Size, char **lppBuffer)
{
PktISAck* lpPktISAck = static_cast<PktISAck *>(lpPktBase);
*dwCharID = lpPktISAck->m_dwCharID;
*lpEquipIndex = lpPktISAck->m_equipPos;
*lpSocket = lpPktISAck->m_gemPos;
*Size = lpPktISAck->m_cSize;
*lppBuffer = (lpPktISAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktISAck + 1) : 0;
return lpPktISAck->GetError();
}
unsigned long ParsePacket::HandleCharInstallRune(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpEquipIndex,
Item::ItemPos* lpSocket, unsigned char* runePos, unsigned char* type,
unsigned char *Size, char **lppBuffer)
{
PktIRSAck* lpPktIRSAck = static_cast<PktIRSAck *>(lpPktBase);
*dwCharID = lpPktIRSAck->m_dwCharID;
*lpEquipIndex = lpPktIRSAck->m_equipPos;
*lpSocket = lpPktIRSAck->m_runePos;
*Size = lpPktIRSAck->m_cSize;
//*runePos = lpPktIRSAck->m_cRuneSocketPos;
*type = lpPktIRSAck->m_cType;
*lppBuffer = (lpPktIRSAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktIRSAck + 1) : 0;
return lpPktIRSAck->GetError();
}
unsigned long ParsePacket::HandleCharItemChemical(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpPickkingPos, Item::ItemPos* lpTargetPos,
unsigned short *wPickkingID, unsigned char *cPickkingNum,
unsigned char *cSize, char **lppBuffer)
{
PktItemChemicalAck* lpPktICAck = static_cast<PktItemChemicalAck *>(lpPktBase);
*dwCharID = lpPktICAck->m_dwCharID;
*lpPickkingPos = lpPktICAck->m_pickkingPos;
*lpTargetPos = lpPktICAck->m_targetPos;
*wPickkingID = lpPktICAck->m_wPickkingID;
*cPickkingNum = lpPktICAck->m_cPickkingNum;
*cSize = lpPktICAck->m_cResultSize;
*lppBuffer = (lpPktICAck->m_cResultSize > 0) ? reinterpret_cast<char *>(lpPktICAck + 1) : 0;
return lpPktICAck->GetError();
}
unsigned long ParsePacket::HandleCharSplitItem(PktBase* lpPktBase, unsigned long *dwCharID,
TakeType* lpTakeType, unsigned char *Size, char **lppBuffer)
{
PktSpItAck* lpPktSpltAck = static_cast<PktSpItAck *>(lpPktBase);
*dwCharID = lpPktSpltAck->m_dwCharID;
*lpTakeType = lpPktSpltAck->m_TakeType;
*Size = lpPktSpltAck->m_cSize;
*lppBuffer = (lpPktSpltAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktSpltAck + 1) : 0;
return lpPktSpltAck->GetError();
}
unsigned long ParsePacket::HandleDeposit(PktBase* lpPktBase, unsigned char *Cmd,
unsigned long *dwGold, char *PassSave)
{
PktDeposit* lpPktDeposit = static_cast<PktDeposit *>(lpPktBase);
*Cmd = lpPktDeposit->m_cCmd;
memcpy(dwGold, &lpPktDeposit->m_szData[0], sizeof(unsigned long));
*PassSave = lpPktDeposit->m_szData[4];
return lpPktDeposit->GetError();
}
unsigned long ParsePacket::HandleDepositUpdate(PktBase* lpPktBase, unsigned long *dwFlag,
unsigned char *TabNum, bool *Complete,
unsigned short *StoreSize, char **lppStoreBuff)
{
PktDepositUpdateDB* lpDepositUpdateDB = static_cast<PktDepositUpdateDB *>(lpPktBase);
*dwFlag = lpDepositUpdateDB->m_dwTabFlag;
*TabNum = lpDepositUpdateDB->m_cTabNum;
*Complete = lpDepositUpdateDB->m_bUpdateComplete;
*StoreSize = lpDepositUpdateDB->m_usDataSize;
*lppStoreBuff = reinterpret_cast<char *>(lpDepositUpdateDB + 1);
return lpDepositUpdateDB->GetError();
}
unsigned long ParsePacket::HandleCharUpgradeItem(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned long *dwCurrentGold, unsigned char *cCurrentMineralNum,
unsigned char *Size, char **lppBuffer)
{
PktUgIAck* lpPktUgIAck = static_cast<PktUgIAck *>(lpPktBase);
*dwCharID = lpPktUgIAck->m_dwCharID;
*dwCurrentGold = lpPktUgIAck->m_dwCurrentGold;
*cCurrentMineralNum = lpPktUgIAck->m_cCurrentMineralNum;
*Size = lpPktUgIAck->m_cSize;
*lppBuffer = (lpPktUgIAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktUgIAck + 1) : 0;
return lpPktUgIAck->GetError();
}
unsigned long ParsePacket::HandleCharItemOptionGraft(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned long *dwCurrentGold, unsigned char *cItemSize, char **lppItemBuffer)
{
PktItemOptionGraftAck* lpPktIOGAck = static_cast<PktItemOptionGraftAck *>(lpPktBase);
*dwCharID = lpPktIOGAck->m_dwCharID;
*dwCurrentGold = lpPktIOGAck->m_dwGold;
*cItemSize = lpPktIOGAck->m_cSize;
*lppItemBuffer = (lpPktIOGAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktIOGAck + 1) : 0;
return lpPktIOGAck->GetError();
}
unsigned long ParsePacket::HandleCharItemCompensation(PktBase* lpPktBase, unsigned long *dwCharID)
{
PktItemCompensation* lpPktICAck = static_cast<PktItemCompensation *>(lpPktBase);
*dwCharID = lpPktICAck->m_dwCharID;
return lpPktICAck->GetError();
}
unsigned long ParsePacket::HandleCharAutoRouting(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned __int64 *nObjectID, unsigned short *wItemID,
unsigned char *cNum, unsigned char *cCmd)
{
PktAutoRouting* lpPktAutoRouting = static_cast<PktAutoRouting *>(lpPktBase);
*dwCharID = lpPktAutoRouting->m_dwCharID;
*nObjectID = lpPktAutoRouting->m_nObjectID;
*wItemID = lpPktAutoRouting->m_wItemID;
*cNum = lpPktAutoRouting->m_cNum;
*cCmd = lpPktAutoRouting->m_cCmd;
return lpPktAutoRouting->GetError();
}
unsigned long ParsePacket::HandleCharDisappearItem(PktBase* lpPktBase, unsigned long* dwCharID,
Item::ItemPos* lpIndex, unsigned char* cNum, unsigned char* cCmd)
{
PktDisappearItem* lpPktDisappearItem = static_cast<PktDisappearItem *>(lpPktBase);
*dwCharID = lpPktDisappearItem->m_dwCharID;
*lpIndex = lpPktDisappearItem->m_itemPos;
*cNum = lpPktDisappearItem->m_cNum;
*cCmd = lpPktDisappearItem->m_cCmd;
return lpPktDisappearItem->GetError();
}
unsigned long ParsePacket::HandleCharExchangeCmd(PktBase* lpPktBase, unsigned long *dwSenderID,
unsigned long *dwRecverID, unsigned char *Cmd)
{
PktExC* lpExCPt = static_cast<PktExC *>(lpPktBase);
*dwSenderID = lpExCPt->m_dwSenderID;
*dwRecverID = lpExCPt->m_dwRecverID;
*Cmd = lpExCPt->m_cCmd;
return lpExCPt->GetError();
}
unsigned long ParsePacket::HandleCharExchangeItem(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned long *dwSize, Item::ItemPos* lpIndex,
unsigned char *Type, unsigned char *Num, char **lppBuffer)
{
PktExI* lpExIPt = static_cast<PktExI *>(lpPktBase);
*dwCharID = lpExIPt->m_dwCharID;
*dwSize = lpExIPt->m_dwSize;
*lpIndex = lpExIPt->m_itemPos;
*Type = lpExIPt->m_cType;
*Num = lpExIPt->m_cNum;
*lppBuffer = (0 < lpExIPt->m_dwSize) ? reinterpret_cast<char *>(lpExIPt + 1) : 0;
return lpExIPt->GetError();
}
unsigned long ParsePacket::HandleCharStallOpen(PktBase* lpPktBase, unsigned long *dwCharID, char* StallName)
{
PktStO* lpStOPt = static_cast<PktStO *>(lpPktBase);
*dwCharID = lpStOPt->m_dwCharID;
strncpy(StallName, lpStOPt->m_StallName, PktStO::MAX_STALL_NAME_LEN);
return lpStOPt->GetError();
}
unsigned long ParsePacket::HandleCharStallRegisterItem(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwShopID,
TakeType *TakeType, unsigned long *dwPrice, unsigned char *Cmd)
{
PktStRI* lpStRIPt = static_cast<PktStRI *>(lpPktBase);
*dwCharID = lpStRIPt->m_dwCharID;
*dwShopID = lpStRIPt->m_dwShopID;
*TakeType = lpStRIPt->m_TakeType;
*dwPrice = lpStRIPt->m_dwPrice;
*Cmd = lpStRIPt->m_cCmd;
return lpStRIPt->GetError();
}
unsigned long ParsePacket::HandleCharStallEnter(PktBase* lpPktBase, unsigned long *dwCustomerID, unsigned long *dwOwner)
{
PktStE* lpStEPt = static_cast<PktStE *>(lpPktBase);
*dwCustomerID = lpStEPt->m_dwCustomerID;
*dwOwner = lpStEPt->m_dwOwnerID;
return lpStEPt->GetError();
}
unsigned long ParsePacket::HandleCharStallItemInfo(PktBase* lpPktBase,
unsigned long *dwOwnerID, unsigned long *dwCustomerID,
unsigned char *cTax, unsigned long *dwStallSize, char **lppStallBuff,
unsigned char *ItemNum, unsigned long **dwStallPrice)
{
PktStIInfo* lpPktStIInfo = static_cast<PktStIInfo *>(lpPktBase);
::memcpy(dwCustomerID, lpPktStIInfo->m_dwCustomerID, sizeof(unsigned long) * PktStIInfo::MAX_CUSTOMER_NUM);
*dwOwnerID = lpPktStIInfo->m_dwOwnerID;
*cTax = lpPktStIInfo->m_cTax;
*dwStallSize = lpPktStIInfo->m_dwItemSize;
*lppStallBuff = reinterpret_cast<char *>(lpPktStIInfo + 1);
*ItemNum = lpPktStIInfo->m_cItemNum;
*dwStallPrice = reinterpret_cast<unsigned long *>(*lppStallBuff + lpPktStIInfo->m_dwItemSize);
return lpPktStIInfo->GetError();
}
unsigned long ParsePacket::HandleCharTakeItems(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *TakeNum, TakeType** lppTakeTypes)
{
PktTIs* lpTIsPt = static_cast<PktTIs *>(lpPktBase);
*dwCharID = lpTIsPt->m_dwCharID;
*TakeNum = lpTIsPt->m_TakeNum;
*lppTakeTypes = reinterpret_cast<TakeType *>(lpTIsPt + 1);
return lpTIsPt->GetError();
}
unsigned long ParsePacket::HandleCharTakeGold(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *SrcPos, unsigned char *DstPos,
unsigned long *dwGold)
{
PktTG* lpTGPt = static_cast<PktTG *>(lpPktBase);
*dwCharID = lpTGPt->m_dwCharID;
*SrcPos = lpTGPt->m_cSrcPos;
*DstPos = lpTGPt->m_cDstPos;
*dwGold = lpTGPt->m_dwGold;
return lpTGPt->GetError();
}

View File

@@ -0,0 +1,62 @@
#ifndef _PARSE_ITEM_PACKET_H_
#define _PARSE_ITEM_PACKET_H_
#include <Network/Packet/PacketStruct/CharItemPacket.h>
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>
unsigned long HandleCharPickUp(PktBase* lpPktBase, unsigned long* dwCharID, unsigned __int64* nObjectID, Item::ItemPos* lpIndex, unsigned long* dwGold, unsigned long* dwSize, unsigned char* cNum, char* *lppBuffer);
unsigned long HandleCharPickUpInfo(PktBase* lpPktBase, unsigned long* dwCharID, unsigned __int64* nObjectID);
unsigned long HandleCharAutoRouting(PktBase* lpPktBase, unsigned long* dwCharID, unsigned __int64* nObjectID, unsigned short* wItemID, unsigned char* cNum, unsigned char* cCmd);
unsigned long HandleCharDisappearItem(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpIndex, unsigned char* cNum, unsigned char* cCmd);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharPullDown(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpIndex, FieldObject* lpFieldObject);
unsigned long HandleCharPullDownInfo(PktBase* lpPktBase, unsigned long* dwCharID, FieldObject* lpFieldObject);
// <20>̵<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharTakeItem(PktBase* lpPktBase, unsigned long* dwCharID, TakeType* lpTakeType);
unsigned long HandleCharSwapItem(PktBase* lpPktBase, unsigned long* dwCharID, TakeType* lpSrcType, TakeType* lpDstType);
unsigned long HandleCharSplitItem(PktBase* lpPktBase, unsigned long* dwCharID, TakeType* lpTakeType, unsigned char* Size, char* *lppBuffer);
// <20><><EFBFBD><EFBFBD>/<2F>ȱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long HandleCharTradeItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwNPCID, unsigned long* dwGold, unsigned long* dwMileage, Item::ItemPos* CouponPos, Item::ItemPos* lpIndex, unsigned char* Num, unsigned short* Size, char* *lppBuffer);
unsigned long HandleCharEquipShopInfo(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwNPCID, unsigned long* dwTime, unsigned char* cRace, unsigned char* cTabPage, unsigned char* cNum, unsigned short* aryItemID, unsigned char* aryItemGrade);
unsigned long HandleCharRepairItem(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpIndex, unsigned long* dwGold);
unsigned long HandleCharRepairAllItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwGold);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharCastObject(PktBase* lpPktBase, unsigned long* dwSenderID, unsigned long* dwRecverID, CastObject* lpCastObject);
unsigned long HandleCharCastObjectInfo(PktBase* lpPktBase, unsigned long* dwSenderID, unsigned long* dwRecverID, CastObject* lpCastObject);
// <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
unsigned long HandleCharUseItem(PktBase* lpPktBase, unsigned long& dwSenderID, unsigned long& dwRecver, Item::ItemPos& index, unsigned char& cRemainItemNum);
unsigned long HandleCharInstallSocket(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket, unsigned char* Size, char* *lppBuffer);
unsigned long HandleCharInstallRune(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket, unsigned char* runePos, unsigned char* type, unsigned char* Size, char* *lppBuffer);
unsigned long HandleCharItemChemical(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpPickkingPos, Item::ItemPos* lpTargetPos, unsigned short* wPickkingID, unsigned char* cPickkingNum, unsigned char* cSize, char* *lppBuffer);
unsigned long HandleCharUpgradeItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwCurrentGold, unsigned char* cCurrentMineralNum, unsigned char* Size, char* *lppBuffer);
unsigned long HandleCharItemOptionGraft(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwCurrentGold, unsigned char* cItemSize, char* *lppItemBuffer);
unsigned long HandleCharItemCompensation(PktBase* lpPktBase, unsigned long* dwCharID);
// â<><C3A2>
unsigned long HandleDeposit(PktBase* lpPktBase, unsigned char* Cmd, unsigned long* dwGold, char* PassSave);
unsigned long HandleDepositUpdate(PktBase* lpPktBase, unsigned long* dwFlag, unsigned char* TabNum, bool* Complete, unsigned short* StoreSize, char* *lppStoreBuff);
// <20><>ȯ
unsigned long HandleCharExchangeCmd(PktBase* lpPktBase, unsigned long* dwSenderID, unsigned long* dwRecverID, unsigned char* Cmd);
unsigned long HandleCharExchangeItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwSize, Item::ItemPos* lpIndex, unsigned char* Type, unsigned char* Num, char* *lppBuffer);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharStallOpen(PktBase* lpPktBase, unsigned long* dwCharID, char* StallName);
unsigned long HandleCharStallRegisterItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwShopID, TakeType* TakeType, unsigned long* dwPrice, unsigned char* Cmd);
unsigned long HandleCharStallEnter(PktBase* lpPktBase, unsigned long* dwCustomerID, unsigned long* dwOwner);
unsigned long HandleCharStallItemInfo(PktBase* lpPktBase, unsigned long* dwOwnerID, unsigned long* dwCustomerID, unsigned char* cTax, unsigned long* dwStallSize, char **lppStallBuff, unsigned char* ItemNum, unsigned long **dwStallPrice);
// <20><>Ÿ
unsigned long HandleCharTakeItems(PktBase* lpPktBase, unsigned long* dwCharID, unsigned char* TakeNum, TakeType** lppTakeTypes);
unsigned long HandleCharTakeGold(PktBase* lpPktBase, unsigned long* dwCharID, unsigned char* SrcPos, unsigned char* DstPos, unsigned long* dwGold);
};
#endif

View File

@@ -0,0 +1,139 @@
#include "stdafx.h"
#include <Network/Address/INET_Addr.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/CharLoginOutPacket.h>
#include <Network/Packet/PacketStruct/CharLoginOutPacketStruct.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include "ParseLoginout.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharLogin(PktBase* lpPktBase, ClientSocket& clientSocket,
bool *bPeace_Out, bool *bCheckRelation,
unsigned char *cNameChangeCount, unsigned char *cAdminFlag,
unsigned char *cGuildWarFlag, unsigned char *cRealmWarFlag,
unsigned char *cRealmPoint, unsigned char *cTacticsFlag,
CHAR_INFOST* lpCharInfo_Out, SKILL* lpSkill_Out, QUICK* lpQuick_Out, SPELL* lpSpell_Out,
CHAR_POS* lpPos_Out,
unsigned long *ServerTime_Out, unsigned long *dwServerID,
unsigned short *EquipSize_Out, char **lppEquipBuff_Out,
unsigned short *InvenSize_Out, char **lppInvenBuff_Out,
unsigned short *ExtraSize_Out, char **lppExtraBuff_Out,
unsigned short *ExchangeSize_Out, char **lppExchangeBuff_Out,
unsigned short *TempInvenSize_Out, char **lppTempInvenBuff_Out)
{
PktCLiAck* lpCLiAckPt = static_cast<PktCLiAck*>(lpPktBase);
*ServerTime_Out = lpCLiAckPt->m_dwServerTime;
*dwServerID = lpCLiAckPt->m_dwServerID;
*bPeace_Out = lpCLiAckPt->m_bPeaceMode;
*bCheckRelation = lpCLiAckPt->m_bCheckRelation;
*cNameChangeCount = lpCLiAckPt->m_cNameChangeCount;
*cAdminFlag = lpCLiAckPt->m_cAdminFlag;
*cGuildWarFlag = lpCLiAckPt->m_cGuildWarFlag;
*cRealmWarFlag = lpCLiAckPt->m_cRealmWarFlag;
*cRealmPoint = lpCLiAckPt->m_cRealmPoint;
*cTacticsFlag = lpCLiAckPt->m_cTacticsFlag;
unsigned short *usUpdateLen = lpCLiAckPt->m_usUpdate;
*lppEquipBuff_Out = NULL;
*lppInvenBuff_Out = NULL;
*lppExtraBuff_Out = NULL;
*lppExchangeBuff_Out = NULL;
*lppTempInvenBuff_Out = NULL;
*EquipSize_Out = 0;
*InvenSize_Out = 0;
*ExtraSize_Out = 0;
*ExchangeSize_Out = 0;
*TempInvenSize_Out = 0;
char* OffSet = reinterpret_cast<char*>(lpCLiAckPt + 1);
for (int nCount = 0; nCount < DBUpdateData::MAX_UPDATE_DB; ++nCount)
{
if (0 != usUpdateLen[nCount])
{
switch (nCount)
{
case DBUpdateData::STATUS_UPDATE: *lpCharInfo_Out = *reinterpret_cast<CHAR_INFOST *>(OffSet); break;
case DBUpdateData::POSITION_UPDATE: *lpPos_Out = *reinterpret_cast<CHAR_POS *>(OffSet); break;
case DBUpdateData::SKILL_UPDATE: *lpSkill_Out = *reinterpret_cast<SKILL *>(OffSet); break;
case DBUpdateData::QUICKSLOT_UPDATE: *lpQuick_Out = *reinterpret_cast<QUICK *>(OffSet); break;
case DBUpdateData::SPELL_UPDATE: *lpSpell_Out = *reinterpret_cast<SPELL *>(OffSet); break;
case DBUpdateData::ITEM_EQUIP_UPDATE: *lppEquipBuff_Out = OffSet; *EquipSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_INVEN_UPDATE: *lppInvenBuff_Out = OffSet; *InvenSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_EXTRA_UPDATE: *lppExtraBuff_Out = OffSet; *ExtraSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_EXCHANGE_UPDATE: *lppExchangeBuff_Out = OffSet; *ExchangeSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_TEMPINVEN_UPDATE: *lppTempInvenBuff_Out = OffSet; *TempInvenSize_Out = usUpdateLen[nCount]; break;
}
OffSet += usUpdateLen[nCount];
}
}
return lpCLiAckPt->GetError();
}
unsigned long ParsePacket::HandleCharLogout(PktBase* lpPktBase, unsigned long *CharID_Out)
{
PktCLoAck* lpCLoAckPt = static_cast<PktCLoAck*>(lpPktBase);
*CharID_Out = lpCLoAckPt->m_dwCharID;
return lpCLoAckPt->GetError();
}
unsigned long ParsePacket::HandleCharMoveZone(PktBase* lpPktBase, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out)
{
PktSZMvAck* lpSZMvAckPt = static_cast<PktSZMvAck*>(lpPktBase);
*Zone_Out = lpSZMvAckPt->m_cZone;
memcpy(lpChannelNum_Out, lpSZMvAckPt->m_wChannelNum, sizeof(unsigned short) * PktSZMvAck::MAX_CHANNEL_NUM);
return lpSZMvAckPt->GetError();
}
unsigned long ParsePacket::HandleServerZone(PktBase* lpPktBase, ClientSocket& clientSocket,
unsigned long *ServerID_Out)
{
PktSZAck* lpSZAckPt = static_cast<PktSZAck*>(lpPktBase);
*ServerID_Out = lpSZAckPt->m_dwServerID;
clientSocket.SetAddress(ClientSocket::MoveZoneAddr, lpSZAckPt->m_GameServerTCPAddr);
return lpSZAckPt->GetError();
}
unsigned long ParsePacket::HandleCSAuth(PktBase* lpPktBase, unsigned long* dwCID,
unsigned long* dwAuthCode, GG_AUTH_DATA* lpAuthCode2)
{
PktCSAuth* lpCSAuthPt = static_cast<PktCSAuth *>(lpPktBase);
*dwCID = lpCSAuthPt->m_dwCharID;
*dwAuthCode = lpCSAuthPt->m_dwAuthCode;
*lpAuthCode2 = lpCSAuthPt->m_AuthCode2;
return lpCSAuthPt->GetError();
}
unsigned long ParsePacket::HandleKeyInfo(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* pKeyInfo)
{
PktKeyInfo* lpKeyInfo = static_cast<PktKeyInfo*>(lpPktBase);
*dwCID = lpKeyInfo->m_dwCID;
memcpy(pKeyInfo, lpKeyInfo->m_dwKeyInfo, sizeof(unsigned long)*PktKeyInfo::MAX_KEY_INFO);
return lpKeyInfo->GetError();
}

View File

@@ -0,0 +1,38 @@
#ifndef _GAMA_CLIENT_PARSE_LOGIN_OUT_H_
#define _GAMA_CLIENT_PARSE_LOGIN_OUT_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
class ClientSocket;
struct PktBase;
struct _GG_AUTH_DATA;
namespace ParsePacket
{
// <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. ClientSocket<65><74> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> UDP<44>ּҿ<D6BC> ä<>ü<EFBFBD><C3BC><EFBFBD> <20>ּҸ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
unsigned long HandleCharLogin(PktBase* lpPktBase, ClientSocket& clientSocket,
bool *bPeace_Out, bool *bCheckRelation, unsigned char *cNameChangeCount, unsigned char *cAdminFlag,
unsigned char *cGuildWarFlag, unsigned char *cRealmWarFlag, unsigned char *cRealmPoint, unsigned char *cTacticsFlag,
CHAR_INFOST* lpCharInfo_Out, SKILL* lpSkill_Out, QUICK* lpQuick_Out, SPELL* lpSpell_Out,
CHAR_POS* lpPos_Out,
unsigned long *ServerTime_Out, unsigned long *dwServerID,
unsigned short *EquipSize_Out, char **lppEquipBuff_Out,
unsigned short *InvenSize_Out, char **lppInvenBuff_Out,
unsigned short *ExtraSize_Out, char **lppExtraBuff_Out,
unsigned short *ExchangeSize_Out, char **lppExchangeBuff_Out,
unsigned short *TempInvenSize_Out, char **lppTempInvenBuff_Out);
unsigned long HandleCharLogout(PktBase* lpPktBase, unsigned long *CharID_Out);
unsigned long HandleCharMoveZone(PktBase* lpPktBase, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out);
// <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> MoveZone<6E>ּҸ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
unsigned long HandleServerZone(PktBase* lpPktBase, ClientSocket& clientSocket, unsigned long *ServerID_Out);
unsigned long HandleCSAuth(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwAuthCode, _GG_AUTH_DATA* lpAuthCode2);
unsigned long HandleKeyInfo(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* pKeyInfo);
};
#endif

View File

@@ -0,0 +1,76 @@
#include "stdafx.h"
#include "ParseMove.h"
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharBroadcastPacket.h>
#include <mmsystem.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharUpdateAddress(PktBase* lpPktBase, ClientSocket& clientSocket)
{
PktUAAck* lpUAAckPt = static_cast<PktUAAck*>(lpPktBase);
clientSocket.SetAddress(ClientSocket::PrivateAddr, lpUAAckPt->m_PrivateAddress);
clientSocket.SetAddress(ClientSocket::PublicAddr, lpUAAckPt->m_PublicAddress);
return lpUAAckPt->GetError();
}
unsigned long ParsePacket::HandleCharAddressInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out)
{
PktAI* lpAIPt = static_cast<PktAI*>(lpPktBase);
*CharID_Out = lpAIPt->m_AddressInfo.m_dwCharID;
*PubAddress_Out = lpAIPt->m_AddressInfo.m_PublicAddress;
*PriAddress_Out = lpAIPt->m_AddressInfo.m_PrivateAddress;
return lpAIPt->GetError();
}
unsigned long ParsePacket::HandleCharMoveEx(PktBase* lpPktBase, unsigned long *CharID_Out, POS* Pos_Out,
float *Dir_Out, unsigned char *UAct_Out, unsigned char *LAct_Out)
{
PktMVEx* lpPktMVEx = static_cast<PktMVEx*>(lpPktBase);
CNetworkPos& netPos = lpPktMVEx->m_NetworkPos;
Pos_Out->fPointX = netPos.GetXPos();
Pos_Out->fPointY = netPos.GetYPos();
Pos_Out->fPointZ = netPos.GetZPos();
*Dir_Out = netPos.GetDirection();
*CharID_Out = lpPktMVEx->GetServerInfo();
*UAct_Out = lpPktMVEx->m_cUAct;
*LAct_Out = lpPktMVEx->m_cLAct;
return 0;
}
unsigned long ParsePacket::HandleMonMove(PktBase* lpPktBase, unsigned long *MonID_Out, POS* lpPos_Out,
float *Dir_Out, float *Vec_Out,
unsigned short *Act_Out, unsigned short *AniNum_Out)
{
PktMM* lpMMPt = static_cast<PktMM*>(lpPktBase);
*MonID_Out = lpMMPt->m_dwMonID;
CNetworkPos& netPos = lpMMPt->m_NetworkPos;
lpPos_Out->fPointX = netPos.GetXPos();
lpPos_Out->fPointY = netPos.GetYPos();
lpPos_Out->fPointZ = netPos.GetZPos();
*Dir_Out = netPos.GetDirection();
*Vec_Out = netPos.GetVelocity();
*Act_Out = lpMMPt->m_cAct;
*AniNum_Out = lpMMPt->m_cAniNum;
return lpMMPt->GetError();
}

View File

@@ -0,0 +1,36 @@
#ifndef _GAMA_CLIENT_PARSE_MOVE_BROADCAST_H_
#define _GAMA_CLIENT_PARSE_MOVE_BROADCAST_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
#include <Network/Packet/PacketStruct/AddressPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
// forward decl
class ClientSocket;
struct PktBase;
namespace BroadcastInfo
{
class CObjectInfoMgr;
};
namespace ParsePacket
{
unsigned long HandleMonMove(PktBase* lpPktBase, unsigned long *MonID_Out, POS* lpPos_Out, float *Dir_Out, float *Vec_Out, unsigned short *Act_Out, unsigned short *AniNum_Out);
unsigned long HandleCharMoveEx(PktBase* lpPktBase, unsigned long *CharID_Out,
POS* Pos_Out, float *Dir_Out, unsigned char *UAct_Out, unsigned char *LAct_Out);
// TODO : REMOVE UDP Packets
// ClientSocket<65><74> UDP public, private <20>ּҸ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>Ѵ<EFBFBD>.
unsigned long HandleCharUpdateAddress(PktBase* lpPktBase, ClientSocket& clientSocket);
unsigned long HandleCharAddressInfo(PktBase* lpPktBase, unsigned long *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out);
unsigned long HandleCharMove(PktBase* lpPktBase, unsigned long *CharID_Out, POS* Pos_Out, float *Dir_Out, unsigned short *UAct_Out, unsigned short *LAct_Out, char *Level_Out, unsigned long *ChantEf_Out, unsigned long *EnchantEf_Out, unsigned long *PtCount_Out);
}
#endif

View File

@@ -0,0 +1,77 @@
#include "stdafx.h"
#include "ParseQuest.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharStartQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned long *dwNPCID_Out, unsigned short *wQuestID_Out)
{
PktStartQuest* lpPktStartQuest = static_cast<PktStartQuest*>(lpPktBase);
*dwCharID_Out = lpPktStartQuest->m_dwCharID;
*dwNPCID_Out = lpPktStartQuest->m_dwNPCID;
*wQuestID_Out = lpPktStartQuest->m_wQuestID;
return lpPktStartQuest->GetError();
}
unsigned long ParsePacket::HandleCharCancelQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wQuestID_Out)
{
PktCancelQuest* lpPktCancelQuest = static_cast<PktCancelQuest*>(lpPktBase);
*dwCharID_Out = lpPktCancelQuest->m_dwCharID;
*wQuestID_Out = lpPktCancelQuest->m_wQuestID;
return lpPktCancelQuest->GetError();
}
unsigned long ParsePacket::HandleCharOperateTrigger(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wQuestID_Out, unsigned char *cPhase_Out,
unsigned char *cTrigger_Out,unsigned char *cCount_Out)
{
PktOperateTrigger* lpPktOT = static_cast<PktOperateTrigger*>(lpPktBase);
*dwCharID_Out = lpPktOT->m_dwCharID;
*wQuestID_Out = lpPktOT->m_wQuestID;
*cPhase_Out = lpPktOT->m_cPhase;
*cTrigger_Out = lpPktOT->m_cTrigger;
*cCount_Out = lpPktOT->m_cCount;
return lpPktOT->GetError();
}
unsigned long ParsePacket::HandleCharQuestInfo(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wExecutingQuestNum_Out,
PktQuestDB::ExecutingQuest **lppExecutingQuest_Out,
unsigned short *wHistoryQuestNum_Out,
unsigned short **lppHistoryQuest_Out)
{
PktQuestDB* lpPktQuestDB = static_cast<PktQuestDB*>(lpPktBase);
*dwCharID_Out = lpPktQuestDB->m_dwCID;
*wExecutingQuestNum_Out = lpPktQuestDB->m_wExecuteQuestSize / sizeof(PktQuestDB::ExecutingQuest);
*wHistoryQuestNum_Out = lpPktQuestDB->m_wHistoryQuestSize / sizeof(unsigned short);
*lppExecutingQuest_Out = reinterpret_cast<PktQuestDB::ExecutingQuest *>(lpPktQuestDB + 1);
*lppHistoryQuest_Out = reinterpret_cast<unsigned short*>(
reinterpret_cast<char*>(lpPktQuestDB + 1) + lpPktQuestDB->m_wExecuteQuestSize);
return lpPktQuestDB->GetError();
}
unsigned long ParsePacket::HandleCharEndQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wQuestID_Out, bool *bSave_Out)
{
PktEndQuest* lpPktEQ = static_cast<PktEndQuest*>(lpPktBase);
*dwCharID_Out = lpPktEQ->m_dwCharID;
*wQuestID_Out = lpPktEQ->m_wQuestID;
*bSave_Out = lpPktEQ->m_bSave;
return lpPktEQ->GetError();
}

View File

@@ -0,0 +1,16 @@
#ifndef _GAMA_CLIENT_PARSE_CHAR_QUEST_
#define _GAMA_CLIENT_PARSE_CHAR_QUEST_
#include <Network/Packet/PacketStruct/CharQuestPacket.h>
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
unsigned long HandleCharStartQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned long *dwNPCID_Out, unsigned short *wQuestID_Out);
unsigned long HandleCharCancelQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wQuestID_Out);
unsigned long HandleCharOperateTrigger(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wQuestID_Out, unsigned char *cPhase_Out, unsigned char *cTrigger_Out, unsigned char *cCount_Out);
unsigned long HandleCharQuestInfo(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wExecutingQuestNum_Out, PktQuestDB::ExecutingQuest **lppExecutingQuest_Out, unsigned short *wHistoryQuestNum_Out, unsigned short **lppHistoryQuest_Out);
unsigned long HandleCharEndQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wQuestID_Out, bool *bSave_Out);
}
#endif

View File

@@ -0,0 +1,113 @@
#include "stdafx.h"
#include "ParseSkill.h"
#include <Network/Packet/PacketStruct/CharMovePacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharSkillLock(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)lpPktBase;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
return lpSkPt->GetError();
}
unsigned long ParsePacket::HandleCharSkillUnLock(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out, unsigned char *cSkillLevel, Item::ItemPos* itemPos_Out)
{
LPPktSkULAck lpSkULAckPt = (LPPktSkULAck)lpPktBase;
*CharID_Out = lpSkULAckPt->m_dwCharID;
*SkillID_Out = lpSkULAckPt->m_wSkill;
*Index_Out = lpSkULAckPt->m_cIndex;
*cSkillLevel = lpSkULAckPt->m_cSkillLevel;
*itemPos_Out = lpSkULAckPt->m_ItemPos;
return lpSkULAckPt->GetError();
}
unsigned long ParsePacket::HandleCharSkillCreate(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)lpPktBase;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
return lpSkPt->GetError();
}
unsigned long ParsePacket::HandleCharSkillErase(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out, Item::ItemPos* itemPos_Out)
{
LPPktSk lpSkPt = (LPPktSk)lpPktBase;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
*itemPos_Out = lpSkPt->m_ItemPos;
return lpSkPt->GetError();
}
unsigned long ParsePacket::HandleCharSummonCmd(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned char *Cmd_Out, unsigned long *TargetID_Out)
{
LPPktSummonCmd lpSuCPtAck = (LPPktSummonCmd)lpPktBase;
*CharID_Out = lpSuCPtAck->m_dwCharID;
*Cmd_Out = lpSuCPtAck->m_cCmd;
*TargetID_Out = lpSuCPtAck->m_dwTargetID;
return lpSuCPtAck->GetError();
}
unsigned long ParsePacket::HandleCharSummon(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned long *TargetID_Out, POS* lpPos_Out)
{
LPPktSummon lpSummonPt = (LPPktSummon)lpPktBase;
*CharID_Out = lpSummonPt->m_dwCharID;
*TargetID_Out = lpSummonPt->m_dwTargetID;
CNetworkPos& netPos = lpSummonPt->m_NetworkPos;
lpPos_Out->fPointX = netPos.GetXPos();
lpPos_Out->fPointY = netPos.GetYPos();
lpPos_Out->fPointZ = netPos.GetZPos();
return lpSummonPt->GetError();
}
unsigned long ParsePacket::HandleCharSpellInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, unsigned long *EnchantTime_Out,
bool *OnOff_Out)
{
LPPktSpInfo lpSpInfoPt = (LPPktSpInfo)lpPktBase;
*CharID_Out = lpSpInfoPt->m_dwCharID;
*SpellType_Out = lpSpInfoPt->m_cSpellType;
*EnchantLevel_Out = lpSpInfoPt->m_nEnchantLevel;
*EnchantTime_Out = lpSpInfoPt->m_dwEnchantTime;
*OnOff_Out = lpSpInfoPt->m_bOnOff;
return lpSpInfoPt->GetError();
}

View File

@@ -0,0 +1,22 @@
#ifndef _GAMA_CLIENT_PARSE_SKILL_PACKET_H_
#define _GAMA_CLIENT_PARSE_SKILL_PACKET_H_
#include <Item/ItemStructure.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktBase;
namespace ParsePacket
{
// <20><>ų
unsigned long HandleCharSkillLock(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
unsigned long HandleCharSkillUnLock(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out, unsigned char *SkillLevel_Out, Item::ItemPos* itemPos_Out);
unsigned long HandleCharSkillCreate(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
unsigned long HandleCharSkillErase(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out, Item::ItemPos* itemPos_Out);
unsigned long HandleCharSummonCmd(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned char *Cmd_Out, unsigned long *TargetID_Out);
unsigned long HandleCharSummon(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *TargetID_Out, POS* lpPos_Out);
unsigned long HandleCharSpellInfo(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, unsigned long *EnchantTime_Out, bool *OnOff_Out);
};
#endif