#include "stdafx.h" #include ".\handler_dg_charinfo.h" #include #include #include #include "PlayerManager.h" #include "Player.h" #include #include #include #include "ItemManager.h" #include "SCItemSlotContainer.h" #include "DropManager.h" #include "ObjectFactory.h" #include "QuestManager.h" #include "MissionManager.h" #include "Skill.h" #include "SkillManager.h" #include //_NA002217_100728_EP2_PERK_SYSTEM_ #include "GameZone.h" #include "GameZoneManager.h" #include "WarehouseSlotContainer.h" #include "GuildWarehouseSlotContainer.h" #include "QuickManager.h" #include "QuickStyleManager.h" #include "EventInventorySlotContainer.h" #include "GameServerEx.h" #include "MissionManager.h" #include "QuestManager_Concrete.h" #include #include #include #include "StatusManager.h" #include #include "GameShopManager.h" #include ".\FriendInvitation\GFriendInvitationController.h" #ifdef __CN_OO0510__FATIGUE_MATCHING_UPDATE #include #endif //__CN_OO0510__FATIGUE_MATCHING_UPDATE #include "RankingSystemCtl.h" #include "GameGuildManager.h" #include #include #include "CollectedList.h" #include "GameDominationManager.h" #ifdef _NA_1419_20100121_ACCUMULATE_POINT #include "AccumulatePoint.h" #endif #include "SystemMemo.h" //_NA_20100604_BETTER_DOMINATION_MANAGER #include ".\GameGuild.h" #include "ComposeOrDecomposeImplement.h" #ifdef _NA_0_20110308_SKILL_COOL_TIME_STORAGE #include "./SkillSystem/SkillCoolTimeAccessor.h" #endif #include "ImplementUtil.h" #ifdef _NA_003027_20111013_HONOR_SYSTEM #include #include #endif //_NA_003027_20111013_HONOR_SYSTEM #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL #include "./GameShop/GameShop.Manager.h" #include "./GameShop/GameShop.EventProcessor.h" #endif #ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT #include "PeakTimeEvent.h" #endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT #include #include #ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM #include "SunRanking/SunRankingManager.h" #include "SunRanking/SunRankingGradeManager.h" #include "StatueManager.h" #endif // _NA_008012_20150204_SUN_RANKING_SYSTEM //-------------------------------------------------------------------------------------------------- // changes, f100819.1L const nsPacket::PacketHandlerInfo Handler_DG_CHARINFO::GetPacketHandlerNodes() { #define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), phase, Handler_DG_CHARINFO::On##p } #define HANDLER_NODE_INFO_EOR() { 0, static_cast(0), NULL } static const nsPacket::PacketHandlerNode handlers_static_[] = { HANDLER_NODE_INFO(DG_ITEM, DG_ITEM_SERIAL_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_ITEM, DG_ITEM_SERIAL_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_CHAR_ITEM_CMD, PHASE_SERVICE), #ifdef _NA_20100106_REPURCHAS_BUGFIX_2496 HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_CHAR_REPURCHASE_ITEM_CMD, PHASE_SERVICE), #endif //_NA_20100106_REPURCHAS_BUGFIX_2496 //_KR_0_20091021_FIRENDINVITATION_EXTEND HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_INVITATEDFRIEND_CMD, PHASE_SERVICE), //C_NA_0_20100520_ACSYSTEM_CHANGED HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_CHAR_ACHIEVEMENT_CMD, PHASE_SERVICE), #ifdef _NA_0_20110308_SKILL_COOL_TIME_STORAGE HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_SKILL_COOL_TIME_CMD, PHASE_SERVICE), #endif HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_SKILL_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_QUICK_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_STYLE_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_QUEST_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_EXTRA_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_UPDATE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_UPDATE_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_QUERY_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_QUERY_NAK, PHASE_SERVICE), //_NA002217_100728_EP2_PERK_SYSTEM_ HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_SKILL_LIST_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_SKILL_PERK_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_SKILL_PERK_CONTROL_CMD, PHASE_SERVICE), // HANDLER_NODE_INFO(DG_WAREHOUSE, DG_WAREHOUSE_START_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_WAREHOUSE_START_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_WAREHOUSE_END_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_WAREHOUSE_END_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_WAREHOUSE_PWD_SETTING_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_ITEM, DG_ITEM_INVENTORY_FLAG_STREAM_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_WAREHOUSE_FLAG_STREAM_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_SELECT_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_SELECT_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_UPDATE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_UPDATE_NAK, PHASE_SERVICE), // ¿ÀǺ£Å¸ ¿¡Å׸£ À̺¥Æ® HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_ITEM_STATUS_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_ITEM_STATUS_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_ITEM_REG_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_ITEM_REG_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_USETIME_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_QUERY_EXIST_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_STATUS_UPDATE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_SSQ_REWARD_EXIST_CMD, PHASE_SERVICE), // DG_EVENT_SSQ_REWARD_UPDATE_SYN, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_SSQ_REWARD_UPDATE_ACK, PHASE_SERVICE), //_KR_0_20091021_FIRENDINVITATION_EXTEND = { HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_INVITATEFRIEND_REWARDUPDATE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_INVITATEFRIEND_REWARDUPDATE_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_INVITATEFRIEND_RECALLSELECT_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_INVITATEFRIEND_RECALLSELECT_NAK, PHASE_SERVICE), //} #ifdef _NA_20100420_CHANGE_SYSTEM_MEMO_LOGIC HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_DOMINATION_REWARD_AND_DEL_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_LOTTO_REWARD_AND_DEL_ACK, PHASE_SERVICE), #endif////_NA_20100420_CHANGE_SYSTEM_MEMO_LOGIC //_NA_20100812_INTEGRATE_SYSTEM_MEMO_DOMINATION HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_SYSTEMMEMO_ITEM_CHECK_ACK, PHASE_SERVICE), // ¹Ì¼Ç ·©Å· °ü·Ã #ifdef _NA_008012_20150130_RANKING_SYSTEM HANDLER_NODE_INFO(DG_MISSION, DG_MISSION_RECORD_SELECT_CMD, PHASE_SERVICE), // HANDLER_NODE_INFO(DG_MISSION, DG_MISSION_CLEAR_UPDATE_ACK, PHASE_SERVICE), //HANDLER_NODE_INFO(DG_MISSION, DG_MISSION_CLEAR_UPDATE_NAK, PHASE_SERVICE), //HANDLER_NODE_INFO(DG_MISSION, DG_MISSION_RECORD_UPDATE_ACK, PHASE_SERVICE), //HANDLER_NODE_INFO(DG_MISSION, DG_MISSION_RECORD_UPDATE_NAK, PHASE_SERVICE), #endif // _NA_008012_20150130_RANKING_SYSTEM #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_EXIST_CHARNAME_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_EXIST_CHARNAME_NAK, PHASE_SERVICE), #else #if !defined(__NA000000_SHOP_USERID_50_PASSING_PROC__) HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_EXIST_CHARNAME_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_EXIST_CHARNAME_NAK, PHASE_SERVICE), #endif #endif HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_SHOP_RECV_GIFT_NTF, PHASE_SERVICE), #ifdef __CN_OO0510__FATIGUE_MATCHING_UPDATE HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_FATIGUE_CMD, PHASE_SERVICE), #endif HANDLER_NODE_INFO(DG_WAYPOINT, DG_WAYPOINT_INFO_LOAD_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAYPOINT, DG_WAYPOINT_INFO_LOAD_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAYPOINT, DG_WAYPOINT_INFO_SAVE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAYPOINT, DG_WAYPOINT_INFO_SAVE_NAK, PHASE_SERVICE), //{__NA001164_20081024_CHAR_WAY_POINT_PACKET HANDLER_NODE_INFO(DG_WAYPOINT, DG_CHAR_WAYPOINT_INFO_LOAD_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAYPOINT, DG_CHAR_WAYPOINT_INFO_SAVE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAYPOINT, DG_CHAR_WAYPOINT_INFO_DEL_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAYPOINT, DG_CHAR_WAYPOINT_INFO_NAK, PHASE_SERVICE), //} #ifdef _NA_008012_20150130_RANKING_SYSTEM HANDLER_NODE_INFO(DG_MISSION, DG_MISSION_RANKING_POINT_REQ_ACK, PHASE_SERVICE), #endif // _NA_008012_20150130_RANKING_SYSTEM HANDLER_NODE_INFO(DG_WAREHOUSE, DG_GUILD_WAREHOUSE_CLOSE_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_GUILD_WAREHOUSE_CLOSE_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_GUILD_WAREHOUSE_TAPEX_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_WAREHOUSE, DG_GUILD_WAREHOUSE_TAPEX_NAK, PHASE_SERVICE), //{__NA001283_20090227_COLLECTION_LIST HANDLER_NODE_INFO(DG_COLLECT, DG_COLLECT_LIST_LOAD_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_COLLECT, DG_COLLECT_ADD_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_COLLECT, DG_COLLECT_DEL_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_COLLECT, DG_COLLECT_NAK, PHASE_SERVICE), //} HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_HEIM_LOTTO_PICK_NTF, PHASE_SERVICE), #ifdef _NA_1419_20100121_ACCUMULATE_POINT HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_ACCUMULATEPOINT_MATCHDATE_NTF, PHASE_SERVICE), #endif HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_SELECT_COMPOSITION_OR_DECOMPOSITION_HISTORIES_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(DG_OTHER, DG_OTHER_EXTEND_CHAR_SLOT_ACK, PHASE_SERVICE), #ifdef _NA_003027_20111013_HONOR_SYSTEM HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_HONORSYSTEM, PHASE_UNLIMITED), #endif //_NA_003027_20111013_HONOR_SYSTEM #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARINFO_POINTWALLET_SYSTEM, PHASE_UNLIMITED), #endif //_NA004034_20120102_POINT_WALLET_SYSTEM HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARNAME_CHANGE_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARACTER_EXTRA_INFO_CMD, PHASE_UNLIMITED), // _NA_006372_20130108_BADGE_ITEM #ifdef _NA_000000_20140120_SMART_NPC_SYSTEM HANDLER_NODE_INFO(DG_EVENT, DG_EVENT_SMARTNPC_SYSTEM, PHASE_UNLIMITED), #endif //_NA_000000_20140120_SMART_NPC_SYSTEM #ifdef _NA_007086_20140318_MONSTERBOOK HANDLER_NODE_INFO(DG_CHARINFO, DG_CHARACTER_MONSTERBOOK_CMD, PHASE_UNLIMITED), #endif //_NA_007086_20140318_MONSTERBOOK #ifdef _NA_007932_20150106_USER_EXTRA_INFO HANDLER_NODE_INFO(DG_CHARINFO, DG_USER_EXTRA_INFO_CMD, PHASE_UNLIMITED), #endif // _NA_007932_20150106_USER_EXTRA_INFO #ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT HANDLER_NODE_INFO(DG_EVENT, DG_GMEVENT_PEAKTIME_REGISTER_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_EVENT, DG_GMEVENT_PEAKTIME_TERMINATE_ACK, PHASE_UNLIMITED), #endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT #ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_UPDATE_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_SELECT_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_GRADE_SELECT_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_STATUE_SELECT_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_STATUE_ITEM_SLOT_INFO_INSERT_ACK, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_SETTLE_START_CMD, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_SETTLE_COMPLETE_CMD, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_SELECT_COMPLETE_CMD, PHASE_UNLIMITED), HANDLER_NODE_INFO(DG_SUN_RANKING, DG_SUN_RANKING_GRADE_SELECT_COMPLETE_CMD, PHASE_UNLIMITED), #endif // _NA_008012_20150204_SUN_RANKING_SYSTEM // HANDLER_NODE_INFO_EOR() // end of records }; // BOOST_STATIC_ASSERT(_countof(handlers_static_) >= 1); nsPacket::PacketHandlerInfo return_value = { handlers_static_, _countof(handlers_static_) - 1 }; // return return_value; }; //-------------------------------------------------------------------------------------------------- Handler_DG_CHARINFO_IMPL( DG_CHARINFO_CHAR_ITEM_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_CHAR_ITEM_CMD * pRecvMsg = (MSG_DG_CHARINFO_CHAR_ITEM_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; // Agent¿¡ Ç÷¹À̾î HP Á¤º¸¸¦ º¸³»ÁØ´Ù. MSG_AG_CHARINFO_CHAR_CMD CharInfoMsg; CharInfoMsg.m_MaxHP = pRecvMsg->m_CharacterInfo.m_iMaxHP; CharInfoMsg.m_HP = pRecvMsg->m_CharacterInfo.m_iHP; CharInfoMsg.m_MaxMP = pRecvMsg->m_CharacterInfo.m_iMaxMP; CharInfoMsg.m_MP = pRecvMsg->m_CharacterInfo.m_iMP; CharInfoMsg.m_dwCHuntingVCount = pRecvMsg->m_CharacterInfo.m_iCHuntingVCount; CharInfoMsg.m_dwCHuntingTotCount = pRecvMsg->m_CharacterInfo.m_iCHuntingTotCount; CharInfoMsg.m_byChaoState = pRecvMsg->m_CharacterInfo.m_ChaoState; CharInfoMsg.m_MaxSD = pRecvMsg->m_CharacterInfo.m_iMaxSD; CharInfoMsg.m_SD = pRecvMsg->m_CharacterInfo.m_iSD; #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE CharInfoMsg.max_FP = pRecvMsg->m_CharacterInfo.max_FP_; CharInfoMsg.cur_FP = pRecvMsg->m_CharacterInfo.cur_FP_; #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE pPlayer->SendPacket( &CharInfoMsg, sizeof(CharInfoMsg) ); // ij¸¯ÅÍ Á¤º¸ ¼ÂÆÃ pPlayer->SetCharInfo( &pRecvMsg->m_CharacterInfo ); ProtectorInventory& rPROTECT = pPlayer->GetWarehouseInventoryProtector().INVENTORY(); rPROTECT.SetPasswordFromDB( pRecvMsg->m_CharacterInfo.m_InventoryPwd ); BOOL bPwdSet = rPROTECT.IsEmptyPassword() ? FALSE : TRUE; rPROTECT.Block( bPwdSet, FALSE ); { eSPECIAL_RENDER_EFFECT effect = eSPECIAL_RENDER_EFFECT_NONE; switch( pRecvMsg->m_CharacterInfo.m_ChangeOfClassStep ) { case eCHAREX_BERSERKER_100LEVEL: case eCHAREX_DRAGON_KNIGHT_100LEVEL: case eCHAREX_SHADOW_100LEVEL: case eCHAREX_VALKYRIE_100LEVEL: case eCHAREX_ELEMENTALIST_100LEVEL: case eCHAREX_MYSTIC_100LEVEL: case eCHAREX_HELLROID_100LEVEL: #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE case eCHAREX_WITCHBLADE_100LEVEL: #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE effect = eSPECIAL_RENDER_EFFECT_CHANGEofCLASS_1st; } pPlayer->RENDER_EFFECT.AddEffect( effect ); }; // ¾ÆÀÌÅÛ Á¤º¸ ¼ÂÆÃ // pPlayer->GetItemManager()->DBLoad( &pRecvMsg->m_ItemInfo ); pPlayer->GetItemManager()->SerializeItemTotalInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE ); if (pRecvMsg->m_CharacterInfo.m_bActiveEtherDevice) { pPlayer->m_EtherManager.ActiveBulletItem( pRecvMsg->m_CharacterInfo.m_byEtherBulletPos ); } } #ifdef _NA_20100106_REPURCHAS_BUGFIX_2496 Handler_DG_CHARINFO_IMPL( DG_CHARINFO_CHAR_REPURCHASE_ITEM_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_CHAR_REPURCHASE_ITEM_CMD * pRecvMsg = (MSG_DG_CHARINFO_CHAR_REPURCHASE_ITEM_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->GetItemManager()->GetTradingImpl()->SerializeRepurchaseItems( pRecvMsg->m_RepurchasItem, SERIALIZE_STORE); } #endif //_NA_20100106_REPURCHAS_BUGFIX_2496 // implemented by _KR_0_20091021_FIRENDINVITATION_EXTEND Handler_DG_CHARINFO_IMPL( DG_CHARINFO_INVITATEDFRIEND_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_INVITATEDFRIEND_CMD * pRecvMsg = (MSG_DG_CHARINFO_INVITATEDFRIEND_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; GFriendInvitationController::Instance()->GetInvitatedFrindInfo(pPlayer, pRecvMsg, SERIALIZE_STORE); } //C_NA_0_20100520_ACSYSTEM_CHANGED Handler_DG_CHARINFO_IMPL( DG_CHARINFO_CHAR_ACHIEVEMENT_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_CHAR_ACHIEVEMENT_CMD * pRecvMsg = (MSG_DG_CHARINFO_CHAR_ACHIEVEMENT_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->GetACManager()->Serialize(pRecvMsg->achievement_info_, ACHIEVEMENT_SAVE); } #ifdef _NA_0_20110308_SKILL_COOL_TIME_STORAGE Handler_DG_CHARINFO_IMPL( DG_CHARINFO_SKILL_COOL_TIME_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_SKILL_COOL_TIME_CMD * pRecvMsg = (MSG_DG_CHARINFO_SKILL_COOL_TIME_CMD *)pMsg; Player * player = PlayerManager::Instance()->FindPlayerByUserKey(pRecvMsg->m_dwKey); if(player == NULL) return; SkillCoolTimeAccessor::Instance()->ApplySkillCoolTime(player, &(pRecvMsg->skill_cool_time)); } #endif Handler_DG_CHARINFO_IMPL( DG_CHARINFO_SKILL_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_SKILL_CMD * pRecvMsg = (MSG_DG_CHARINFO_SKILL_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->SerializeSkillTotalInfo( pRecvMsg->m_SkillInfo, SERIALIZE_STORE ); } Handler_DG_CHARINFO_IMPL( DG_CHARINFO_QUICK_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_QUICK_CMD * pRecvMsg = (MSG_DG_CHARINFO_QUICK_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->GetQuickManager()->SerializeQuickTotalInfo( pRecvMsg->m_QuickInfo, SERIALIZE_STORE ); pPlayer->GetQuickManager()->UpdateOriginalItems(); } Handler_DG_CHARINFO_IMPL( DG_CHARINFO_STYLE_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_STYLE_CMD * pRecvMsg = (MSG_DG_CHARINFO_STYLE_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->GetStyleManager()->SerializeStyleTotalInfo( pRecvMsg->m_StyleInfo, SERIALIZE_STORE ); } Handler_DG_CHARINFO_IMPL( DG_CHARINFO_QUEST_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_QUEST_CMD * pRecvMsg = (MSG_DG_CHARINFO_QUEST_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->GetMissionManager()->SerializeStream( pRecvMsg->m_pMissionStream, MAX_MISSIONSTREAM_SIZE, SERIALIZE_STORE ); pPlayer->GetQuestManager()->SerializeProgrStream( pRecvMsg->m_pProgrQStream, MAX_PROGR_QUESTSTREAM_SIZE, QSERIALIZE_SAVE ); pPlayer->GetQuestManager()->SerializeComplStream( pRecvMsg->m_pComplQStream, MAX_COMPL_QUESTSTREAM_SIZE, QSERIALIZE_SAVE ); // Agent·Î QUESTÁ¤º¸ º¸³¿ /*MSG_AG_CHARINFO_QUEST_CMD msg; memcpy( msg.m_pMissionStream, pRecvMsg->m_pMissionStream, MAX_MISSIONSTREAM_SIZE ); memcpy( msg.m_pQuestStream, pRecvMsg->m_pQuestStream, MAX_MISSIONSTREAM_SIZE ); pPlayer->SendPacket( &msg, sizeof(msg) );*/ } Handler_DG_CHARINFO_IMPL( DG_CHARINFO_EXTRA_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_EXTRA_CMD * pRecvMsg = (MSG_DG_CHARINFO_EXTRA_CMD *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return ; pPlayer->GetStatusManager()->SerialzieStatusDetailInfo( pRecvMsg->m_TotalInfo, SERIALIZE_STORE ); pPlayer->SerialzieStatusGMInfo( pRecvMsg->m_GMStateInfo, SERIALIZE_STORE ); } //================================================================================================== Handler_DG_CHARINFO_IMPL(DG_CHARINFO_SKILL_LIST_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); #if !defined(_NA002217_100728_EP2_PERK_SYSTEM_) ASSERT(!"Current version not supported"); return; #endif } Handler_DG_CHARINFO_IMPL(DG_CHARINFO_SKILL_PERK_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); #if !defined(_NA002217_100728_EP2_PERK_SYSTEM_) ASSERT(!"Current version not supported"); return; #endif #ifdef _NA002217_100728_EP2_PERK_SYSTEM_ const MSG_DG_CHARINFO_SKILL_PERK_CMD* recv_msg = static_cast(pMsg); const DWORD user_guid = recv_msg->m_dwKey; const CHARGUID char_guid = recv_msg->char_guid_; Player* player = PlayerManager::Instance()->FindPlayerByUserKey(user_guid); if (!FlowControl::FCAssert(player && player->GetCharGuid() == char_guid)) { return; } nsSkill::PerkManager* perk_manager = player->GetPerkManager(); perk_manager->StorePerk(recv_msg->container_, char_guid); #endif } #ifdef __WAVERIX_TEST_LOGIC_TASK_MACRO__ extern void __WxTest_Receive_Perk_Control_DG(const MSG_DG_CHARINFO_SKILL_PERK_CONTROL_CMD* msg_cmd); #define DEBUG_REPORT_RECEIVE_PERK_CONTROL(msg) __WxTest_Receive_Perk_Control_DG(msg) #else #define DEBUG_REPORT_RECEIVE_PERK_CONTROL(msg) #endif Handler_DG_CHARINFO_IMPL(DG_CHARINFO_SKILL_PERK_CONTROL_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); #if !defined(_NA002217_100728_EP2_PERK_SYSTEM_) ASSERT(!"Current version not supported"); return; #endif #ifdef _NA002217_100728_EP2_PERK_SYSTEM_ const MSG_DG_CHARINFO_SKILL_PERK_CONTROL_CMD* recv_msg = \ static_cast(pMsg); const DWORD user_key = recv_msg->m_dwKey; Player* player = PlayerManager::Instance()->FindPlayerByUserKey(user_key); if (!FlowControl::FCAssert(player != NULL)) { return; } // GameField* const game_field = player->GetField(); if (game_field == NULL) { return; } // nsSkill::PerkManager* perk_manager = player->GetPerkManager(); const PerkControl& req_info = recv_msg->header; switch (req_info.request) { case req_info.eReq_InsertS2S: case req_info.eReq_DeleteS2S: break; default: SUNLOG(eCRITICAL_LOG, _T("|[%s]|ÐÅÏ¢=unauthrization request|Õ˺ÅGuid=%u|Requester=%s|"), __FUNCTION__, user_key, player->GetCharName()); return; } // MSG_CG_SKILL_PERK_CONTROL_CMD msg_cmd; nsSkill::PerkManager::eRequestResult result = \ perk_manager->ProcessRequestedMessage(req_info, &msg_cmd.header, &msg_cmd.data); if (result == perk_manager->eReqResult_NeedForward) { ASSERT(!"unexprected status"); } else if (result == perk_manager->eReqResult_ReplyResult) { player->SendPacket(&msg_cmd, msg_cmd.GetSize()); } DEBUG_REPORT_RECEIVE_PERK_CONTROL(recv_msg); #endif //_NA002217_100728_EP2_PERK_SYSTEM_ } //================================================================================================== class PassiveSkillListOpr { BYTE m_byCount; SLOTCODE *m_SkillCodeArray; public: PassiveSkillListOpr( SLOTCODE *SkillCodeArray ) : m_SkillCodeArray(SkillCodeArray), m_byCount(0) {} BYTE GetCount() { return m_byCount; } VOID operator () ( Skill *pSkill ) { m_SkillCodeArray[m_byCount] = pSkill->GetSkillCode(); ++m_byCount; } }; Handler_DG_CHARINFO_IMPL( DG_CHARINFO_UPDATE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_UPDATE_ACK * pRecvMsg = (MSG_DG_CHARINFO_UPDATE_ACK *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return; //SUNLOG( eFULL_LOG, "DG_CHARINFO_UPDATE_ACK[%s][%d]", pPlayer->GetCharName(), pPlayer->GetBehave() ); g_GameGuildManager.DestroyMember( pPlayer->GetCharInfo()->m_GuildGuid, pPlayer->GetCharGuid() ); #ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM SunRankingManager::Instance()->ProcessDisconnect(pPlayer); #endif // _NA_008012_20150204_SUN_RANKING_SYSTEM MSG_DG_CHARINFO_DISCONNECT_CHAR_CMD cmd; pPlayer->SendToGameDBPServer( &cmd, sizeof(cmd) ); MSG_AG_ZONE_ROOM_LEAVE_ACK msg; pPlayer->SendPacket( &msg, sizeof(msg) ); PlayerManager::Instance()->RemovePlayer( pPlayer ); } Handler_DG_CHARINFO_IMPL( DG_CHARINFO_UPDATE_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_UPDATE_NAK * pRecvMsg = (MSG_DG_CHARINFO_UPDATE_NAK *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return; //SUNLOG( eCRITICAL_LOG, "DG_CHARINFO_UPDATE_NAK[%u][%u][%u]", UserKey, pPlayer->GetUserID(), pRecvMsg->m_dwErrorCode ); //2007.02.14 ¹ß·»Å¸Àε¥ÀÌ ¾µ¾µÇÏ°Ô Ãß°¡ÇÔ. MSG_AG_ZONE_ROOM_LEAVE_NAK nmsg; nmsg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &nmsg, sizeof(nmsg) ); } #ifdef __WAVERIX_TEST_LOGIC_TASK_MACRO__ extern void __WxTest_Receive_Perk_List(const MSG_CG_CHARINFO_SKILL_PERK_CMD* msg_cmd); #define DEBUG_REPORT_RECEIVE_PERK_LIST(msg) __WxTest_Receive_Perk_List(msg) #else #define DEBUG_REPORT_RECEIVE_PERK_LIST(msg) #endif Handler_DG_CHARINFO_IMPL(DG_CHARINFO_QUERY_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); const MSG_DG_CHARINFO_QUERY_ACK* recv_msg = static_cast(pMsg); PlayerManager* const player_manager = PlayerManager::Instance(); const DWORD user_key = recv_msg->m_dwKey; Player* const player = player_manager->FindPlayerByUserKey(user_key); if (player == NULL) { return; } player_manager->AddPlayerName(player); // const ePLAYER_STATE player_state = static_cast(player->GetState()); if (player_state == PLAYER_CHARINFO_FIRST_REQUESTED) { static char busy_access_buffer[1024 * 64]; ;{ MSG_CG_CHARINFO_CHAR_ITEM_CMD& msg_items = \ *new (busy_access_buffer) MSG_CG_CHARINFO_CHAR_ITEM_CMD; // player->CopyToCharInfo(msg_items.m_CharacterInfo); // TODO: need check about size cacluation msg_items.m_Size = sizeof(RENDER_ITEMSTREAMEX) * (MAX_INVENTORY_SLOT_NUM + MAX_TEMPINVENTORY_SLOT_NUM); BitStream stream(msg_items.m_BitStreamBuffer, msg_items.m_Size, true); //// LOAD // removed by __001347_LTJ_REMOVE_TEMP_INVENTORY //GetItemSlotContainer(SI_TEMPINVENTORY)->Serialize(stream, eSLOT_SERIALIZE_CLIENT_LOAD); //// À¯·áÈ­ÅÇÀº º°µµ·Î ºÐ¸®ÇؾßÇÔ SCItemSlotContainer* const inventory = \ player->GetItemManager()->GetItemSlotContainer(SI_INVENTORY); inventory->Serialize(stream, eSLOT_SERIALIZE_CLIENT_LOAD); msg_items.m_Size = stream.GetNumberOfBytesUsed(); msg_items.Encode(); player->SendPacket(&msg_items, msg_items.GetSize()); }; ;{ MSG_CG_CHARINFO_SKILL_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_CG_CHARINFO_SKILL_CMD; player->SerializeSkillTotalInfo(msg_cmd.m_SkillInfo, SERIALIZE_LOAD); player->SendPacket(&msg_cmd, msg_cmd.GetSize()); }; ;{ MSG_CG_CHARINFO_QUICK_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_CG_CHARINFO_QUICK_CMD; player->GetQuickManager()->SerializeQuickTotalInfo(msg_cmd.m_QuickInfo, SERIALIZE_LOAD); player->SendPacket(&msg_cmd, msg_cmd.GetSize()); }; ;{ MSG_CG_CHARINFO_STYLE_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_CG_CHARINFO_STYLE_CMD; player->GetStyleManager()->SerializeStyleTotalInfo(msg_cmd.m_StyleInfo, SERIALIZE_LOAD); player->SendPacket(&msg_cmd, msg_cmd.GetSize()); }; #ifdef _NA_0_20110308_SKILL_COOL_TIME_STORAGE ;{ MSG_CG_CHARINFO_SKILL_COOL_TIME_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_CG_CHARINFO_SKILL_COOL_TIME_CMD; SkillCoolTimeAccessor::Instance()->GetSkillCoolTime(player, &(msg_cmd.skill_cool_time)); player->SendPacket(&msg_cmd, msg_cmd.GetSize()); }; #endif #ifdef _NA002217_100728_EP2_PERK_SYSTEM_ ;{ //MSG_CG_CHARINFO_SKILL_LIST_CMD& msg_cmd = \ // *new (busy_access_buffer) MSG_CG_CHARINFO_SKILL_LIST_CMD; }; ;{ MSG_CG_CHARINFO_SKILL_PERK_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_CG_CHARINFO_SKILL_PERK_CMD; nsSkill::PerkManager* const perk_manager = player->GetPerkManager(); perk_manager->LoadPerk(&msg_cmd.container_); player->SendPacket(&msg_cmd, msg_cmd.GetSize()); DEBUG_REPORT_RECEIVE_PERK_LIST(&msg_cmd); }; #endif ;{ MSG_AG_MISSION_STREAM_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_AG_MISSION_STREAM_CMD; player->GetMissionManager()->SerializeStream(msg_cmd.m_TotalInfo, SERIALIZE_LOAD); if (0 != msg_cmd.m_TotalInfo.m_Count) player->SendPacket(&msg_cmd, msg_cmd.GetSize()); }; ;{ // Äù½ºÆ® Á¤º¸ º¸³¿ player->GetQuestManager()->SendQuestStream(); }; ;{ // AC Á¤º¸ º¸³¿ MSG_CG_AREACONQUEST_STREAM_CMD& msg_cmd = \ *new (busy_access_buffer) MSG_CG_AREACONQUEST_STREAM_CMD; //C_NA_0_20100520_ACSYSTEM_CHANGED player->GetACManager()->Serialize(msg_cmd.achievement_info_, ACSERIALIZE_CLIENT_LOAD); player->SendPacket(&msg_cmd, msg_cmd.GetSize()); }; #ifdef _NA_1419_20100121_ACCUMULATE_POINT // Àû¸³ Æ÷ÀÎÆ® º¸³¿ player->GetAccumulatePoint()->SendPacketAccumulatePoint(); #endif #ifdef _NA_003027_20111013_HONOR_SYSTEM { WORD normalQ_count, dailyQ_count; player->GetQuestManager()->GetCompleteQuestCount(normalQ_count, dailyQ_count); player->GetACManager()->ProcessQuestCount(normalQ_count, dailyQ_count); } #endif//_NA_003027_20111013_HONOR_SYSTEM //#ifdef _NA_006372_20130108_BADGE_ITEM // ;{ // MSG_CG_CHARINFO_CHAR_ITEM_TOGGLE_CMD& msg_cmd = \ // *new (busy_access_buffer)MSG_CG_CHARINFO_CHAR_ITEM_TOGGLE_CMD; // // const nsSlot::TOGGLE_ITEMS* toggle_item_info = player->GetToggleItemInfo(); // memcpy(msg_cmd.toggle_items_info_, toggle_item_info, sizeof(msg_cmd.toggle_items_info_)); // player->SendPacket(&msg_cmd, sizeof(msg_cmd)); // }; //#endif //_NA_006372_20130108_BADGE_ITEM //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND ;{ MSG_CG_CHARINFO_CHAOS_ZONE_RECORD_INFOS_CMD& cmd_msg = \ *new (busy_access_buffer)MSG_CG_CHARINFO_CHAOS_ZONE_RECORD_INFOS_CMD; // ÀüÀåÀüÀû.. const BattleGroundRecordInfos record_infos = \ player->GetExtraInfoManager().GetBattleGroundRecordInfos(); memcpy(cmd_msg.chaos_zone_record_infos.battle_ground_record, record_infos.battle_ground_record, sizeof(cmd_msg.chaos_zone_record_infos.battle_ground_record)); #ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH const GoldRushRecordInfos goldrush_infos = \ player->GetExtraInfoManager().GetGoldRushRecordInfos(); memcpy(cmd_msg.chaos_zone_record_infos.goldrush_record, goldrush_infos.goldrush_record, sizeof(cmd_msg.chaos_zone_record_infos.goldrush_record)); #endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH player->SendPacket(&cmd_msg, sizeof(cmd_msg)); }; #ifdef _NA_007086_20140318_MONSTERBOOK ;{ MonsterBook& monsterbook = player->GetMonsterBook(); MSG_CG_MONSTERBOOK_SERIALIZE_CMD& cmd_msg = *new (busy_access_buffer) MSG_CG_MONSTERBOOK_SERIALIZE_CMD; cmd_msg.monster_code_count = monsterbook.monster_code_count; memcpy(&cmd_msg.monster_code, &monsterbook.monster_code, sizeof(cmd_msg.monster_code)); player->SendPacket(&cmd_msg, sizeof(cmd_msg)); }; #endif //_NA_007086_20140318_MONSTERBOOK #ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM ;{ AttendanceManager& attendance_manager = player->GetExtraInfoManager().GetAttendanceManager(); attendance_manager.ToAttend(player); MSG_CG_CHARINFO_ATTENDANCE_INFO_PACKET msg; memcpy(&msg.attendance_infos, &attendance_manager.GetAttendanceInfos(), sizeof(msg.attendance_infos)); player->SendPacket(&msg, sizeof(msg)); }; #endif // _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM #ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM ;{ MSG_CG_CHARINFO_SUN_RANKING_GRADE_PACKET msg; SunRankingGradeManager::Instance()->GetTopGrade(player->GetCharGuid(), msg.grade, msg.ranking_type); player->SendPacket(&msg, sizeof(msg)); }; ;{ MSG_CG_ETC_STATUE_INFO_ACK msg; StatueInfo* statue_info = StatueManager::Instance()->GetStatue(eSTATUE_TYPE_BEST_OF_BEST, eSTATUE_INDEX_FIRST); if (statue_info != NULL) { msg.info = *statue_info; player->SendPacket(&msg, sizeof(msg)); } }; #endif // _NA_008012_20150204_SUN_RANKING_SYSTEM #ifdef _NA_008404_20150712_MINIGAME_SYSTEM ;{ if (player->GetExtraInfoManager().GetMiniGameManager().IsEventProgress(eMINIGAME_TYPE_BINGO)) { MSG_CG_CHARINFO_MINIGAME_BINGO_INFO_PACKET info_packet; memcpy(&info_packet.minigame_bingo_infos, &(player->GetExtraInfoManager().GetMiniGameManager().GetMiniGameBingoInfos()), sizeof(info_packet.minigame_bingo_infos)); player->SendPacket(&info_packet, sizeof(info_packet)); } }; #endif // _NA_008404_20150712_MINIGAME_SYSTEM } else if (player_state == PLAYER_CHARINFO_REQUESTED) { // nothing to do } else { SUNLOG(eCRITICAL_LOG, _T("|[%s]|[U:%d,ID:%s]InvalidState"), __FUNCTION__, user_key, player->GetUserID()); }; // //--------------------------------------------------------------------------------------------- // extra control ;{ //ij¸¯ÅÍ Á¤º¸¸¦ óÀ½ ¼¼ÆÃÇÏ´Â °÷À̹ǷÎ... Àû¸³µÈ HP´Â maxhpÀÇ 30%·Î ÇÑ´Ù. const DWORD max_hp = player->GetMaxHP(); const DWORD hp = player->GetHP(); DWORD reserve_hp = static_cast(double(max_hp) * 0.3f); DWORD calc = hp + reserve_hp; if (calc > max_hp) { reserve_hp = calc - max_hp; } player->SetReserveHP(reserve_hp); // range = [0, max_hp * 30%] }; //--------------------------------------------------------------------------------------------- // manipulate logic related to guild if (player->GetGuildGuid() != 0) { if (player_state == PLAYER_CHARINFO_FIRST_REQUESTED) { // ÃÖÃÊ Á¢¼ÓÀÌ¸é ±æµå¼­¹ö¿¡ ·Î±×ÀÎ Áغñ¸¦ ½ÃŲ´Ù. // ¿©±â¼­ ·Î±×ÀÎÀ» ¸øÇÏ´Â ÀÌÀ¯´Â ¾ÆÁ÷ Ŭ¶óÀÌ¾ðÆ®°¡ ·ÎµùÁßÀ̱⠶§¹®ÀÌ´Ù. // ·Î±×ÀÎ ÆÐŶÀÌ Àִµ¥ ÀÌ ÆÐŶÀ» º¸³»´Â ÀÌÀ¯´Â ÇöÀç ÃÖÃÊ Á¢¼ÓÀε¥ ±æµå ¼­¹ö¿¡ // ·Î±×ÀÎÇÑ »óÅÂÀÇ À¯Àú°¡ ÀÖÀ»Áö ¸ð¸£±â ¶§¹®ÀÌ´Ù. // ±æµå ¼­¹ö¿¡ ·Î±×ÀÎÇÑ »óÅÂÀÇ À¯Àú°¡ ÀÖÀ¸¸é ÇØ´ç À¯Àú´Â ±æµåÁ¤º¸¸¦ ¹ÞÁö ¸øÇϱ⠶§¹®¿¡ ¾ÈµÈ´Ù. MSG_GZ_GUILD_PRE_LOGIN_CMD msg_pre_login; msg_pre_login.m_GuildGuid = player->GetGuildGuid(); msg_pre_login.m_CharGuid = player->GetCharGuid(); if (!player->SendToGuildServer(&msg_pre_login, sizeof(msg_pre_login))) { SUNLOG(eCRITICAL_LOG, _T("|[%s]|MSG_GZ_GUILD_PRE_LOGIN_CMD message send failed, ") _T("GuildGuid = %u, CharGuid = %u|"), __FUNCTION__, msg_pre_login.m_GuildGuid, msg_pre_login.m_CharGuid); } #ifdef _NA_008334_20150608_SONNENSCHEIN #else GameDominationManager::Instance()->ApplyAllRewardOption(player); // º¸»ó¿É¼Ç Àû¿ë #endif //_NA_008334_20150608_SONNENSCHEIN } else if (player_state == PLAYER_CHARINFO_REQUESTED) { //ÃÖÃÊ Á¢¼ÓÀÌ ¾Æ´Ï¸é °ÔÀÓ¼­¹ö°£ À̵¿À̹ǷÎ... MSG_GZ_GUILD_ENTER_SERVER_SYN msg_enter_server; msg_enter_server.m_GuildGuid = player->GetGuildGuid(); msg_enter_server.m_CharGuid = player->GetCharGuid(); if (!player->SendToGuildServer(&msg_enter_server, sizeof(msg_enter_server))) { SUNLOG(eCRITICAL_LOG, _T("|[%s]|MSG_GZ_GUILD_ENTER_SERVER_SYN message send failed, ") _T("GuildGuid = %u, CharGuid = %u|"), __FUNCTION__, msg_enter_server.m_GuildGuid, msg_enter_server.m_CharGuid); } #ifdef _NA_008334_20150608_SONNENSCHEIN #else GameDominationManager::Instance()->ApplyAllRewardOption(player); // º¸»ó¿É¼Ç Àû¿ë #endif //_NA_008334_20150608_SONNENSCHEIN } } //--------------------------------------------------------------------------------------------- // state control player->SetState(PLAYER_LOADING); //--------------------------------------------------------------------------------------------- // last section // #1. latest information update logic // GameZone* game_zone = player->GetGameZonePtr(); GameZone* enter_zone = NULL; MAPCODE field_code = 0; WzID area_id = 0; WzVector start_pos; const eZONE_STATE eRoomState = player->GetGameZone(enter_zone, field_code, &area_id, &start_pos); const KEYTYPE room_key = enter_zone->GetKey(); enter_zone = g_GameZoneManager.GetZone(room_key); // ;{ MSG_AG_ZONE_ROOM_JOIN_ACK msg_join_ack; if (game_zone && enter_zone) { player->GetPos(&msg_join_ack.ReturnPos); msg_join_ack.ReturnFieldCode = field_code; msg_join_ack.ReturnZoneType = game_zone->GetZoneType(); msg_join_ack.ReturnZoneKey = game_zone->GetKey(); } else { msg_join_ack.ReturnPos.x = 0; msg_join_ack.ReturnPos.y = 0; msg_join_ack.ReturnPos.z = 0; msg_join_ack.ReturnFieldCode = 0; msg_join_ack.ReturnZoneType = eZONETYPE_MAX; msg_join_ack.ReturnZoneKey = 0; } player->SendPacket(&msg_join_ack, sizeof(msg_join_ack)); }; // //--------------------------------------------------------------------------------------------- } Handler_DG_CHARINFO_IMPL( DG_CHARINFO_QUERY_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_QUERY_NAK * pRecvMsg = (MSG_DG_CHARINFO_QUERY_NAK *)pMsg; DWORD UserKey = pRecvMsg->m_dwKey; // ij¸¯ÅÍ Á¤º¸µé ÀúÀå Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( UserKey ); if( !pPlayer ) return; SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_ALL_REQ_NAK][U:%d,ID:%s,E:%u]DG_CHARINFO_ALL_REQ_NAK", pPlayer->GetUserKey(), pPlayer->GetUserID(), pRecvMsg->m_dwErrorCode ); MSG_AG_ZONE_ROOM_JOIN_NAK msg; msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_ITEM_SERIAL_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_ITEM_SERIAL_ACK * pRecvMsg = (MSG_DG_ITEM_SERIAL_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; SCSlotContainer *pContainer = pPlayer->GetItemManager()->GetItemSlotContainer(pRecvMsg->m_SlotIdx); if( !pContainer->IsEmpty(pRecvMsg->m_ItemPos) ) { SCItemSlot & slot = (SCItemSlot &)pContainer->GetSlot(pRecvMsg->m_ItemPos); ASSERT( slot.GetSerial() == TEMP_DBSERIAL_VALUE ); slot.SetType( pRecvMsg->m_Type ); slot.SetSerial( pRecvMsg->m_DBSerial ); pContainer->SetLock(pRecvMsg->m_ItemPos,FALSE); if (nsSlot::ItemManagerUpdateImpl* const item_updater_impl = pPlayer->GetItemManager()->GetUpdaterImpl()) { item_updater_impl->AddSerialCode( eSERIAL_MAKE, pRecvMsg->m_SlotIdx, pRecvMsg->m_ItemPos, slot.GetWorldSerial() ); item_updater_impl->AddExpirationItem( slot ); #ifdef _NA_008440_20150818_ADD_CHARGE_SUB_IMMEDIATELY_USE item_updater_impl->AddImmediatelyUseItem( slot ); #endif // _NA_008440_20150818_ADD_CHARGE_SUB_IMMEDIATELY_USE } if( pRecvMsg->m_SlotIdx == SI_INVENTORY || pRecvMsg->m_SlotIdx == SI_TEMPINVENTORY || pRecvMsg->m_SlotIdx == SI_EQUIPMENT || pRecvMsg->m_SlotIdx == SI_WAREHOUSE ) { GAMELOG->LogItem( ITEM_MAKE_SERIAL, pPlayer, (SCItemSlot*)&slot, 0, slot.GetNum() ); } #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL if (pRecvMsg->m_SlotIdx == SI_INVENTORY) { GameShop::EventProcessor* event_processor = GameShop::Manager::Instance()->FindEventProcessor(pPlayer->GetUserGuid()); if (event_processor) { event_processor->Item_Serial_Update(slot); } } #endif // _NA_0_20110613_GAME_SHOP_RENEWAL } } Handler_DG_CHARINFO_IMPL( DG_ITEM_SERIAL_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_ITEM_SERIAL_NAK * pRecvMsg = (MSG_DG_ITEM_SERIAL_NAK *)pMsg; //Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); //ASSERT( pPlayer ); //if( !pPlayer ) return ; //SCSlotContainer *pContainer = pPlayer->GetItemManager()->GetItemSlotContainer(pRecvMsg->m_SlotIdx); //SCSlot & slot = pContainer->GetSlot(pRecvMsg->m_ItemPos); //ASSERT( slot.GetSerial() == TEMP_DBSERIAL_VALUE ); //pContainer->SetLock( pRecvMsg->m_ItemPos, TRUE ); //pPlayer->GetItemManager()->AddSerialCode( pRecvMsg->m_SlotIdx, pRecvMsg->m_ItemPos, pRecvMsg->m_DBSerial ); /*if( pRecvMsg->m_SlotIdx == SI_INVENTORY || pRecvMsg->m_SlotIdx == SI_TEMPINVENTORY || pRecvMsg->m_SlotIdx == SI_EQUIPMENT || pRecvMsg->m_SlotIdx == SI_WAREHOUSE ) { GAMELOG->LogItem( ITEM_MAKE_SERIAL, pPlayer, (SCItemSlot*)&slot ); }*/ SUNLOG( eCRITICAL_LOG, "Error:MSG_DG_ITEM_SERIAL_NAK" ); } #if SUN_CODE_BACKUP // CHANGES: f110428.x, removed block, __NA002610_110428_REMOVE_INFINITY_USING_LUCKY Handler_DG_CHARINFO_IMPL( DG_ITEM_FATE_ITEM_IDENTIFY_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_ITEM_FATE_ITEM_IDENTIFY_ACK* pRecvMsg = (MSG_DG_ITEM_FATE_ITEM_IDENTIFY_ACK*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_ITEM_VALIDATION_OF_REIHALT_NAK NakMsg; SCSlotContainer * pContainer = pPlayer->GetItemManager()->GetItemSlotContainer( SI_INVENTORY ); SCItemSlot & rTargetItemSlot = (SCItemSlot &)pContainer->GetSlot( pRecvMsg->m_ItemPos ); if( !rTargetItemSlot.GetItemInfo() ) { NakMsg.m_dwErrorCode = RC::RC_ITEM_NOINFO; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); return; } //Fate¾ÆÀÌÅÛÀΰ¡? if( !rTargetItemSlot.IsFateItem() ) { NakMsg.m_dwErrorCode = RC::RC_ITEM_NOT_FATE_ITEM; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); rTargetItemSlot.SetLock( FALSE ); return; } //ÀÌ¹Ì °¨Á¤ Çߴ°¡? if( rTargetItemSlot.GetFateIdentify() ) { NakMsg.m_dwErrorCode = RC::RC_ITEM_ALREADY_IDENTYFIED_FATE_ITEM; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); rTargetItemSlot.SetLock( FALSE ); return; } //¹«Á¦ÇÑ ¹ß±Þ if( 0 == pRecvMsg->m_Result ) { if( !rTargetItemSlot.CalFateInfo() ) { NakMsg.m_dwErrorCode = RC::RC_ITEM_FAILED; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); rTargetItemSlot.SetLock( FALSE ); return; } rTargetItemSlot.SetDateTime( INFINITE_ITEM_DAY * 24 * 60 * 60 ); rTargetItemSlot.SetFatePeriod( INFINITE_ITEM_DAY ); GAMELOG->LogItem( ITEM_IDENTIFY_LUCKY_ITEM, pPlayer, &rTargetItemSlot ); } //¹«Á¦ÇÑ ¹ß±Þ Ãʰú else if( 2 == pRecvMsg->m_Result ) { DWORD FateDateTime = 0; do { if( !rTargetItemSlot.CalFateDateTime( FateDateTime ) ) { NakMsg.m_dwErrorCode = RC::RC_ITEM_FAILED; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); rTargetItemSlot.SetLock( FALSE ); return; } }while( FateDateTime == INFINITE_ITEM_DAY ); if( !rTargetItemSlot.CalFateInfo() ) { NakMsg.m_dwErrorCode = RC::RC_ITEM_FAILED; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); rTargetItemSlot.SetLock( FALSE ); return; } rTargetItemSlot.SetDateTime( FateDateTime * 24 * 60 * 60 ); rTargetItemSlot.SetFatePeriod( FateDateTime ); GAMELOG->LogItem( ITEM_IDENTIFY_LUCKY_ITEM, pPlayer, &rTargetItemSlot ); } // ½Ã½ºÅÛ ¿¡·¯ 1 == pRecvMsg->m_Result else { NakMsg.m_dwErrorCode = RC::RC_ITEM_FAILED; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); rTargetItemSlot.SetLock( FALSE ); return; } rTargetItemSlot.SetLock( FALSE ); MSG_CG_ITEM_VALIDATION_OF_REIHALT_ACK AckMsg; AckMsg.m_TargetItemPos = pRecvMsg->m_ItemPos; SCItemSlot & rSlot = (SCItemSlot &)pPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY)->GetSlot( pRecvMsg->m_ItemPos ); rSlot.CopyOut(AckMsg.m_TargetItemStream); pPlayer->SendPacket( &AckMsg, sizeof( AckMsg )); } #endif //SUN_CODE_BACKUP Handler_DG_CHARINFO_IMPL( DG_ITEM_INVENTORY_FLAG_STREAM_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_ITEM_INVENTORY_FLAG_STREAM_CMD* pRecvMsg = (MSG_DG_ITEM_INVENTORY_FLAG_STREAM_CMD*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; ProtectorInventory& rPROTECT = pPlayer->GetWarehouseInventoryProtector().INVENTORY(); rPROTECT.SetControlFieldStream( pRecvMsg->m_dwFlagStream ); if( rPROTECT.IsEmptyPassword() && !rPROTECT.IsUsable() ) rPROTECT.Block( FALSE ); } /* Handler_DG_CHARINFO_IMPL( DG_ITEM_WAREHOUSEITEMALL_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_ITEM_WAREHOUSEITEMALL_ACK * pRecvMsg = (MSG_DG_ITEM_WAREHOUSEITEMALL_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; ItemManager * pMGR = pPlayer->GetItemManager(); pPlayer->SerializeWarehouseTotalInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE ); pMGR->SetWarehouseMoney( pRecvMsg->m_Money ); MSG_CG_ITEM_WAREHOUSEITEMALL_ACK msg; msg.m_WarehouseMoney = pMGR->GetWarehouseMoney(); pPlayer->SerializeWarehouseTotalInfo( msg.m_ItemInfo, SERIALIZE_LOAD ); pPlayer->SendPacket( &msg, msg.GetSize() ); } */ Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_START_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAREHOUSE_START_ACK * pRecvMsg = (MSG_DG_WAREHOUSE_START_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; // â°í ½ÃÀÛ »óÅ·Π¹Ù²Þ CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer(); ASSERT( !pContainer->IsStarted() ); pContainer->SerializeItemInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE ); pContainer->SerializeMoney( pRecvMsg->m_WarehouseMoney ); pContainer->StartWarehouse(); MSG_CG_WAREHOUSE_START_ACK msg; ProtectorWarehouse& rPROTECT = pPlayer->GetWarehouseInventoryProtector().WAREHOUSE(); rPROTECT.SetPasswordFromDB( pRecvMsg->m_WarehousePwd ); rPROTECT.Initialized(); INT iFlag = (rPROTECT.IsEmptyPassword() ? MSG_CG_WAREHOUSE_START_ACK::EMPTY_PWD : MSG_CG_WAREHOUSE_START_ACK::EXIST_PWD ); if( rPROTECT.IsEmptyPassword() ) { rPROTECT.Block( FALSE ); //msg.m_byWarehouseLock = MSG_CG_WAREHOUSE_START_ACK::UNLOCK; iFlag |= (rPROTECT.IsUsable() ? MSG_CG_WAREHOUSE_START_ACK::ENABLE : MSG_CG_WAREHOUSE_START_ACK::DISABLED); msg.m_byWarehouseLock = (BYTE)iFlag; } else { iFlag |= (rPROTECT.IsUsable() ? MSG_CG_WAREHOUSE_START_ACK::ENABLE : MSG_CG_WAREHOUSE_START_ACK::DISABLED); // elseÀÇ °æ¿ì¿¡´Â BlockÀÌ TRUE, FALSEÀÎ °æ¿ì°¡ ÀÖÀ» °ÍÀÌ´Ù. // â°í¸¦ Çѵιø ¿©³ª? ¤»¤» msg.m_byWarehouseLock = (BYTE)iFlag; //msg.m_byWarehouseLock = rPROTECT.IsUsable() ? // MSG_CG_WAREHOUSE_START_ACK::UNLOCK : MSG_CG_WAREHOUSE_START_ACK::LOCK; } msg.m_WarehouseMoney = pContainer->GetCurMoney(); msg.m_Size = sizeof(RENDER_ITEMSTREAMEX)*(MAX_WAREHOUSE_SLOT_NUM); BitStream stream( msg.m_BitStreamBuffer, msg.m_Size, TRUE ); pContainer->Serialize( stream, eSLOT_SERIALIZE_CLIENT_LOAD ); msg.m_Size = stream.GetNumberOfBytesUsed(); pPlayer->SendPacket( &msg, msg.GetSize() ); //â°í Á¤º¸ ·Î±× ³²±â±â GAMELOG->WriteWareHouseInfo( pPlayer, TRUE ); //GAMELOG->LogInvenInfo( SNAPSHOT_WAREHOUSE_OPEN_INVEN, pPlayer ); GAMELOG->LogSnapShot( pPlayer ); } Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_FLAG_STREAM_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAREHOUSE_FLAG_STREAM_CMD* pRecvMsg = (MSG_DG_WAREHOUSE_FLAG_STREAM_CMD*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; WarehouseInventoryProtector& rPROTECTOR = pPlayer->GetWarehouseInventoryProtector(); rPROTECTOR.SSN_ENCODED_STREAM().CopyFrom( pRecvMsg->m_EncodedSSN.GetBUFFER() ); rPROTECTOR.SSN_ENCODED_STREAM().MakeSafeString(); ProtectorWarehouse& rPROTECT = rPROTECTOR.WAREHOUSE(); rPROTECT.SetControlFieldStream( pRecvMsg->m_dwFlagStream ); //memcpy( &pPlayer->GetWarehouseInventoryProtector().CONTROL_FIELD(), &pRecvMsg->m_dwFlagStream, sizeof(DWORD) ); // ¾Æ·¡ÀÇ °æ¿ì´Â ÀÖÀ» ¼ö ¾ø´Â »óȲÀÌ´Ù. ÇÏÁö¸¸ ÃÖÃÊ Á¢¼ÓÀÚ¿¡ ÇÑÇØ¼­ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. // â°í ºñ¹øÀº â°í¸¦ ºÒ·¯µé¿©¾ß¸¸ °¡´ÉÇϱ⠶§¹®... Â÷¶ó¸® ÃÖÃÊ Á¢¼Ó»óȲÀÌ ¾Æ´Ñ °æ¿ì¸¦ ó¸® ÇÒ ¼ö ÀÖÀ¸¸é if( rPROTECT.IsInitialized() ) { if( rPROTECT.IsEmptyPassword() && !rPROTECT.IsUsable() ) rPROTECT.Block( FALSE ); } } Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_PWD_SETTING_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return; WarehouseInventoryProtector& rPROTECTOR = pPlayer->GetWarehouseInventoryProtector(); rPROTECTOR.OnRecvDG_WAREHOUSE_PWD_SETTING_ACK( (MSG_DG_WAREHOUSE_PWD_SETTING_ACK*)pMsg, wSize ); } Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_START_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAREHOUSE_START_NAK * pRecvMsg = (MSG_DG_WAREHOUSE_START_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; SUNLOG( eCRITICAL_LOG, "[%s:%d]â°í¿­±â¿¡·¯", pPlayer->GetCharName(), pRecvMsg->m_dwErrorCode ); MSG_CG_WAREHOUSE_START_NAK msg; msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); ProtectorWarehouse& rPROTECT = pPlayer->GetWarehouseInventoryProtector().WAREHOUSE(); rPROTECT.TESTnSET_Transaction_PWD_CONFIG( FALSE ); } Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_END_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAREHOUSE_END_ACK * pRecvMsg = (MSG_DG_WAREHOUSE_END_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer(); MSG_CG_WAREHOUSE_END_ACK msg; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_END_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAREHOUSE_END_NAK * pRecvMsg = (MSG_DG_WAREHOUSE_END_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer(); // ½ÃÀÛ»óÅ·ΠµÇµ¹¸² pContainer->SetStarted(true); MSG_CG_WAREHOUSE_END_NAK msg; msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_SELECT_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_SELECT_ACK * pRecvMsg = (MSG_DG_EVENT_SELECT_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; pPlayer->GetEventSlotContainer()->OnSelect( TRUE, &pRecvMsg->m_TotalInfo ); MSG_CG_EVENT_SELECT_ACK msg; pPlayer->GetEventSlotContainer()->Serialize( msg.m_TotalInfo, SERIALIZE_LOAD ); pPlayer->SendPacket( &msg, msg.GetSize() ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_SELECT_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_SELECT_NAK * pRecvMsg = (MSG_DG_EVENT_SELECT_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; pPlayer->GetEventSlotContainer()->OnSelect( FALSE, NULL ); MSG_CG_EVENT_SELECT_NAK msg; msg.m_byErrorCode = RC::RC_ITEM_NOTEXIST_ITEM; //pRecvMsg->m_byErrorCode;//< ¾ÆÀÌÅÛÀÌ ¾øÀ» °æ¿ì¸¸ ·ÎÁ÷ÀûÀ¸·Î nak°¡ ¿À°ÔµÇ¾îÀÖÀ½ pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_UPDATE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_UPDATE_ACK * pRecvMsg = (MSG_DG_EVENT_UPDATE_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_EVENT_MOVE_ITEM_TO_INVEN_ACK msg; pPlayer->GetEventSlotContainer()->OnMoveItemToInventory( TRUE, pRecvMsg->m_ItemPos, &msg.m_TotalInfo ); pPlayer->SendPacket( &msg, msg.GetSize() ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_UPDATE_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_UPDATE_NAK * pRecvMsg = (MSG_DG_EVENT_UPDATE_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_EVENT_MOVE_ITEM_TO_INVEN_ACK msg_dummy; // TODO: need modify pPlayer->GetEventSlotContainer()->OnMoveItemToInventory( FALSE, 0, &msg_dummy.m_TotalInfo); MSG_CG_EVENT_MOVE_ITEM_TO_INVEN_NAK msg; msg.m_byErrorCode = pRecvMsg->m_byErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); } // À̺¥Æ® ÀÀ¸ð ÇöȲ(?) ¼ö½Å Handler_DG_CHARINFO_IMPL( DG_EVENT_ITEM_STATUS_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_ITEM_STATUS_ACK* pRecvMsg = ( MSG_DG_EVENT_ITEM_STATUS_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); // ASSERT( pPlayer ); if( !pPlayer ) return ; #ifdef _WHATTHEHELL_SUNEVENT_20060727 EVENT_INFO *pEventInfo = NULL; for( WORD i = 0; i < pRecvMsg->m_wEventNum && i < _MAX_EVENT_ROW_NUM ; i++ ) { pEventInfo = SunEventInfoParser::Instance()->FindEventInfo( pRecvMsg->m_EventStatus[i].m_dwEventID ); // ÇöÀç À¯È¿ÇÑ À̺¥Æ®¸¸ µî·Ï(Áö³ª°£ À̺¥Æ® ³»¿ëÀº ÀúÀåÇÏÁö ¾Ê´Â´Ù) if( pEventInfo ) { pPlayer->AddEventStatus( pRecvMsg->m_EventStatus[i] ); } else { SUNLOG( eCRITICAL_LOG, "Passed Event Status[%u][CharGuid:%u]", pRecvMsg->m_EventStatus[i].m_dwEventID, pPlayer->GetCharGuid() ); } } #else const DWORD eventNum = pRecvMsg->m_wEventNum; IPlayerEventD& rEventD = pPlayer->PlayerEvent(); for( DWORD idx=0 ; idxm_EventStatus[idx]; rEventD.AddEventStatus( rInfo ); } #endif // MessageOut( eFULL_LOG, "Event Status Check[%u][C:%u][Event:%u]", pRecvMsg->m_dwKey, pPlayer->GetCharGuid(), pRecvMsg->m_wEventNum ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_ITEM_STATUS_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_ITEM_STATUS_NAK* pRecvMsg = (MSG_DG_EVENT_ITEM_STATUS_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); //ASSERT( pPlayer ); if( !pPlayer ) { MessageOut( eFULL_LOG, "Event Status Check Failed[%u]", pRecvMsg->m_dwKey ); return ; } /* MSG_CG_EVENT_ITEM_STATUS_NAK msg; msg.m_dwKey = pPlayer->GetUserGuid(); msg.m_dwErrorCode = 0; // ÀÏ´Ü Àӽ÷Π0¿¡ ¸ÂÃá´Ù pPlayer->SendPacket( &msg, sizeof(msg) ); */ // MessageOut( eFULL_LOG, "Event Status Check Failed[%u][C:%u]", pRecvMsg->m_dwKey, pPlayer->GetCharGuid() ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_ITEM_REG_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_ITEM_REG_ACK* pRecvMsg = (MSG_DG_EVENT_ITEM_REG_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_EVENT_ITEM_REG_ACK msg; msg.m_dwKey = pPlayer->GetUserGuid(); msg.m_dwEventID = pRecvMsg->m_dwEventID; pPlayer->SendPacket( &msg, sizeof(msg) ); MessageOut( eFULL_LOG, "Event_Reg Success[%u][C:%u][Event:%u]", pRecvMsg->m_dwKey, pPlayer->GetCharGuid(), pRecvMsg->m_dwEventID ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_ITEM_REG_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_ITEM_REG_NAK* pRecvMsg = (MSG_DG_EVENT_ITEM_REG_NAK *)pMsg; MSG_CG_EVENT_ITEM_REG_NAK msg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; msg.m_dwErrorCode = 0; // ÀÏ´Ü Àӽ÷Π0¿¡ ¸ÂÃá´Ù // »èÁ¦µÈ ¾ÆÀÌÅÛ ´Ù½Ã º¹±¸ÇØ Áà¾ß µÈ´Ù!!! EVENT_INFO * pEventInfo = SunEventInfoParser::Instance()->FindEventInfo( pRecvMsg->m_dwEventID ); if( pEventInfo ) { SLOTCODE delItem[_MAX_EVENT_REGITEM]={0,}; POSTYPE delpos[_MAX_EVENT_REGITEM]={0,}; int i = 0; for( ; i<_MAX_EVENT_REGITEM; i++ ) { delItem[i] = (SLOTCODE)pEventInfo->m_dwRegisterItemIndex[i]; delpos[i] = (POSTYPE)pEventInfo->m_wRegisterItemNum[i]; if( !delItem[i] || !delpos[i] ) { break; } } pPlayer->GetItemManager()->ObtainAllKindOfItem( i, delItem, delpos, &msg.m_TotalInfo ); // °ÔÀÓ ·Î±× : º¹±¸ ó¸® ·Î±× GAMELOG->LogMultiItem( ITEM_EVENT_ETHER_REG_FAILED, pPlayer, i, delItem, delpos ); } else { msg.m_TotalInfo.m_InvenCount = 0; msg.m_TotalInfo.m_TmpInvenCount = 0; } pPlayer->SendPacket( &msg, msg.GetSize() ); MessageOut( eFULL_LOG, "Event_Reg Failed[%u][C:%u][Event:%u]", pRecvMsg->m_dwKey, pPlayer->GetCharGuid() ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_USETIME_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_USETIME_CMD* pRecvMsg = (MSG_DG_EVENT_USETIME_CMD*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_EVENT_TIME_CMD cmdMsg; cmdMsg.m_EventUseTime = pRecvMsg->m_EventUseTime; pPlayer->SendPacket( &cmdMsg, sizeof(cmdMsg) ); } Handler_DG_CHARINFO_IMPL( DG_EVENT_QUERY_EXIST_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_QUERY_EXIST_ACK* pRecvMsg = (MSG_DG_EVENT_QUERY_EXIST_ACK *)pMsg; Player* pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; pPlayer->GetEventSlotContainer()->OnSelect( FALSE, NULL ); MSG_CG_EVENT_QUERY_EXIST_ACK msgACK; msgACK.m_bExist = pRecvMsg->m_bExist; pPlayer->SendPacket( &msgACK, sizeof(msgACK) ); } Handler_DG_CHARINFO_IMPL(DG_EVENT_SSQ_REWARD_EXIST_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); const MSG_DG_EVENT_SSQ_REWARD_EXIST_CMD* recv_msg = static_cast(pMsg); Player* const player = PlayerManager::Instance()->FindPlayerByUserKey(recv_msg->m_dwKey); if (player == NULL || player->GetField() == NULL) { return; } // (Work To Do) // 1. Player ÀÔÀå½Ã ¹Ì¼Ç º¸»ó ó·³ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏÀÚ. ISSQHandlerInGame& ssq_handler = player->SSQHandler; const BOOLEAN is_valid_state = ssq_handler.IsValidState(); if (is_valid_state == false) { ssq_handler.Init(); } ssq_handler->SetRewardInfo(recv_msg->m_RewardInfo); // ³ªÁß¿¡ À¯Àú°¡ ÀÔÀå½Ã ÆÐŶÀ» Àü¼ÛÇÑ´Ù. //_NA000023_090323_ENHANCED_INVENTORY_SLOT_FUNCTIONALITY_DB_ // (CHANGES) (f100714.2L) pre-fetch to support a delayed event query process // Old comments - // (WAVERIX) (090813) (CHANGES) Ŭ¶óÀÌ¾ðÆ® ÆÐŶ ¼ö½Å¿¡ ÀÇÇÑ °ÍÀÌ ¾Æ´Ï¶ó Á¤È®ÇÑ Sceneµ¿±âÈ­ // 󸮸¦ È®½ÅÇÒ ¼ö ¾ø´Â »óȲÀÌ Á¸ÀçÇÑ´Ù. 'CG_SHOP_IS_RECV_GIFT_SYN'¿äû½Ã ó¸®Çϵµ·Ï º¯°æÇØ º½. // reference : CG_SHOP_IS_RECV_GIFT_SYN handler bool is_acceptable_status = false; ;{ GameZone* enter_zone = 0; MAPCODE field_code = 0; WzID area_id = 0; WzVector start_pos; eZONE_STATE zone_state = player->GetGameZone(enter_zone, field_code, &area_id, &start_pos); if (ePRS_AT_ZONE & zone_state) { is_acceptable_status = true; } }; // if (is_acceptable_status == false) { return; } // if (FIELD_SERVER == g_pGameServer->GetServerType()) { ssq_handler->Send_RewardProcess(player, true); } } Handler_DG_CHARINFO_IMPL( DG_EVENT_SSQ_REWARD_UPDATE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_EVENT_SSQ_REWARD_UPDATE_ACK* const pRecvMsg = static_cast( pMsg ); Player* const pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; // (Work To Do) // 1. º¸»ó ó¸®ÇÒ °Í, ±× °á°ú Ŭ¶ó·Î Àü¼ÛÇÒ °Í. // 2. º¸»ó Æ®·£Á§¼Ç ÇØÁ¦ ó¸®ÇÒ °Í. // (080917) // - º¸»ó 󸮴 Å뺸½ÄÀ̸ç, ÀÀ´äÈÄ Ã³¸®´Â ÇÏÁö ¾Ê´Â´Ù. // ÀÌÀ¯? ¼º°øÈÄ ¹Ù·Î ¶°³ªµµ·Ï À¯µµÇÒ ¿¹Á¤À̴ϱî... #if WAVERIX_CODE_BACKUP ISSQHandlerInGame& rHandler = pPlayer->SSQHandler; if( !rHandler.IsValidState() ) { ASSERT( !"transactionÀÌ ²¿ÀÌ´Â Çö»óÀΰ¡? È®ÀÎÀÌ ÇÊ¿äÇÏ´Ù." ); return; } const BOOLEAN isUpdated = pRecvMsg->m_UpdateResult; if( !isUpdated ) { ASSERT( !"¾îÁö°£Çؼ­´Â ¿©±â¿¡ µµ´ÞÇÏÁö ¾Ê±â¸¦ ¹Ù¶ó´Â ¸¶À½»Ó..." ); return; } //SSQ_RESERVED_REWARD_INFO info; //if( !rHandler->GetRewardInfo( info ) ) // return; //rHandler->Rewarded(); #endif } #ifdef _NA_008012_20150130_RANKING_SYSTEM Handler_DG_CHARINFO_IMPL( DG_MISSION_RECORD_SELECT_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_MISSION_RECORD_SELECT_CMD* pRecvMsg = (MSG_DG_MISSION_RECORD_SELECT_CMD *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; // ÃʱâÈ­, ±â·Ï ÀúÀå MISSION_RECORD_INFO * pRecordInfo = pRecvMsg->m_MissionRecord; for( BYTE i = 0 ; i < MAX_MISSION_NUM+1 ; ++i ) { if( i < pRecvMsg->m_byCount && pRecordInfo[i].m_byMissionNo != 0 ) pPlayer->SetBestMissionTime( pRecordInfo[i].m_byMissionNo, pRecordInfo[i].m_iClearTime ); else pPlayer->SetBestMissionTime( i, INT_MAX ); } } #endif // _NA_008012_20150130_RANKING_SYSTEM #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL Handler_DG_CHARINFO_IMPL( DG_OTHER_EXIST_CHARNAME_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_EXIST_CHARNAME_ACK * pRecvMsg = (MSG_DG_OTHER_EXIST_CHARNAME_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; USERGUID user_guid = pPlayer->GetUserGuid(); GameShop::EventProcessor* proc = GameShop::Manager::Instance()->FindEventProcessor(user_guid); if (proc) proc->Receive_CharacterNameCheck(pRecvMsg->m_UserGuid, pRecvMsg->m_CharGuid, pRecvMsg->character_class_, pRecvMsg->character_level_, pRecvMsg->m_tszCharName, ""); else GameShop::EventProcessor::SendFail_CharacterNameCheck(pPlayer, RC::RC_SHOP_FAILED); } Handler_DG_CHARINFO_IMPL( DG_OTHER_EXIST_CHARNAME_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_EXIST_CHARNAME_NAK * pRecvMsg = (MSG_DG_OTHER_EXIST_CHARNAME_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; GameShop::EventProcessor::SendFail_CharacterNameCheck(pPlayer, RC::RC_SHOP_NOT_EXIST_CHARACTER_NAME); } #else #if !defined(__NA000000_SHOP_USERID_50_PASSING_PROC__) Handler_DG_CHARINFO_IMPL( DG_OTHER_EXIST_CHARNAME_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_EXIST_CHARNAME_ACK * pRecvMsg = (MSG_DG_OTHER_EXIST_CHARNAME_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; switch( pRecvMsg->m_Type ) { case eCHARNAME_ACTION_SHOP_SEND_GIFT: { RC::eSHOP_RESULT rt = g_GameShopManager.OnSendGiftNDoRequest(TRUE, pPlayer, pRecvMsg->m_UserGuid, pRecvMsg->m_CharGuid, pRecvMsg->m_tszCharName); if( rt != RC::RC_SHOP_PENDING && rt != RC::RC_SHOP_SUCCESS ) { MSG_CG_SHOP_SEND_GIFT_NAK nmsg; nmsg.m_byErrorCode = rt; pPlayer->SendPacket( &nmsg, sizeof(nmsg) ); } }break; } } Handler_DG_CHARINFO_IMPL( DG_OTHER_EXIST_CHARNAME_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_EXIST_CHARNAME_NAK * pRecvMsg = (MSG_DG_OTHER_EXIST_CHARNAME_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; switch( pRecvMsg->m_Type ) { case eCHARNAME_ACTION_SHOP_SEND_GIFT: { RC::eSHOP_RESULT rt = g_GameShopManager.OnSendGiftNDoRequest(FALSE, pPlayer, 0, 0, NULL); if( rt != RC::RC_SHOP_PENDING && rt != RC::RC_SHOP_SUCCESS ) { MSG_CG_SHOP_SEND_GIFT_NAK nmsg; nmsg.m_byErrorCode = rt; pPlayer->SendPacket( &nmsg, sizeof(nmsg) ); } }break; } } #endif //!__NA000000_SHOP_USERID_50_PASSING_PROC__ #endif //_NA_0_20110613_GAME_SHOP_RENEWAL Handler_DG_CHARINFO_IMPL( DG_OTHER_SHOP_RECV_GIFT_NTF ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_SHOP_RECV_GIFT_NTF * pRecvMsg = (MSG_DG_OTHER_SHOP_RECV_GIFT_NTF *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL MSG_CG_SHOP_EXIST_GIFT_NTF ntf_message; pPlayer->SendPacket(&ntf_message, sizeof(ntf_message)); #else MSG_CG_SHOP_SEND_GIFT_NTF ntf; pPlayer->SendPacket( &ntf, sizeof(ntf) ); #endif } #ifdef __CN_OO0510__FATIGUE_MATCHING_UPDATE // DB¿¡¼­ ÇǷεµ Á¤º¸¸¦ ÁØ´Ù. ÀÌ Á¤º¸´Â Á¸À» À̵¿ÇÒ ¶§ ¸¶´Ù ³¯¶ó¿Ã °ÍÀÌ´Ù Handler_DG_CHARINFO_IMPL( DG_OTHER_FATIGUE_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_FATIGUE_CMD* pRecvMsg = (MSG_DG_OTHER_FATIGUE_CMD*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; //1. Ç÷¹À̾îÀÇ ÇǷεµ ½Ã°£À» ¼¼ÆÃÇÑ´Ù. pPlayer->SetPlayTime( pRecvMsg->m_wPlayTime ); pPlayer->SetOfflineTime( pRecvMsg->m_wOfflineTime ); //2. ÇǷεµ Á¤º¸ ÃʱâÈ­ pPlayer->GetFatigueManager()->Init( pPlayer ); //2. Ŭ¶óÀÌ¾îÆ®¿¡ ÇöÀç ÇǷεµ Á¤º¸¸¦ º¸³»ÁØ´Ù. MSG_CG_CHARINFO_FATIGUE_CMD cmd; cmd.m_wPlayTime = pRecvMsg->m_wPlayTime; cmd.m_wOfflineTime = pRecvMsg->m_wOfflineTime; if( FatigueOptionParser::Instance()->IsUse() == TRUE ) { if( (pPlayer->GetAge() >= 18) && (pPlayer->GetRealNameAuth() == 1) ) cmd.m_byType = 0; else cmd.m_byType = 1; } else cmd.m_byType = 0; pPlayer->SendPacket( &cmd, sizeof(cmd) ); } #endif //__CN_OO0510__FATIGUE_MATCHING_UPDATE Handler_DG_CHARINFO_IMPL( DG_WAYPOINT_INFO_LOAD_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAYPOINT_INFO_LOAD_ACK * pRecvMsg = (MSG_DG_WAYPOINT_INFO_LOAD_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; pPlayer->GetWayPoint()->Serialize( pRecvMsg->m_Info, SERIALIZE_STORE ); MSG_CG_WAYPOINT_INFO_LOAD_ACK msg; pPlayer->GetWayPoint()->Serialize( msg.m_Info, SERIALIZE_LOAD ); pPlayer->SendPacket( &msg, msg.GetSize() ); } Handler_DG_CHARINFO_IMPL( DG_WAYPOINT_INFO_LOAD_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAYPOINT_INFO_LOAD_NAK * pRecvMsg = (MSG_DG_WAYPOINT_INFO_LOAD_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_WAYPOINT_INFO_LOAD_NAK msg; msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_WAYPOINT_INFO_SAVE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAYPOINT_INFO_SAVE_ACK * pRecvMsg = (MSG_DG_WAYPOINT_INFO_SAVE_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; BOOL rt = pPlayer->GetWayPoint()->Insert( pRecvMsg->m_MapCode ); ASSERT( rt && "WAYPOINT¿¡ Áߺ¹µî·ÏÇÒ¼ö¾ø´Ù." ); MSG_CG_WAYPOINT_INFO_SAVE_ACK msg; // msg.m_WPIndex = pRecvMsg->m_WPIndex; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_WAYPOINT_INFO_SAVE_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_WAYPOINT_INFO_SAVE_NAK * pRecvMsg = (MSG_DG_WAYPOINT_INFO_SAVE_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_WAYPOINT_INFO_SAVE_NAK msg; msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_CHAR_WAYPOINT_INFO_LOAD_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHAR_WAYPOINT_INFO_LOAD_ACK * pRecvMsg = (MSG_DG_CHAR_WAYPOINT_INFO_LOAD_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; pPlayer->GetCharWayPoint()->Serialize( pRecvMsg->m_Info, SERIALIZE_STORE ); MSG_CG_CHAR_WAYPOINT_INFO_LOAD_ACK msg; pPlayer->GetCharWayPoint()->Serialize( msg.m_Info, SERIALIZE_LOAD ); pPlayer->SendPacket( &msg, msg.GetSize() ); } Handler_DG_CHARINFO_IMPL( DG_CHAR_WAYPOINT_INFO_SAVE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHAR_WAYPOINT_INFO_SAVE_ACK * pRecvMsg = (MSG_DG_CHAR_WAYPOINT_INFO_SAVE_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; BOOL rt = pPlayer->GetCharWayPoint()->Insert( pRecvMsg->m_Info ); ASSERT( rt && "CharWAYPOINT¿¡ Áߺ¹µî·ÏÇÒ¼ö¾ø´Ù." ); MSG_CG_CHAR_WAYPOINT_INFO_SAVE_ACK msg; msg.m_Info = pRecvMsg->m_Info; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_CHAR_WAYPOINT_INFO_DEL_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHAR_WAYPOINT_INFO_DEL_ACK * pRecvMsg = (MSG_DG_CHAR_WAYPOINT_INFO_DEL_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; BOOL rt = pPlayer->GetCharWayPoint()->Delete( pRecvMsg->m_IdxWayPoint ); ASSERT( rt && "WAYPOINT¿¡ °¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù." ); //item »èÁ¦½Ã°£ ´Ù½Ã¼ÂÆÃ ItemManager* pItemManager = pPlayer->GetItemManager(); if(!pItemManager) return; SCSlotContainer* pContainer = (SCSlotContainer *)pItemManager->GetItemSlotContainer(SI_INVENTORY); if(!pContainer) return; for(int pos = 0; pos < MAX_INVENTORY_SLOT_NUM; ++pos) { if( pContainer->IsEmpty(pos) ) continue; SCItemSlot &rItemSlot = (SCItemSlot &)pContainer->GetSlot(pos); if( rItemSlot.GetSerial() != 0 && rItemSlot.IsWayPointItem() && rItemSlot.IsProgressTime() ) { rItemSlot.ResetWayPointDelete(); pPlayer->GetItemManager()->SendItemChange(rItemSlot); break; } } // »èÁ¦Áß ¾ÆÀÌÅÛÀÌ »ç¶óÁ³´õ¶óµµ NAK¾Æ´Ô (DB±âÁØ) MSG_CG_CHAR_WAYPOINT_INFO_DEL_ACK msg; msg.m_IdxWayPoint = pRecvMsg->m_IdxWayPoint; pPlayer->SendPacket( &msg, sizeof(msg) ); } Handler_DG_CHARINFO_IMPL( DG_CHAR_WAYPOINT_INFO_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHAR_WAYPOINT_INFO_NAK * pRecvMsg = (MSG_DG_CHAR_WAYPOINT_INFO_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; MSG_CG_CHAR_WAYPOINT_INFO_NAK msg; msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pPlayer->SendPacket( &msg, sizeof(msg) ); } #ifdef _NA_008012_20150130_RANKING_SYSTEM Handler_DG_CHARINFO_IMPL( DG_MISSION_RANKING_POINT_REQ_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_MISSION_RANKING_POINT_REQ_ACK * pRecvMsg = (MSG_DG_MISSION_RANKING_POINT_REQ_ACK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->Point.UserGUID ); ASSERT( pPlayer); if(!pPlayer) return; if( !(pPlayer->GetRankingSystemCtl()) ) { ASSERT(FALSE); SUNLOG(eCRITICAL_LOG, "[SetPointRanking] Player's RankingSystemCtl is NULL[%u]", pRecvMsg->Point.UserGUID ); return; } #ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR pPlayer->GetRankingSystemCtl()->SetPlayerPoint( pRecvMsg->Point.UserGUID, pRecvMsg->Point.Point, pRecvMsg->Point.DBKey, pRecvMsg->Point.ranking_type ); #else pPlayer->GetRankingSystemCtl()->SetPlayerPoint( pRecvMsg->Point.UserGUID, pRecvMsg->Point.Point, pRecvMsg->Point.DBKey ); #endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR } #endif // _NA_008012_20150130_RANKING_SYSTEM Handler_DG_CHARINFO_IMPL( DG_EVENT_STATUS_UPDATE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); const MSG_DG_EVENT_STATUS_UPDATE_ACK* pRecvMsg = (const MSG_DG_EVENT_STATUS_UPDATE_ACK*)pMsg; // Æ®·£Àè¼ÇÀÇ »óŸ¦ È®ÀÎÇÒ ÇÊ¿ä ÀÖ´Ù. //ASSERT( !"Not Implementation - check transaction state" ); } Handler_DG_CHARINFO_IMPL(DG_GUILD_WAREHOUSE_CLOSE_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); PACKET_PTR_CONVERT(MSG_DG_GUILD_WAREHOUSE_CLOSE_ACK, pRecvMsg, pMsg); CGuildWarehouseSlotContainer* pContainer = g_GameGuildManager.GetGuildWarehouse(pRecvMsg->m_GuildGuid); if(pContainer) { // Áß±¹ º¹»ç ¹ö±× ¼öÁ¤ (À¯Àú â°íÀÇ ¹æ½Ä »ç¿ë) [10/12/2009 lst1024] if (pContainer->IsOpened()) pContainer->CloseWarehouse(); } else { SUNLOG(eCRITICAL_LOG, "DG_GUILD_WAREHOUSE_CLOSE_ACK NONE GUILDWAREHOUSE(%d)(%u)", pRecvMsg->m_GuildGuid, pRecvMsg->m_dwKey); } } Handler_DG_CHARINFO_IMPL(DG_GUILD_WAREHOUSE_CLOSE_NAK) { __TOUCHED((pServerSession, pMsg, wSize)); PACKET_PTR_CONVERT(MSG_DG_GUILD_WAREHOUSE_CLOSE_NAK, pRecvMsg, pMsg); CGuildWarehouseSlotContainer* pContainer = g_GameGuildManager.GetGuildWarehouse(pRecvMsg->m_GuildGuid); if(pContainer) { if(!pContainer->IsOpened()) { SUNLOG(eCRITICAL_LOG, "DG_GUILD_WAREHOUSE_CLOSE_NAK ERROR(%d)(%u)", pRecvMsg->m_GuildGuid, pRecvMsg->m_dwKey); return; } pContainer->CloseWarehouse(); } else { SUNLOG(eCRITICAL_LOG, "DG_GUILD_WAREHOUSE_CLOSE_ACK NONE GUILDWAREHOUSE(%d)(%u)", pRecvMsg->m_GuildGuid, pRecvMsg->m_dwKey); } } Handler_DG_CHARINFO_IMPL(DG_GUILD_WAREHOUSE_TAPEX_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); PACKET_PTR_CONVERT(MSG_DG_GUILD_WAREHOUSE_TAPEX_ACK, pRecvMsg, pMsg); PLAYER_PTR_USERKEY(Player, pPlayer, pRecvMsg->m_dwKey); CGuildWarehouseSlotContainer* pGuildWareHouse = g_GameGuildManager.GetGuildWarehouse(pRecvMsg->m_GuildGuid); if(pGuildWareHouse) { // ±æµåâ°í È®ÀåÀç ¾ÆÀÌÅÛ »ç¿ë ·Î±× const ItemManager* const item_manager = pPlayer->GetItemManager(); SCSlotContainer* const slot_container = \ static_cast( item_manager->GetItemSlotContainer(SI_INVENTORY) ); const SCItemSlot& item_slot = \ static_cast(slot_container->GetSlot(pRecvMsg->m_SlotPos)); GAMELOG->LogItem(ITEM_USE, pPlayer, &item_slot); pPlayer->GetItemManager()->DeleteWastedItem(pRecvMsg->m_SlotIndex, pRecvMsg->m_SlotPos); pGuildWareHouse->SetSlotTabNum(pRecvMsg->m_TabCount); // Ŭ¶ó¿¡¼­ ÀÌ ÆÐŶÀ» ó¸® ¾ÈÇϱ⠶§¹®¿¡ ¾ø¾Ú //MSG_CG_GUILD_WAREHOUSE_TAPEX_ACK msg; //msg.m_SlotTabNum = pGuildWareHouse->GetSlotTabNum(); //pPlayer->SendPacket(&msg, sizeof(msg)); } } Handler_DG_CHARINFO_IMPL(DG_GUILD_WAREHOUSE_TAPEX_NAK) { __TOUCHED((pServerSession, pMsg, wSize)); PACKET_PTR_CONVERT(MSG_DG_GUILD_WAREHOUSE_TAPEX_NAK, pRecvMsg, pMsg); PLAYER_PTR_USERKEY(Player, pPlayer, pRecvMsg->m_dwKey); // Ŭ¶ó¿¡¼­ ÀÌ ÆÐŶÀ» ó¸® ¾ÈÇϱ⠶§¹®¿¡ ¾ø¾Ú //MSG_CG_GUILD_WAREHOUSE_TAPEX_NAK msg; //msg.m_bErrorCode = pRecvMsg->m_bErrorCode; //pPlayer->SendPacket(&msg, sizeof(msg)); } //{__NA001283_20090227_COLLECTION_LIST Handler_DG_CHARINFO_IMPL( DG_COLLECT_LIST_LOAD_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_COLLECT_LIST_LOAD_ACK * pRecvMsg = (MSG_DG_COLLECT_LIST_LOAD_ACK*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; CollectedList* pCollectedList = pPlayer->GetCollectedList(); if( NULL == pCollectedList ) { SUNLOG(eCRITICAL_LOG, "DG_COLLECT_LIST_LOAD_ACK ERROR(%d)(%u) äÁý ¸®½ºÆ®°¡ Á¸Àç ÇÏÁö ¾Ê´Â´Ù.", pPlayer->GetCharGuid(), pRecvMsg->m_dwKey); return; } pCollectedList->SerializeStream( pRecvMsg->m_Info, SERIALIZE_STORE ); pCollectedList->SetIsLoad(true); } Handler_DG_CHARINFO_IMPL( DG_COLLECT_ADD_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_COLLECT_ADD_ACK* pRecvMsg = (MSG_DG_COLLECT_ADD_ACK*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; CollectedList* pCollectedList = pPlayer->GetCollectedList(); if( NULL == pCollectedList ) { SUNLOG(eCRITICAL_LOG, "MSG_DG_COLLECT_ADD_ACK ERROR(%d)(%u) äÁý ¸®½ºÆ®°¡ Á¸Àç ÇÏÁö ¾Ê´Â´Ù.", pPlayer->GetCharGuid(), pRecvMsg->m_dwKey); return; } if( false == pCollectedList->IsLoaded() ) { SUNLOG(eCRITICAL_LOG, "MSG_DG_COLLECT_ADD_ACK ERROR(%d)(%u) ¾ÆÁ÷ äÁý ¸®½ºÆ®¸¦ DB¿¡¼­ ·Îµå ÇÏÁö ¾Ê¾Ò´Ù.", pPlayer->GetCharGuid(), pRecvMsg->m_dwKey); return; } if( pRecvMsg->m_wCount != pCollectedList->GetCount(pRecvMsg->m_CollectionID) ) { SUNLOG(eCRITICAL_LOG, "MSG_DG_COLLECT_ADD_ACK ERROR(%d)(%u) äÁý Ƚ¼ö°¡ Ʋ¸®´Ù. DBA[%u] GAME[%u]", pPlayer->GetCharGuid(), pRecvMsg->m_dwKey, pRecvMsg->m_wCount, pCollectedList->GetCount(pRecvMsg->m_CollectionID)); return; } } Handler_DG_CHARINFO_IMPL( DG_COLLECT_DEL_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_COLLECT_DEL_ACK* pRecvMsg = (MSG_DG_COLLECT_DEL_ACK*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; CollectedList* pCollectedList = pPlayer->GetCollectedList(); if( NULL == pCollectedList ) { SUNLOG(eCRITICAL_LOG, "DG_COLLECT_DEL_ACK ERROR(%d)(%u) äÁý ¸®½ºÆ®°¡ Á¸Àç ÇÏÁö ¾Ê´Â´Ù.", pPlayer->GetCharGuid(), pRecvMsg->m_dwKey); return; } if( false == pCollectedList->IsLoaded() ) { SUNLOG(eCRITICAL_LOG, "DG_COLLECT_DEL_ACK ERROR(%d)(%u) ¾ÆÁ÷ äÁý ¸®½ºÆ®¸¦ DB¿¡¼­ ·Îµå ÇÏÁö ¾Ê¾Ò´Ù.", pPlayer->GetCharGuid(), pRecvMsg->m_dwKey); return; } pPlayer->GetCollectedList()->Delete( pRecvMsg->m_CollectionID ); } Handler_DG_CHARINFO_IMPL( DG_COLLECT_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_COLLECT_NAK* pRecvMsg = (MSG_DG_COLLECT_NAK *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer ) return ; SUNLOG( eCRITICAL_LOG, "[DG_COLLECT_NAK] [%s], ErrorCode[%d]", pPlayer->GetCharName(), pRecvMsg->m_dwErrorCode ); } //}__NA001283_20090227_COLLECTION_LIST // implemented by __NA_001359_20090619_HEIM_LOTTO_SYSTEM Handler_DG_CHARINFO_IMPL( DG_OTHER_HEIM_LOTTO_PICK_NTF ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_HEIM_LOTTO_PICK_NTF* pRecvMsg = (MSG_DG_OTHER_HEIM_LOTTO_PICK_NTF*)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); ASSERT( pPlayer ); if( !pPlayer || pPlayer->GetCharGuid() != pRecvMsg->iCharGuid ) { return; } TCHAR tszAddInfo[MAX_ADDINFO_SIZE + 1]; _snprintf(tszAddInfo, MAX_ADDINFO_SIZE, "%d(%d): %d-%d-%d-%d", pRecvMsg->wDrawNum, pRecvMsg->bIsAuto, pRecvMsg->bPickedNum[0], pRecvMsg->bPickedNum[1], pRecvMsg->bPickedNum[2], pRecvMsg->bPickedNum[3] ); tszAddInfo[MAX_ADDINFO_SIZE] = '\0'; GAMELOG->LogSimpleAction(ACT_HEIM_LOTTO_PICK, pPlayer, tszAddInfo); } #ifdef _NA_1419_20100121_ACCUMULATE_POINT Handler_DG_CHARINFO_IMPL( DG_OTHER_ACCUMULATEPOINT_MATCHDATE_NTF ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_OTHER_ACCUMULATEPOINT_MATCHDATE_NTF* pRecvMsg = (MSG_DG_OTHER_ACCUMULATEPOINT_MATCHDATE_NTF*)pMsg; AccumulatePoint::SyncMatchDate(pRecvMsg->wYear, pRecvMsg->wDayOfWeek, pRecvMsg->dwSecond); } #endif Handler_DG_CHARINFO_IMPL(DG_OTHER_SELECT_COMPOSITION_OR_DECOMPOSITION_HISTORIES_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); __UNUSED(pServerSession); ComposeOrDecomposeImplement implement; implement.HandleGetHistoriesResponseFromDBP(pMsg, wSize); } Handler_DG_CHARINFO_IMPL(DG_OTHER_EXTEND_CHAR_SLOT_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); __UNUSED(pServerSession); using namespace util::internal; const MSG_DG_OTHER_EXTEND_CHAR_SLOT_ACK* dbp_ack(NULL); Player* requester(NULL); if (CheckRequestMessage(pMsg, wSize, dbp_ack, requester) == false) { return; } int result_code = 0; if (CheckRequesterState(requester, __FUNCTION__, result_code) == false) { return; } if (dbp_ack->result_code != MSG_DG_OTHER_EXTEND_CHAR_SLOT_ACK::kSuccess) { MSG_CG_ITEM_USE_NAK msg; msg.m_ErrorCode = RC::RC_ITEM_UNUSABLE_FUNCTION; requester->SendPacket(&msg, sizeof(msg)); return; } requester->GetItemManager()->DeleteWastedItem(SI_INVENTORY, dbp_ack->extend_item_position); } //_KR_0_20091021_FIRENDINVITATION_EXTEND Handler_DG_CHARINFO_IMPL( DG_EVENT_INVITATEFRIEND_REWARDUPDATE_ACK ) { GFriendInvitationController::Instance()->OnRewardItemUpdateACK(pServerSession, pMsg, wSize); } Handler_DG_CHARINFO_IMPL( DG_EVENT_INVITATEFRIEND_REWARDUPDATE_NAK ) { GFriendInvitationController::Instance()->OnRewardItemUpdateNAK(pServerSession, pMsg, wSize); } Handler_DG_CHARINFO_IMPL( DG_EVENT_INVITATEFRIEND_RECALLSELECT_ACK ) { GFriendInvitationController::Instance()->OnRecallInfoSelectACK(pServerSession, pMsg, wSize); } Handler_DG_CHARINFO_IMPL( DG_EVENT_INVITATEFRIEND_RECALLSELECT_NAK ) { GFriendInvitationController::Instance()->OnRecallInfoSelectNAK(pServerSession, pMsg, wSize); } #ifdef _NA_20100420_CHANGE_SYSTEM_MEMO_LOGIC Handler_DG_CHARINFO_IMPL( DG_EVENT_DOMINATION_REWARD_AND_DEL_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); const MSG_DG_EVENT_DOMINATION_REWARD_AND_DEL_ACK* recv_msg = static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByCharKey(recv_msg->request_char_guid_); if (player == NULL) { assert(!"Player Not Fount"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][%u]Player Not Found", recv_msg->request_char_guid_); return; } //--gamelulu debuging log SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]Reward Start[Name:%s][Cost:%%I64u]", player->GetCharName(), recv_msg->tender_cost_); //-- º¸»ó Á¶°Ç üũ if (recv_msg->result_value_ != 0) { assert(!"DB Query Result Fail"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][User:%u]DB Query Result Fail", recv_msg->request_char_guid_); return; } else if (recv_msg->request_char_guid_ != recv_msg->db_result_char_guid_) { assert(!"CharGuid Not Same"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]CharGuid Not Same[DB:%u]!=[REQ:%u]", recv_msg->db_result_char_guid_, recv_msg->request_char_guid_); return; } else if (recv_msg->request_reward_type_ != recv_msg->db_result_reward_type_) { assert(!"Money Type Not Same"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][User:%u]Money Type Not Same[DB:%d]!=[REQ:%d]", recv_msg->request_char_guid_, recv_msg->db_result_reward_type_, recv_msg->request_reward_type_); return; } else if (recv_msg->request_map_code_ != recv_msg->db_result_map_code_) { assert(!"MapCode Not Same"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][User:%u]MapCode Not Same[DB:%u]!=[REQ:%u]", recv_msg->request_char_guid_, recv_msg->db_result_map_code_, recv_msg->request_map_code_); return; } else { #ifdef _CH_20100420_CHANGE_DOMINATION_APPLY_WAY //gamelulu say : º¸»óÀ» ¹ÞÀ»¶§ Áߺ¹°¹¼öÀÇ ÃÖ´ëÄ¡ ¶§¹®¿¡ ¿©·¯°ÔÀÇ ½½·ÔÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. //ÇöÀç ÃÖ´ëÄ¡ ÀÌ»óÀÌ »ðÀÔ °¡´ÉÇÑÁö°¡ üũ µÇÁö ¾Ê±â ¶§¹®¿¡ ÃÖ´ëÄ¡±îÁö¸¸ º¸»óÀ» Çϸç //º¸»óÀÇ È½¼ö¸¦ ´Ã¸°´Ù. ´Ù¸¸ Áß°£¿¡ ½ÇÆÐ ÇßÀ» °æ¿ì DB¿¡ ±× ³»¿ëÀ» ÀúÀåÇÏ¿© Â÷ÈÄ ´Ù½Ã //º¸»óÀ» ½ÃµµÇÏ°Ô ÇÑ´Ù. MONEY amount_heim = DominationInfoParser::Instance()->GetAreaLimitMoney(recv_msg->request_map_code_); //--gamelulu debuging log SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]Script Heim[Name:%s][Heim:%I64u]", player->GetCharName(), amount_heim); SLOTCODE item_code = DominationInfoParser::Instance()->GetBattingItemCodeByMapCode(recv_msg->request_map_code_); //--º¸»ó ºÐÇÒ Ã³¸® int temp_cost = static_cast(recv_msg->tender_cost_);//±âÁ¸ MoneyÆÐŶÀ» ±×´ë·Î ¾²±â ¶§¹® int number_of_insertable_item;//ÇѰ³ÀÇ ½½·ÔÀ» ´ë»óÀ¸·Î ½Àµæ ÇÒ ¼ö ÀÖ´Â ¾ÆÀÌÅÛ °¹¼ö for(;temp_cost > 0 ; temp_cost -= number_of_insertable_item) { //--½Àµæ °¡´É ¿©ºÎ & ½Àµæ ÇÒ ¼ö ÀÖ´Â ¾ÆÀÌÅÛ °¹¼ö(OUT) RC::eITEM_RESULT result_value = player->GetPostManager()->CheckRewardItem(player, temp_cost, item_code, number_of_insertable_item); if (result_value != RC::RC_ITEM_SUCCESS) { MSG_CG_EVENT_ITEM_REWARD_RESULT_CMD nak_msg; nak_msg.memo_guid_ = recv_msg->memo_guid_; nak_msg.result_value_ = false; player->SendPacket(&nak_msg, sizeof(nak_msg)); //--º¸»ó DB ·Ñ¹é MSG_DG_EVENT_DOMINATION_ITEM_ROLLBACK_SYN send_msg; send_msg.char_guid_ = recv_msg->db_result_char_guid_; send_msg.map_code_ = recv_msg->db_result_map_code_; send_msg.reward_type_ = recv_msg->db_result_reward_type_; send_msg.tender_cost_ = temp_cost; player->SendToGameDBPServer(&send_msg, sizeof(send_msg)); SUNLOG(eFULL_LOG, "["__FUNCTION__"]Inventory Is Full:%u]", recv_msg->request_char_guid_); return; } //--¾ÆÀÌÅÛ º¸»ó RC::eITEM_RESULT reward_result_value = player->GetPostManager()->RewardItem(player, number_of_insertable_item, item_code); if (reward_result_value != RC::RC_ITEM_SUCCESS) { MSG_CG_EVENT_ITEM_REWARD_RESULT_CMD nak_msg; nak_msg.memo_guid_ = recv_msg->memo_guid_; nak_msg.result_value_ = false; player->SendPacket(&nak_msg, sizeof(nak_msg)); //--º¸»ó DB ·Ñ¹é MSG_DG_EVENT_DOMINATION_ITEM_ROLLBACK_SYN send_msg; send_msg.char_guid_ = recv_msg->db_result_char_guid_; send_msg.map_code_ = recv_msg->db_result_map_code_; send_msg.reward_type_ = recv_msg->db_result_reward_type_; send_msg.tender_cost_ = temp_cost; player->SendToGameDBPServer(&send_msg, sizeof(send_msg)); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]Domination Item Reward Fail[User:%u]", recv_msg->request_char_guid_); return; } } //--ÃÖÁ¾ ÇÏÀÓ º¸»ó¹× º¸»ó °á°ú ¾Ë¸² //2010.07.13 : º¸»ó ±Ý¾×ÀÎ 1¾ïÀ¸·Î MAX¸¦ Á¤ÇÑ´Ù. ºñÁ¤»óÀûÀÎ ÇÏÀÓ ½Àµæ¿¡ ´ëÇÑ ÀϽÃÀû ó¸® //ÇöÀç Áß±¹Àº 1¾ïÀ¸·Î Àϰý º¸»ó const ULONGLONG max_reward_money = 100000000; if (amount_heim > max_reward_money) { SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]Reward Heim[Name:%s][Heim:%I64u]", player->GetCharName(), amount_heim); amount_heim = max_reward_money; } player->GetPostManager()->RewardHeim(player, amount_heim, recv_msg->request_reward_type_); MSG_CG_EVENT_ITEM_REWARD_RESULT_CMD cmd_msg; cmd_msg.memo_guid_ = recv_msg->memo_guid_; cmd_msg.result_value_ = true; player->SendPacket(&cmd_msg, sizeof(cmd_msg)); #else //--º¸»ó ·ÎÁ÷ player->GetPostManager()->RewardHeim(player, recv_msg->tender_cost_, recv_msg->db_result_reward_type_); //--º¸»ó ¿Ï·á ¾Ë¸² MSG_CG_EVENT_ITEM_REWARD_RESULT_CMD cmd_msg; cmd_msg.memo_guid_ = recv_msg->memo_guid_; cmd_msg.result_value_ = true; player->SendPacket(&cmd_msg, sizeof(cmd_msg)); #endif } } Handler_DG_CHARINFO_IMPL( DG_EVENT_LOTTO_REWARD_AND_DEL_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); const MSG_DG_EVENT_LOTTO_REWARD_AND_DEL_ACK* recv_msg = static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByCharKey(recv_msg->request_char_guid_); if (player == NULL) { assert(!"Player Not Fount"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][%u]Player Not Found", recv_msg->request_char_guid_); return; } //--º¸»ó Á¶°Ç if (recv_msg->result_value_ != 0) { assert(!"DB Query Result Fail"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][User:%u]DB Query Result Fail", recv_msg->request_char_guid_); return; } else if (recv_msg->request_char_guid_ != recv_msg->db_result_char_guid_) { assert(!"CharGuid Not Same"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]CharGuid Not Same[DB:%u]!=[REQ:%u]", recv_msg->db_result_char_guid_, recv_msg->request_char_guid_); return; } else { //--º¸»ó ·ÎÁ÷ player->GetPostManager()->RewardHeim(player, recv_msg->db_result_prize_money_, SYSMEMO_LOTTO_WIN); } } #endif//_NA_20100420_CHANGE_SYSTEM_MEMO_LOGIC // implemented by _NA_20100812_INTEGRATE_SYSTEM_MEMO_DOMINATION Handler_DG_CHARINFO_IMPL( DG_EVENT_SYSTEMMEMO_ITEM_CHECK_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); const MSG_DG_EVENT_SYSTEMMEMO_ITEM_CHECK_ACK* recv_msg = static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByCharKey(recv_msg->char_guid_); if (player == NULL) { assert(!"Player Not Fount"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"][%u]Player Not Found", recv_msg->char_guid_); return; } GameDominationManager* domination_manager = GameDominationManager::Instance(); RC::eITEM_RESULT result_value = RC::RC_ITEM_SUCCESS; if(recv_msg->db_result_value_ == true) { //-- ¾ÆÀÌÅÛ º¸»ó result_value = domination_manager->GetSystemMemo()->RewardSysMemoItem(player, recv_msg); } else { assert(!"Reward item check fail"); SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"]Reward Item check fail"); result_value = RC::RC_ITEM_FAILED; } MSG_CG_EVENT_SYSTEMMEMO_ITEM_REWARD_ANS ans_msg; { ans_msg.memo_guid_ = recv_msg->memo_guid_; ans_msg.result_value_ = result_value; } player->SendPacket(&ans_msg, sizeof(ans_msg)); } #ifdef _NA_003027_20111013_HONOR_SYSTEM Handler_DG_CHARINFO_IMPL(DG_CHARINFO_HONORSYSTEM) { __TOUCHED((pServerSession, pMsg, wSize)); HonorSystem::Instance()->ParseDGPacket(pMsg); } #endif //_NA_003027_20111013_HONOR_SYSTEM #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM Handler_DG_CHARINFO_IMPL(DG_CHARINFO_POINTWALLET_SYSTEM) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_CHARINFO_POINTWALLET_SYSTEM* packet = \ static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey ); if( !player ) return ; PointWalletManager* const pointwallet_manager = player->GetPointWalletManager(); pointwallet_manager->ParseDGPacket(packet); } #endif //_NA004034_20120102_POINT_WALLET_SYSTEM Handler_DG_CHARINFO_IMPL(DG_CHARNAME_CHANGE_ACK) { MSG_DG_CHARNAME_CHANGE_ACK* packet = \ static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey ); if( !player ) return ; POSTYPE item_pos = packet->item_pos; SLOTIDX slot_index = packet->slot_index; ItemManager* item_manager = player->GetItemManager(); if (item_manager == NULL) { return; } SCSlotContainer* container = (SCSlotContainer*)item_manager->GetItemSlotContainer(slot_index); if (container == NULL) { return; } SCItemSlot& item_slot = (SCItemSlot&)container->GetSlot(item_pos); if (item_slot.GetSerial() == 0) { return; } const BASE_ITEMINFO* item_info = item_slot.GetItemInfo(); if (item_info == NULL) { return; } item_slot.SetLock(FALSE); if (packet->result == 0) // success ~~ { // ¼º°øÀÇ °æ¿ì¿¡´Â ¸ÕÀú ¾ÆÀÌÅÛ »ç¿ë ·Î±×ºÎÅÍ ³²±ä´Ù GAMELOG->LogItem(ITEM_USE, player, &item_slot); // ¼Ò¸ð¼º ¾ÆÀÌÅÛ »èÁ¦ if (item_info->m_wType == eITEMTYPE_CHARACTER_NAME_CHANGE) { if(item_slot.GetNum() <= 1) { container->DeleteSlot(item_pos, NULL); } else { container->UpdateSlot(item_pos, -1); } } player->ResetUseItem(item_info->m_wCoolTimeType); MSG_CG_ITEM_USE_ACK ack; ack.m_atIndex = slot_index; ack.m_atPos = item_pos; player->SendPacket(&ack, (WORD)sizeof(ack)); } MSG_CG_CHARNAME_CHANGE_REQUEST_ACK msg; msg.result = packet->result; player->SendPacket(&msg, sizeof(msg)); } Handler_DG_CHARINFO_IMPL(DG_CHARACTER_EXTRA_INFO_CMD) { MSG_DG_CHARACTER_EXTRA_INFO_CMD* packet = \ static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey ); if( !player ) return ; #ifdef _NA_006372_20130108_BADGE_ITEM ;{ // store toggle item info (D->G) ToggleItemInfos& toggle_item_info_container = \ player->GetExtraInfoManager().GetToggleItemInfos(); memcpy(&toggle_item_info_container, &packet->toggle_item_info_, \ sizeof(packet->toggle_item_info_)); }; #endif //_NA_006372_20130108_BADGE_ITEM //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND ;{ player->GetExtraInfoManager().SetBattleGroundRecordInfos(packet->battle_ground_record_infos_); }; #ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH ;{ player->GetExtraInfoManager().SetGoldRushRecordInfos(packet->goldrush_record_infos_); }; #endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH #ifdef _NA_000000_20130521_DAILY_QUEST_RESET_ITEM ;{ player->GetExtraInfoManager().SetDailyQuestResetUseTime(\ packet->daily_quest_reset_item_use_time); }; #endif //_NA_000000_20130521_DAILY_QUEST_RESET_ITEM #ifdef _NA_008404_20150712_MINIGAME_SYSTEM ;{ player->GetExtraInfoManager().SetMiniGameBingoInfos(\ packet->minigame_bingo_infos); }; #endif //_NA_008404_20150712_MINIGAME_SYSTEM //player->GetExtraInfoManager().OnEnterField(); // ¿É¼Ç Áߺ¹ Àû¿ë ¹®Á¦ »ý°Ü¼­ Á¦°ÅÇÔ - arycoat.2013.04.03. } #ifdef _NA_007932_20150106_USER_EXTRA_INFO Handler_DG_CHARINFO_IMPL(DG_USER_EXTRA_INFO_CMD) { MSG_DG_USER_EXTRA_INFO_CMD* packet = \ static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet->m_dwKey ); if( !player ) return ; // UserExtraInfo Ãß°¡½Ã ¼öÁ¤ #ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM ;{ player->GetExtraInfoManager().SetAttendanceInfos(\ packet->attendance_infos); }; #endif //_NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM } #endif // _NA_007932_20150106_USER_EXTRA_INFO #ifdef _NA_000000_20140120_SMART_NPC_SYSTEM Handler_DG_CHARINFO_IMPL(DG_EVENT_SMARTNPC_SYSTEM) { __TOUCHED((pServerSession, pMsg, wSize)); g_ExtraNPCManager.ParseDGPacket(pMsg); } #endif //_NA_000000_20140120_SMART_NPC_SYSTEM #ifdef _NA_007086_20140318_MONSTERBOOK Handler_DG_CHARINFO_IMPL(DG_CHARACTER_MONSTERBOOK_CMD) { MSG_DG_CHARACTER_MONSTERBOOK_CMD* packet = \ static_cast(pMsg); switch(packet->packet_type) { case DG_CHARACTER_MONSTERBOOK_SERIALIZE_CMD: { const MSG_DG_CHARACTER_MONSTERBOOK_SERIALIZE_CMD* packet2 = \ static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet2->m_dwKey ); if (!player) return ; MonsterBook& monster_book = player->GetMonsterBook(); memcpy(&monster_book, &packet2->monster_book, sizeof(monster_book)); } break; case DG_CHARACTER_MONSTERBOOK_ADD_ACK: { const MSG_DG_CHARACTER_MONSTERBOOK_ADD_ACK* packet2 = \ static_cast(pMsg); Player* player = PlayerManager::Instance()->FindPlayerByUserKey( packet2->m_dwKey ); if (!player) return ; DWORD monster_code = packet2->monster_code; MonsterBook& monster_book = player->GetMonsterBook(); if (monster_book.find(monster_code) == 0) { monster_book.push_back(packet2->monster_code); MSG_CG_MONSTERBOOK_ADD_CMD cmd; cmd.monster_code_ = monster_code; player->SendPacket(&cmd, sizeof(cmd)); GAMELOG->LogMonsterBook(ACT_MONSTERBOOK_REGISTER, player, cmd.monster_code_); } } break; } } #endif //_NA_007086_20140318_MONSTERBOOK #ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT Handler_DG_CHARINFO_IMPL(DG_GMEVENT_PEAKTIME_REGISTER_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_GMEVENT_PEAKTIME_REGISTER_ACK* packet = \ static_cast(pMsg); PeakTimeEvent::Instance()->AddGmEvent(packet->register_event); } Handler_DG_CHARINFO_IMPL(DG_GMEVENT_PEAKTIME_TERMINATE_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_GMEVENT_PEAKTIME_TERMINATE_ACK* packet = \ static_cast(pMsg); PeakTimeEvent::Instance()->DeleteProgressEvent(); } #endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT #ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_UPDATE_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_UPDATE_ACK* packet = \ static_cast(pMsg); SunRankingManager::Instance()->UpdateFromSunRankingPlayer(packet->info); } Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_SELECT_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_SELECT_ACK* packet = \ static_cast(pMsg); for (int i = 0; i < packet->count; ++i) { SunRankingManager::Instance()->UpdateFromSunRankingPlayer(packet->infos[i]); } } Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_GRADE_SELECT_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_GRADE_SELECT_ACK* packet = \ static_cast(pMsg); SunRankingGradeManager::Instance()->SetAllGradeInfos(packet->infos, packet->count); } Handler_DG_CHARINFO_IMPL(DG_STATUE_ITEM_SLOT_INFO_INSERT_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_STATUE_ITEM_SLOT_INFO_INSERT_ACK* packet = \ static_cast(pMsg); } Handler_DG_CHARINFO_IMPL(DG_STATUE_SELECT_ACK) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_STATUE_SELECT_ACK* packet = \ static_cast(pMsg); if (packet->count > 0) { StatueManager::Instance()->SetStatue(packet->statue_info.statue_type, packet->statue_info.statue_index, &packet->statue_info); } } Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_SETTLE_START_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_SETTLE_START_CMD* packet = \ static_cast(pMsg); SunRankingGradeManager::Instance()->Settle(); } Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_SETTLE_COMPLETE_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_SETTLE_COMPLETE_CMD* packet = \ static_cast(pMsg); SunRankingGradeManager::Instance()->Settle_Complete(); } Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_SELECT_COMPLETE_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_SELECT_COMPLETE_CMD* packet = \ static_cast(pMsg); SunRankingGradeManager::Instance()->SetLoadComplete(eLOAD_KIND_RANKING_SELECT); } Handler_DG_CHARINFO_IMPL(DG_SUN_RANKING_GRADE_SELECT_COMPLETE_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_DG_SUN_RANKING_GRADE_SELECT_COMPLETE_CMD* packet = \ static_cast(pMsg); SunRankingGradeManager::Instance()->SetLoadComplete(eLOAD_KIND_GRADE_SELECT); } #endif // _NA_008012_20150204_SUN_RANKING_SYSTEM