#pragma once #ifdef _NA_0_20080402_GUILD_DATASTRUCT_CHANGE #include "ObjectDefine.h" #include "Party/GameParty.h" #include "Party/GamePartyManager.h" namespace GuildUtil { namespace Cast { struct member_to_all {}; struct members_to_around {}; struct member_in_party {}; template class CastImpl{}; /*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ±æµå¿ø ÇѸí ÇѸíÀÇ ÁÖº¯ ¼½ÅÍ¿¡ ÀÖ´Â À¯Àúµé¿¡°Ô º¸³»´Â ÆÐŶ + Á¦¾àÁ¶°Ç : 1. ÀÚ½ÅÀÇ ObjetKeyrkey°¡ ÇÊ¿ä (m_dwPlayerKey) 2. ¼½ÅÍ ¾È¿¡ ÀÖ´Â »ó´ë ±æµå¸â¹öµéÇÑÅ׸¸ º¸³»´Â °æ¿ì »ó´ë¹æ ±æµå¹øÈ£ ¼ÂÆÃÇÊ¿ä 3. ¼½ÅÍ ¾È¿¡ ÀÖ´Â ¸ðµç Ç÷¹À̾îÇÑÅ׸¸ º¸³»´Â °æ¿ì GuildGuid = INVALID_GUILDGUID·Î ¼ÂÆÃ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ template class CastImpl { public: CastImpl(MsgType* msg) : m_SendMsg(msg) {} void SendPacket(GUILDMEMBER_HASH::iterator::value_type& data, GUILDGUID GuildGuid) { GameGuildMember* pMember = data.second; if(pMember) { Player* pPlayer = PlayerManager::Instance()->FindPlayerByName(pMember->GetCharName()); if(pPlayer) { m_SendMsg->m_dwPlayerKey = pPlayer->GetObjectKey(); pPlayer->SendPacketAround(m_SendMsg, sizeof(*m_SendMsg), TRUE, GuildGuid); } } } private: MsgType* m_SendMsg; }; /*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ÆÄƼ¾È¿¡ ¼Ò¼ÓµÈ ±æµå¿ø¿¡°Ô º¸³»´Â ÆÐŶ + ÇöÀç´Â member_in_party¸¦ È£ÃâÇÏ´Â ÆÐŶÀÌ Çϳª¹Û¿¡ ¾øÁö¸¸ ÃßÈÄ »ç¿ëÇÏ´Â ÆÐŶÀÌ ´õ ´Ã¾î³¯ ¼ö ÀÖÀ½ + ±× ¶§¸¦ ´ëºñÇØ ÀϹÝÈ­ ÀÛ¾÷ÀÌ ÇÊ¿ä ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ template class CastImpl { public: CastImpl(MsgType* msg) : m_SendMsg(msg) {} void SendPacket(GUILDMEMBER_HASH::iterator::value_type& data, GUILDGUID GuildGuid) { GameGuildMember* pMember = data.second; if(pMember) { Player* pPlayer = PlayerManager::Instance()->FindPlayerByName(pMember->GetCharName()); if(pPlayer && pPlayer->GetPartyState().IsMember()) { GameParty *pParty = GamePartyManager::Instance()->FindParty(pPlayer->GetPartyState().GetPartyKey()); if(pParty && (pParty->FindGuildMember(GuildGuid))) { m_SendMsg->m_dwUserKey =pPlayer->GetUserKey(); m_SendMsg->m_wPartykey = pPlayer->GetPartyState().GetPartyKey(); m_SendMsg->m_bReason = eREASON_LEAVE_PARTY_BY_GUILDRELATION; g_pGameServer->SendToServer(AGENT_SERVER, m_SendMsg, sizeof(*m_SendMsg)); } } } } private: MsgType* m_SendMsg; }; /*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ±æµå¿ø ÇѸí ÇÑ¸í¿¡°Ô º¸³»´Â ÆÐŶ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ template class CastImpl { public: CastImpl(MsgType* msg) : m_pSendMsg(msg) , m_rMsgBrd(MSG_ONEtoN_BROADCASTER::InstanceOfBase()) { m_rMsgBrd = MSG_ONEtoN_BROADCASTER::InstanceOfBase(); m_rMsgBrd.Init( m_pSendMsg, sizeof(*m_pSendMsg)) ; m_pStartPtr = m_rMsgBrd.GetUsersStartPtr(); } ~CastImpl() { g_pGameServer->SendToServer(AGENT_SERVER, &m_rMsgBrd, m_rMsgBrd.GetSendingSize()); } void SendPacket(GUILDMEMBER_HASH::iterator::value_type& data, GUILDGUID GuildGuid) { GameGuildMember* pMember = data.second; // Àû¿ë½Ã Àû´çÈ÷ ¹Ù²ãÁֽñæ...__NA000000_0806XX_CODE_REFINE_FOR_PERFORMANCE_TUNEUP_NO04__ BOOST_STATIC_ASSERT( FALSE ); Player* pPlayer = PlayerManager::Instance()->FindPlayerByName(pMember->GetCharName()); if(pPlayer) { m_rMsgBrd.AddUser(m_pStartPtr, pPlayer->GetUserGuid()) ; } } private: DWORD* m_pStartPtr; MsgType* m_pSendMsg; MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN& m_rMsgBrd; }; /*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + TODO : Operator() ÀÎÀÚ °³¼ö·Î Ư¼öÈ­ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ template class GuildCast { public: GuildCast(GUILDMEMBER_HASH* data, MsgType* msg, GUILDGUID guildguid) : m_CastImpl(msg), m_otherGuildGuid(guildguid), m_pMemberList(data) {} public: void excute() { for_each(m_pMemberList->begin(), m_pMemberList->end(), boost::lambda::bind(&Impl::SendPacket, &m_CastImpl, boost::lambda::_1, m_otherGuildGuid)); } private: typedef CastImpl Impl; GUILDMEMBER_HASH* m_pMemberList; GUILDGUID m_otherGuildGuid; Impl m_CastImpl; }; } } #endif //_NA_0_20080402_GUILD_DATASTRUCT_CHANGE