#ifndef __PACKETSTRUCT_AG_H__ #define __PACKETSTRUCT_AG_H__ #include #include #include #include #pragma pack(push,1) #define PACKET_AG_OPEN( c, p ) struct MSG_##p : public MSG_BASE_FORWARD { MSG_##p(){ m_byCategory = c; m_byProtocol = p; } #define PACKET_AG_CLOSE }; #define PACKET_AG_INHERIT_OPEN( c, p, b ) struct MSG_##p : public b { MSG_##p(){ m_byCategory = c; m_byProtocol = p; } #define PACKET_AG_INHERIT_CLOSE }; // _NA000000_DBQUERY_REVERSAL_STATE_PREVENTION PACKET_AG_OPEN(AG_CONNECTION, AG_CONNECTION_DBCONNECT_UPDATE_CMD) int db_connector_index_; PACKET_AG_CLOSE; PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_DISCONNECT_CMD ) //_NA_0_20091118_GAMEROOM_BATTLE_RESULT BYTE m_AbNormalExit; // 0 : NormalExit, else AbNormalExit PACKET_AG_CLOSE /* PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_UNREGISTER_SYN ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_UNREGISTER_ACK ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_UNREGISTER_NAK ) DWORD m_dwErrorCode; PACKET_AG_CLOSE */ PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_UNREGISTER_CMD ) BYTE m_byDisonnectCode; PACKET_AG_CLOSE #ifdef __NA001334_090420_SERVER_SELECT_FACILITY__ PACKET_AG_OPEN(AG_CONNECTION, AG_CONNECTION_SERVER_SELECT_CONTROL_SYN) enum eControl { eControl_StartTransaction, // need ack - side effect - can't change behave state eControl_StopTransaction, // notify }; BYTE m_Control; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_CONNECTION, AG_CONNECTION_SERVER_SELECT_CONTROL_ACK) DWORD m_Result; // RC::eROOM_RESULT PACKET_AG_CLOSE #endif PACKET_AG_OPEN( AG_CONNECTION, AG_WORLDSERVER_INFO_CMD ) BYTE m_bIsConnectedWorld; // ¿ùµå¼­¹ö¿ÍÀÇ Á¢¼ÓÀ¯¹«¸¦ ¾Ë·ÁÁØ´Ù. PACKET_AG_CLOSE PACKET_AG_OPEN(AG_CONNECTION, AG_CONNECTION_SERVER_INFO_CMD) BYTE pvp_enabled_; // pvp enable mode control by a agent server BYTE channel_id_; // (CHANGES) (f100424.3L) add channel id to synchronize or debug PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_DISCONNECT_SERVER_CMD ) eSERVER_TYPE m_ServerType; BYTE m_byDisonnectCode; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_SYNC, AG_SYNC_PLAYER_ENTER_SYN) // (f100623.1L) change a data types EngineFileChecksum checksum_list_; uint8_t is_dummy_client_test_; // to support the agent server dummy client uint8_t tail_guard_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_SYNC, AG_SYNC_PLAYER_ENTER_ACK ) float m_fPos[3]; SLOTCODE m_TransSkillCode; // _NA001955_110210_WING_COSTUME // CHANGES: f110607.3L, added field to support whether his wings spreading status has continued. bool continued_wings_spreading_; DOMINATION_GUILD_INFO m_GuildInfo; #ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION sDOMINATION_CONTINENT_LORD_INFO m_ContinentLordInfo; //´ë·ú ¿µÁÖ Á¤º¸ #endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION PACKET_AG_CLOSE PACKET_AG_OPEN( AG_SYNC, AG_SYNC_PLAYER_ENTER_NAK ) DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_SYNC, AG_SYNC_PLAYER_WARP_SYN) // (f100623.1L) change a data types EngineFileChecksum checksum_list_; uint8_t is_dummy_client_test_; // to support the agent server dummy client uint8_t tail_guard_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_SYNC, AG_SYNC_PLAYER_WARP_ACK ) float m_fPos[3]; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_SYNC, AG_SYNC_PLAYER_WARP_NAK ) DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CONNECTION, AG_WORLDSERVER_ABUSING_USER_VERIFY_QUERY_CMD ) CHARGUID m_CharGuid; eABUSE_SUB_TYPE m_eAbuseSubType; PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // CHARINFO //---------------------------------------------------------------------------------- PACKET_AG_OPEN( AG_CHARINFO, AG_CHARINFO_CHAR_CMD ) PLAYERHP m_MaxHP; PLAYERHP m_HP; MPTYPE m_MaxMP; MPTYPE m_MP; INT m_dwCHuntingVCount; // °æÀïÇåÆÃ ½Â¸®È½¼ö INT m_dwCHuntingTotCount; // °æÀïÇåÆÃ Âü¿©È½¼ö BYTE m_byChaoState; // Ä«¿À»óÅ PLAYERSD m_MaxSD; PLAYERSD m_SD; #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE PLAYERFP max_FP; PLAYERFP cur_FP; #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHARINFO, AG_CHARINFO_FIELD_POS_FOR_RETURN_PARTY_CMD ) WzVector m_ReturnPos; FIELDCODE m_ReturnFieldCode; eZONETYPE m_ReturnZoneType; ZONEKEY m_ReturnZoneKey; WORD m_PartyKey; CHARGUID m_CharGUID; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_CHARINFO, AG_CHARINFO_PCBANG_BILL_CMD) DWORD m_PcRoomId; // ReservedValue PACKET_AG_CLOSE //!~ _NA_006413_20130201_PREMIUMSERVICE_ITEM PACKET_AG_OPEN(AG_CHARINFO, AG_CHARINFO_PREMIUMSERVICE_BILL_CMD) DWORD premiumservice_; PACKET_AG_CLOSE //~! _NA_006413_20130201_PREMIUMSERVICE_ITEM //---------------------------------------------------------------------------------- // // ZONE // //---------------------------------------------------------------------------------- // ·Îºñ »ý¼º PACKET_AG_OPEN( AG_ZONE, AG_ZONE_LOBBY_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; TCHAR m_pszRoomTitle[MAX_ROOMTITLE_LENGTH]; TCHAR m_pszRoomPWD[MAX_ROOMPASSWORD_LENGTH]; BASE_ROOMINFO m_RoomInfo; //< »ý¼ºÇÒ ¹æ Á¤º¸ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_HUNTING_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; TCHAR m_pszRoomTitle[MAX_ROOMTITLE_LENGTH]; TCHAR m_pszRoomPWD[MAX_ROOMPASSWORD_LENGTH]; BASE_ROOMINFO m_RoomInfo; //< »ý¼ºÇÒ ¹æ Á¤º¸ ADDITIONAL_ROOMINFO m_AdditionalInfo; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_MISSION_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; eZONE_RULESET::eRules m_Rules; //__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ // TCHAR m_pszRoomTitle[MAX_ROOMTITLE_LENGTH]; TCHAR m_pszRoomPWD[MAX_ROOMPASSWORD_LENGTH]; BASE_ROOMINFO m_RoomInfo; //< »ý¼ºÇÒ ¹æ Á¤º¸ PartyZoneType party_zone_type; //_NA_003649_20111115_BATTLE_ZONE_HARDMODE PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_PVP_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; TCHAR m_pszRoomTitle[MAX_ROOMTITLE_LENGTH]; TCHAR m_pszRoomPWD[MAX_ROOMPASSWORD_LENGTH]; BASE_ROOMINFO m_RoomInfo; //< »ý¼ºÇÒ ¹æ Á¤º¸ ADDITIONAL_PVPINFO m_AdditionalPVPInfo; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CHUNTION_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; TCHAR m_pszRoomTitle[MAX_ROOMTITLE_LENGTH]; TCHAR m_pszRoomPWD[MAX_ROOMPASSWORD_LENGTH]; BASE_ROOMINFO m_RoomInfo; //< »ý¼ºÇÒ ¹æ Á¤º¸ ADDITIONAL_CHUNTINGINFO m_AdditionalInfo; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_PVP_INFO_CMD ) KEYTYPE m_RoomKey; BYTE m_Count; struct PVP_TEAM_INFO { DWORD m_dwPlayerKey; BYTE m_Team; } m_Info[MAX_PARTYMEMBER_NUM]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_Info); return static_cast(kMinSize + sizeof(m_Info[0]) * m_Count); } PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_VILLAGE_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_FIELD_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_DOMINATION_FIELD_CREATE_CMD ) MAPCODE m_MapCode; KEYTYPE m_RoomKey; PACKET_AG_CLOSE //_NA_008069_20150210_ADD_SPA_SYSTEM PACKET_AG_OPEN( AG_ZONE, AG_ZONE_SPAFIELD_CREATE_CMD) MAPCODE map_code; KEYTYPE room_key; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_DOMINATION_FIELD_INFO_SYN ) KEYTYPE m_RoomKey; eDOMINATION_EVENT_STATE m_byEventState; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_DOMINATION_FIELD_INFO_ACK ) KEYTYPE m_RoomKey; GUILDGUID m_offenceGuild; GUILDGUID m_defenceGuild; eDOMINATION_EVENT_TYPE m_eSetType; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_DOMINATION_FIELD_INFO_NAK ) KEYTYPE m_RoomKey; DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_DOMINATION_REQ_KICK_CMD ) MAPCODE m_mapCode; USERGUID m_userGuid; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_DESTROY_CMD ) KEYTYPE m_RoomKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_JOIN_CMD ) //BYTE m_byRoomType; KEYTYPE m_RoomKey; MAPCODE m_wFieldCode; DWORD m_dwAreaID; WzVector m_vStartPos; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_JOIN_SYN ) BYTE m_byRoomType; //< eZONETYPE DWORD m_dwPlayerKey; BYTE m_bySelectedCharIndex; #ifdef __CH1305_090303_ACCOUNT_ID_LENGTH_EXTENTION__ TCHAR m_pszUserID[ID_MAX_LEN + 1]; #else TCHAR m_pszUserID[ID_MAX_LEN]; #endif char m_pszUserIP[IP_MAX_LEN]; DWORD m_dwCharGUID; KEYTYPE m_RoomKey; DWORD m_dwReservedValue; // ¿¹¾à (0:ÀϹݻç¿ëÀÚ, ³ª¸ÓÁö°ªÀº PC¹æ Á¢¼ÓÀÚ UID) BYTE m_bySts; // À¯Àú»óÅÂ(100ÀÌ»óÀº GMµî±Þ) time_t m_LoginTime_t; MAPCODE m_wFieldCode; DWORD m_dwAreaID; WzVector m_vStartPos; bool m_bIsFirstJoin; BYTE m_PCRoomSts; #ifdef __CN_OO0510__FATIGUE_MATCHING_UPDATE BYTE m_byAge; BYTE m_byRealNameAuth; #endif //__CN_OO0510__FATIGUE_MATCHING_UPDATE BYTE m_byApplyFieldCode; // Ư¼öÇÑ °æ¿ì Á¦¿ÜÇϰí, FieldCode Àû¿ëÇÏÁö ¾Ê´Â °æ¿ì¸¦ º¯°æ½Ã۱â À§ÇÑ ÄÚµå 0, 1(apply) GUILDGUID m_GuildGuid; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_JOIN_ACK ) //·Îµù Áß ºñÁ¤»ó Á¾·á¸¦ À§ÇÑ °ªµé... WzVector ReturnPos; FIELDCODE ReturnFieldCode; eZONETYPE ReturnZoneType; KEYTYPE ReturnZoneKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_JOIN_NAK ) DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_LEAVE_CMD ) KEYTYPE m_RoomKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_LEAVE_SYN ) BYTE m_byRoomType; //< eZONETYPE KEYTYPE m_RoomKey; BYTE m_ToRoomType; //³ª°¡¼­ °¡·Á´Â ¹æÅ¸ÀÔ. PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_LEAVE_ACK ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_ROOM_LEAVE_NAK ) DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_MASTER_CHANGED_CMD ) KEYTYPE m_RoomKey; DWORD m_dwMasterKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_MISSION_LEAVE_CMD ) enum eLeaveType { eLeaveType_Default, eLeaveType_Target, eLeaveType_Count }; BYTE m_LeaveType; //eLeaveType MAPCODE m_ReturnMapCode; //if(m_LeaveType == eLeaveType_Target) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CHUNTING_LEAVE_CMD ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CHUNTING_COMPETITION_END_CMD ) KEYTYPE m_RoomKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_PORTAL_FIELD_MOVE_SYN ) WORD m_wIndex; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_PORTAL_FIELD_MOVE_ACK ) WORD m_wIndex; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_PORTAL_FIELD_MOVE_NAK ) BYTE m_byErrorCode; PACKET_AG_CLOSE // Çʵ忡¼­ Á×¾úÀ»´ë, ¸¶À»·Î À̵¿ ÆÐŶ. PACKET_AG_OPEN( AG_ZONE, AG_ZONE_RETURN_VILLAGE_SYN ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_RETURN_VILLAGE_ACK ) WORD m_wMapCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_RETURN_VILLAGE_NAK ) BYTE m_byErrorCode; PACKET_AG_CLOSE // ¹æÀÇ SpecialTypeÀÌ ¹Ù²ñ PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CHANGE_SPECIALTYPE_CMD ) KEYTYPE m_RoomKey; BYTE m_SpecialType; // eROOM_SPECIAL_TYPE PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_TUTORIAL_SKIP_SYN ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_TUTORIAL_SKIP_ACK ) PACKET_AG_CLOSE // ¹æÀåÀÌ ÀÖ´Â Çʵå,À§Ä¡µîÀ» ¿äû PACKET_AG_OPEN( AG_ZONE, AG_ZONE_RETURN_TO_ROOM_INFO_SYN ) DWORD m_dwRequestUserKey; WORD m_wPartyKey; inline DWORD& REQUEST_USER_KEY() { return m_dwRequestUserKey; } inline WORD& PARTY_KEY() { return m_wPartyKey; } PACKET_AG_CLOSE // ¹æÀåÀÌ ÀÖ´Â Çʵå,À§Ä¡µîÀ» ¿äû¿¡ ´ëÇÑ ÀÀ´ä (TRUE, FALSE Æ÷ÇÔ) PACKET_AG_OPEN( AG_ZONE, AG_ZONE_RETURN_TO_ROOM_INFO_ACK ) enum eRESULT { FAIL = 0, SUCCESS = 1, }; BYTE m_byResult; DWORD m_dwRequestUserKey; //----- if m_byResult is FAIL, at this point, message size is end. ----- WORD m_wPartyKey; KEYTYPE m_ktZONETYPE; MAPCODE m_mcMAPCODE; FIELDCODE m_fcFIELDCODE; WzVector m_wvRndPosOfMaster; inline BYTE RESULT() { return m_byResult; } inline DWORD& REQUEST_USER_KEY() { return m_dwRequestUserKey; } inline WORD& PARTY_KEY() { return m_wPartyKey; } inline KEYTYPE& ZONE_KEY() { return m_ktZONETYPE; } inline MAPCODE& MAP_CODE() { return m_mcMAPCODE; } inline FIELDCODE& FIELD_CODE() { return m_fcFIELDCODE; } inline WzVector& RNDPOSofMASTER() { return m_wvRndPosOfMaster; } uint16_t GetSize() const { if (m_byResult == this->SUCCESS) { return sizeof(*this); }; return static_cast((uint8_t*)&m_wPartyKey - (uint8_t*)this); }; PACKET_AG_CLOSE //AG_ZONE_RETURN_TO_ROOM_SYN , //AG_ZONE_RETURN_TO_ROOM_ACK PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_SSQ_JOIN_INFO_SYN, MSG_CG_ZONE_EX_SSQ_JOIN_INFO_SYN ) DWORD m_CodeOfSSQ; inline WORD GetSize() const { return sizeof(*this); } PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_SSQ_JOIN_INFO_ACK, MSG_CG_ZONE_EX_SSQ_JOIN_INFO_ACK ) SLOTCODE m_ItemCode; // Addin inline VOID SetSuccessResult( const MAPCODE CodeOfSSQ, const SLOTCODE itemCode ) { m_Result = SUCCESS; RETINFO_SUCCESS.m_CodeOfSSQ = CodeOfSSQ; m_ItemCode = itemCode; } inline WORD GetSize() const { const WORD DEF_SIZE = sizeof(MSG_BASE_FORWARD) + sizeof(BYTE); return SUCCESS == m_Result ? (WORD)( DEF_SIZE + max( sizeof(RETINFO_SUCCESS), sizeof(RETINFO_FAIL) ) + sizeof(m_ItemCode) ) : (WORD)( DEF_SIZE + sizeof(RETINFO_FAIL) ) ; } PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_SSQ_JOIN_SYN, MSG_CG_ZONE_EX_SSQ_JOIN_SYN ) PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_SSQ_JOIN_ACK, MSG_CG_ZONE_EX_SSQ_JOIN_ACK ) PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_SSQ_ROOM_CTRL_CMD, MSG_CG_STATUS_SSQ_INFO_BRD ) PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_SSQ_ROOM_INFO_BRD, MSG_CG_STATUS_SSQ_INFO_BRD ) PACKET_AG_INHERIT_CLOSE //{__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ //G->A PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_QUEST_PORTAL_REQUEST_SYN, MSG_CG_ZONE_EX_QUEST_PORTAL_CREATE_CMD) PACKET_AG_INHERIT_CLOSE //A->G PACKET_AG_OPEN(AG_ZONE, AG_ZONE_QUEST_PORTAL_CONTROL_CMD) enum eCMD { eCMD_CREATE, eCMD_CLOSE, eCMD_COUNT, }; eCMD command; // eCMD QuestPortalInfo portalInfo; PACKET_AG_CLOSE //A->G PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_QUEST_PORTAL_ENTER_SYN, MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN) MAPCODE enterableMapCode; WORD questCode; WzVector portalPosision; inline WORD GetSize() const { // ¼¼ºÎ ¿É¼ÇÀÌ Ãß°¡µÉ °ÍÀÌ´Ù. return static_cast(sizeof(*this)); } PACKET_AG_INHERIT_CLOSE //G->A (SUCCESS|FAIL) PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_QUEST_PORTAL_ENTER_ACK, MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_NAK) BYTE syncType; // eSYNC KEYTYPE portalKey; WORD mapEnterancePortalIndex; PACKET_AG_INHERIT_CLOSE //}__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ PACKET_AG_OPEN(AG_ZONE, AG_ZONE_CHANGE_MONSTER_ABILITY_CMD) KEYTYPE roomKey; WORD number_of_players; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_SPA_ENTER_SYN) CODETYPE item_code; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_SPA_ENTER_ACK) MAPCODE spa_mapcode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_SPA_LEAVE_SYN) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_SPA_LEAVE_ACK) MAPCODE village_map_code; PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // Party //---------------------------------------------------------------------------------- // ÆÄƼ »ý¼º PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CREATE_CMD ) WORD m_wPartykey; DWORD m_MasterKey; BYTE m_byItemDistributionType; //_NA_20110630_BATTLE_ZONE_RENEWAL ePARTY_TYPE m_PartyType; PACKET_AG_CLOSE // ÆÄƼ ¼Ò¸ê PACKET_AG_OPEN( AG_PARTY, AG_PARTY_DESTROY_CMD ) WORD m_wPartykey; PACKET_AG_CLOSE // ÆÄƼ °¡ÀÔ PACKET_AG_OPEN( AG_PARTY, AG_PARTY_JOIN_CMD ) WORD m_wPartykey; bool m_bMaster; _PARTY_MEMBER_INFO m_MemberInfo; PACKET_AG_CLOSE // ÆÄƼ Å»Åð PACKET_AG_OPEN( AG_PARTY, AG_PARTY_LEAVE_CMD ) WORD m_wPartykey; DWORD m_dwMemberKey; PACKET_AG_CLOSE // ÆÄƼÀå º¯°æ PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CHANGE_MASTER_CMD ) WORD m_wPartykey; DWORD m_dwMemberKey; PACKET_AG_CLOSE // ÆÄƼ ¾ÆÀÌÅÛºÐ¹è ¹æ½Ä º¯°æ PACKET_AG_OPEN( AG_PARTY, AG_PARTY_ITEM_DISTRIBUTION_CHANGE_CMD ) WORD m_wPartykey; BYTE m_byItemDistributionType; PACKET_AG_CLOSE //__NA_0_20080416_PARTY_JOIN_PACKET_CHANGE [ PACKET_AG_OPEN( AG_PARTY, AG_PARTY_JOIN_SYN ) //_NA_0_20100616_PARTY_JOIN_HOSTILITY_RELATION_BUG enum { ENABLE_REQUEST = 0, ENABLE_RESPONSE = 1, }; DWORD m_dwFlag; DWORD m_dwReqMemberKey; DWORD m_dwRecvMemberKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_JOIN_ACK ) //_NA_0_20100616_PARTY_JOIN_HOSTILITY_RELATION_BUG DWORD m_dwFlag; DWORD m_dwReqMemberKey; DWORD m_dwRecvMemberKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_JOIN_NAK ) //_NA_0_20100616_PARTY_JOIN_HOSTILITY_RELATION_BUG DWORD m_dwFlag; DWORD m_dwRecvMemberKey; DWORD m_dwReqMemberKey; DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_LEAVE_BY_GUILDRELATION_SYN ) WORD m_wPartykey; DWORD m_dwMemberKey; BYTE m_bReason; PACKET_AG_CLOSE //__NA_0_20080416_PARTY_JOIN_PACKET_CHANGE ] //{__NA001336_090514_PARTY_NAVI_SUPPORT__ PACKET_AG_INHERIT_OPEN(AG_PARTY, AG_PARTY_NAVI_INFO_BRD, MSG_CG_PARTY_NAVI_INFO_BRD) inline WORD GetSize() const { const WORD MinSize = WORD(sizeof(*this) - sizeof(m_Nodes)); return MinSize + WORD(sizeof(Node)) * m_NumberOfNodes; } PACKET_AG_INHERIT_CLOSE PACKET_AG_OPEN(AG_STATUS, AG_STATUS_CHAR_STAT_CHANGE_CMD) #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE enum eEvent { eEvent_None, eEvent_ChangedHP, eEvent_ChangedMP, eEvent_ChangedSD, eEvent_ChangedFP, eEvent_Count }; #else enum eEvent { eEvent_None, eEvent_ChangedHP, eEvent_ChangedMP, eEvent_ChangedSD, eEvent_Count }; #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE struct SharedInfo { BYTE event; WORD objectKey; }; union uNode { struct HP : SharedInfo { DWORD maxHP, currentHP, reservedHP; } m_HP; struct MP : SharedInfo { DWORD maxMP, currentMP; } m_MP; struct SD : SharedInfo { DWORD maxSD, currentSD; } m_SD; #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE struct FP : SharedInfo { PLAYERFP maxFP, currentFP; } m_FP; #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE }; BYTE m_NumberOfNodes; #ifdef _NA_007825_20141118_MODIFY_PARTY_CHARACTER_STATUSUPDATE BYTE user_count_; // ÀÌ ÆÐŶ¿¡ ¸î¸íÀÇ À¯ÀúÁ¤º¸°¡ µé¾îÀִ°¡ #endif //_NA_007825_20141118_MODIFY_PARTY_CHARACTER_STATUSUPDATE uNode m_Nodes[MAX_PARTYMEMBER_NUM*(eEvent_Count-1)]; // ÇÑ »ç¶÷ÀÌ HP,MP,SD¼¼ Á¤º¸¸¦ ¸ðµÎ °¡Áö´Â °æ¿ì, inline WORD GetSize() const { #ifdef _NA_007825_20141118_MODIFY_PARTY_CHARACTER_STATUSUPDATE const WORD MinSize = WORD(sizeof(*this) - sizeof(m_Nodes)) + user_count_; #else const WORD MinSize = WORD(sizeof(*this) - sizeof(m_Nodes)); #endif //_NA_007825_20141118_MODIFY_PARTY_CHARACTER_STATUSUPDATE return MinSize + WORD(sizeof(uNode)) * m_NumberOfNodes; } PACKET_AG_CLOSE //}__NA001336_090514_PARTY_NAVI_SUPPORT__ //_NA_20110630_BATTLE_ZONE_RENEWAL PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CAN_CHANGE_OPTION_SYN ) BasePartyRoomInfo party_room_info_; WORD party_key_; DWORD master_key_; SLOTCODE require_item_;//ÆÄƼ·ë »ý¼º¿¡ ÇÊ¿äÇÑ ¾ÆÀÌÅÛ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CAN_CHANGE_OPTION_ACK ) enum eStatus { eStatus_PartialFail,// ÇØ´ç Ç÷¹À̾î Á¤ÀǵǾî ÀÖÁö ¾ÊÀº ´Ù¸¥ ÀÌÀ¯·Î ½ÇÆÐ eStatus_PartialOk,// ÇØ´ç Ç÷¹À̾î Á¦¾à Á¶°Ç Åë°ú eStatus_Transaction,// ÇØ´ç Ç÷¹À̾î Á¸ Æ®·£Àè¼Ç (±âŸ »óÅ À§¹è Fail) eStatus_LevelViolation,// ÇØ´ç Ç÷¹ÀÌ¾î ·¹º§ Á¶°Ç À§¹Ý eStatus_RequireQuestClear,// ÇØ´ç Ç÷¹ÀÌ¾î ¼±Çà Quest ¿Ï·á ÇÊ¿ä eStatus_RequireMissionClear,// ÇØ´ç Ç÷¹ÀÌ¾î ¼±Çà Mission ¿Ï·á ÇÊ¿ä }; struct MemberState { WORD object_key_; WORD status_; }; RC::ePARTY_RESULT result_code_; DWORD master_key_; BasePartyRoomInfo party_room_info_; BYTE number_of_partymember_; MemberState member_state_[MAX_PARTYMEMBER_NUM]; inline void Clear() { result_code_ = RC::RC_PARTY_SUCCESS; master_key_ = 0; number_of_partymember_ = 0; ZeroMemory(&member_state_, sizeof(member_state_)); } inline WORD GetSize() const { const size_t MinSize = sizeof(*this) - sizeof(member_state_); return static_cast(MinSize + sizeof(member_state_[0]) * number_of_partymember_); } PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CAN_CREATE_ROOM_SYN ) DWORD master_key_; BasePartyRoomInfo party_room_info_; SLOTCODE require_item_;//ÆÄƼ·ë »ý¼º¿¡ ÇÊ¿äÇÑ ¾ÆÀÌÅÛ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CAN_CREATE_ROOM_ACK ) RC::ePARTY_RESULT result_code_; DWORD master_key_; BasePartyRoomInfo party_room_info_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_READY_STATE_SYN ) bool ready_state_; WORD party_key_; DWORD member_key_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_READY_STATE_ACK ) DWORD member_key_; RC::ePARTY_RESULT result_code_; bool ready_state_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_NOTIFY_PARTY_MEMBER_INFO_CMD ) WORD party_key_; DWORD member_key_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_PARTYROOM_ITEM_DELETE_CMD ) DWORD member_key_; SLOTCODE require_item_; #ifdef _NA_007734_20141027_ADD_ROOMKIND_SPECIALMISSION PartyZoneType party_zone_type_; #endif //_NA_007734_20141027_ADD_ROOMKIND_SPECIALMISSION PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_RESET_READY_STATE_CMD ) DWORD master_key_; WORD party_key_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CAN_JOIN_ROOM_SYN ) MAPCODE map_code_; eZONETYPE party_room_type_; WORD join_party_key_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_CAN_JOIN_ROOM_ACK ) RC::ePARTY_RESULT result_code_; WORD join_party_key_; DWORD request_user_key_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_PARTY, AG_PARTY_SEND_MEMBER_RENDER_INFO_CMD ) WORD request_party_key_; DWORD request_user_key_; DWORD target_user_key_; PACKET_AG_CLOSE //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND PACKET_AG_OPEN( AG_PARTY, AG_CHAOS_ZONE_PACKET ) BYTE category_type; PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // Status //---------------------------------------------------------------------------------- // ·¹º§¾÷ PACKET_AG_OPEN( AG_STATUS, AG_STATUS_LEVEL_UP_CMD ) LEVELTYPE m_Level; // ¾÷µÈ ·¹º§ WORD m_wRemainStat; // ³²Àº ½ºÅÈÆ÷ÀÎÆ® WORD m_wRemainSkill; // ³²Àº ½ºÅ³Æ÷ÀÎÆ® DWORD m_dwCurHP; // ÇöÀç HP(·¹º§¾÷½Ã HP, MP¸¦ ä¿öÁØ´Ù.) DWORD m_dwMaxMP; // ÃÖ´ë MP DWORD m_dwCurMP; // ÇöÀç MP DWORD m_dwMaxAndCurSD; // ÇöÀç SD(·¹º§¾÷½Ã SD¸¦ Max·Î ä¿öÁØ´Ù.) PACKET_AG_CLOSE // HP º¯È­ PACKET_AG_OPEN( AG_STATUS, AG_STATUS_MAXHP_CHANGE_CMD ) DWORD m_dwMaxHP; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_HP_CHANGE_CMD ) DWORD m_dwCurHP; DWORD m_dwReserveHP; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_MP_CHANGE_CMD ) DWORD m_dwCurMP; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_DEAD_CMD ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_RESURRECTION_CMD ) DWORD m_dwCurHP; DWORD m_dwCurMP; DWORD m_dwCurSD; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_MAXMP_CHANGE_CMD ) DWORD m_dwMaxMP; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_MAXSD_CHANGE_CMD ) DWORD m_dwMaxSD; PACKET_AG_CLOSE // ³»±¸µµ °¨¼Ò PACKET_AG_OPEN( AG_STATUS, AG_STATUS_DECREASE_DURA_CMD ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_CHANGE_STATE_CMD ) ePLAYER_BEHAVE_STATE m_eBehaveState; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_PLAYING_TUTORIAL_CMD ) BOOL m_bIsPlayingTutorial; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_INTERCEPTION_SYN ) eINTERCEPTION_TYPE m_byInterceptionCode; BOOL m_bRequestFlag; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_INTERCEPTION_ACK ) BYTE m_byInterceptionCode; BOOL m_bRequestFlag; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_INTERCEPTION_NAK ) BYTE m_byInterceptionCode; BYTE m_byErrorCode; PACKET_AG_CLOSE // declared by __NA_001359_20090619_HEIM_LOTTO_SYSTEM PACKET_AG_OPEN( AG_STATUS, AG_STATUS_LOTTO_REWARD_SYN ) CHARGUID m_CharGuid; MONEY m_Prize; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_LOTTO_REWARD_ACK) enum eRESULT_CODE { RESULT_OK = 0, ERROR_CHAR_NOT_ONLINE }; INT32 m_iResult; CHARGUID m_CharGuid; MONEY m_Prize; PACKET_AG_CLOSE #ifdef _NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE // ÇÏÀÓ ·Î¶Ç º¹±Ç¿ëÁö Á÷Á¢ ±¸ÀÔ ¿äû PACKET_AG_OPEN( AG_STATUS, AG_STATUS_LOTTO_TICKET_PURCHASE_SYN ) CHARGUID iCharGuid; // ij¸¯ÅÍ ID WORD wDrawNum; // ȸÂ÷ BYTE bAuto; // ÀÚµ¿ ¿©ºÎ BYTE bPickedNum[LOTTO_NUM_PICKS]; // ÀÀ¸ð ¹øÈ£ INT64 i64TicketPrice; // º¹±Ç¿ëÁö °¡°Ý PACKET_AG_CLOSE // ÇÏÀÓ ·Î¶Ç º¹±Ç¿ëÁö Á÷Á¢ ±¸ÀÔ ÀÀ´ä PACKET_AG_OPEN( AG_STATUS, AG_STATUS_LOTTO_TICKET_PURCHASE_ACK ) enum eRC_LOTTO_TICKET_PURCHASE { RESULT_OK = 0, ERROR_NOT_ENOUGH_MONEY = 1, ERROR_CHAR_NOT_ONLINE = 2 }; INT32 iResult; // °á°ú ÄÚµå CHARGUID iCharGuid; // ij¸¯ÅÍ ID WORD wDrawNum; // ȸÂ÷ BYTE bAuto; // ÀÚµ¿ ¿©ºÎ BYTE bPickedNum[LOTTO_NUM_PICKS]; // ÀÀ¸ð ¹øÈ£ PACKET_AG_CLOSE #endif // _NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE //__KR_001355_20090608_GROUPINGSYSTEM_GW PACKET_AG_OPEN( AG_STATUS, AG_STATUS_GROUP_ADDEXP_CMD ) CHARGUID m_CharGuid; // ij¸¯ÅÍ Guid EXPTYPE m_Amount; // °æÇèÄ¡·® TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1];//Low memeber name PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_GROUP_ADDMONEY_CMD ) CHARGUID m_CharGuid; // ij¸¯ÅÍ Guid MONEY m_Amount; // º¸³Ê½º ÇÏÀÓ TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1];//Hight memeber name PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_GROUP_EXP_ACQUISITION_CMD ) CHARGUID m_CharGuid; // ij¸¯ÅÍ ID BYTE m_byAcquisitionType; // ȹµæ »çÀ¯ (eHEIM_ACQUISITION_TYPE) EXPTYPE m_Amount; // °æÇèÄ¡·® PACKET_AG_CLOSE //__NA_0_20090627_HEIM_ACQUISITION_S2S_NOTIFICATION PACKET_AG_OPEN( AG_STATUS, AG_STATUS_HEIM_ACQUISITION_NTF ) CHARGUID m_CharGuid; // ij¸¯ÅÍ ID BYTE m_byAcquisitionType; // ȹµæ »çÀ¯ (eHEIM_ACQUISITION_TYPE) MONEY m_Amount; // ÇÏÀÓ ±Ý¾× PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_STATUS_HEIM_CONSUMPTION_NTF ) CHARGUID m_CharGuid; // ij¸¯ÅÍ ID BYTE m_byConsumptionType; // ¼Òºñ »çÀ¯ (eHEIM_CONSUMPTION_TYPE) MONEY m_Amount; // ÇÏÀÓ ±Ý¾× //_NA_0_20091119_HEIM_LOTTO_ACCUM_CTRL_BY_SHOP int m_LottoAccumRatio; // ÇÏÀÓ Çà¿î Àû¸³À² PACKET_AG_CLOSE // __KR_001355_20090608_GROUPINGSYSTEM_GW PACKET_AG_OPEN( AG_STATUS, AG_STATUS_GROUP_SET_MEMBERINFO_CMD ) CHARGUID m_CharGuid; eGROUP_STAT m_HighGroupInfo; eGROUP_STAT m_LowGroupInfo; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_STATUS, AG_USER_DOMINATION_RETURNHIEM_CMD ) CHARGUID m_CharGuid; // ij¸¯ÅÍ Guid eSYSTEM_MEMO_TYPE m_Type; // ŸÀÔ ULONGLONG m_TenderCost; // ÀÔÂû°¡ ÇÏÀÓ | ¿ÕÀÇ ÁõÇ¥ PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // GM ¸í·É¾î //---------------------------------------------------------------------------------- PACKET_AG_OPEN( AG_GM, AG_GM_TELEPORT_CMD ) WzVector m_vDestPos; // À̵¿½Ãų À§Ä¡ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_WHISPER_SET_CMD ) BOOL m_bOn; // FALSE: ±Ó¸» ²û TRUE: ±Ó¸» ÄÔ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_USERCHAT_BLOCK_CMD ) //__NA_000313_20070223_REALTIME_CHAT_BLOCK CHARGUID m_CharGuid; // ÇØ´ç »ç¿ëÀÚ CharGuid BOOL m_bBlock; // FALSE: äÆÃ Çã¿ë TRUE: äÆÃ ±ÝÁö DWORD m_dwBlockTime; // äÆÃ ±ÝÁöÀÏ °æ¿ì Á¦Çѽð£(ºÐ ´ÜÀ§) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_ROOM_INFO_CMD ) //¹æÁ¤º¸ DWORD m_dwRoomKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_CHAR_INFO_CMD ) //ij¸¯ÅÍ Á¤º¸ TCHAR m_szCharName[MAX_CHARNAME_LENGTH + 1]; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_CHAR_INFO_SYN ) //ij¸¯ÅÍ Á¤º¸ ¿äû DWORD m_dwGMUserKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_CHAR_INFO_ACK ) //ij¸¯ÅÍ Á¤º¸ ¿äû DWORD m_dwGMUserKey; TCHAR m_pszAccountID[ID_MAX_LEN+1]; // °èÁ¤ ¾ÆÀ̵ð. eCHAR_TYPE m_eCharType; // ij¸¯ÅÍ Å¬·¡½º WORD m_wLevel; // ·¹º§ MONEY m_Money; // °¡Áø µ· KEYTYPE m_RoomKey; // ¹æÅ° CODETYPE m_MapCode; // ¸ÊÄÚµå WzVector m_vCurPos; // ÇöÀç À§Ä¡ TCHAR m_szGuildName[MAX_GUILDNAME_LENGTH]; // ±æµåÀ̸§ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_CHAR_INFO_NAK ) //ij¸¯ÅÍ Á¤º¸ ¿äû ½ÇÆÐ BYTE m_byErrorCode; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_CHANNEL_INFO_CMD ) //ä³ÎÁ¤º¸ ¿äû PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_CHANGE_ROOMTITLE_CMD ) //ä³ÎÁ¤º¸ ¿äû KEYTYPE m_dwRoomKey; // ¹æÅ° TCHAR m_szRoomTitle[MAX_ROOMTITLE_LENGTH]; // ¹Ù²Ü ·ëÁ¦¸ñ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_FORCE_DISCONNECT_CMD ) // »ç¿ëÀÚ °­Á¦ Á¾·á TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1]; // Á¾·á½Ãų ij¸¯ÅÍ À̸§ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_FORCE_DISCONNECT_SYN ) // »ç¿ëÀÚ °­Á¦ Á¾·á DWORD m_dwGMUserKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_FORCE_DISCONNECT_ACK ) // »ç¿ëÀÚ °­Á¦ Á¾·á DWORD m_dwGMUserKey; DWORD m_dwDisconnectUserKey; PACKET_AG_CLOSE //¸ù¾Ý½ÇÉ«Ãû·âºÅ by:Ê®ÀïÆÂ½£Éñ 2021-06-28 PACKET_AG_OPEN( AG_GM, AG_GM_FORCE_BLOCKUSER_CMD ) TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1]; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_FORCE_BLOCKUSER_SYN ) DWORD m_dwGMUserKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_FORCE_BLOCKUSER_ACK ) DWORD m_dwGMUserKey; DWORD m_dwDisconnectUserKey; PACKET_AG_CLOSE /*********************************************************************/ PACKET_AG_OPEN( AG_GM, AG_GM_SERVER_SHUTDOWN_CMD ) // »ç¿ëÀÚ °­Á¦ Á¾·á DWORD m_dwStringCode; BYTE m_byShutdownTime; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_GO_CMD ) TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1]; // À̵¿½Ãų ´ë»óÀ̸§(º»ÀÎÀÌ µÉ ¼öµµ ÀÖÀ½) KEYTYPE m_RoomKey; // ¹æ¹øÈ£(0À̸é Çʵ尣 À̵¿ÀÓ) FIELDCODE m_FieldCode; // ÇʵåÄÚµå WzVector m_vCurPos; // ÇöÀç ÁÂÇ¥ WzVector m_vDestPos; // À̵¿ÇϰíÀÚÇÏ´Â ¸ñÀûÁö ÁÂÇ¥ BYTE m_PortalType; // ePORTAL_TYPE POSTYPE m_atItemPos; SLOTCODE m_atItemCode; // ÇØ´ç Æ÷Áö¼ÇÀÇ ¾ÆÀÌÅÛ. BOOL IsRevenge() { return m_PortalType == ePORTAL_TYPE_REVENGE; } BOOL IsFriendInvitatedEvent() { return m_PortalType == ePORTAL_TYPE_FIRENDINVITATED_EVENT; } BOOL IsItem() { return (m_PortalType == ePORTAL_TYPE_ITEM || m_PortalType == ePORTAL_TYPE_ITEM_EX); } PACKET_AG_CLOSE //ÃßÀû PACKET_AG_OPEN( AG_GM, AG_GM_TRACKING_CMD ) WzVector m_vCurPos; TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1]; BYTE m_PortalType; POSTYPE m_atItemPos; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_TRACKING_REQUEST_INFO_SYN ) WzVector m_vCurPos; TCHAR m_szGMCharName[MAX_CHARNAME_LENGTH+1]; BYTE m_PortalType; POSTYPE m_atItemPos; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_NOTICE_CMD) eNOTICE_TYPE m_eType; WORD m_wLen; TCHAR m_tszNoticeMsg[MAX_NOTICE_LEN + 1]; uint16 GetSize() const { // CHANGES: f101210.2L const size_t kMinSize = sizeof(*this) - sizeof(m_tszNoticeMsg); return static_cast(kMinSize + m_wLen * sizeof(m_tszNoticeMsg[0])); } PACKET_AG_CLOSE // declared by __NA_001359_20090619_HEIM_LOTTO_SYSTEM PACKET_AG_OPEN( AG_GM, AG_GM_LOTTO_NUM_CMD ) DWORD dwUserKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_LOTTO_SETTLE_CMD ) DWORD dwUserKey; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_LOTTO_FUND_CMD ) DWORD user_key; INT64 amount_delta; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GM, AG_GM_DOMINATION_INIT_CMD ) enum {time = 0, observer = 1}; BYTE m_flag; // 0:½Ã°£ À̺¥Æ®, 1:gm observer BOOL m_bMode; sDOMINATION_EVENT_INFO m_Info; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_GM, AG_GM_GUILD_RANKING_REFRESH) PACKET_AG_CLOSE // _NA_006620_20130402_GM_BATTLE_GROUND_EVENT_GAME PACKET_AG_OPEN(AG_GM, AG_GM_BATTLE_GROUND_CMD) int cmd_mode; ChaosZoneTeam team_key; CHARGUID char_guid; KEYTYPE zone_key; char gm_cmd_str[100+1]; #ifdef _NA_007191_20140428_MODIFY_GM_COMMAND MAPCODE map_code; #endif //_NA_007191_20140428_MODIFY_GM_COMMAND PACKET_AG_CLOSE //_NA_008334_20150608_SONNENSCHEIN PACKET_AG_OPEN(AG_GM, AG_GM_SONNENSCHEIN_CMD) char gm_cmd[16]; PACKET_AG_CLOSE // _NA_008543_20151027_ONE_DAYS_GUILD_MISSION PACKET_AG_OPEN(AG_GM, AG_GM_ONEDAYSGUILDMISSION_CMD) char gm_cmd[16]; PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // GUILD °ü·Ã ÇÁ·ÎÅäÄÝ //---------------------------------------------------------------------------------- PACKET_AG_OPEN( AG_GUILD, AG_GUILD_CREATE_ACK ) GUILDGUID m_GuildGuid; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GUILD, AG_GUILD_DESTROY_ACK ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GUILD, AG_GUILD_JOIN_SUCCESS_CMD ) GUILDGUID m_GuildGuid; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_GUILD, AG_GUILD_WITHDRAW_ACK ) PACKET_AG_CLOSE // ±æµå¿ø °­Á¦Å»Åð PACKET_AG_OPEN( AG_GUILD, AG_GUILD_KICKPLAYER_ACK ) TCHAR m_ptszCharName[MAX_CHARNAME_LENGTH+1]; CHARGUID m_CharGuid; // Å»Åð½Ã'Ų' CharGuid PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // AG_CHUNTING °ü·Ã ÇÁ·ÎÅäÄÝ //---------------------------------------------------------------------------------- PACKET_AG_OPEN( AG_CHUNTING, AG_CHUNTING_ENTER_TEAM_CMD ) KEYTYPE m_RoomKey; BYTE m_byReadyPlayerNum; // ÀÔÀåÇÏ·Á´Â Ç÷¹ÀÌ¾î ¼ö GUILDGUID m_GuildGuid; DWORD m_UserKeyList[CHUNTING_MAX_MEMBER_NUM]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_UserKeyList); return static_cast(kMinSize + sizeof(m_UserKeyList[0]) * m_byReadyPlayerNum); }; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHUNTING, AG_CHUNTING_WIN_CMD ) DWORD m_WinCount; // °æÀïÇåÆÃ ÃÑ ½Â¸®È½¼ö DWORD m_TotCount; // °æÀïÇåÆÃ ÃÑ ÀüÀû PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHUNTING, AG_CHUNTING_START_COMPETITION_CMD ) DWORD m_TotCount; // °æÀïÇåÆÃ ÃÑ ÀüÀû PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // AG_MISSION °ü·Ã ÇÁ·ÎÅäÄÝ //---------------------------------------------------------------------------------- PACKET_AG_OPEN(AG_MISSION, AG_MISSION_STREAM_CMD) MISSION_TOTAL_INFO m_TotalInfo; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_TotalInfo); return static_cast(kMinSize + m_TotalInfo.GetSize()); } PACKET_AG_CLOSE PACKET_AG_OPEN( AG_MISSION, AG_MISSION_CLEAR_CMD ) BYTE m_MissionNo; PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // AG_CHAO °ü·Ã ÇÁ·ÎÅäÄÝ //---------------------------------------------------------------------------------- // ¸®º¥Áö(³ª»ÛÄ£±¸) ¸®½ºÆ® Ãß°¡ ¿äû PACKET_AG_OPEN( AG_CHAO, AG_CHAO_ADD_REVENGE_CHAR_SYN ) TCHAR m_ptszRevengeName[MAX_CHARNAME_LENGTH+1]; // ¸®º¥Áö ¸®½ºÆ®¿¡ Ãß°¡ÇÒ ´ë»ó Name PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHAO, AG_CHAO_ADD_REVENGE_CHAR_ACK ) DWORD m_dwRevengeCharGuid; TCHAR m_ptszRevengeName[MAX_CHARNAME_LENGTH+1]; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHAO, AG_CHAO_ADD_REVENGE_CHAR_NAK ) DWORD m_dwCharGuid; // ¿äûÇÏ´Â º»ÀÎ CharGuid BYTE m_byErrorCode; // eREVENGE_RESULT Âü°í PACKET_AG_CLOSE // ¸®º¥Áö Á¤º¸ ¿äû PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REQUEST_REVENGEINFO_SYN ) PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REQUEST_REVENGEINFO_ACK ) BYTE m_byRevengePoint; // ³²Àº Revenge Point BYTE m_byRevengeStatNum; // µî·ÏµÈ ij¸¯ÅÍ ¼ö STRUCT_REVENGE_INFO m_sRevengeUserInfo[MAX_REVENGE_STAT_NUM]; // µî·ÏµÈ ij¸¯ÅÍ ¸ñ·Ï uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_sRevengeUserInfo); return static_cast(kMinSize + sizeof(m_sRevengeUserInfo[0]) * m_byRevengeStatNum); }; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REQUEST_REVENGEINFO_NAK ) DWORD m_dwCharGuid; // ¿äûÇÏ´Â º»ÀÎ CharGuid BYTE m_byErrorCode; // eREVENGE_RESULT Âü°í PACKET_AG_CLOSE // ¸®º¥Áö Á¤º¸ »èÁ¦ - À¯Àú°¡ ¼±ÅÃ(A->G) PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_CMD ) DWORD m_dwRevengeCharGuid; // »èÁ¦ÇÒ ¸®º¥Áö(³ª»ÛÄ£±¸) CharGuid PACKET_AG_CLOSE // ¸®º¥Áö ¼º°ø - ÇØ´ç Á¤º¸ »èÁ¦ ¿äû(G->A) PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_SYN ) DWORD m_dwRevengeCharGuid; // »èÁ¦ÇÒ ¸®º¥Áö(³ª»ÛÄ£±¸) CharGuid PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_ACK ) DWORD m_dwRevengeCharGuid; // »èÁ¦ÇÒ ¸®º¥Áö(³ª»ÛÄ£±¸) CharGuid PACKET_AG_CLOSE PACKET_AG_OPEN( AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_NAK ) DWORD m_dwCharGuid; // ¿äûÇÏ´Â º»ÀÎ CharGuid BYTE m_byErrorCode; // eREVENGE_RESULT Âü°í PACKET_AG_CLOSE // Ä«¿À»óÅ º¯°æ PACKET_AG_OPEN( AG_CHAO, AG_CHAO_CHANGE_CHAO_STATE_CMD ) DWORD m_dwObjKey; BYTE m_byChaoState; // Ä«¿À»óÅÂ(eCHAO_STATE) PACKET_AG_CLOSE // ¸®º¥Áö ´ë»ó ÃßÀû ¼º°ø PACKET_AG_OPEN( AG_CHAO, AG_CHAO_TRACK_REVENGE_CHAR_ACK ) POSTYPE m_atItemPos; // º¹¼öÀÇ µ¹ À§Ä¡ PACKET_AG_CLOSE //---------------------------------------------------------------------------------- // AG_ITEM °ü·Ã ÇÁ·ÎÅäÄÝ //---------------------------------------------------------------------------------- // ¾ÆÀÌÅÛÀ» ÀÌ¿ëÇÑ ÁÂÇ¥À̵¿ ¼º°ø PACKET_AG_OPEN( AG_ITEM, AG_ITEM_PORTAL_ACK ) POSTYPE m_PortalPos; SLOTCODE m_ItemCode; PACKET_AG_CLOSE // ½ºÆä¼È ¾ÆÀÌÅÛ ¼ÒÀ¯ º¯°æ PACKET_AG_OPEN( AG_ITEM, AG_ITEM_CHANGE_SPECIAL_ITEM_OWN_CMD ) BYTE m_Apply; WORD m_ItemType; WORD m_Count; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_ITEM, AG_ITEM_UNLOCK_CMD) // (f100528.2L) prevent a locked state after an instance dungeon moving transaction failed enum ePostAction { eAction_None = 0, eAction_MoveFailed, // cancel an operation if the player plan on leave eAction_Counts }; SLOTIDX m_ItemIndex; POSTYPE m_ItemPos; uint8_t post_action_; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ITEM, AG_ITEM_DECREASE_UNLOCK_CMD ) SLOTIDX m_ItemIndex; POSTYPE m_ItemPos; PACKET_AG_CLOSE // PACKET_AG_OPEN(AG_ITEM, AG_ITEM_USE_DECREE_ITEM_SYN) CHARGUID m_CharGuid; PACKET_AG_CLOSE PACKET_AG_OPEN(AG_ITEM, AG_ITEM_USE_DECREE_ITEM_ACK) PACKET_AG_CLOSE PACKET_AG_OPEN(AG_ITEM, AG_ITEM_USE_DECREE_ITEM_NAK) BYTE m_byErrorCode; PACKET_AG_CLOSE #ifdef _NA_20101011_HEIM_LOTTO_CASH_TICKET // G->A ÇÏÀÓÇà¿î ij½Ã ÀÀ¸ð±Ç »ç¿ë ¿äû PACKET_AG_OPEN(AG_ITEM, AG_ITEM_USE_HEIM_LOTTO_TICKET_SYN) CHARGUID char_guid; // ij¸¯ÅÍ ID SLOTIDX index; POSTYPE pos; PACKET_AG_CLOSE // A->G ÇÏÀÓÇà¿î ij½Ã ÀÀ¸ð±Ç »ç¿ë ÀÀ´ä PACKET_AG_OPEN(AG_ITEM, AG_ITEM_USE_HEIM_LOTTO_TICKET_ACK) WORD result_code; // °á°ú ÄÚµå : eITEM_RESULT CHARGUID char_guid; // ij¸¯ÅÍ ID SLOTIDX index; POSTYPE pos; PACKET_AG_CLOSE #endif // _NA_20101011_HEIM_LOTTO_CASH_TICKET //---------------------------------------------------------------------------------- // AG_INSTANCE °ü·Ã ÇÁ·ÎÅäÄÝ //---------------------------------------------------------------------------------- PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_INSTANCE_DUNGEON_SYN ) POSTYPE m_ItemPos; PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_INSTANCE_DUNGEON_ACK ) MAPCODE m_MapCode; BOOL m_UseCharge; // ij½Ã »ç¿ë¿©ºÎ Çʵ忴Áö¸¸, ÀçÁ¤ÀÇÇÑ´Ù. ½Ã°£ Á¦¾à ¾ø´Â °æ¿ìÀÇ Ç÷¢ PACKET_AG_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_INSTANCE_DUNGEON_NAK ) enum eRet { eErr_ItemRC, eErr_RoomRC }; BYTE m_ErrorKind; DWORD m_dwErrorCode; PACKET_AG_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_TOP_OF_TRIAL_SYN, MSG_AG_ZONE_CAN_CREATE_INSTANCE_DUNGEON_SYN ) PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_TOP_OF_TRIAL_ACK, MSG_AG_ZONE_CAN_CREATE_INSTANCE_DUNGEON_ACK ) PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_TOP_OF_TRIAL_NAK, MSG_AG_ZONE_CAN_CREATE_INSTANCE_DUNGEON_NAK ) PACKET_AG_INHERIT_CLOSE PACKET_AG_OPEN( AG_ZONE, AG_ZONE_INSTANCE_CREATE_CMD) MAPCODE m_MapCode; KEYTYPE m_RoomKey; BYTE m_TypeOfIndun; BASE_ROOMINFO m_RoomInfo; //< »ý¼ºÇÒ ¹æ Á¤º¸ #ifdef _NA_004204_20120131_BATTLE_ZONE_PARTY_OBTAIN PartyZoneType party_zone_info_; #endif //_NA_004204_20120131_BATTLE_ZONE_PARTY_OBTAIN //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND ChaosZoneType chaos_zone_type_; PACKET_AG_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_CAN_CREATE_100LEVEL_QUEST_MISSION_SYN, MSG_CG_ZONE_EX_CAN_CREATE_100LEVEL_QUEST_MISSION_SYN ) PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN( AG_ZONE, AG_ZONE_CAN_JOIN_100LEVEL_QUEST_MISSION_ACK, MSG_CG_ZONE_EX_CAN_JOIN_100LEVEL_QUEST_MISSION_ACK ) PACKET_AG_INHERIT_CLOSE //_NA_20110630_BATTLE_ZONE_RENEWAL PACKET_AG_OPEN(AG_ZONE, AG_ZONE_CAN_CREATE_ROOM_OF_PARTY_SYN) WORD party_key_; MAPCODE map_code_; PartyZoneType party_room_type_; SLOTCODE require_item_;//ÆÄƼ·ë »ý¼º¿¡ ÇÊ¿äÇÑ ¾ÆÀÌÅÛ PACKET_AG_CLOSE PACKET_AG_OPEN(AG_ZONE, AG_ZONE_CAN_CREATE_ROOM_OF_PARTY_ACK) enum eResult { eResult_NoMemberFail,// Ç÷¹ÀÌ¾î °Ë»ç ÀÚü¸¦ ¸øÇÑ »óȲÀÓ. eResult_InvalidMap,// ¿äûµÈ ¸ÊÀÌ ¾ø°Å³ª ÀÔÀå°¡´É ŸÀÔÀÌ ¾Æ´Ï´Ù. eResult_CheckedMembers,// ÇØ´ç Ç÷¹À̾îµéÀÇ °Ë»ç±îÁö ¼öÇàÇß´Ù. eResult_FailCheckTerms,//ÇÊ¿ä ¾ÆÀÌÅÛÀÌ ·ë »ý¼º Á¶°Ç¿¡ ¸ÂÁö ¾Ê´Ù. eResult_RequireQuestClear,//¼±Çà Äù½ºÆ®¸¦ ÁøÇàÇØ¾ß ÇÑ´Ù. eResult_RequireMissionClear,//¼±Çà ¹Ì¼ÇÀ» ÁøÇàÇØ¾ß ÇÑ´Ù. }; enum eStatus { eStatus_PartialFail,// ÇØ´ç Ç÷¹À̾î Á¤ÀǵǾî ÀÖÁö ¾ÊÀº ´Ù¸¥ ÀÌÀ¯·Î ½ÇÆÐ eStatus_PartialOk,// ÇØ´ç Ç÷¹À̾î Á¦¾à Á¶°Ç Åë°ú eStatus_Transaction,// ÇØ´ç Ç÷¹À̾î Á¸ Æ®·£Àè¼Ç (±âŸ »óÅ À§¹è Fail) eStatus_LevelViolation,// ÇØ´ç Ç÷¹ÀÌ¾î ·¹º§ Á¶°Ç À§¹Ý eStatus_RequireQuestClear,// ÇØ´ç Ç÷¹ÀÌ¾î ¼±Çà Quest ¿Ï·á ÇÊ¿ä eStatus_RequireMissionClear,// ÇØ´ç Ç÷¹ÀÌ¾î ¼±Çà Mission ¿Ï·á ÇÊ¿ä }; struct MemberInfo { WORD object_key_; WORD status_; }; BYTE result_value_; MAPCODE map_code_; WORD party_key_; BYTE number_of_partymember_; bool is_cash_item_; SLOTCODE require_item_; MemberInfo member_info_[MAX_PARTYMEMBER_NUM]; inline void Clear() { result_value_ = eResult_NoMemberFail; map_code_ = 0; party_key_ = 0; number_of_partymember_ = 0; is_cash_item_ = 0; ZeroMemory(&member_info_, sizeof(member_info_)); } inline WORD GetSize() const { const size_t MinSize = sizeof(*this) - sizeof(member_info_); return static_cast(MinSize + sizeof(member_info_[0]) * number_of_partymember_); } PACKET_AG_INHERIT_CLOSE //{__NA001281_BATTLEZONE_ENTER_CONSTRAINTS_CHANGE_IN_LOBBY__ PACKET_AG_OPEN(AG_ZONE, AG_ZONE_CAN_CREATE_ROOM_SYN) enum eCheckMethod { eCheck_None , eCheck_Party = eCheck_None, // ÆÄƼ ±âÁØ ÆÄƼ¿øµéÀÇ Á¦¾àÁ¶°Ç °Ë»ç eCheck_Members , // ÷ºÎµÇ´Â Ç÷¹À̾îµéÀÇ Á¦¾à Á¶°Ç °Ë»ç }; enum eResult { eResult_NoMemberFail , // Ç÷¹ÀÌ¾î °Ë»ç ÀÚü¸¦ ¸øÇÑ »óȲÀÓ. eResult_InvalidMap , // ¿äûµÈ ¸ÊÀÌ ¾ø°Å³ª ÀÔÀå°¡´É ŸÀÔÀÌ ¾Æ´Ï´Ù. eResult_CheckedMembers , // ÇØ´ç Ç÷¹À̾îµéÀÇ °Ë»ç±îÁö ¼öÇàÇß´Ù. }; enum eStatus { eStatus_PartialFail , // ÇØ´ç Ç÷¹À̾î Á¤ÀǵǾî ÀÖÁö ¾ÊÀº ´Ù¸¥ ÀÌÀ¯·Î ½ÇÆÐ eStatus_PartialOk , // ÇØ´ç Ç÷¹À̾î Á¦¾à Á¶°Ç Åë°ú eStatus_Transaction , // ÇØ´ç Ç÷¹À̾î Á¸ Æ®·£Àè¼Ç (±âŸ »óÅ À§¹è Fail) eStatus_LevelViolation , // ÇØ´ç Ç÷¹ÀÌ¾î ·¹º§ Á¶°Ç À§¹Ý eStatus_RequireQuestClear , // ÇØ´ç Ç÷¹ÀÌ¾î ¼±Çà Quest ¿Ï·á ÇÊ¿ä eStatus_RequireMissionClear , // ÇØ´ç Ç÷¹ÀÌ¾î ¼±Çà Mission ¿Ï·á ÇÊ¿ä }; struct MemberInfo { WORD objectKey; WORD status; // eResult }; struct CheckArgParty { // SYN->ACK passing arg: GameServer´Â ÇØ´ç ÆÄƼ´ë»óÀ¸·Î MemberResult¸¦ ±¸ÃàÇÑ´Ù. WORD partyKey; }; struct CheckArgMembers : public CheckArgParty { // {partyKey, roomKey} MemberµéÀÇ Á¶»ç´ë»ó. ÇØ´ç (ÆÄƼ¿ø/Á¸) ¸ñ·Ï¿¡¼­ °Ë»ç ¼öÇà. WORD roomKey; // SYN->ACK passing arg // ¹Ýµå½Ã ÇØ´ç ¹è¿­(members)¸¦ ÃʱâÈ­ ÇÏ°í ¼³Á¤ÇÒ °Í. 0À̸é end MemberInfo members[max(MAX_FIELD_PARTYMEMBER_NUM, MAX_PARTYMEMBER_NUM)]; }; ////////////////////////////////////////////////////////////////////////// BYTE m_CheckMethod; // eCheckMethod °Ë»ç ¹æ¹ý BYTE m_Result; // eResult MAPCODE m_MapCode; // Enter MapCode union { CheckArgParty m_CheckArgParty; CheckArgMembers m_CheckArgMembers; }; inline void Clear() { m_CheckMethod = eCheck_None; m_Result = eResult_NoMemberFail; m_MapCode = 0; const size_t argSize = max(sizeof(m_CheckArgParty), sizeof(m_CheckArgMembers)); ZeroMemory(&m_CheckArgMembers, argSize); } inline WORD GetSize() const { const size_t MinSize = sizeof(*this) - max(sizeof(m_CheckArgParty), sizeof(m_CheckArgMembers)); if(m_CheckMethod == eCheck_Members) { return WORD(sizeof(*this)); } if(m_CheckMethod == eCheck_Party) { //gamelulu's note : ±âÁ¸ Party°ü·Ã ºÎºÐ 󸮰¡ ¾ø¾ú´Ù. ¾ö¹ÐÈ÷ MemberºÎºÐ üũ¿¡ À־µµ //Á¤È®ÇÑ °¡º¯ ÆÐŶÀº ¾Æ´Ñ »óÅÂÁö¸¸ Á»´õ »ìÆìº¼ Çʿ䰡 À־ ±âÁ¸ ·ÎÁ÷°ú µ¿ÀÏÇÏ°Ô Ã³¸® return WORD(sizeof(*this)); } return WORD(MinSize); // Assert Violation... } PACKET_AG_CLOSE PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_CAN_CREATE_ROOM_ACK, MSG_AG_ZONE_CAN_CREATE_ROOM_SYN) // Ackµµ SYN³»¿ë°ú µ¿ÀÏÇÏ°Ô Ã³¸®ÇÑ´Ù. °³º° Á¶°ÇÀ¸·Î º¸³»¹Ç·Î m_CheckMethod == eCheck_Members; inline WORD GetSize() const { return MSG_AG_ZONE_CAN_CREATE_ROOM_SYN::GetSize(); } PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_LOBBY_CREATE_SYN, MSG_CG_ZONE_LOBBY_CREATE_SYN) inline WORD GetSize() const { return WORD(sizeof(*this)); } PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_LOBBY_CREATE_ACK, MSG_AG_ZONE_LOBBY_CREATE_SYN) RC::eROOM_RESULT m_1stCheckResultInGameServer; inline WORD GetSize() const { return WORD(sizeof(*this)); } PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_LOBBY_JOIN_SYN, MSG_CG_ZONE_LOBBY_JOIN_SYN) MAPCODE m_MapCode; // by Agent Setting inline WORD GetSize() const { return WORD(sizeof(*this)); } PACKET_AG_INHERIT_CLOSE PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_LOBBY_JOIN_ACK, MSG_AG_ZONE_LOBBY_JOIN_SYN) RC::eROOM_RESULT m_1stCheckResultInGameServer; inline WORD GetSize() const { return WORD(sizeof(*this)); } PACKET_AG_INHERIT_CLOSE //}__NA001281_BATTLEZONE_ENTER_CONSTRAINTS_CHANGE_IN_LOBBY__ PACKET_AG_OPEN(AG_ZONE, AG_ZONE_CHECK_MISSION_ROOM_LIST_SYN) enum { kMaxRoomCount = 40 }; BYTE current_room_count_; MISSION_ROOMINFO room_info_list_[kMaxRoomCount]; int GetSize() const { return sizeof(*this) - (kMaxRoomCount - current_room_count_) * sizeof(MISSION_ROOMINFO); } PACKET_AG_CLOSE PACKET_AG_INHERIT_OPEN(AG_ZONE, AG_ZONE_CHECK_MISSION_ROOM_LIST_ACK, MSG_AG_ZONE_CHECK_MISSION_ROOM_LIST_SYN) PACKET_AG_INHERIT_CLOSE #ifdef _NA_006826_20130722_DOMINATION_RENEWAL PACKET_AG_OPEN( AG_ZONE, AG_ZONE_DOMINATION_NOTIFIER_BRD ) GUILDGUID win_guild_guid; // ½Â GUILDGUID lose_guild_guid; // ÆÐ MAPCODE map_code; // Á¡·ÉÁö¿ª char win_guild_name[MAX_GUILDNAME_LENGTH+1]; uint16_t GetSize() const { return sizeof(*this); }; PACKET_AG_CLOSE #endif // _NA_006826_20130722_DOMINATION_RENEWAL PACKET_AG_INHERIT_OPEN( AG_EVENT, AG_EVENT_BUFF_EVENT_TIME_CONTROL_SYN, MSG_CG_ETC_BUFF_EVENT_TIME_CONTROL_BRD ) PACKET_AG_INHERIT_CLOSE //W->A ÃÊ´ëÇÑ Ä³¸¯ÅÍ ¸ñ·Ï (°¡º¯) //_KR_0_20091021_FIRENDINVITATION_EXTEND PACKET_AG_OPEN( AG_EVENT, AG_EVENT_FRIENDINVITATE_INVITATELIST_CMD) INVITATEFRIENDLIST_INFO m_InvitateFriendListInfo; WORD GetSize() const { // (CHANGES) (f100624.2L) const WORD kMinSize = sizeof(*this) - sizeof(m_InvitateFriendListInfo); return static_cast(kMinSize + m_InvitateFriendListInfo.GetSize()); //return ( sizeof(MSG_AW_EVENT_FRIENDINVITATE_INVITATELIST_CMD) - ( (MAX_FRIEND_STAT_NUM - m_InvitateFriendListInfo.m_byListCount) * sizeof(DWORD) ) ); } PACKET_AG_INHERIT_CLOSE //_KR_0_20091021_FIRENDINVITATION_EXTEND PACKET_AG_OPEN( AG_EVENT, AG_EVENT_RECALL_ACK) //¿¡ÀÎÀüÆ®¿¡¼­ °ÔÀÓ ¼­¹ö·Î ¸®ÄÝ °á°ú¸¦ Àü¼Û CHARGUID CalleeGUID; PACKET_AG_INHERIT_CLOSE //_KR_0_20091021_FIRENDINVITATION_EXTEND PACKET_AG_OPEN( AG_EVENT, AG_EVENT_RECALL_NAK) //¿¡ÀÎÀüÆ®¿¡¼­ °ÔÀÓ ¼­¹ö·Î ¸®ÄÝ °á°ú¸¦ Àü¼Û BYTE ErrorCode; PACKET_AG_INHERIT_CLOSE //_NA_20100812_INTEGRATE_SYSTEM_MEMO_DOMINATION PACKET_AG_OPEN( AG_EVENT, AG_EVENT_SYSTEMMEMO_SEND_CMD) DWORD system_memo_list_num_;//½Ã½ºÅÛ ¸Þ¸ð °¹¼ö BasicSystemMemoInfo system_memo_info_[MAX_SYSTEM_MEMO_LIST];//½Ã½ºÅÛ ¸Þ¸ð Á¤º¸ ¸®½ºÆ® DWORD GetSize() const { assert(system_memo_list_num_ <= _countof(system_memo_info_)); return (sizeof(*this) - sizeof(system_memo_info_)) + //°íÁ¤ Å©±â (sizeof(system_memo_info_[0]) * system_memo_list_num_);//°¡º¯ Å©±â } #ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM void Clear() { system_memo_list_num_ = 0; memset(system_memo_info_, 0, sizeof(BasicSystemMemoInfo) * _countof(system_memo_info_)); } #endif // _NA_008012_20150204_SUN_RANKING_SYSTEM PACKET_AG_INHERIT_CLOSE #ifdef _NA_003027_20111013_HONOR_SYSTEM PACKET_AG_OPEN( AG_EVENT, AG_EVENT_TODAYQUEST_INFO_BRD ) WORD count_; QUEST_TODAY_QUEST_INFO today_quest_info[MAX_TODAYQUEST_COUNT]; PACKET_AG_CLOSE #endif //_NA_003027_20111013_HONOR_SYSTEM //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // // // // #include //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // Àü¼Û½Ã »ç¿ëÇÏ´Â ÆÐŶ ÇüÅ (°íÁ¤ ÆÐŶ ÀԷ½Ã) // template struct MSG_PACKET_BROADCASTER_ONEtoN : MSG_BASE_FORWARD { MSG_PACKET_BROADCASTER_ONEtoN() { Init(); } ////////////////////////////////////////////////////////////////////////// // enum { MAX_USER_COUNT = 255 }; BYTE m_byUserCount; WORD msgBODY_SZ; _TYPE msgBODY; DWORD m_dwUserKeys[MAX_USER_COUNT]; ////////////////////////////////////////////////////////////////////////// // inline VOID Init() { m_byCategory = AG_CONNECTION; m_byProtocol = AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN; m_byUserCount = 0; msgBODY_SZ = (WORD)sizeof(msgBODY); } inline DWORD AddUser( DWORD dwUserKey ) { if( MAX_USER_COUNT == m_byUserCount ) return 0; m_dwUserKeys[m_byUserCount++] = dwUserKey; return (DWORD)m_byUserCount; } inline WORD GetSize() { const WORD SZofBASE_ZEROUSER = sizeof(*this) - sizeof(m_dwUserKeys); return SZofBASE_ZEROUSER + (WORD)(sizeof(DWORD)*m_byUserCount); } //inline WORD GetRecvSize() //{ // // type size // const WORD cwSize = sizeof(MSG_BASE_FORWARD) + sizeof(msgBODY_SZ) + sizeof(m_byUserCount); // WORD SZofSENDINGMSG = cwSize + (WORD)(msgBODY_SZ + sizeof(DWORD)*m_byUserCount); // return SZofSENDINGMSG; //} }; //================================================================================================== //================================================================================================== //================================================================================================== // CHANGES: f110601.1L, remove the broadcast upper boundary limitation using 1toN broadcaster PACKET_AG_OPEN(AG_CONNECTION, AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN) enum { MAX_USER_COUNT = 5000, }; struct MsgBodyInfo { MSG_BASE_FORWARD* msg_send; uint16_t msg_send_size; uint16_t number_of_users; // NOTE: f080704.x, waverix, changes user_key to object_key // changed by __NA000000_0806XX_CODE_REFINE_FOR_PERFORMANCE_TUNEUP_NO04__ uint16_t* user_object_keys; }; // uint16_t number_of_users; uint16_t msg_body_size; // msg_body stream[msg_body_size] // - alignment // user key stream[number_of_users] // void Init(MSG_BASE_FORWARD* msg, uint16_t msg_size); void InitByArray(uint8_t** msg_array, uint16_t* msg_size_array, ulong number_of_arrays); // Init, InitByArray ÀÌÈÄ, AddUserÈ£Ãâ ÀÌÀü¿¡ Ãß°¡½ÃŰ´Â ¹æ½ÄÀÌ´Ù. void AppendMsg(uint8_t* msg, uint16_t msg_size); MSG_BASE_FORWARD* GetBrdPacketPtr(); uint16_t* GetUsersStartPtr(); uint16_t AddUser(uint16_t* const user_begin, DWORD object_key); uint16_t GetSendingSize() const; // <ÆÐŶ ¼ö½Å½Ã »ç¿ëÇÏ´Â METHOD> // // size of variable msg - ÀÌ °ªÀ» ½ÇÁ¦ ¼ö½ÅµÈ °ª°ú ºñ±³Çؼ­ ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ó¸®Çؼ± ¾ÈµÈ´Ù. // MsgBodyInfo.msg_send = BROADCASTING MSG // MsgBodyInfo.msg_send_size = BROADCASTING MSG SIZE uint16_t GetPacketInfo(MsgBodyInfo* result_info) const; PACKET_AG_CLOSE; //================================================================================================== inline void MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::Init( MSG_BASE_FORWARD* msg, uint16_t msg_size) { m_byCategory = AG_CONNECTION; m_byProtocol = AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN; number_of_users = 0; msg_body_size = msg_size; CopyMemory(GetBrdPacketPtr(), msg, msg_size); } inline void MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::InitByArray( uint8_t** msg_array, uint16_t* msg_size_array, ulong number_of_arrays) { m_byCategory = AG_CONNECTION; m_byProtocol = AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN; number_of_users = 0; msg_body_size = 0; uint8_t* offset = reinterpret_cast(GetBrdPacketPtr()); for (ulong index = 0; index < number_of_arrays; ++index, ++msg_array, ++msg_size_array) { uint16_t msg_size = *msg_size_array; msg_body_size += msg_size; CopyMemory(offset, *msg_array, msg_size); offset += msg_size; }; } inline void MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::AppendMsg( uint8_t* msg, uint16_t msg_size) { uint8_t* writing_pos = reinterpret_cast((uint16_t*)(&msg_body_size) + 1); ; writing_pos += msg_body_size; CopyMemory(writing_pos, msg, msg_size); msg_body_size += msg_size; } inline MSG_BASE_FORWARD* MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::GetBrdPacketPtr() { MSG_BASE_FORWARD* offset = reinterpret_cast((uint16_t*)(&msg_body_size) + 1); return offset; } inline uint16_t* MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::GetUsersStartPtr() { uint16_t* user_begin = reinterpret_cast( reinterpret_cast(GetBrdPacketPtr()) + msg_body_size); return user_begin; } inline uint16_t MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::AddUser( uint16_t* const user_begin, DWORD object_key) { if (number_of_users == MAX_USER_COUNT) { return 0; }; user_begin[number_of_users++] = static_cast(object_key); return number_of_users; } inline uint16_t MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::GetSendingSize() const { const size_t kMinSize = sizeof(*this); size_t total_size = kMinSize + msg_body_size + (sizeof(uint16_t) * number_of_users); return static_cast(total_size); } inline uint16_t MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN::GetPacketInfo( MsgBodyInfo* result_info) const { const size_t kMinSize = sizeof(*this); ZeroMemory(result_info, sizeof(*result_info)); uint8_t* offset = reinterpret_cast((uint16_t*)(&msg_body_size) + 1); result_info->msg_send = reinterpret_cast(offset); result_info->msg_send_size = msg_body_size; offset += msg_body_size; result_info->number_of_users = number_of_users; result_info->user_object_keys = reinterpret_cast(offset); size_t total_msg_size = kMinSize + msg_body_size; ; total_msg_size += (sizeof(uint16_t) * number_of_users); return static_cast(total_msg_size); } //================================================================================================== #if SUN_CODE_BACKUP //================================================================================================== // ¼Û/¼ö½Å½Ã »ç¿ëÇÏ´Â ÆÐŶ ÇüÅ (°¡º¯ ÆÐŶ) // ¼Û½Å½Ã ÆÐŶÀº ƯÁ¤ ¹öÆÛ¸¦ ±âÁØÀ¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. PACKET_AG_OPEN( AG_CONNECTION, AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN ) ////////////////////////////////////////////////////////////////////////// // enum { MAX_USER_COUNT = 255 }; struct MSG_INFO { MSG_BASE_FORWARD* pMSG_BODY; WORD wSIZE; WORD wUSER_COUNT; DWORD* pUSERs; // (WAVERIX)(080704) - UserKey°¡ ¾Æ´Ï¶ó ObjectKey·Î º¯°æ <-__NA000000_0806XX_CODE_REFINE_FOR_PERFORMANCE_TUNEUP_NO04__ Àû¿ë½Ã }; BYTE m_byUserCount; WORD msgBODY_SZ; // ~~ // ~~ // <ÆÐŶ Á¦À۽à »ç¿ëÇÏ´Â METHODs> inline VOID Init( MSG_BASE_FORWARD* pMsg, WORD wBrdPacketSize ) { m_byCategory = AG_CONNECTION; m_byProtocol = AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN; m_byUserCount = 0; msgBODY_SZ = wBrdPacketSize; CopyMemory( GetBrdPacketPtr(), pMsg, msgBODY_SZ ); } inline VOID InitByArray( BYTE** ppMsg, WORD* pwBrdPacketSize, DWORD dwMsgArrayCnt ) { m_byCategory = AG_CONNECTION; m_byProtocol = AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN; m_byUserCount = 0; msgBODY_SZ = 0; BYTE* pOffset = (BYTE*)GetBrdPacketPtr(); for( DWORD i=0 ; i // // size of variable msg - ÀÌ °ªÀ» ½ÇÁ¦ ¼ö½ÅµÈ °ª°ú ºñ±³Çؼ­ ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ó¸®Çؼ± ¾ÈµÈ´Ù. // MSG_INFO.pMSG_BODY = BROADCASTING MSG // MSG_INFO.wSIZE = BROADCASTING MSG SIZE inline WORD GetPacketInfo( MSG_INFO& rINFO ) { // const WORD cwMIN_SZ = sizeof(MSG_BASE_FORWARD) + sizeof(msgBODY_SZ) + sizeof(m_byUserCount); BYTE* pOFFSET = (BYTE*)(((WORD*)&msgBODY_SZ)+1); rINFO.pMSG_BODY = (MSG_BASE_FORWARD*)pOFFSET; //ÃÖ¼ÒÇÑ º¸³»°íÀÚ Çß´ø ¸Þ½ÃÁö Á¤º¸´Â È®ÀÎ °¡´É rINFO.wSIZE = msgBODY_SZ; WORD wSIZE = cwMIN_SZ + msgBODY_SZ; pOFFSET += msgBODY_SZ; rINFO.wUSER_COUNT = (WORD)m_byUserCount; rINFO.pUSERs = (DWORD*)pOFFSET; wSIZE = wSIZE + (WORD)(sizeof(DWORD)*m_byUserCount) ; return wSIZE; } PACKET_AG_CLOSE; #endif //!SUN_CODE_RENEWAL //================================================================================================== //================================================================================================== //================================================================================================== //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // // // MSG_CG_CONNECTION_HEARTBEAT_SYN msgSYN; // MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN& msgBRD = PACKET_ONEtoN_BROADCASTER::InstanceOfBase( FALSE ); // msgBRD.Init( &msgSYN, sizeof(msgSYN) ); // DWORD* pStartPtr = msgBRD.GetUsersStartPtr(); //------(ÀÌ ºÎºÐÀÇ À¯Àú ÀÔ·ÂÀº Çʿ信 µû¶ó ¼öÁ¤ÇØ¾ß ÇÑ´Ù) // for( DWORD i=0 ; i( _1_ ); //------(µû¶ó¼­ À§ÀÇ Assert¿Í ´Ù¸¥ ¹Ý´ëÀÇ °á°ú°¡ ÃëÇØÁø´Ù) // ASSERT( PACKET_ONEtoN_BROADCASTER::GetTotalSize() != msgBRD.GetSendingSize() ); // typedef VARMSG_EX MSG_ONEtoN_BROADCASTER; typedef MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN MSG_AG_CONNECTION_PACKET_UNICASTER; typedef VARMSG_EX MSG_COMPOSE_UNICASTER; typedef VARMSG_EX MSG_ONEtoN_BROADCASTER_INTERNAL; //typedef VARMSG_EX PACKET_NtoONE_UNICASTER; #pragma pack(pop) #endif // __PACKETSTRUCT_AG_H__