#include "SunClientPrecompiledHeader.h" #include "uiareaconquestman.h" #include "interfacemanager.h" #include "Achievement.h" #include "AchievementSearch.h" #include "GlobalFunc.h" #include "uiAreaConquestDialog/uiAreaConquestDialog.h" #include "uiAreaConquestCompliment/uiAreaConquestCompliment.h" #include "ItemManager.h" #include "Hero.h" #include "Item.h" #ifdef _NA_003027_20111013_HONOR_SYSTEM #include "HonorSystem/HonorSystem.h" #endif //_NA_003027_20111013_HONOR_SYSTEM #include "ChatMsg.h" const DWORD IM_AREACONQUEST_MANAGER::AREACONQUEST_DIALOG = StrToWzID("0921"); const DWORD IM_AREACONQUEST_MANAGER::AREACONQUEST_COMPLIMENT = StrToWzID("0922"); const char c_strDlgFname_AreaConquest[] = ("Data\\Interface\\92_1_AC.iwz"); uiAreaConquestMan::uiAreaConquestMan(InterfaceManager *pUIMan): uiBaseMan(pUIMan) { ui_ac_dialog_ = NULL; ui_ac_notice_ = NULL; achievement_ = NULL; } //------------------------------------------------------------------------------ /** */ void uiAreaConquestMan::OnInitialize() { ui_ac_dialog_ = CreateUIDialog( IM_AREACONQUEST_MANAGER::AREACONQUEST_DIALOG, c_strDlgFname_AreaConquest, this, TRUE); ui_ac_notice_ = CreateUIDialog( IM_AREACONQUEST_MANAGER::AREACONQUEST_COMPLIMENT, "Data\\Interface\\92_2_result.iwz", this, TRUE); achievement_ = new Achievement; #ifdef _NA_006541_RENEWER_ACDIALOG Load_Ac_Data(); std::sort(ac_data_list_.begin(),ac_data_list_.end(),_stAcTreelist::list_compare_lower); //Àڽĵ鿡 ´ëÇÑ sortÃß°¡. for (int i = 0 ; i < (int)ac_data_list_.size() ; ++i) { ac_data_list_[i]->sort(); } #endif } void uiAreaConquestMan::InitPKBooleans() { m_vPKBool.clear(); for (int index = kPacketPending_Base; index < kPacketPending_Max; ++index) { uicPacketControl packet_control; m_vPKBool.push_back(packet_control); } } void uiAreaConquestMan::OnRelease() { for( size_t i=0;i!=ac_data_list_.size();++i) { ac_data_list_[i]->Release(); delete ac_data_list_[i]; } ac_data_list_.clear(); SAFE_DELETE(achievement_); } void uiAreaConquestMan::Update() { if (ui_ac_notice_ != NULL) { if ((ui_ac_notice_->IsVisible() == FALSE) && (ui_ac_notice_->IsHaveCompliment() == true)) { ui_ac_notice_->ShowACCompliment(0); } } } bool uiAreaConquestMan::IsCompleteACItem(SLOTCODE item_code) { return true; } void uiAreaConquestMan::DeleteComplimentList() { if (ui_ac_notice_ != NULL) { ui_ac_notice_->DeleteList(); } } bool uiAreaConquestMan::CanPickACItem(Item* item_object, bool is_show_notice) { if (item_object == NULL) { return false; } const BASE_ITEMINFO* item_info = item_object->GetItemSlot().GetItemInfo(); if (item_info != NULL && item_info->m_wACCode != 0 && item_info->m_wType == eITEMTYPE_AC && g_pHero != NULL && g_pHero->CanUseACItem(item_info) == false) { // ÇØ´ç ¾ÆÀÌÅÛÀº AC¾ÆÀÌÅÛÀ̸ç, ¼öÁýÀÌ ¿Ï·áµÇ¾î ´õÀÌ»ó »ç¿ëÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛ // ÇØ´ç ¾ÆÀÌÅÛÀº ¾È³»¸Þ½ÃÁö¸¦ Ãâ·ÂÇϸç ÁÝÁö ¾Êµµ·Ï ÇÑ´Ù. if (is_show_notice == true) { TCHAR message[INTERFACE_STRING_LENGTH] = {0, }; // 5664 ÇØ´ç AC¾ÆÀÌÅÛÀº ¸ðµÎ ¼öÁýÇÏ¿© ´õ ÀÌ»ó ½ÀµæÇÒ ¼ö ¾ø½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5664, message); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, message); // µå¶øµÇ´Â ¾Ö´Ï¸ÞÀÌ¼Ç Ãâ·Â item_object->InitState(STATE::ITEM_DROP_STATE, g_CurTime); } return false; } //ÀϹÝÀÌÀÌÅÛ ¹× AC¾ÆÀÌÅÛ¼öÁýÁßÀ̸é ÁÖÀ» ¼ö ÀÖ´Ù. return true; } void uiAreaConquestMan::NetworkProc(MSG_BASE* recv_msg) { if (recv_msg->m_byCategory != CG_AREACONQUEST) { return; } switch (recv_msg->m_byProtocol) { case CG_AREACONQUEST_STREAM_CMD: { RECV_CG_AREACONQUEST_STREAM_CMD(recv_msg); } break; case CG_AREACONQUEST_VALUE_CHANGE_CMD: { RECV_CG_AREACONQUEST_VALUE_CHANGE_CMD(recv_msg); } break; case CG_AREACONQUEST_REWARD_ACK: { RECV_CG_AREACONQUEST_REWARD_ACK(recv_msg); } break; case CG_AREACONQUEST_REWARD_NAK: { RECV_CG_AREACONQUEST_REWARD_NAK(recv_msg); } break; } } void uiAreaConquestMan::RECV_CG_AREACONQUEST_STREAM_CMD(MSG_BASE* recv_msg) { MSG_CG_AREACONQUEST_STREAM_CMD* recv_packet = static_cast(recv_msg); if (achievement_ != NULL) { achievement_->Init(NULL); achievement_->Serialize(recv_packet->achievement_info_, ACHIEVEMENT_SAVE); } if (ui_ac_dialog_ != NULL) { ui_ac_dialog_->InitACDialog(); } } void uiAreaConquestMan::RECV_CG_AREACONQUEST_VALUE_CHANGE_CMD(MSG_BASE* recv_msg) { if (achievement_ != NULL) { MSG_CG_AREACONQUEST_VALUE_CHANGE_CMD* recv_packet = static_cast(recv_msg); achievement_->SetAchievementValue(recv_packet->location_code, recv_packet->index_number_, recv_packet->object_index_, recv_packet->object_value_, ACHIEVEMENT_VALUE_SET); if (achievement_->IsAccomplishment(recv_packet->location_code, recv_packet->index_number_)) { ui_ac_notice_->ShowACCompliment(recv_packet->index_number_); UpdateCanGetACItem(recv_packet->index_number_); if (ui_ac_dialog_ != NULL) { ui_ac_dialog_->UpdateValue(); } } AchievementVaulePrint(recv_packet->index_number_,recv_packet->location_code,recv_packet->object_index_); if (ui_ac_dialog_ != NULL) { ui_ac_dialog_->OnUpdateACInfo(); } } } void uiAreaConquestMan::SEND_CG_AREACONQUEST_REWARD_SYN() { if ((ui_ac_dialog_ == NULL) || (CheckPacketPending_Reward() == false)) { return; } MSG_CG_AREACONQUEST_REWARD_SYN send_packet; send_packet.location_code_ = ui_ac_dialog_->GetCurrentAreaCode(); send_packet.index_number_ = ui_ac_dialog_->GetPendingRewardACIndex(); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send_packet, sizeof(send_packet)); SetPKBool(kPacketPending_Reward, TIMEOUT_PACKET_PENDING); } void uiAreaConquestMan::RECV_CG_AREACONQUEST_REWARD_ACK(MSG_BASE* recv_msg) { UnsetPKBool(kPacketPending_Reward); if (achievement_ == NULL) { return; } MSG_CG_AREACONQUEST_REWARD_ACK* recv_packet = static_cast(recv_msg); achievement_->RewardAchievement(recv_packet->index_, recv_packet->location_code_, true); if (recv_packet->m_accomplishment_ratio > 0) { achievement_->AddAccomplishmentRation(recv_packet->location_code_, recv_packet->m_accomplishment_ratio); } else { if (g_pHero) { ItemManager::Instance()->InsertInventoryTotalInfo( REWARD, recv_packet->m_ItemInfo ); g_InterfaceManager.ShowGetMoneyMessage(recv_packet->m_Money); g_pHero->SetMoney(recv_packet->m_Money); g_pHero->SetExp(recv_packet->m_i64Exp); } } if (ui_ac_dialog_ != NULL) { ui_ac_dialog_->OnUpdateACInfo(); } #ifdef _NA_003027_20111013_HONOR_SYSTEM if (recv_packet->honor_title != 0) { HonorSystem::HonorSystemFunction::OnRewardTitle(recv_packet->honor_title); } #endif //_NA_003027_20111013_HONOR_SYSTEM } void uiAreaConquestMan::RECV_CG_AREACONQUEST_REWARD_NAK(MSG_BASE* recv_msg) { UnsetPKBool(kPacketPending_Reward); MSG_CG_AREACONQUEST_REWARD_NAK* recv_packet = static_cast(recv_msg); TCHAR error_message[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetStringACError(recv_packet->m_byErrorCode, error_message, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, error_message, INTERFACE_STRING_LENGTH); } void uiAreaConquestMan::UpdateCanGetACItem(WORD index_number) { // Çʵ忡 ¶³¾îÁø AC¾ÆÀÌÅÛµéÀÇ *Ç¥½Ã¸¦ ¾ø¾Ú Achievement_ParserInfo* ac_parser_info = AchievementParser::Instance()->GetAchievement_ParserInfo(index_number); for (int i=0; iobejcts_[i].object_code_ == 0) { break; } else { ItemManager::Instance()->UpdateCanGetACItem(ac_parser_info->obejcts_[i].object_code_); } } } void uiAreaConquestMan::AchievementVaulePrint(WORD index_number_,WORD location_code,BYTE object_index_) { AchievementPart* achievement_part = achievement_->GetAchievementPart(location_code); AchievementInfo* achievement_info = NULL; if (achievement_part) { achievement_info = achievement_part->GetAchievement(index_number_); } if(achievement_info) { TCHAR szText[INTERFACE_STRING_LENGTH]; int current_value = 0; int achievement_value = 0; AchievementObjectInfo ac_object_info; WORD ObjType = achievement_info->GetObjectType(); //ACHIEVEMENT_OBJECT_ITEMŸÀÔ ÀÇ °æ¿ì¿¡¸¸ ó¸® Çϵµ·ÏÇÔ if(ObjType != ACHIEVEMENT_OBJECT_ITEM) return; for (BYTE index = 0; index < MAX_ACHIEVEMENT_OBJECT; ++index) { ac_object_info = achievement_info->GetObjectInfo(index); current_value += ac_object_info.value_; achievement_value += ac_object_info.Achievement_; } TCHAR isNameItem[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString(achievement_info->GetStringCode(), isNameItem); g_InterfaceManager.GetInterfaceStringFormat(szText,INTERFACE_STRING_LENGTH, 5094, isNameItem); sprintf(szText,"%s - (%d/%d)",szText,current_value,achievement_value); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,szText, CHAT_TYPE_SYSTEM); } } #ifdef _NA_006541_RENEWER_ACDIALOG void uiAreaConquestMan::Load_Ac_Data() { ACHIEVEMENTINFO_ITERATOR iter = AchievementParser::Instance()->Begin(); ACHIEVEMENTINFO_ITERATOR iterEnd = AchievementParser::Instance()->End(); for ( ; iter != iterEnd ; ++ iter) { make_ac_tree((*iter)); } } void uiAreaConquestMan::make_ac_tree(Achievement_ParserInfo* info) { // ÀÌ¹Ì ÇØ´ç Ä«Å×°í¸®°¡ ¸¸µé¾îÁ® ÀÖ´Â °æ¿ì ã¾Æ¼­ Ãß°¡ for (int i = 0 ; i < (int)ac_data_list_.size() ; ++i) { if(info->upper_group_index_ == ac_data_list_[i]->index) { AddSubItem(info, ac_data_list_[i]); return; } } // »õ·Î¿î Ä«Å×°í¸®¸¦ ¸¸µë _stAcTreelist* Category = new _stAcTreelist(); Category->perentidx = -1; Category->iStringCode = info->upper_group_string_; Category->index = info->upper_group_index_; Category->type = _stAcTreelist::eType_Main; Category->nation_code_ = info->location_code_; Category->index_to_ac_ = info->index_; ac_data_list_.push_back(Category); // Ä«Å×°í¸®¿¡ Ãß°¡ AddSubItem(info,Category); } void uiAreaConquestMan::AddSubItem( Achievement_ParserInfo* info,_stAcTreelist* perent ) { _stAcTreelist* Category = NULL; bool isFine = false; //2´Ü°è °è»ê, //2´Ü°è¸¸ ÀÖÀ¸¸é µÇ³ª Á¤¸» ·¹¾Ë ¸®¾ó? for (int i = 0 ; i < (int)perent->childTree.size() ; ++i) { //ÇØ´ç ¾ÆÀÌÅÛÀÇ ÇÏÀ§¿¡ µé¾î°¡¾ßµÊ. if(info->lower_group_index_ == perent->childTree[i]->index) { Category = perent->childTree[i]; isFine = true; break; } } if(isFine == false) { Category = new _stAcTreelist(); Category->perentidx = -1; Category->iStringCode = info->lower_group_string_; Category->index = info->lower_group_index_; Category->type = _stAcTreelist::eType_Sun; Category->nation_code_ = info->location_code_; perent->AddChild(Category); } } #endif