#include "stdafx.h" #include "ParseItem.h" #include #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(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(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(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(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(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(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(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(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(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(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(lpESIAck + 1); for (unsigned char cIDIndex = 0; cIDIndex < *cNum; ++cIDIndex) { aryItemID[cIDIndex] = *lpItemID; ++lpItemID; } unsigned char* lpItemGrade = reinterpret_cast(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(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(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(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(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(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(lpPktBase); *dwCharID = lpPktISAck->m_dwCharID; *lpEquipIndex = lpPktISAck->m_equipPos; *lpSocket = lpPktISAck->m_gemPos; *Size = lpPktISAck->m_cSize; *lppBuffer = (lpPktISAck->m_cSize > 0) ? reinterpret_cast(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(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(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(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(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(lpPktBase); *dwCharID = lpPktSpltAck->m_dwCharID; *lpTakeType = lpPktSpltAck->m_TakeType; *Size = lpPktSpltAck->m_cSize; *lppBuffer = (lpPktSpltAck->m_cSize > 0) ? reinterpret_cast(lpPktSpltAck + 1) : 0; return lpPktSpltAck->GetError(); } unsigned long ParsePacket::HandleDeposit(PktBase* lpPktBase, unsigned char *Cmd, unsigned long *dwGold, char *PassSave) { PktDeposit* lpPktDeposit = static_cast(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(lpPktBase); *dwFlag = lpDepositUpdateDB->m_dwTabFlag; *TabNum = lpDepositUpdateDB->m_cTabNum; *Complete = lpDepositUpdateDB->m_bUpdateComplete; *StoreSize = lpDepositUpdateDB->m_usDataSize; *lppStoreBuff = reinterpret_cast(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(lpPktBase); *dwCharID = lpPktUgIAck->m_dwCharID; *dwCurrentGold = lpPktUgIAck->m_dwCurrentGold; *cCurrentMineralNum = lpPktUgIAck->m_cCurrentMineralNum; *Size = lpPktUgIAck->m_cSize; *lppBuffer = (lpPktUgIAck->m_cSize > 0) ? reinterpret_cast(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(lpPktBase); *dwCharID = lpPktIOGAck->m_dwCharID; *dwCurrentGold = lpPktIOGAck->m_dwGold; *cItemSize = lpPktIOGAck->m_cSize; *lppItemBuffer = (lpPktIOGAck->m_cSize > 0) ? reinterpret_cast(lpPktIOGAck + 1) : 0; return lpPktIOGAck->GetError(); } unsigned long ParsePacket::HandleCharItemCompensation(PktBase* lpPktBase, unsigned long *dwCharID) { PktItemCompensation* lpPktICAck = static_cast(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(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(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(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(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(lpExIPt + 1) : 0; return lpExIPt->GetError(); } unsigned long ParsePacket::HandleCharStallOpen(PktBase* lpPktBase, unsigned long *dwCharID, char* StallName) { PktStO* lpStOPt = static_cast(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(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(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(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(lpPktStIInfo + 1); *ItemNum = lpPktStIInfo->m_cItemNum; *dwStallPrice = reinterpret_cast(*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(lpPktBase); *dwCharID = lpTIsPt->m_dwCharID; *TakeNum = lpTIsPt->m_TakeNum; *lppTakeTypes = reinterpret_cast(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(lpPktBase); *dwCharID = lpTGPt->m_dwCharID; *SrcPos = lpTGPt->m_cSrcPos; *DstPos = lpTGPt->m_cDstPos; *dwGold = lpTGPt->m_dwGold; return lpTGPt->GetError(); }