/////////////////////////////////////////////////////////////////////////////////////////////// // // ClientSocket Class // // Last Update : 2003-01-10 // /////////////////////////////////////////////////////////////////////////////////////////////// #ifndef _ClientSocket #define _ClientSocket #include "NetBase.h" #include "UDPList/UDPList.h" // Ŭ¶óÀÌ¾ðÆ® ¸®½ºÆ® #include #include #include #include #include #include const unsigned long WM_CLIENT_SOCKET = RegisterWindowMessage("WM_CLIENT_SOCKET"); const unsigned long WM_UDP_SOCKET = RegisterWindowMessage("WM_UDP_SOCKET"); ////////////////////////////////////////////////////////////////////////////////////////////// // // Ŭ·¡½º Á¤ÀÇ // /////////////////////////////////////////////////////////////////////////////////////////////// class ClientSocket : public NetBase { public: enum CO_SRV { CO_GAME = 0, CO_AUTH = 1 }; enum ListType { ListType_Client = 1, ListType_Party = 2 }; enum ListOper { ListOper_Update = 1, ListOper_Insert = 2 }; enum BindPos { Bind_SavePos = 1 }; enum Hand { Hand_Weapon1 = 1, Hand_Weapon2 = 2 }; enum FameInfoType { FameInfoType_Fame = 1, FameInfoType_Merits = 2 }; enum Require { Require_HPInfo = 0, Require_UDPInfo = 1, Require_Shape = 2 }; enum ChatType { ChatType_Normal = 0, ChatType_Party = 1, ChatType_Friend = 2, ChatType_Guild = 3, ChatType_Notify = 4, ChatType_ClientLog = 5, ChatType_Stall = 6 }; enum CellOper { CellOper_Move = 0, CellOper_Login = 1, CellOper_Logout = 1, CellOper_Respawn = 2 }; enum ItemPos { ItemPos_None = 0, ItemPos_Equip = 1, ItemPos_Inven = 2, ItemPos_QSlot = 3, ItemPos_SSlot = 4, ItemPos_Temp = 6, ItemPos_Upgrade = 7, ItemPos_Exchange = 8, ItemPos_Deposit = 9, ItemPos_Stall = 10 }; enum PartyCmd { PartyCmd_Invite = 0, PartyCmd_Accept = 1, PartyCmd_Refuse = 2, PartyCmd_Banish = 3, PartyCmd_Secession = 4, PartyCmd_Transfer = 5, PartyCmd_Destroy = 6, PartyCmd_Login = 7, PartyCmd_Logout = 8, PartyCmd_Delete = 9, PartyCmd_ReLogin = 10, PartyCmd_FindParty = 11, PartyCmd_FindMember = 12 }; enum StateType { StateType_STR = 1, StateType_DEX = 2, StateType_CON = 3, StateType_INT = 4, StateType_WIS = 5 }; enum Judge { Judge_Front = 0, Judge_Side = 1, Judge_Back = 2, Judge_Guard = 3, Judge_Critical = 4, Judge_Heal = 5, Judge_ManaHeal = 6, Judge_Chant = 7, Judge_Enchant = 8, Judge_Disenchant = 9, Judge_Evade = 10, Judge_Resist = 11, Judge_ManaShell = 12, Judge_Poisoned = 13 }; enum ExchangeCmd { ExchangeCmd_Propose = 0, ExchangeCmd_Accept = 1, ExchangeCmd_Refuse = 2, ExchangeCmd_OK = 3, ExchangeCmd_Cancel = 4, ExchangeCmd_Exchange = 5, ExchangeCmd_Quit = 6, ExchangeCmd_Lock = 7, ExchangeCmd_UnLock = 8 }; enum DuelCmd { DuelCmd_Propose = 0, DuelCmd_Ready = 1, DuelCmd_Refuse = 2, DuelCmd_Logout = 3, DuelCmd_Dead = 4, DuelCmd_PartyPropose = 5, DuelCmd_PartyReady = 6, DuelCmd_RequestPartyInfo = 7, DuelCmd_Cancel = 8 }; enum SpellType { SpellType_None = 0, // Chant SpellType_BattleSong = 1, SpellType_MaintenanceChant = 2, SpellType_AccelerationChant = 3, SpellType_LifeAura = 4, // Enchant SpellType_Stealth = 17, SpellType_ManaShell = 18, SpellType_Encourage = 19, SpellType_EnchantWeapon = 20, SpellType_BrightArmor = 21, SpellType_HardenSkin = 22, SpellType_Flexibility = 23, SpellType_Guard = 24, SpellType_Hold = 25, SpellType_Stun = 26, SpellType_Frozen = 27, SpellType_Poisoned = 28, SpellType_LowerStrength = 29, // Other SpellType_Invincible = 30 }; enum StallCmd { StallCmd_Register = 0, StallCmd_ChangePrice = 1, StallCmd_Cancel = 2 }; enum AdminCmd { MoveZoneChar = 1, MoveZoneParty = 2, MoveChar = 3, MoveParty = 4, RespawnChar = 5, RespawnParty = 6, KillChar = 7, KillParty = 8, DuelInit = 9, CreateItem = 10, CreateMon = 11, InfoChar = 12 }; private: HWND m_hMainWnd; IN_ADDR m_RegAddress; void* m_RegPointer; SOCKADDR_IN m_PubUDPAddress; SOCKADDR_IN m_PriUDPAddress; SOCKADDR_IN m_UDPAgentAddress; DWORD m_UpdateCount; int m_ConnectServer; public: SOCKADDR_IN m_GSSUDPAddress; UDPList* m_ClientList; UDPList* m_PartyList; UDPList* m_InstanceClientList; /////////////////////////////////////////////////////////////////////////////////////////////// // // ClientSocket ±âº» Ŭ·¡½º ¸Þ¼Òµå // /////////////////////////////////////////////////////////////////////////////////////////////// public: ClientSocket(HWND hWnd_In); virtual ~ClientSocket(void); inline IN_ADDR GetRegAddress(void) { return m_RegAddress; } inline char* GetRegString(void) { return inet_ntoa(m_RegAddress); } inline bool IsEmptyRegAddress(void) { return (0 == m_RegAddress.S_un.S_addr) ? true : false; } inline void CrearRegAddress(void) { memset(&m_RegAddress, 0, sizeof(SOCKADDR_IN)); } inline SOCKADDR_IN GetPubAddress(void) { return m_PubUDPAddress; } inline SOCKADDR_IN GetPriAddress(void) { return m_PriUDPAddress; } inline SOCKADDR_IN GetUDPAddress(void) { return m_UDPAgentAddress; } inline int GetConnectServer() { return m_ConnectServer; } DWORD InsertIntoAddressList(unsigned short List_In, DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In); bool DeleteFromAddressList(unsigned short List_In, DWORD CharID_In); bool DeleteFromAddressList(unsigned short List_In, SOCKADDR_IN Address_In); bool IsExistToList(unsigned short List_In, DWORD CharID_In); DWORD GetListCount(unsigned short List_In); bool RegistInstanceUDPList(DWORD CharID_In); void DeleteInstanceUDPList(); bool IsRealIP(void); PEERTYPE GetPeerType(SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In); bool UDPSendList(WSABUF &SendBuf_In, UDPList* lpList_In); bool UDPSendList(WSABUF &SendBuf_In, UDPList* lpList_In, DWORD CharID_In); bool UDPRecv(void); bool ConnectToAuthServer(char *Address_In); bool ConnectToGameServer(char *Address_In); bool Disconnect(void); bool SendSysPing(void); bool CharMoveZone(char Zone_In, POS& NewPos_In); DWORD HandleCharMoveZone(char *pBuffer_In, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out); bool ServerZone(char Zone_In, char Channel_In); DWORD HandleServerZone(char *pBuffer_In, DWORD *ServerID_Out); bool UserLogin(DWORD SessionID_In, DWORD UserID_In, DWORD ServerID_In, DWORD ClientVer_In); bool CharSelect(DWORD UserID_In, DWORD CharID_In); bool CharCreate(DWORD UserID_In, DWORD SlotNum_In, CHAR_CREATE &Create_In); bool CharDelete(DWORD UserID_In, DWORD CharID_In, DWORD SlotNum_In); DWORD HandleUserLogin(char *pBuffer_In, DWORD *UserID_Out, LPCHAR_VIEW CharRecode_Out); DWORD HandleCharSelect(char *pBuffer_In, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out); DWORD HandleCharCreate(char *pBuffer_In, DWORD *CharID_Out, DWORD *SlotNum_Out, LPCHAR_VIEW lpCharView_Out); DWORD HandleCharDelete(char *pBuffer_In, DWORD *UserID_Out, DWORD *SlotNum_Out); bool CharLogin(DWORD UserID_In, DWORD CharID_In, DWORD SessionID_In); bool CharLogout(DWORD CharID_In); bool CharUpdateAddress(DWORD CharID_In); bool CharAddressInfo(DWORD CharID_In, DWORD TargetID_In); bool CharRequireInfo(DWORD SenderID_In, DWORD TargetID_In, unsigned char Cmd_In); bool CharMove(DWORD CharID_In, LPPOS Pos_In, float Dir_In, unsigned short UAct_In, unsigned short LAct_In, char Level_In, DWORD ChantEf_In, DWORD EnchantEf_In); bool CharMoveUpdate(DWORD CharID_In, bool SitMode_In, LPPOS Pos_In, float Dir_In); bool CharChat(DWORD CharID_In, unsigned short Cmd_In, char* Message_In, int MessageSize_In); bool CharWhisper(char* SenderName_In, char *RecverName_In, char* Message_In, int MessageSize_In); bool CharAttack(DWORD CharID_In, LPPOS lpPos_In, float Dir_In, AtType &AtType_In, AtNode &AtNode_In); bool CharAttackInfo(DWORD CharID_In, AtType &AtType_In, unsigned char DefenserNum_In, LPDefenserNode lpNode_In); bool CharRespawn(DWORD CharID_In, unsigned char cCmd_In, POS& Pos_In); bool CharShapeInfo(LPCHAR_VIEW lpCharView_In, unsigned char cSelectedHands_In, unsigned long dwStatusFlag_In, char *StallName_In); bool CharShapeInfo(DWORD CharID_In, LPCHAR_VIEW lpCharView_In, unsigned char cSelectedHands_In, unsigned long dwStatusFlag_In, char *StallName_In); bool CharPickUp(DWORD CharID_In, DWORD ObjectID_In, Item::ItemPos Index_In); bool CharPullDown(DWORD CharID_In, Item::ItemPos Index_In, unsigned char cNum); bool CharTakeItem(DWORD CharID_In, TakeType TakeType_In); bool CharSwapItem(DWORD CharID_In, TakeType SrcType_In, TakeType DstType_In); bool CharTradeItem(DWORD CharID_In, DWORD NPCID_In, unsigned short ItemID_In, TakeType TakeType_In); bool CharRepairItem(DWORD NPCID_In, Item::ItemPos* lpIndex_In, DWORD Gold_In); bool CharUseItem(DWORD SenderID_In, DWORD Recver_In, Item::ItemPos* lpIndex_In); bool CharCastObject(DWORD SenderID_In, DWORD RecverID_In, CastObject &CastObject_In); bool CharCastObjectInfo(DWORD SenderID_In, DWORD RecverID_In, CastObject &CastObject_In); bool CharInstallSocket(DWORD CharID_In, Item::ItemPos* lpEquipIndex_In, Item::ItemPos* lpSocket_In); bool CharSuicide(DWORD CharID_In); bool CharBindPos(DWORD NPCID_In, unsigned char Cmd_In, LPPOS lpPos_In, char Zone_In); bool CharIncreasePoint(DWORD CharID_In, unsigned char StateType_In); bool CharClassUpgrade(DWORD CharID_In, unsigned char ClassID_In); bool CharSkillLock(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In); bool CharSkillUnLock(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In, Item::ItemPos* lpIndex_In); bool CharSkillCreate(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In); bool CharSkillErase(DWORD CharID_In, unsigned short SkillID_In, unsigned char Index_In); bool CharPartyCmd(DWORD SenderID_In, DWORD ReferenceID_In, DWORD PartyID_In, unsigned short Cmd_In); bool CharPartyMemInfo(DWORD CharID_In, DWORD PartyID_In, unsigned char Class_In, char Level_In, unsigned short MaxHP_In, short CurHP_In, unsigned short MaxMP_In, short CurMP_In, DWORD Chant_In, DWORD Enchant_In); bool CharPartyFind(DWORD CharID_In); bool CharUpgradeItem(DWORD CharID_In, unsigned char MineralNum_In); bool CharLevelUpInfo(DWORD CharID_In, unsigned char Level_In); bool CharSplitItem(DWORD CharID_In, TakeType &TakeType_In); bool CharQuickSlotMove(TakeType &TakeType_In); bool CharSwitchHand(unsigned char SelectHand_In); bool CharTakeItems(DWORD CharID_In, unsigned char TakeNum_In, LPTakeType lpTakeTypes_In); bool CharTakeGold(DWORD CharID_In, unsigned char SrcPos_In, unsigned char DstPos_In, DWORD Gold_In); bool CharExchangeCmd(DWORD SenderID_In, DWORD RecverID_In, unsigned char Cmd_In); bool CharPartyData(DWORD CharID_In, unsigned short Cmd_In, unsigned short Len_In, void *Data_In); bool CharControlOption(DWORD CharID_In, RejectOption &Reject_In); bool CharDuelCmd(DWORD SenderID_In, DWORD RecverID_In, unsigned char Cmd_In); bool CharFameInfo(DWORD CharID_In, unsigned char Cmd_In); // ³ëÁ¡»ó bool CharStallOpen(DWORD CharID_In, char* StallName_In); bool CharStallRegisterItem(DWORD CharID_In, TakeType TakeType_In, unsigned long Price_In, unsigned char Cmd_In); bool CharStallEnter(DWORD CustomerID_In, DWORD Owner_In); // Ä£±¸ °ü·Ã bool CharFriendAddRequest(char* szName_In, PktFriendAddReq::CMD addType); bool CharFriendRemoveRequest(unsigned long dwCID, PktFriendRemoveReq::CMD removeType); bool CharFriendEtcRequest(unsigned long dwCID, unsigned long dwData, PktFriendEtc::CMD etcType); bool StoreLogin(char *Password_In, char PassSave_In); bool StoreLogout(void); bool StoreBuyTab(char TabNum_In); bool StoreChangePass(char *Password_In, char *NewPassword_In); bool CharAdmin(unsigned short Cmd_In, char* Name_In, char Zone_In, char Channel_In, unsigned short ProtoTypeID, POS& Pos_In); DWORD HandleDeposit(char *pBuffer_In, unsigned char *Cmd_Out, DWORD *Gold_Out, char *PassSave_Out); DWORD HandleCharLogin(char *pBuffer_In, char *Admin_Out, LPCHAR_INFOST lpCharInfo_Out, LPSKILL lpSkill_Out, LPQUICK lpQuick_Out, LPCHAR_POS lpPos_Out, DWORD *ServerTime_Out, 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); DWORD HandleCharLogout(char *pBuffer_In, DWORD *CharID_Out); DWORD HandleDepositUpdate(char *pBuffer_In, DWORD *Flag_Out, unsigned char *TabNum_Out, bool *Complete_Out, unsigned short *StoreSize_Out, char **lppStoreBuff_Out); DWORD HandleCharUpdateAddress(char *pBuffer_In); DWORD HandleCharAddressInfo(char *pBuffer_In, DWORD *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out); DWORD HandleCharRequireInfo(char *pBuffer_In, DWORD *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out, unsigned char *Cmd_Out); DWORD HandleCharMove(char *pBuffer_In, DWORD *CharID_Out, LPPOS Pos_Out, float *Dir_Out, unsigned short *UAct_Out, unsigned short *LAct_Out, char *Level_Out, DWORD *ChantEf_Out, DWORD *EnchantEf_Out, DWORD *PtCount_Out); DWORD HandleCharChat(char *pBuffer_In, DWORD *CharID_Out, unsigned short *Cmd_Out, char *Message_Out); DWORD HandleCharWhisper(char *pBuffer_In, char *SenderName_Out, char *RecverName_Out, char *Message_Out); DWORD HandleCharCellLogin(char *pBuffer_In, DWORD *CharID_Out, LPPOS Pos_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out, unsigned char *Cmd_Out); DWORD HandleCharCellLogout(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Cmd_Out); DWORD HandleMonMove(char *pBuffer_In, DWORD *MonID_Out, LPPOS lpPos_Out, float *Dir_Out, float *Vec_Out, unsigned short *Act_Out, unsigned short *AniNum_Out); DWORD HandleCharAttack(char *pBuffer_In, DWORD *CharID_Out, LPAtType lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out, DWORD *RightIndex_Out, DWORD *RightValue_Out, DWORD *LeftIndex_Out, DWORD *LeftValue_Out, char *Judge_Out, unsigned char *DefenserNum_Out, LPDefenserNode *lppNode_Out); DWORD HandleCharAttackInfo(char *pBuffer_In, DWORD *CharID_Out, LPAtType lpAtType_Out, unsigned char *DefenserNum_Out, LPDefenserNode *lppNode_Out); DWORD HandleCharRespawn(char *pBuffer_In, DWORD *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out, LPPOS lpPos_Out, __int64 *Exp_Out); DWORD HandleCharAttacked(char *pBuffer_In, DWORD *AtCharID_Out, AtType *AtType_Out, LPPOS lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out, unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned char *MyIndex_Out, unsigned char *MyValue_Out); DWORD HandleCharAward(char *pBuffer_In, DWORD *CharID_Out, DWORD *Exp_Out); DWORD HandleCharShapeInfo(char *pBuffer_In, LPCHAR_VIEW lpCharView_Out, unsigned char *cSelectedHands_Out, unsigned long *dwStatusFlag_Out, char *StallName_Out); DWORD HandleCharPickUp(char *pBuffer_In, DWORD *CharID_Out, DWORD *ObjectID_Out, Item::ItemPos* lpIndex_Out, DWORD *Gold_Out, DWORD *Size_Out, unsigned char* cNum_Out, char **lppBuffer_Out); DWORD HandleCharPickUpInfo(char *pBuffer_In, DWORD *CharID_Out, DWORD *ObjectID_Out); DWORD HandleCharPullDown(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpIndex_Out, LPFieldObject lpFieldObject_Out); DWORD HandleCharPullDownInfo(char *pBuffer_In, DWORD *CharID_Out, LPFieldObject lpFieldObject_Out); DWORD HandleGameCellInfo(char *pBuffer_In, unsigned char *ObjectNum_Out, LPFieldObject *lppFieldObject_Out); DWORD HandleCharTakeItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpTakeType_Out); DWORD HandleCharSwapItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpSrcType_Out, LPTakeType lpDstType_Out); DWORD HandleCharTradeItem(char *pBuffer_In, DWORD *CharID_Out, DWORD *NPCID_Out, unsigned char *Pos_Out, Item::ItemPos* lpIndex_Out, unsigned char *Num_Out, DWORD *Gold_Out, unsigned short *Size_Out, char **lppBuffer_Out); DWORD HandleCharRepairItem(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpIndex_Out, DWORD *Gold_Out); DWORD HandleCharUseItem(char *pBuffer_In, DWORD *SenderID_Out, DWORD *Recver_Out, Item::ItemPos* lpIndex_Out); DWORD HandleCharCastObject(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, LPCastObject lpCastObject); DWORD HandleCharCastObjectInfo(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, LPCastObject lpCastObject); DWORD HandleCharInstallSocket(char *pBuffer_In, DWORD *CharID_Out, Item::ItemPos* lpEquipIndex_Out, Item::ItemPos* lpSocket_Out, unsigned short *Size_Out, char **lppBuffer_Out); DWORD HandleCharSuicide(char *pBuffer_In, DWORD *CharID_Out, LPPOS lpPos_Out); DWORD HandleCharBindPos(char *pBuffer_In, DWORD *NPCID_Out, unsigned char *Cmd_Out, LPPOS lpPos_Out, char *Zone_Out); DWORD HandleCharLevelUp(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Level_Out, LPChState lpChState_Out); DWORD HandleCharIncreasePoint(char *pBuffer_In, DWORD *CharID_Out, LPChState lpChState_Out); DWORD HandleCharClassUpgrade(char *pBuffer_In, DWORD *CharID_Out, unsigned short *ClassID_Out, LPChState lpState_Out, char *Index_Out, unsigned short *Skill_Out); DWORD HandleCharSkillLock(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out); DWORD HandleCharSkillUnLock(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out, Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out); DWORD HandleCharSkillCreate(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out); DWORD HandleCharSkillErase(char *pBuffer_In, DWORD *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out); DWORD HandleCharPartyInfo(char *pBuffer_In, LPPARTY lpParty_Out); DWORD HandleCharPartyCmd(char *pBuffer_In, LPAddressInfo SenderAddress_Out, char *SenderName_Out, DWORD *SenderID_Out, DWORD *ReferenceID_Out, DWORD *PartyID_Out, unsigned short *Cmd_Out); DWORD HandleCharPartyCmdInfo(char *pBuffer_In, DWORD *MemberID_Out, DWORD *PartyID_Out, unsigned short *Cmd_Out); DWORD HandleCharPartyMemInfo(char *pBuffer_In, DWORD *CharID_Out, DWORD *PartyID_Out, unsigned char *Class_Out, char *Level_Out, unsigned short *MaxHP_Out, unsigned short *CurHP_Out, unsigned short *MaxMP_Out, unsigned short *CurMP_Out, DWORD *Chant_Out, DWORD *Enchant_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out); DWORD HandleCharPartyFind(char *pBuffer_In, DWORD *CharID_Out, unsigned char *MemberFindPartyNum_Out, unsigned char *PartyFindMemberNum_Out, LPMemberFindParty *lppMemberFindParty_Out, LPPartyFindMember *lppPartyFindMember_Out); DWORD HandleCharHPRegen(char *pBuffer_In, DWORD *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out); DWORD HandleCharUpgradeItem(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Size_Out, char **lppBuffer_Out); DWORD HandleCharLevelUpInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Level_Out); DWORD HandleCharSplitItem(char *pBuffer_In, DWORD *CharID_Out, LPTakeType lpTakeType_Out, unsigned char *Size_Out, char **lppBuffer_Out); DWORD HandleCharQuickSlotMove(char *pBuffer_In, LPTakeType lpTakeType_Out); DWORD HandleCharSwitchHand(char *pBuffer_In, unsigned char *SelectHand_Out); DWORD HandleCharTakeItems(char *pBuffer_In, DWORD *CharID_Out, unsigned char *TakeNum_Out, LPTakeType *lppTakeTypes_Out); DWORD HandleCharTakeGold(char *pBuffer_In, DWORD *CharID_Out, unsigned char *SrcPos_Out, unsigned char *DstPos_Out, DWORD *Gold_Out); DWORD HandleCharExchangeCmd(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, unsigned char *Cmd_Out); DWORD HandleCharExchangeItem(char *pBuffer_In, DWORD *CharID_Out, DWORD *Size_Out, Item::ItemPos* lpIndex_Out, unsigned char *Type_Out, unsigned char *Num_Out, char **lppBuffer_Out); DWORD HandleCellBroadCasting(char *pBuffer_In, unsigned short *CharNum_Out, LPAddressInfo *lppAddress_Out); DWORD HandleControlOption(char *pBuffer_In, DWORD *CharID_Out, LPRejectOption Reject_Out); DWORD HandleCharDuelCmd(char *pBuffer_In, DWORD *SenderID_Out, DWORD *RecverID_Out, unsigned char *Cmd_Out); DWORD HandleCharTeamBattleInfo(char *pBuffer_In, unsigned long *CharID_Out, char *ChallengerName_Out, unsigned char *Cmd_Out, unsigned char *MemberNum_Out, unsigned long *MemberID_Out, unsigned char *MemberLevel_Out); DWORD HandleCharFameInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *Cmd_Out, unsigned long *FameOrMerits_Out, unsigned char *RankingByRace_Out, unsigned char *RankingByClass_Out); DWORD HandleCharSpellInfo(char *pBuffer_In, DWORD *CharID_Out, unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, bool *OnOff_Out); // ³ëÁ¡»ó DWORD HandleCharStallOpen(char *pBuffer_In, DWORD *CharID_Out, char* StallName_Out); DWORD HandleCharStallRegisterItem(char *pBuffer_In, DWORD *CharID_Out, TakeType *TakeType_Out, unsigned long *Price_Out, unsigned char *Cmd_Out); DWORD HandleCharStallEnter(char *pBuffer_In, DWORD *CustomerID_Out, DWORD *Owner_Out); DWORD HandleCharStallItemInfo(char *pBuffer_In, unsigned long *StallSize_Out, char **lppStallBuff_Out, unsigned short *ItemNum_Out, unsigned long **StallPrice_Out); // Ä£±¸ °ü·Ã DWORD HandleCharFriendDB(char *pBuffer_In, unsigned char* cDataType_Out, char **ppFriendListData_Out, DWORD *dwDataSize_Out); DWORD HandleCharFriendAck(char *pBuffer_In, unsigned char* cCmd_Out, DWORD *dwCID_Out); DWORD HandleCharFriendRegistered(char *pBuffer_In, char* szName_Out); DWORD HandleCharEliteBonus(char *pBuffer_In, char *Nation_Out, unsigned char *Level_Out); }; #endif