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

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

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

525 lines
17 KiB
C++

#include "stdafx.h"
#include "ParseItem.h"
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include "GMMemory.h"
// 매개변수 설명은 패킷 주석을 보시오.
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();
}