#include #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION /*-------------------------------------------------------------------------------------------------- -- Include Defined --------------------------------------------------------------------------------------------------*/ #include "OneDaysGuildMission.h" #include "Player.h" #include #include #include "StatusManager.h" #include "MapInfoParser.h" #include "DominationAuction.h" #include "GameGuildManager.h" #include "GameGuild.h" #include "Monster.h" #include "RewardManager.h" #include "MissionManager.h" #include "MissionRewardManager.h" #include "ChaosZoneInfoParser.h" #include #include "PacketStruct_AG_ChaosZoneSystem.h" #include "PacketStruct_GZ.h" #include <../ProgramCommon/ChaosZoneSystem/PacketStruct_ChaosZoneSystem.h> #include <../Server/Common/PacketStruct_AG_ChaosZoneSystem.h> #include <../ProgramCommon/ChaosZoneSystem/OneDaysGuildMissioninfoParser.h> #include "World/ChaosZoneSystem/OneDaysGuildMissionResult.h" void OneDaysGuildMission::Init(GameInstanceDungeon* const instance_dungeon) { // ÃʱⰪ ¼ÂÆÃ instance_dugeon_ = instance_dungeon; CHARGUID user_key = instance_dugeon_->GetMasterUserKey(); onedays_guild_mission_result_ = new OneDaysGuildMissionResult(); onedays_guild_mission_result_->Init(true); onedays_guild_mission_result_->SetOneDayGuildMissin(this); // ½ºÅ©¸³Æ® Load MAPCODE map_code = instance_dugeon_->GetMapCode(); const OneDaysGuildMissionInfoParser* const one_day_Guild_mission_info_parser = OneDaysGuildMissionInfoParser::Instance(); if(onedays_guild_mission_info_ == NULL) { const OneDaysGuildMissionInfo* onedays_guild_mission_info = one_day_Guild_mission_info_parser->FindData(map_code); if(onedays_guild_mission_info) { onedays_guild_mission_info_ = onedays_guild_mission_info; } else { SUNLOG(eCRITICAL_LOG, "[OneDaysGuildMission::Init()] OneDaysGuildMissionInfo is NULL. MapCode[%d]. ",map_code); } } is_stamp_state_ = false; stand_by_member_pool_ = new StandByMemberPool(); stand_by_member_pool_->Initialize(200); // ¹æ »ý¼º ÈÄ °ÔÀÓ ½ÃÀÛ ½Ã°£ ¼ÂÆÃ start_wait_timer_.SetTimer(onedays_guild_mission_info_->start_wait_time * kSecond); // script.. time_sync_cycle_.SetTimer(TIME_SYNC_CYCLE); SetOneDaysGuildMissionState(eGUILDMISSION_ENTERWAIT); } void OneDaysGuildMission::Release() { // ÀڷᱸÁ¶ °ü·ÃÇØ¼­ »èÁ¦ÇØÁÖÀÚ.... SAFE_RELEASENDELETE(onedays_guild_mission_result_); guild_mission_state_ = eGUILDMISSION_NONE; stamp_start_time_ = 0; // Àüü ½ºÅ¸Æ® ¾÷ À¯Àú ¸®½ºÆ® Release StandByMemberMap::const_iterator const_itr_members = stand_by_total_members_.begin(); for (; const_itr_members != stand_by_total_members_.end(); ++const_itr_members) { StandByMemberInfo* const stand_by_member = const_itr_members->second; if (stand_by_member == NULL) { continue; } stand_by_member_pool_->Free(stand_by_member); } stand_by_total_members_.clear(); } void OneDaysGuildMission::Update() { switch (guild_mission_state_) { case eGUILDMISSION_ENTERWAIT: { // äÁýÀ» ¼º°øÇ߰ųª ½ÃÀÛ ´ë±â½Ã°£ÀÌ ¸ðµÎ Áö³µÀ» °æ¿ì °­Á¦ ½ÃÀÛ ½ÃŲ´Ù. if((is_stamp_state_) || (start_wait_timer_.GetRemainedTime() <= 0)) { // ÀüÀå ½ÃÀÛ _Start(); } } break; case eGUILDMISSION_MATCHED: { // ÀÏÀÏ ±æµå¹Ì¼Ç Á¦ÇÑ ½Ã°£ÀÌ ´Ù µÇ¾ú´ÂÁö üũÇÏ¿© »óÅ º¯°æ if(_IsGuildMissionEnd()) { SetOneDaysGuildMissionState(eGUILDMISSION_MATCHEDEND); } } break; case eGUILDMISSION_MATCHEDEND: { // ÀÏÀϱæµå¹Ì¼Ç »óÅ º¯°æ SetOneDaysGuildMissionState(eGUILDMISSION_RESULT); } break; case eGUILDMISSION_RESULT: { // Á¾·á ó¸® ¹× º¸»ó ó¸® _Result(); // ÀÏÀÏ ±æµå ¹Ì¼Ç Á¾·á ÈÄ ´ë±â ½Ã°£ end_wait_timer_.SetTimer(onedays_guild_mission_info_->end_wait_time * kSecond); // ÀÏÀÏ ±æµå¹Ì¼Ç »óÅ º¯°æ SetOneDaysGuildMissionState(eGUILDMISSION_KICK_USER); } break; case eGUILDMISSION_KICK_USER: { // Ç÷¹ÀÌ¾î °­Á¦ ÅðÀå if (end_wait_timer_.IsExpiredManual(FALSE) == TRUE) { MSG_AG_ONEDAYSGUILDMISSION_KICKUSER_CMD cmd_msg; cmd_msg.room_key = instance_dugeon_->GetKey(); g_pGameServer->SendToServer(AGENT_SERVER, &cmd_msg, sizeof(cmd_msg)); // ¾î´ÀÁ¤µµ µÚ¿¡ ¹æÀ» ÆÄ±«ÇÏÀÚ. À¯Àúµé ³»º¸³½µÚ¿¡ ³»º¸³»ÀÚ. room_destroy_timer_.SetTimer(ROOM_DESTROY_WAIT_TIME * kSecond); // ÀÏÀÏ ±æµå¹Ì¼Ç »óÅ º¯°æ SetOneDaysGuildMissionState(eGUILDMISSION_DESTROY); } } case eGUILDMISSION_DESTROY: { if(room_destroy_timer_.IsExpiredManual(FALSE) == TRUE) { MSG_AG_ONEDAYSGUILDMISSION_ROOM_DESTROY_CMD cmd_msg; cmd_msg.room_key = instance_dugeon_->GetKey(); g_pGameServer->SendToServer(AGENT_SERVER, &cmd_msg, sizeof(cmd_msg)); // ÀÏÀÏ ±æµå¹Ì¼Ç »óÅ º¯°æ guild_mission_state_ = eGUILDMISSION_END; } } break; case eGUILDMISSION_END: { // Á¾·á } break; } // ¹æÀÇ ³²Àº ½Ã°£ Á¤º¸¸¦ º¸³»ÁÖÀÚ. °ÔÀÓÀÌ ÁøÇà ÁßÀ϶§¸¸ eGUILDMISSION_STATE state = guild_mission_state_; if(state == eGUILDMISSION_MATCHED) { if (time_sync_cycle_.IsExpired() == TRUE) { _SendTimeSync(); time_sync_cycle_.Reset(); } // Agent°¡ °¡Áö°í ÀÖ´Â ½Ã°£ °»½Å SetOneDaysGuildMissionState(eGUILDMISSION_MATCHED); } } bool OneDaysGuildMission::EnterPlayer(Player* const player) { // player À¯È¿¼º üũ if((player == NULL) || player->IsDeleted()) { return false; } // Ç÷¹À̾î Ãß°¡ player_hash_.insert(PLAYER_HASH::value_type(player->GetCharGuid(), player)); if(guild_mission_state_ >= eGUILDMISSION_MATCHED) { if(!IsStandByMember(player->GetCharGuid())) // ½ºÅÙ¹ÙÀÌ À¯ÀúÀÏ °æ¿ì ÇØ´ç ¾ÆÀÌÅÛÀ» »èÁ¦ÇÏÁö ¾Ê´Â´Ù. { // ¾ÆÀÌÅÛ »èÁ¦ if(!_ItemDelete(player)) return false; } } // ºñÁ¤»ó Á¢¼Ó Á¾·áÀÚ. bool is_abnormal_leave = false; if (player->GetStatusManager()->FindStatus(eCHAR_STATE_FUGITIVE) != NULL || //µµ¸ÁÀÚ ¹öÇÁ°¡ ÀÖÀ» °æ¿ì.. guild_mission_state_ == eGUILDMISSION_MATCHED) // Á¸ À̵¿ µµÁß ºñÁ¤»ó Á¾·áµÇ¾î ÀüÀå ½ÃÇÕ Áß¿¡ µé¾î¿ÔÀ» °æ¿ì.. { is_abnormal_leave = true; // »óÅÂÁ¦°Å (µµ¸ÁÀÚ ¹öÇÁ°¡ °É¸° »ç¶÷Àº ¿¹¾àÀÌ ¾ÈµÇ±â ¶§¹®¿¡ ¾îºä¡¿¡ ÇØ´çÇÏÁö ¾ÊÀ½) if (player->GetStatusManager()->FindStatus(eCHAR_STATE_FUGITIVE)) { if (!player->GetStatusManager()->Remove(eCHAR_STATE_FUGITIVE)) { MSG_CG_STATUS_REMOVE_BRD BrdMsg; BrdMsg.m_dwTargetKey = player->GetObjectKey(); BrdMsg.m_dwStatusCode = eCHAR_STATE_FUGITIVE; player->SendPacketAround(&BrdMsg, BrdMsg.GetSize()); } } // ÀÔÀåÇÑ À¯Àú¿¡°Ô ¹æ Á¤º¸ Àü´Þ _SendTimeSyncForPlayer(player); } else if (guild_mission_state_ == eGUILDMISSION_MATCHED) // ÀüÀå µé¾î¿À±âÀü ºñÁ¤»óÁ¢¼ÛÁ¾·áÀÚ Ã³¸®.. { is_abnormal_leave = true; } { // ÀÔÀåÇÑ À¯Àúµé¿¡ ´ëÇÑ Log TCHAR add_info[MAX_ADDINFO_SIZE] = { 0, }; // add_info »óÀÇ ³»¿ëÀº ÃßÈÄ Á¤¸®ÇÏ¿© ³ÖÀÚ... add_info[MAX_ADDINFO_SIZE-1] = _T('\0'); GAMELOG->LogChaosZone(ACT_ONE_DAYS_GUILD_MISSION_ENTER, player, NULL, add_info); } return true; } void OneDaysGuildMission::LeavePlayer(Player* const player) { // player À¯È¿¼º üũ if((player == NULL) || player->IsDeleted()) { return; } // Agent ÂÊ¿¡ ÇØ´ç À¯Àú°¡ ³ª°£°ÍÀ» ¾Ë·ÁÁÜ(¹æ¿¡ ¾Æ¹«µµ ¾øÀ» °æ¿ì »èÁ¦Çϱâ À§ÇØ) MSG_AG_ONEDAYSGUILDMISSION_LEAVE_ROOM_CMD cmd_msg; cmd_msg.zone_key = instance_dugeon_->GetKey(); player->SendPacket(&cmd_msg,sizeof(cmd_msg)); // Ç÷¹ÀÌ¾î »èÁ¦ player_hash_.erase(player->GetCharGuid()); // ÅðÀåÇÑ À¯Àúµé¿¡ ´ëÇÑ Log { // ÅðÀåÇÑ À¯Àúµé¿¡ ´ëÇÑ Log TCHAR add_info[MAX_ADDINFO_SIZE] = { 0, }; // add_info »óÀÇ ³»¿ëÀº ÃßÈÄ Á¤¸®ÇÏ¿© ³ÖÀÚ... add_info[MAX_ADDINFO_SIZE-1] = _T('\0'); GAMELOG->LogChaosZone(ACT_ONE_DAYS_GUILD_MISSION_LEAVE, player, NULL, add_info); } } void OneDaysGuildMission::EnterTeam(const ChaosZoneTeam team_key, const BYTE player_count, DWORD* user_key_list) { return; } eUSER_RELATION_TYPE OneDaysGuildMission::IsFriendPVP(Player* attacker,Player* target) { return USER_RELATION_FRIEND; } void OneDaysGuildMission::DeadCharacter(Character* const dead_character, Character* const kill_character) { // À¯È¿¼º °Ë»ç if((dead_character == NULL) || (dead_character->IsDeleted())) { return; } // ÀÌ ¹æ¿¡¼­´Â Ç÷¹¾îÀ̰¡ Ç÷¹À̾ Á×ÀÌ´Â ÀÏÀÌ ¾ø´Ù... if(dead_character->IsEqualObjectKind(PLAYER_OBJECT) == false) { return; } return; } void OneDaysGuildMission::SetOneDaysGuildMissionState(eGUILDMISSION_STATE state) { guild_mission_state_ = state; // Agent¿¡°Ô »óŰª °»½Å Àü´Þ MSG_AG_ONEDAYSGUILDMISSION_TIME_STATE_CMD cmd_msg; cmd_msg.room_key_ = instance_dugeon_->GetKey(); cmd_msg.event_state_ = guild_mission_state_; if(guild_mission_state_ == eGUILDMISSION_MATCHED) { cmd_msg.remain_time_ = mission_limit_timer_.GetRemainedTime(); } else { cmd_msg.remain_time_ = 0; } g_pGameServer->SendToServer(AGENT_SERVER, &cmd_msg, sizeof(cmd_msg)); } void OneDaysGuildMission::SuccessStamp(Player* player) { #ifdef _DEBUG if(player) { SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"] ÿÈÕ¹¤»áÈÎÎñÍê³É![Guild:%d]", player->GetGuild()); } #endif //(_DEBUG) // äÁý(°¢ÀÎ)¿¡ ¼º°øÇÏ¸é ¹Ì¼Ç »óŰªÀ» º¯°æ is_stamp_state_ = true; } void OneDaysGuildMission::SetStampStartTime() { stamp_start_time_ = GetTickCount(); } bool OneDaysGuildMission::InsertStandByMember(const CHARGUID guid) { StandByMemberInfo* const stand_by_member = static_cast(stand_by_member_pool_->Alloc()); stand_by_member->user_guid = guid; stand_by_total_members_.insert( \ StandByMemberMap::value_type(guid, stand_by_member)); return true; } void OneDaysGuildMission::RemoveStandByMember(const CHARGUID guid) { // Çü½ÄÀ» ¸ÂÃß±â À§ÇØ ³Ö¾ú´Ù... StandByMemberMap::iterator itr = stand_by_total_members_.find(guid); if (itr == stand_by_total_members_.end()) { // ¸®½ºÆ®¿¡ ¾øÀ¸´Ï Áö¿ï°Íµµ ¾ø´Ù.. return; } StandByMemberInfo* const stand_by_member = itr->second; stand_by_member_pool_->Free(stand_by_member); stand_by_total_members_.erase(itr); } bool OneDaysGuildMission::IsStandByMember(const CHARGUID guid) { StandByMemberMap::const_iterator itr = stand_by_total_members_.find(guid); if (itr != stand_by_total_members_.end()) { // ÀÌ¹Ì ½ºÅ¸Æ®¾÷ ¸®½ºÆ®¿¡ µé¾îÀÖÀ½.. return true; } return false; } void OneDaysGuildMission::_Start() { // °ÔÀÓ ÁøÇàÀÌ µÇ¸é ½ÃÀÛ Æ®¸®°Å¸¦ ¹ßµ¿ ½ÃŲ´Ù. WzID trjgger_id = StrToWzID("STR0"); if(instance_dugeon_->TriggerActive(trjgger_id) == false) { SUNLOG(eCRITICAL_LOG, "["__FUNCTION__"] Æ®¸®°Å(%d)¸¦ ¾×ƼºêÇϴµ¥ ½ÇÆÐÇÏ¿´½À´Ï´Ù.", trjgger_id); #ifdef _NA_008831_20160520_ONE_DAYS_GUILD_MISSION_BUG_LOGIC_MODIFIED PLAYER_HASH::const_iterator const_itr = player_hash_.begin(); for(; const_itr != player_hash_.end(); ++const_itr) { Player* const player = const_itr->second; if (player == NULL) continue; MSG_CG_ZONE_EX_ONEDAYS_GUILD_MISSION_TRIGGER_ACTIVE_STATUS_CMD cmd_msg; cmd_msg.m_bErrorCode = RC::RC_ONEDAYSGUILDMISSION_TRIGGER_ACTIVE_FAILED; player->SendPacket(&cmd_msg, sizeof(cmd_msg)); } // Æ®¸®°Å ¹ßµ¿ÀÌ ¾ÈµÈ»óȲ¿¡¼­ °ÔÀÓ ÁøÇàÀÌ ¾ÈµÇ¹Ç·Î ¹æ ÆÄ±« °úÁ¤À» ÁøÇàÇÑ´Ù. // ÀÏÀÏ ±æµå ¹Ì¼Ç Á¾·á ÈÄ ´ë±â ½Ã°£ end_wait_timer_.SetTimer(onedays_guild_mission_info_->end_wait_time * kSecond); // ÀÏÀÏ ±æµå¹Ì¼Ç »óÅ º¯°æ SetOneDaysGuildMissionState(eGUILDMISSION_KICK_USER); return; #endif //(_NA_008831_20160520_ONE_DAYS_GUILD_MISSION_BUG_LOGIC_MODIFIED) } // °ÔÀÓ Ç÷¹ÀÌ ½Ã°£ ¼³Á¤ mission_limit_timer_.SetTimer(onedays_guild_mission_info_->play_time * kSecond); // ÀüÀå ÁøÇà »óÅ SetOneDaysGuildMissionState(eGUILDMISSION_MATCHED); SUNBATTLEGROUNDLOG( eCRITICAL_LOG, TEXT("| [ZONE_KEY(%d)] | Start | ÀüÀå ½ÃÀÛ!"), instance_dugeon_->GetKey()); // ÀüÀå¿¡ Âü°¡ÇÑ À¯ÀúµéÀÇ ÀÔÀå ¾ÆÀÌÅÛ ¼Ò¸ð PLAYER_HASH::const_iterator const_itr = player_hash_.begin(); for(; const_itr != player_hash_.end(); ++const_itr) { Player* const player = const_itr->second; if (player == NULL) continue; if(!_ItemDelete(player)) return; } } void OneDaysGuildMission::_Result() { // Á×¾îÀÖÀ¸¸é »ì¸®°í °¢ÀÚ ¾ÈÀüÁö´ë·Î À̵¿½ÃŲ´Ù. PLAYER_HASH::const_iterator const_itr = player_hash_.begin(); for(; const_itr != player_hash_.end(); ++const_itr) { Player* const player = const_itr->second; if (player == NULL || player->IsDeleted()) continue; OnMoveToSafezone(player); if (player->IsDead()) { player->OnResurrection( 0, 1.f, 1.f ); } // º¸»ó.. if (onedays_guild_mission_info_->base_reward_item_code == 0) { return; } FlowControl flow; FLOWCONTROL_START() { MissionManager* const mission_manager = player->GetMissionManager(); mission_manager->CheckEnableWindowOpen(); // ±×·²¸® ¾ø´Ù°í ´ÜÁ¤Áö¾îÁø °ÍÀÌÁö¸¸, Áߺ¹µÈ º¸»óÀÌ Á¸ÀçÇÒ °æ¿ì¸¦ ´ëºñ if (mission_manager->EnableWindowOpen()) { TriggerManagerEx::Check_RewardWindow(player, true); return; } DWORD mission_number = onedays_guild_mission_info_->base_reward_item_code; MissionRewardManager* reward_manager = MissionRewardManager::Instance(); reward_manager->Init(); MissionRewardArgs& mission_reward_args = reward_manager->GetMissionRewardArgs(); mission_reward_args.SetPlayer(player); mission_reward_args.SetMissionManager(mission_manager); mission_reward_args.SetNum(mission_number); const WORD reward_code = reward_manager->GetRewardCode(true); ASSERT(0xFFFF != reward_code); if (0xFFFF != reward_code) { MSG_CG_TRIGGER_REWARD_WINDOW_CMD cmsg; cmsg.m_RewardCode = reward_code; player->SendPacket(&cmsg, sizeof(cmsg)); } mission_manager->SetMissionState(mission_number, MISSION_REWARD); mission_manager->SetMissionPoint(mission_number, 1); } FLOWCONTROL_END; } } bool OneDaysGuildMission::_IsGuildMissionEnd() { // ÀÏÀÏ ±æµå¹Ì¼Ç Á¦ÇÑ ½Ã°£ÀÌ ´Ù µÇ¾ú´ÂÁö üũ if(mission_limit_timer_.IsExpiredManual(false)) { return true; } return false; } void OneDaysGuildMission::_SentToAllPlayerInfo(BYTE infoflag, CHARGUID user_guid) { // Ç÷¹À̾î Á¤º¸¸¦ º¸³»ÀÚ... ÀÌÅ»ÀÚ ¶Ç´Â ³»¿ë º¯°æÀÌ ÀÖÀ» °æ¿ì MSG_CG_ONEDAYSGUILDMISSION_PLAYER_INFO_BRD brd_msg; switch (infoflag) { case 1: { // ÀÔÀåÇÑ À¯ÀúÀÇ Á¤º¸ Àü´Þ brd_msg.infoflag = infoflag; brd_msg.enter_player_guid = user_guid; } default: { // ¿©±â¿¡ µé¾î¿À¸é ÇÒ°Ô ¾øÀ½... return; } break; } _SendPacketToAllEx(&brd_msg, sizeof(brd_msg), user_guid); } void OneDaysGuildMission::_SendTimeSync() { MSG_CG_ONEDAYSGUILDMISSION_TIME_STATE_INFO_BRD brd_msg; brd_msg.event_state_ = guild_mission_state_; brd_msg.remain_time_ = mission_limit_timer_.GetRemainedTime(); GameInstanceDungeon* dungeon = GetInstanceDungeon(); dungeon->SendPacketToAll(&brd_msg, sizeof(brd_msg)); } void OneDaysGuildMission::_SendTimeSyncForPlayer(Player* player) { MSG_CG_ONEDAYSGUILDMISSION_TIME_STATE_INFO_BRD brd_msg; brd_msg.event_state_ = guild_mission_state_; brd_msg.remain_time_ = mission_limit_timer_.GetRemainedTime(); player->SendPacket(&brd_msg, sizeof(brd_msg)); } bool OneDaysGuildMission::_ItemDelete(Player* player) { // ¾ÆÀÌÅÛ »èÁ¦ ChaosZoneInfoParser* chaoszone_parser = ChaosZoneInfoParser::Instance(); MAPCODE mapcode = chaoszone_parser->GetOneDaysGuildmissionMapCode(); const ChaosZoneInfo* mission_info = chaoszone_parser->FindData(mapcode); if (mission_info == NULL) { return false; } MSG_CG_ITEM_LOSE_ACK item_msg; POSTYPE item_count = 1; //1°³ °íÁ¤ (½ºÅ©¸³Æ®¿¡µµ ¼ö·®Á¤º¸´Â Æ÷ÇԵǾîÀÖÁö ¾Ê´Ù) WORD item_code = mission_info->require_item[0]; SCItemSlot deleted_item_slot; //ÀÔÀ徯ÀÌÅÛÀÌ ÇÊ¿äÇÑ ¹Ì¼ÇÀΰ¡ if (chaoszone_parser->IsMissionOfRequireItem(mission_info->map_code, eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION) == false) { return false; } if (false == chaoszone_parser->IsMissionItem(mission_info->map_code, eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION, item_code)) { return false; } //3. Ç÷¹À̾îÀÇ ÇØ´ç¾ÆÀÌÅÛ ¼ÒÁö¿©ºÎ °Ë»ç INT having_item_num = player->GetItemManager()->ExistItem(SI_INVENTORY, item_code, item_count); if (having_item_num < item_count) { return false; } // ¾ÆÀÌÅÛÀ» °¡Áö°í ÀÖ´ÂÁö¸¸ ÀÔÀå½Ã üũÇÏ°í °ÔÀÓ ÁøÇàÀÌ µÇ´Â ½ÃÁ¡¿¡¼­ ¼Ò¸ð ½ÃŲ´Ù. //4. ¾ÆÀÌÅÛ ¼Ò¸ð½Ã۰í ACK if ( RC::RC_ITEM_SUCCESS != player->GetItemManager()->DeleteAllKindOfItem( \ 1, &item_code, &item_count, &(item_msg.m_ItemInfo), &deleted_item_slot ) ) { return false; } //RC_ITEM_SUCCESS player->SendPacket(&item_msg, sizeof(item_msg)); GAMELOG->LogItem(ITEM_USE, player, &deleted_item_slot, 0, item_count); // ½ºÅÙ¹ÙÀÌ À¯Àú ¸ñ·Ï¿¡ Ãß°¡ InsertStandByMember(player->GetCharGuid()); return true; } void OneDaysGuildMission::_SendPacketToAll(MSG_BASE_FORWARD* msg, WORD msg_size) { // ¸ðµç Ç÷¹À̾°Ô ÆÐŶº¸³»±â GameInstanceDungeon* dungeon = GetInstanceDungeon(); dungeon->SendPacketToAll(msg, msg_size); } void OneDaysGuildMission::_SendPacketToAllEx(MSG_BASE_FORWARD* msg, WORD msg_size, CHARGUID charguid) { PLAYER_HASH::const_iterator const_itr = player_hash_.begin(); for(; const_itr != player_hash_.end(); ++const_itr) { Player* const player = const_itr->second; if (player == NULL || player->IsDeleted()) { continue; } if(player->GetCharGuid() != charguid) { player->SendPacket(msg, msg_size); } } } RC::eSTATUS_RESULT OneDaysGuildMission::ResurrectionAtSafezone( Player *player ) { //¹«Àû »óÅÂ,...? OnMoveToSafezone(player); if (player->IsDead()) { player->OnResurrection( 0, 1.f, 1.f ); } return RC::RC_STATUS_SUCCESS; } RC::eSTATUS_RESULT OneDaysGuildMission::OnMoveToSafezone(Player* const player) { GameField* const field = player->GetField(); if (field == NULL) { return RC::RC_STATUS_FIELD_IS_NULL; } const sMAPINFO* const map_info = \ MapInfoParser::Instance()->FindMapInfo(this->GetInstanceDungeon()->GetMapCode()); if (map_info == NULL) { return RC::RC_STATUS_MAPINFO_IS_NULL; } DWORD area_id = map_info->wStartAreaID; WzVector dest_pos; if (field->GetAreaRandomStartingVector(area_id, dest_pos) == false) { return RC::RC_STATUS_IS_NOT_SAFEZONE; } // ½ÃÀÛÀ§Ä¡·Î ÅÚ·¹Æ÷Æ® ½ÃŲ´Ù. if(field->TeleportObject( player, &dest_pos, TRUE ) == false) { return RC::RC_STATUS_TELEPORT_FAIL; } return RC::RC_STATUS_SUCCESS; } Player* OneDaysGuildMission::_FindPlayer(const DWORD char_guid) { PLAYER_HASH::iterator itr = player_hash_.find(char_guid); if (itr == player_hash_.end()) { return NULL; } return itr->second; } #endif //(_NA_008543_20151027_ONE_DAYS_GUILD_MISSION)