#pragma once #include #include "PacketHandler.h" // class User; //------------------------------------------------------------------------------------------------- #define HANDLER_CG_DECL( fnName ) \ static VOID On##fnName( User* pUser, MSG_BASE* pMsg, WORD wSize ) #define HANDLER_CG_IMPL( fnName ) \ VOID Handler_CG::On##fnName( User* pUser, MSG_BASE* pMsg, WORD wSize ) class Handler_CG { public: static VOID RegisterHandler_ALL( PACKET_HANDLER_DELEGATOR pInstance ); private: static sPACKET_HANDLER_INFO* GetHandlerInfo(); static sPACKET_HANDLER_INFO* GetHandlerInfo_CHARINFO(); static sPACKET_HANDLER_INFO* GetHandlerInfo_SYNC(); static sPACKET_HANDLER_INFO* GetHandlerInfo_ZONE(); static sPACKET_HANDLER_INFO* GetHandlerInfo_PARTY(); static sPACKET_HANDLER_INFO* GetHandlerInfo_GM(); static sPACKET_HANDLER_INFO* GetHandlerInfo_SECURE(); static sPACKET_HANDLER_INFO* GetHandlerInfo_ETC(); static sPACKET_HANDLER_INFO* GetHandlerInfo_Event(); public: //------------------------------------------------------------------------------ // // Declaration & Implementation // //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ HANDLER_CG_DECL( CG_CONNECTION_HEARTBEAT_SYN ); #ifdef _NA_20100802_SPEED_HACK_DETECTION HANDLER_CG_DECL( CG_CONNECTION_TICK_QUERY_ACK ); #endif //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ // ¿ùµå¿Í °ü·ÃµÈ ÆÐŶ HANDLER_CG_DECL( CG_PREPARE_WORLD_CONNECT_SYN ); //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ // DBP¿Í °ü·ÃµÈ ÆÐŶ HANDLER_CG_DECL( CG_CONNECTION_REENTERSERVER_SYN ); HANDLER_CG_DECL( CG_CHARINFO_CREATE_SYN ); HANDLER_CG_DECL( CG_CHARINFO_DESTROY_SYN ); HANDLER_CG_DECL( CG_CHARINFO_RECOVER_SYN ); #ifdef __NA_001044_ADD_CUSTOM_UI HANDLER_CG_DECL( CG_CHARINFO_CHARACTERID_CHECK_SYN ); #endif //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ HANDLER_CG_DECL( CG_SYNC_PLAYER_ENTER_SYN ); // Game Server¿Í °ü·ÃµÈ ÆÐŶ HANDLER_CG_DECL( CG_CONNECTION_ENTERVILLAGEREQ_SYN ); HANDLER_CG_DECL( CG_CONNECTION_BACKTOCHARSELECT_SYN ); HANDLER_CG_DECL( CG_CONNECTION_NOTIFY_LOGOUT_SYN ); // ¹Ì¼Ç ·Îºñ ¹æ ¸®½ºÆ® ¿äû HANDLER_CG_DECL( CG_ZONE_LIST_MISSIONLOBBY_SYN ); // ÇåÆÃ ·Îºñ ¹æ ¸®½ºÆ® ¿äû HANDLER_CG_DECL( CG_ZONE_LIST_HUNTINGLOBBY_SYN ); // ÁøÇàµÈ ÇåÆÃ ¹æ ¸®½ºÆ® ¿äû HANDLER_CG_DECL( CG_ZONE_LIST_HUNTING_SYN ); // PVP¹æ ¸®½ºÆ® ¿äû HANDLER_CG_DECL( CG_ZONE_LIST_PVPLOBBY_SYN ); // °æÀïÇåÆÃ¹æ ¸®½ºÆ® ¿äû HANDLER_CG_DECL( CG_ZONE_LIST_CHUNTINGLOBBY_SYN ); HANDLER_CG_DECL( CG_ZONE_LIST_CHUNTING_SYN ); // ƯÁ¤ ¹æ ¸®½ºÆ® »õ·Î°íħ HANDLER_CG_DECL( CG_ZONE_LIST_REFRESH_SYN ); // ¹Ù·Î°¡±â HANDLER_CG_DECL( CG_ZONE_SHORTCUT_SYN ); // ¾ÆÀ̵ð·Î ¹æ ã±â HANDLER_CG_DECL( CG_ZONE_FIND_ROOM_FROM_CHARID_SYN ); HANDLER_CG_DECL( CG_ZONE_FIND_ROOM_FROM_NO_SYN ); // ¹æÀåÀÌ ·Îºñ(ÇåÆÃor¹Ì¼Ç)¹æÀ» ¸¸µç´Ù HANDLER_CG_DECL( CG_ZONE_LOBBY_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_CHUNTINGLOBBY_CREATE_SYN ); //·Îºñ À̸§ º¯°æ HANDLER_CG_DECL( CG_ZONE_EX_LOBBY_NAME_CHANGE_SYN ); // ·Îºñ¿¡ Âü°¡ HANDLER_CG_DECL( CG_ZONE_LOBBY_JOIN_SYN ); // [±¸¼º¿øÀÇ ±ÇÇÑ] // ±¸¼º¿øÀÌ ·¹µð ¹öưÀ» ´©¸¥´Ù. HANDLER_CG_DECL( CG_ZONE_LOBBY_READY_SYN ); HANDLER_CG_DECL( CG_ZONE_LOBBY_READY_CANCEL_SYN ); // ±âÁ¸ÀÇ ¹æÁ¤º¸¸¦ ¿äûÇÑ´Ù. HANDLER_CG_DECL( CG_ZONE_LOBBY_REQUEST_INFO_SYN ); // [¹æÀåÀÇ ±ÇÇÑ] // Àοø¼ö º¯°æ // Ç÷¹ÀÌ¾î °­Åð HANDLER_CG_DECL( CG_ZONE_LOBBY_KICKPLAYER_SYN ); // Ç÷¹ÀÌ¾î ÆÀ º¯°æ HANDLER_CG_DECL( CG_ZONE_LOBBY_CHANGE_TEAM_SYN ); // ¸Ê º¯°æ HANDLER_CG_DECL( CG_ZONE_LOBBY_NONBLOCKSLOTNUM_SYN ); HANDLER_CG_DECL( CG_ZONE_LOBBY_CHANGE_MAP_SYN ); // ·ÎºñÀÇ ÇåÆÃ Á¦ÇÑ ¼³Á¤ ¹Ù²Þ(Çʵå, ³­À̵µ, º¸³Ê½º) HANDLER_CG_DECL( CG_ZONE_LOBBY_HUNTING_CONFIG_SYN ); // ·ÎºñÀÇ PVP Á¦ÇÑ ¼³Á¤ ¹Ù²Þ(Çʵå, ·ê, ¸ðµå) HANDLER_CG_DECL( CG_ZONE_LOBBY_PVP_CONFIG_SYN ); HANDLER_CG_DECL( CG_ZONE_LOBBY_CHUNTING_CONFIG_SYN ); HANDLER_CG_DECL( CG_ZONE_HUNTING_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_MISSION_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_PVP_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_CHUNTING_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_CHUNTING_MIGRATE_SYN ); HANDLER_CG_DECL( CG_ZONE_HUNTING_JOIN_SYN ); HANDLER_CG_DECL( CG_ZONE_LOBBY_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_MISSION_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_HUNTING_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_PVP_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_CHUNTING_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_HUNTING_RELAY_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_HUNTING_RELAY_JOIN_SYN ); HANDLER_CG_DECL( CG_ZONE_PORTAL_FIELD_MOVE_SYN ); // Çʵå/¸¶À» À̵¿ HANDLER_CG_DECL( CG_ZONE_RETURN_VILLAGE_SYN ); // Á×¾úÀ»¶§ Çʵ忡¼­ ¸¶À»·Î À̵¿. HANDLER_CG_DECL( CG_ZONE_MISSION_RELAY_CREATE_SYN ); HANDLER_CG_DECL( CG_ZONE_MISSION_RELAY_JOIN_SYN ); HANDLER_CG_DECL( CG_PARTY_JOIN_SYN ); HANDLER_CG_DECL( CG_PARTY_JOIN_RESPONSE_ACK ); HANDLER_CG_DECL( CG_PARTY_JOIN_RESPONSE_NAK ); HANDLER_CG_DECL( CG_PARTY_LEAVE_SYN ); HANDLER_CG_DECL( CG_PARTY_FORCED_EXPULSION_SYN ); HANDLER_CG_DECL( CG_PARTY_CHANGE_MASTER_SYN ); HANDLER_CG_DECL( CG_PARTY_DESTROY_SYN ); HANDLER_CG_DECL( CG_PARTY_INVITE_SYN ); HANDLER_CG_DECL( CG_PARTY_INVITE_RESPONSE_ACK ); HANDLER_CG_DECL( CG_PARTY_INVITE_RESPONSE_NAK ); HANDLER_CG_DECL( CG_PARTY_SELECT_TARGET_SYN ); HANDLER_CG_DECL( CG_PARTY_MINIMAP_POINTING_SYN ); HANDLER_CG_DECL( CG_PARTY_ITEM_DISTRIBUTION_CHANGE_SYN ); //HANDLER_CG_DECL( CG_PARTY_RETURN_G2C_LEADER_QUERY_CMD ); // ÆÄƼÀå¿¡°Ô ÆÄƼ¿ø ÃÊ´ë ¿©ºÎ ¸Þ½ÃÁö, ÆÄƼ¿øÀÇ Çѹø Ãë¼Ò½Ã //HANDLER_CG_DECL( CG_PARTY_RETURN_G2C_MEMBER_QUERY_CMD ); // ÆÄƼ¿ø¿¡°Ô ÃÊ´ë ¸Þ½ÃÁö HANDLER_CG_DECL( CG_PARTY_RETURN_C2G_MEMBER_QUERY_ACK ); // ÆÄƼ¿øÀÇ °ÅºÎ °ü·Ã //_NA_20110630_BATTLE_ZONE_RENEWAL HANDLER_CG_DECL( CG_PARTY_CREATE_ROOM_SYN ); HANDLER_CG_DECL( CG_PARTY_CHECK_ROOM_SYN ); HANDLER_CG_DECL( CG_PARTY_BATTLE_ZONE_INFO_SYN ); HANDLER_CG_DECL( CG_PARTY_LEAVE_ROOM_SYN ); HANDLER_CG_DECL( CG_PARTY_ROOM_LIST_SYN ); HANDLER_CG_DECL( CG_PARTY_CHANGE_ROOM_OPTION_SYN ); HANDLER_CG_DECL( CG_PARTY_CHANGE_MAX_PLAYER_COUNT_SYN ); HANDLER_CG_DECL( CG_PARTY_JOIN_ROOM_SYN ); HANDLER_CG_DECL( CG_PARTY_STANDBY_ROOM_SYN ); HANDLER_CG_DECL( CG_PARTY_READY_STATE_SYN ); HANDLER_CG_DECL( CG_PARTY_ROOM_FORCE_LEAVE_SYN ); HANDLER_CG_DECL( CG_PARTY_ROOM_START_SYN ); HANDLER_CG_DECL( CG_PARTY_SELECT_TEAM_SYN ); HANDLER_CG_DECL( CG_PARTY_REQUEST_MEMBER_INFO_SYN ); HANDLER_CG_DECL( CG_PARTY_FIND_ROOM_BY_CHARID_SYN ); HANDLER_CG_DECL( CG_PARTY_STANDBY_PAUSE_SYN ); HANDLER_CG_DECL( CG_PARTY_REQUEST_RENDER_INFO_SYN ); HANDLER_CG_DECL( CG_PARTY_FIND_ROOM_BY_ROOMNUMBER_SYN ); HANDLER_CG_DECL( CG_PARTY_FIND_WAITING_ROOM_SYN ); HANDLER_CG_DECL( CG_PARTY_FIND_ROOM_BY_MISSION_NAME_SYN ); HANDLER_CG_DECL( CG_PARTY_INVITE_PARTY_ROOM_ANS ); #ifdef _NA_20111220_CHANGE_DISCONNECTED_USER_PROCESS HANDLER_CG_DECL( CG_PARTY_RETURN_G2C_MEMBER_REMOVE_SYN ); #endif // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND HANDLER_CG_DECL( CG_CHAOS_ZONE_PACKET ); // GM ¸í·É¾î HANDLER_CG_DECL( CG_GM_CHANNELINFO_SYN ); HANDLER_CG_DECL( CG_GM_WARP_SYN ); /////////////////////////////////////////////////////////////////////////// // HANDLER_CG_DECL( CG_ARMORKIT_FINDHACK ); // HANDLER_CG_DECL( CG_CRYPTOGRAPHY_ACK ); HANDLER_CG_DECL( CG_CRYPTOGRAPHY_NAK ); HANDLER_CG_DECL(CG_SECURE_MOLACONTROL); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN01_SIMPLEX_SNK_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN02_SIMPLEX_SNK_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN03_SIMPLEX_SNK_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN04_SIMPLEX_SNK_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN05_QUERY_MOLA_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN06_CONFIGURE_MOLA_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN07_CONFIGURE_HEARTBEAT_ACK); //HANDLER_CG_DECL(CG_SECURE_POLICY_PATTERN08_DUPLEX_SNK_ACK); //HANDLER_CG_DECL(CG_SECURE_QUERY_BUILTIN_CHK_ACK); //HANDLER_CG_DECL(CG_SECURE_QUERY_RESOURCE_CHK_T1_ACK); //HANDLER_CG_DECL(CG_SECURE_QUERY_RESOURCE_CHK_T2_ACK); //HANDLER_CG_DECL(CG_SECURE_QUERY_RESOURCE_CHK_NTF1_SYN); //HANDLER_CG_DECL(CG_SECURE_QUERY_RESOURCE_CHK_T3_ACK); //HANDLER_CG_DECL(CG_SECURE_QUERY_RESOURCE_CHK_T4_ACK); //HANDLER_CG_DECL(CG_SECURE_QUERY_RESOURCE_CHK_NTF2_SYN); // USING_HACKSHIELD HANDLER_CG_DECL( CG_HACKSHIELD_SERVER_EX_QUERY_ACK ); // USING_XIGNCODE HANDLER_CG_DECL(CG_XIGNCODE_SERVER_QUERY_ACK); // USING_GAMEGUARD HANDLER_CG_DECL(CG_GAMEGUARD_SERVER_QUERY_ACK); HANDLER_CG_DECL(CG_GAMEGUARD_HACKDATA_CMD); HANDLER_CG_DECL( CG_ZONE_INSTANCE_DUNGEON_REQUEST_SYN ); HANDLER_CG_DECL( CG_ZONE_INSTANCE_DUNGEON_LEAVE_SYN ); HANDLER_CG_DECL( CG_CONNECTION_CRASH_REPORT_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_TUTORIAL_FIELD_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_TUTORIAL_MISSION_LEAVE_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_CAN_CREATE_100LEVEL_QUEST_MISSION_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_SSQ_JOIN_INFO_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_SSQ_JOIN_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_SSQ_ROOM_INFO_SYN ); HANDLER_CG_DECL( CG_ZONE_EX_SSQ_OBSERVER_SYN ); //__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ HANDLER_CG_DECL(CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN); HANDLER_CG_DECL(CG_ZONE_EX_QUEST_PORTAL_WITHDRAW_MEMBER_SYN); #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM HANDLER_CG_DECL(CG_ZONE_EX_SPA_ENTER_SYN); HANDLER_CG_DECL(CG_ZONE_EX_SPA_LEAVE_SYN); #endif //_NA_008069_20150210_ADD_SPA_SYSTEM //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ //Agent¿Í °ü·ÃµÈ ÆÐŶ HANDLER_CG_DECL( CG_ETC_GET_BATTLE_OPEN_TIME_SYN ); #ifdef _NA_0_20110329_GAMEOPTION_SETTING HANDLER_CG_DECL( CG_ETC_GAMEOPTION_LOAD_SYN ); HANDLER_CG_DECL( CG_ETC_GAMEOPTION_SAVE_SYN ); #endif //_NA_0_20110329_GAMEOPTION_SETTING #ifdef _NA004034_20120102_GUILD_POINT_SYSTEM HANDLER_CG_DECL(CG_ETC_GUILD_RANKINGINFO_SYN); HANDLER_CG_DECL(CG_ETC_GUILDINFO_SYN); #endif //_NA004034_20120102_GUILD_POINT_SYSTEM //_NA_000000_20120410_SPEEDHACK HANDLER_CG_DECL(CG_ETC_MEMORY_HACK_CMD); //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´ #ifdef __NA001334_090420_SERVER_SELECT_FACILITY__ HANDLER_CG_DECL(CG_CONNECTION_SERVER_SELECT_REQUEST_SYN); #endif #if !defined _NA_0_20110613_GAME_SHOP_RENEWAL #ifdef __NA000000_SHOP_USERID_50_PASSING_PROC__ HANDLER_CG_DECL(CG_SHOP_SEND_GIFT_SYN); #endif #endif //#if !defined _NA_0_20110613_GAME_SHOP_RENEWAL //_KR_0_20091021_FIRENDINVITATION_EXTEND //ÇÁ·ÎÅäÄÝ Çڵ鷯 ¼±¾ðºÎ HANDLER_CG_DECL( CG_EVENT_INVITATEFRIEND_REWARD_LIST_SYN ); //Ä£±¸ ÃÊ´ë À̺¥Æ®ÀÇ º¸»ó ¾ÆÀÌÅÛÀÌ ¸ñ·ÏÀ» ¿äûÇÑ´Ù. #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE HANDLER_CG_DECL(CG_CHARNAME_CHANGE_SYN); #endif HANDLER_CG_DECL(CG_CONNECTION_HACKER_SYN); //Ìí¼ÓÍâ¹Ò¼ì²â by:Ê®ÀïÆÂ½£Éñ 2021-07-01 }; // DONE: f110609.3L, f110516.3L, need renewal functors = { // SendLobbyInfoForRequest, SendPVPLobbyInfoForRequest, SendBroadMessage } #if SUN_CODE_BACKUP template class SendLobbyInfoForRequest { User * m_pMe; PACKET_TYPE & m_msg; public: SendLobbyInfoForRequest( PACKET_TYPE & msg, User * pMe):m_msg(msg),m_pMe(pMe){ m_msg.m_Count = 0; } ~SendLobbyInfoForRequest(){} VOID SendPacket() { m_pMe->SendPacket( &m_msg, m_msg.GetSize() ); } VOID operator()( User * pUser ) { if( m_pMe && m_pMe->GetUserKey() == pUser->GetUserKey() ) return; if( !pUser->IsMaster() && pUser->IsReady() ) { m_msg.m_dwReadyPlayerKey[m_msg.m_Count] = pUser->GetPlayerKey(); ++m_msg.m_Count; } } }; template class SendPVPLobbyInfoForRequest { User * m_pMe; PACKET_TYPE & m_msg; public: SendPVPLobbyInfoForRequest( PACKET_TYPE & msg, User * pMe = NULL ):m_msg(msg),m_pMe(pMe){ m_msg.m_Count = 0; } ~SendPVPLobbyInfoForRequest(){} VOID SendPacket() { m_pMe->SendPacket( &m_msg, m_msg.GetSize() ); } VOID operator()( User * pUser ) { if( m_pMe && m_pMe->GetUserKey() == pUser->GetUserKey() ) return; m_msg.m_PlayerInfo[m_msg.m_Count].m_Team = pUser->GetTeam(); m_msg.m_PlayerInfo[m_msg.m_Count].m_Ready = (BYTE)pUser->IsReady(); m_msg.m_PlayerInfo[m_msg.m_Count].m_dwPlayerKey = pUser->GetPlayerKey(); ++m_msg.m_Count; } }; template class SendBroadMessage { PACKET_TYPE & m_msg; public: SendBroadMessage( PACKET_TYPE & msg ):m_msg(msg){} ~SendBroadMessage(){} VOID operator()( User * pUser ) { pUser->SendPacket( &m_msg, m_msg.GetSize() ); } }; #endif //SUN_CODE_BACKUP