#include "SunClientPrecompiledHeader.h" #ifdef _NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL #include "GuildSystem/uiGuildInstitution.h" #include "GuildSystem/uiGuildInfo.h" #include "GuildSystem/GuildSystemFunction.h" #include "GuildSystem/GuildSystemData.h" #include "InterfaceManager.h" #include "GlobalFunc.h" #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #include "GuildSystem/GuildSystemData.h" #include "GuildSystem/GuildSystemPacketFunction.h" #include "GuildFacilityImageParser.h" #include "Mouse.h" #include "uiToolTipMan/uiToolTipMan.h" #include "GuildFacilityInfoParser.h" #include "Hero.h" #include "SCSlotContainer.h" #include "OptionListParser.h" #include "ItemInfoParser.h" #include "SkillInfoParser.h" #include "SkillTextInfoParser.h" #include "StateInfoParser.h" #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION const DWORD uiGuildInstitution::kDialog_ID = StrToWzID("7343"); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION WzID uiGuildInstitution::wz_id_[kControl_Size] = { StrToWzID("C000"), StrToWzID("C001"), StrToWzID("C003"), StrToWzID("C004"), StrToWzID("C002"), StrToWzID("B001"), StrToWzID("B002"), StrToWzID("B005"), StrToWzID("B000"), StrToWzID("B004"), StrToWzID("B007"), StrToWzID("I000"), StrToWzID("I001"), StrToWzID("I002"), StrToWzID("I003"), StrToWzID("I004"), StrToWzID("I005"), StrToWzID("S000"), StrToWzID("L000"), StrToWzID("L004"), StrToWzID("L005"), StrToWzID("L001"), StrToWzID("L002"), StrToWzID("L003"), StrToWzID("P012"), StrToWzID("P015"), StrToWzID("P016"), StrToWzID("V000"), }; #else const DWORD kInstitutionNumber = 5; const DWORD kInstitutionDescriptionCode[kInstitutionNumber] = { 7324, 7325, 7326, 7327, 7328}; #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION const int kImageWidth = 107; const int kImageHeight = 60; uiGuildInstitution::uiGuildInstitution( InterfaceManager* ui_manager ) { institution_image_handle() = INVALID_HANDLE_VALUE; #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION tooltip_manager_ptr_ = NULL; mouse_over_pos_ = kControl_Size; #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } uiGuildInstitution::~uiGuildInstitution() { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION if (institution_image_handle_ != INVALID_HANDLE_VALUE) { g_pSunRenderer->x_pManagerTexture->DestroyTexture(institution_image_handle_); institution_image_handle_ = INVALID_HANDLE_VALUE; } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } void uiGuildInstitution::Init( CDrawBase* draw_base ) { uiBase::Init(draw_base); RegisterControlPosition(StrToWzID("C000"), kControl_CheckBT_C000); RegisterControlPosition(StrToWzID("C001"), kControl_CheckBT_C001); RegisterControlPosition(StrToWzID("C002"), kControl_CheckBT_C002); RegisterControlPosition(StrToWzID("C003"), kControl_CheckBT_C003); RegisterControlPosition(StrToWzID("C004"), kControl_CheckBT_C004); #ifdef _NA_008334_20150608_SONNENSCHEIN RegisterControlPosition(StrToWzID("C005"), kControl_CheckBT_C005); #endif //_NA_008334_20150608_SONNENSCHEIN RegisterControlPosition(StrToWzID("B001"), kControl_Button_B001); RegisterControlPosition(StrToWzID("B000"), kControl_Button_B000); RegisterControlPosition(StrToWzID("B002"), kControl_Button_B002); RegisterControlPosition(StrToWzID("B004"), kControl_Button_B004); RegisterControlPosition(StrToWzID("B005"), kControl_Button_B005); RegisterControlPosition(StrToWzID("B007"), kControl_Button_B007); RegisterControlPosition(StrToWzID("S000"), kControl_Text_S000); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #else RegisterControlPosition(StrToWzID("S002"), kControl_Text_S002); RegisterControlPosition(StrToWzID("S003"), kControl_Text_S003); RegisterControlPosition(StrToWzID("S004"), kControl_Text_S004); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION RegisterControlPosition(StrToWzID("L001"), kControl_List_L001); RegisterControlPosition(StrToWzID("L002"), kControl_List_L002); RegisterControlPosition(StrToWzID("L003"), kControl_List_L003); RegisterControlPosition(StrToWzID("V000"), kControl_VScroll_V000); RegisterControlPosition(StrToWzID("P012"), kControl_Picture_P012); RegisterControlPosition(StrToWzID("P015"), kControl_Picture_P015); RegisterControlPosition(StrToWzID("P016"), kControl_Picture_P016); RegisterControlPosition(StrToWzID("I000"), kControl_TextImage_I000); RegisterControlPosition(StrToWzID("I001"), kControl_TextImage_I001); RegisterControlPosition(StrToWzID("I002"), kControl_TextImage_I002); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION RegisterControlPosition(StrToWzID("I003"), kControl_TextImage_I003); RegisterControlPosition(StrToWzID("I004"), kControl_TextImage_I004); RegisterControlPosition(StrToWzID("I005"), kControl_TextImage_I005); RegisterControlPosition(StrToWzID("L000"), kControl_List_L000); RegisterControlPosition(StrToWzID("L004"), kControl_List_L004); RegisterControlPosition(StrToWzID("L005"), kControl_List_L005); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION HASH_TABLE_GUILD_FACILITY_IMAGE_INFO* hash_table = GuildFacilityImageParser::Instance()->GetHashTable(); guild_facility_max_size_ = hash_table->size(); int max_range = guild_facility_max_size_ - kListNumber; #else int max_range = (kInstitutionNumber - kListNumber); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION max_range = max(max_range, 0); scroll_control->SetScrollRangeWZ(0, max_range); scroll_control->SetScrollPosWZ(0); scroll_control->SetChangeSizeThumb(33); } institution_image_handle() = g_pSunRenderer->x_pManagerTexture->LoadTexture( "Data\\Interface\\all_split01.tga", TLS_ORIGINAL_SIZE | TLS_NO_MIPMAP | TLS_NO_MULTITHREAD); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION tooltip_manager_ptr_ = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); assert(tooltip_manager_ptr_); mouse_over_pos_ = kControl_Size; for (DWORD index = 0; index < kListNumber; ++index) { CCtrlListWZ* list_control_ptr = static_cast(GetControlWZ_byPosition(kControl_List_L000 + index)); if (list_control_ptr) { list_control_ptr->SetSellHeight(13); list_control_ptr->SetColorSelBar(RGBA(150, 10, 10, 125)); list_control_ptr->SetDiscardMessage(true); } list_control_ptr = static_cast(GetControlWZ_byPosition(kControl_List_L001 + index)); if (list_control_ptr) { list_control_ptr->SetSellHeight(13); list_control_ptr->SetColorSelBar(RGBA(150, 10, 10, 125)); list_control_ptr->SetDiscardMessage(true); } } CControlWZ* institution_control = NULL; for (DWORD index = 0; index < kListNumber; ++index) { // ÀϹÝÈ¿°ú institution_control = GetControlWZ_byPosition(kControl_TextImage_I000 + index); if (institution_control != NULL) { // 7138 : ÀϹÝÈ¿°ú institution_control->SetTextID(7138); } // Ư¼öÈ¿°ú institution_control = GetControlWZ_byPosition(kControl_TextImage_I003 + index); if (institution_control != NULL) { // 7140 : Ư¼öÈ¿°ú institution_control->SetTextID(7140); } } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } void uiGuildInstitution::Release() { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION tooltip_manager_ptr_ = NULL; #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } void uiGuildInstitution::MessageProc( SI_MESSAGE* message ) { if (IsLock()) return; if (GetMan() == NULL) return; switch (message->eResultMsg) { case RT_MSG_LBUTTONCLICK: OnLButtonClick(message); break; #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION case RT_MSG_MOUSEOVER: { OnMouseOver(message); } break; #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION case RT_MSG_SB_LINETOP: case RT_MSG_SB_PAGETOP: OnVScrollUp(message); break; case RT_MSG_SB_LINEBOTTOM: case RT_MSG_SB_PAGEBOTTOM: OnVScrollDown(message); break; #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION case RT_MSG_SB_THUMBTRACK: // ½æÀ» µå·¡±× Çϰí ÀÖ´Ù. case RT_MSG_SB_THUMBPOSITION: // ½æÀ» µå·¡±× ÇÑ ÈÄ ¸¶¿ì½º¸¦ ³õ¾Ò´Ù. case RT_MSG_SB_ENDSCROLL: // ½ºÅ©·ÑÀÌ Á¾·á µÇ¾ú´Ù. { UpdateAll(); } break; #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION default: SolarDialog::MessageProc(message); break; } } bool uiGuildInstitution::OnLButtonClick( SI_MESSAGE* message ) { bool result = true; DWORD control_position = GetControlPosition_byID(message->dwCtrlID); switch (control_position) { case kControl_CheckBT_C000: case kControl_CheckBT_C001: case kControl_CheckBT_C002: case kControl_CheckBT_C003: case kControl_CheckBT_C004: #ifdef _NA_008334_20150608_SONNENSCHEIN case kControl_CheckBT_C005: #endif //_NA_008334_20150608_SONNENSCHEIN { uiGuildInfo* ui_guild_info = GET_CAST_DIALOG(uiGuildInfo, uiGuildInfo::kDialog_ID); if (ui_guild_info != NULL) { ui_guild_info->tab_button_controller().OnClickTab( control_position - kControl_CheckBT_C000); } RefreshTab(); } case kControl_Button_B001: case kControl_Button_B000: case kControl_Button_B002: case kControl_Button_B004: case kControl_Button_B005: case kControl_Button_B007: { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION ProcessButtonClick(control_position); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } break; } return true; } #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION void uiGuildInstitution::ProcessButtonClick( const DWORD& control_position ) { int scroll_position = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control == NULL) { return; } scroll_position = scroll_control->GetScrollPosWZ(); CCtrlButtonWZ* institution_control = NULL; for (DWORD index = 0; index < kListNumber; ++index) { if (control_position == (kControl_Button_B001 + index)) { // ¾÷±×·¹ÀÌµå ¹öư BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (info_ptr && GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)info_ptr->index_, facility_info)) { AskFacilityUpgrade(facility_info.facility_code_); } } if (control_position == (kControl_Button_B000 + index)) { // Ȱ¼ºÈ­ ¹öư BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (info_ptr && GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)info_ptr->index_, facility_info)) { AskFacilityActive(facility_info.facility_code_, facility_info.facility_level_); } } } } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION bool uiGuildInstitution::OnVScrollUp( SI_MESSAGE* message ) { CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { int range_min = 0; int range_max = 0; int currenct_position = scroll_control->GetScrollPosWZ(); scroll_control->GetScrollRangeWZ(&range_min, &range_max); --currenct_position; currenct_position = max(currenct_position, 0); currenct_position = min(currenct_position, range_max); scroll_control->SetScrollPosWZ(currenct_position); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION UpdateAll(); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } return true; } bool uiGuildInstitution::OnVScrollDown( SI_MESSAGE* message ) { CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { int range_min = 0; int range_max = 0; int currenct_position = scroll_control->GetScrollPosWZ(); scroll_control->GetScrollRangeWZ(&range_min, &range_max); ++currenct_position; currenct_position = max(currenct_position, 0); currenct_position = min(currenct_position, range_max); scroll_control->SetScrollPosWZ(currenct_position); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION UpdateAll(); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } return true; } void uiGuildInstitution::OnShowWindow( BOOL is_show ) { if (is_show == TRUE) { RefreshTab(); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION mouse_over_pos_ = kControl_Size; UpdateAll(); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } else { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION mouse_over_pos_ = kControl_Size; #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } } void uiGuildInstitution::OnUpdateSolarDialog() { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION UpdateWheelScroll(); UpdateActiveButtonState(); #else UpdateInstitutionInfo(); UpdateButtonState(); UpdateWheelScroll(); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } void uiGuildInstitution::OnRenderSolarDialog() { // ½Ã¼³ À̹ÌÁö Ãâ·Â int scroll_position = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { scroll_position = scroll_control->GetScrollPosWZ(); } CControlWZ* picture_control = NULL; for (DWORD index = 0; index < kListNumber; ++index) { picture_control = GetControlWZ_byPosition(kControl_Picture_P012 + index); if (picture_control != NULL) { RECT control_rect = picture_control->GetSizeRect(); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); if (info_ptr == NULL) continue; g_pSunRenderer->RenderTexture( institution_image_handle(), static_cast(control_rect.left), static_cast(control_rect.top), static_cast(control_rect.right - control_rect.left), static_cast(control_rect.bottom - control_rect.top), static_cast(info_ptr->x_), static_cast(info_ptr->y_), static_cast(info_ptr->width_), static_cast(info_ptr->height_)); #else g_pSunRenderer->RenderTexture( institution_image_handle(), static_cast(control_rect.left), static_cast(control_rect.top), static_cast(control_rect.right - control_rect.left), static_cast(control_rect.bottom - control_rect.top), 0.0f, static_cast(kImageHeight * (scroll_position + index)), static_cast(kImageWidth), static_cast(kImageHeight)); #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } } #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION if (tooltip_manager_ptr_ == NULL) { return; } RenderTooltip(scroll_position); // ÅøÆÁ Ãâ·Â #else // // [GUILD_RENEWAL] ±æµå¸®´º¾ó 2Â÷ - ½Ã¼³ ºñȰ¼º À½¿µÀ̹ÌÁö CControlWZ* image_control = GetControlWZ(StrToWzID("P006")); if (image_control != NULL) { RECT control_rect = image_control->GetSizeRect(); g_InterfaceManager.RenderRect(control_rect, WzColor_RGBA(0, 0, 0, 125)); } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION void uiGuildInstitution::RenderTooltip( const int& scroll_position ) { // ÅøÆÁ °è»êÀ» À§Çؼ­ int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); CControlWZ* control_ptr = NULL; for (DWORD index = 0; index < kListNumber; ++index) { control_ptr = GetControlWZ_byPosition(kControl_Text_S000); if (control_ptr) { RECT control_rect = control_ptr->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { ProcessGuildPointTooltip(); break; } } control_ptr = GetControlWZ_byPosition(kControl_Picture_P012 + index); if (control_ptr != NULL) { RECT control_rect = control_ptr->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { ProcessTooltip(scroll_position + index + 1, TOOLTIP_TYPE_IMAGE); break; } } control_ptr = GetControlWZ_byPosition(kControl_TextImage_I000 + index); if (control_ptr) { RECT control_rect = control_ptr->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { ProcessTooltip(scroll_position + index + 1, TOOLTIP_TYPE_NORMAL_EFFECT); break; } } control_ptr = GetControlWZ_byPosition(kControl_TextImage_I003 + index); if (control_ptr) { RECT control_rect = control_ptr->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { ProcessTooltip(scroll_position + index + 1, TOOLTIP_TYPE_SPECIAL_EFFECT); break; } } control_ptr = GetControlWZ_byPosition(kControl_Button_B001 + index); // ¾÷±×·¹ÀÌµå ¹öư if (control_ptr) { RECT control_rect = control_ptr->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { ProcessTooltip(scroll_position + index + 1, TOOLTIP_TYPE_UPGRADE); break; } } control_ptr = GetControlWZ_byPosition(kControl_Button_B000 + index); // Ȱ¼ºÈ­ ¹öư if (control_ptr) { RECT control_rect = control_ptr->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { ProcessTooltip(scroll_position + index + 1, TOOLTIP_TYPE_ACTIVE); break; } } } } void uiGuildInstitution::UpdateFacilityListInfo() { int scroll_position = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { scroll_position = scroll_control->GetScrollPosWZ(); } // ¸®½ºÆ® ¾÷µ¥ÀÌÆ® for (DWORD index = 0; index < kListNumber; ++index) { TCHAR temp_message[INTERFACE_STRING_LENGTH] = {0, }; CCtrlListWZ* list_control_ptr = static_cast(GetControlWZ_byPosition(kControl_List_L000 + index)); if (list_control_ptr) { list_control_ptr->DeleteItemAll(); for (DWORD i = 0; i < 5; ++i) { BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (info_ptr == NULL) continue; if (!(GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)info_ptr->index_, facility_info))) { continue; } const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo(facility_info.facility_code_, i + 1); if (facility_parser_info == NULL) continue; BASE_OptionList* option_list = OptionListParser::Instance()->GetOptionList(facility_parser_info->passive_option.option_type); if (option_list == NULL) continue; int list_index = list_control_ptr->InsertItemBack(); TCHAR level_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR format_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR option_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR option_result[INTERFACE_STRING_LENGTH] = {0, }; // 7118 : Lv%s : %s g_InterfaceManager.GetInterfaceString(7118, format_string); g_InterfaceManager.GetInterfaceString(option_list->mdwNameCode, option_string); if (facility_parser_info->passive_option.option_value_type == 1) // ¼öÄ¡ Snprintf(option_result, INTERFACE_STRING_LENGTH, "%s %+d", option_string, facility_parser_info->passive_option.option_value); if (facility_parser_info->passive_option.option_value_type == 2 || facility_parser_info->passive_option.option_value_type == 5) // ºñÀ² Snprintf(option_result, INTERFACE_STRING_LENGTH, "%s %+d%%", option_string, facility_parser_info->passive_option.option_value / 10); Snprintf(level_string, INTERFACE_STRING_LENGTH, "%d", facility_parser_info->facility_level); Snprintf(temp_message, INTERFACE_STRING_LENGTH, format_string, level_string, option_result); if (facility_info.facility_level_ == list_index+1) { list_control_ptr->SetItemWZ(list_index, 0, temp_message, StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0, 0, 0, 0), RGBA(255, 255, 0, 255), RGBA(255, 255, 255, 255)); } else { list_control_ptr->SetItemWZ(list_index, 0, temp_message, StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0, 0, 0, 0), RGBA(128, 128, 128, 100), RGBA(255, 255, 255, 255)); } } } list_control_ptr = static_cast(GetControlWZ_byPosition(kControl_List_L001 + index)); if (list_control_ptr) { list_control_ptr->DeleteItemAll(); for (DWORD i = 0; i < 5; ++i) { BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (info_ptr == NULL) continue; if (!(GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)info_ptr->index_, facility_info))) { continue; } const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo(facility_info.facility_code_, i + 1); if (facility_parser_info == NULL) continue; SkillScriptInfo* skill_info_ptr = SkillInfoParser::Instance()->GetSkillInfo(facility_parser_info->active_option.active_skill_code); if (skill_info_ptr == NULL) continue; BASE_ABILITYINFO* ability_info = NULL; ability_info = skill_info_ptr->GetAbilityInfoByIndex(0); if (ability_info == NULL) continue; TCHAR level_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR format_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR option_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR option_result[INTERFACE_STRING_LENGTH] = {0, }; // 7118 : Lv%s : %s g_InterfaceManager.GetInterfaceString(7118, format_string); BASE_SkillTextInfo* skill_text_info = SkillTextInfoParser::Instance()->GetSkillTextInfo(skill_info_ptr->m_dwSkillDesccode); if (skill_text_info == NULL) continue; g_InterfaceManager.GetInterfaceString(skill_text_info->m_dw_DescCode, option_string); switch (ability_info->m_iParam[0]) { case VALUE_TYPE_VALUE: { // ±×³É ¼öÄ¡ Snprintf(option_result, INTERFACE_STRING_LENGTH, "%s %+d", option_string, ability_info->m_iParam[1]); } break; case VALUE_TYPE_PERCENT_PER_CUR: { Snprintf(option_result, INTERFACE_STRING_LENGTH, "%s %+d%%", option_string, (int)(ability_info->m_iParam[1] / 10.0f)); } break; case VALUE_TYPE_PERCENT_PER_MAX: { Snprintf(option_result, INTERFACE_STRING_LENGTH, "%s %+d%%", option_string, (int)(ability_info->m_iParam[1] / 10.0f)); } break; case VALUE_TYPE_RATIO_VALUE: { Snprintf(option_result, INTERFACE_STRING_LENGTH, "%s %+d%%", option_string, (int)(ability_info->m_iParam[1] / 10.0f)); } } Snprintf(level_string, INTERFACE_STRING_LENGTH, "%d", facility_parser_info->facility_level); Snprintf(temp_message, INTERFACE_STRING_LENGTH, format_string, level_string, option_result); int list_index = list_control_ptr->InsertItemBack(); if (facility_info.facility_level_ == list_index+1 && facility_info.facility_active_ == true) { list_control_ptr->SetItemWZ(list_index, 0, temp_message, StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0, 0, 0, 0), RGBA(255, 255, 0, 255), RGBA(255, 255, 255, 255)); } else { list_control_ptr->SetItemWZ(list_index, 0, temp_message, StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0, 0, 0, 0), RGBA(128, 128, 128, 100), RGBA(255, 255, 255, 255)); } } } } } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION void uiGuildInstitution::UpdateInstitutionInfo() { TCHAR info_string[INTERFACE_STRING_LENGTH] = {'\0', }; // ÇöÀç ±æµå Æ÷ÀÎÆ® CCtrlStaticWZ* guild_point = static_cast(GetControlWZ_byPosition(kControl_Text_S000)); if (guild_point != NULL) { TCHAR guild_point_value[INTERFACE_STRING_LENGTH] = {'\0', }; _itot(GuildSystem::GetGuildSystemData().GetGuildInfo().m_GuildGP, guild_point_value, 10); g_InterfaceManager.GetInterfaceStringFormat( info_string, INTERFACE_STRING_LENGTH - 1, 2303, guild_point_value); guild_point->SetTextWZ(info_string); } #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #else int scroll_position = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { scroll_position = scroll_control->GetScrollPosWZ(); } CControlWZ* institution_control = NULL; for (DWORD index = 0; index < kListNumber; ++index) { // ½Ã¼³¸í institution_control = GetControlWZ_byPosition(kControl_TextImage_I000 + index); if (institution_control != NULL) { DWORD string_code = GuildSystem::Function::GetInstitutionNameCode(scroll_position + index); institution_control->SetTextID(string_code); } // ½Ã¼³ ¼³¸í institution_control = GetControlWZ_byPosition(kControl_Text_S002 + index); if (institution_control != NULL) { institution_control->SetTextID(kInstitutionDescriptionCode[scroll_position + index]); institution_control->SetStyle(DT_LEFT | DT_TOP | DT_WORDBREAK); } } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } void uiGuildInstitution::UpdateButtonState() { #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION int scroll_position = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control == NULL) { return; } scroll_position = scroll_control->GetScrollPosWZ(); int guild_point = GuildSystem::GetGuildSystemData().GetGuildInfo().m_GuildGP; // ¾÷±×·¹ÀÌµå ¹öư Ȱ¼ºÈ­ ºñȰ¼ºÈ­ üũ for (DWORD index = 0; index < kListNumber; ++index) { // ¾÷±×·¹ÀÌµå ¹öư CControlWZ* control_ptr = GetControlWZ_byPosition(kControl_Button_B001 + index); if (control_ptr) { BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (info_ptr && GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)info_ptr->index_, facility_info)) { const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo(facility_info.facility_code_, facility_info.facility_level_ + 1); if (facility_parser_info == NULL) { GlobalFunc::EnableControl(control_ptr, false); continue; } if (facility_info.facility_level_ >= kMaxFacilityLevel) { GlobalFunc::EnableControl(control_ptr, false); } else { bool is_possible = false; switch (facility_parser_info->upgrade_type) { case FUI_ONLY_GUILDPOINT: // ±æµåÆ÷ÀÎÆ®·Î¸¸ ¾÷±×·¹À̵å { if (guild_point >= (int)facility_parser_info->upgrade_guild_point) is_possible = true; } break; case FUI_ONLY_ITEM: // ¾ÆÀÌÅÛ¸¸ »ç¿ëÇÔ { is_possible = HaveItem(facility_parser_info->upgrade_item_code); } break; case FUI_GUILDPOINTANDITEM: // ±æµåÆ÷ÀÎÆ®, ¾ÆÀÌÅÛ µÑ´Ù »ç¿ë { bool is_have_item = HaveItem(facility_parser_info->upgrade_item_code); if (guild_point >= (int)facility_parser_info->upgrade_guild_point && is_have_item == true) { is_possible = true; } } break; } GlobalFunc::EnableControl(control_ptr, is_possible); } } else { GlobalFunc::EnableControl(control_ptr, false); } } } #else // [GUILD_RENEWAL] ±æµå¸®´º¾ó 2Â÷ CCtrlButtonWZ* button_control = NULL; for (DWORD position = kControl_Button_B001; position < (kControl_Button_B007 + 1); ++position) { button_control = static_cast(GetControlWZ_byPosition(position)); if (button_control == NULL) { continue; } GlobalFunc::EnableControl(button_control, false); } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION } void uiGuildInstitution::UpdateWheelScroll() { CControlWZ* wheel_rect_control = GetControlWZ(StrToWzID("P006")); if (wheel_rect_control == NULL) { return; } RECT wheel_rect = wheel_rect_control->GetSizeRect(); switch (GetMouseWheelStatus(&wheel_rect)) { case MOUSE_WHEEL_UP: OnVScrollUp(NULL); break; case MOUSE_WHEEL_DOWN: OnVScrollDown(NULL); break; } } void uiGuildInstitution::RefreshTab() { CCtrlButtonCheckWZ* check_button = NULL; for (int position = kControl_CheckBT_C000; position < (kControl_CheckBT_C002 + 1); ++position) { check_button = static_cast(GetControlWZ(GetControlID_byPosition(position))); if (check_button == NULL) { continue; } check_button->SetCheckState((position == kControl_CheckBT_C003) ? (true) : (false)); } } #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION void uiGuildInstitution::ProcessTooltip( const int& facility_order, const FACILITY_TOOLTIP_TYPE& type ) { BASE_GuildFacilityImageInfo* facility_image_info = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(facility_order); if (facility_image_info == NULL) { return; } int facility_name = 0; int facility_explanation = 0; switch (type) { case TOOLTIP_TYPE_NONE: { // no operation return; } break; case TOOLTIP_TYPE_IMAGE: { facility_name = facility_image_info->facility_name_code_; facility_explanation = facility_image_info->facility_explanation_code_; ProcessResultTooltip(facility_name, facility_explanation); } break; case TOOLTIP_TYPE_NORMAL_EFFECT: { // 7138 : ÀϹÝÈ¿°ú facility_name = 7138; // 7139 : ½Ã¼³À» ¾÷±×·¹À̵å ÇÏ¸é ¸ðµç ±æµå¿øÀÌ ÇØ´ç È¿°ú¸¦ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. facility_explanation = 7139; ProcessResultTooltip(facility_name, facility_explanation); } break; case TOOLTIP_TYPE_SPECIAL_EFFECT: { // 7140 : Ư¼öÈ¿°ú facility_name = 7140; // 7141 : ¾÷±×·¹ÀÌµå µÈ ½Ã¼³À» Ȱ¼ºÈ­ ÇÏ¸é ¸ðµç ±æµå¿øÀÌ ÇØ´ç È¿°ú¸¦ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. facility_explanation = 7141; ProcessResultTooltip(facility_name, facility_explanation); } break; case TOOLTIP_TYPE_UPGRADE: { facility_name = facility_image_info->facility_name_code_; facility_explanation = facility_image_info->facility_explanation_code_; ProcessResultTooltip(facility_name, facility_explanation, facility_order, TOOLTIP_TYPE_UPGRADE); } break; case TOOLTIP_TYPE_ACTIVE: { facility_name = facility_image_info->facility_name_code_; facility_explanation = facility_image_info->facility_explanation_code_; ProcessResultTooltip(facility_name, facility_explanation, facility_order, TOOLTIP_TYPE_ACTIVE); } break; } tooltip_manager_ptr_->SetTooltipDialogID(GetDialogKey()); } void uiGuildInstitution::ProcessGuildPointTooltip() { TCHAR result_message[INTERFACE_STRING_LENGTH] = {0, }; // 7127 : ±æµå Æ÷ÀÎÆ®´Â ±æµå°¡ ·¹º§¾÷À» ÇÒ ¶§¸¶´Ù 1Æ÷ÀÎÆ®¾¿ ȹµæÇÒ ¼ö ÀÖ½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(7127, result_message); tooltip_manager_ptr_->InitTooltip(); tooltip_manager_ptr_->RegisterTooltip(result_message, -1, 22, StrToWzID("s210"), WzColor_RGBA(255, 255, 255, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); tooltip_manager_ptr_->AddEmptyLineForTooltip(); tooltip_manager_ptr_->SetTooltipDialogID(GetDialogKey()); } void uiGuildInstitution::ProcessResultTooltip( const int& facility_name_index, const int& facility_explanation_index ) { TCHAR facility_effect_name[INTERFACE_STRING_LENGTH] = {0, }; TCHAR facility_effect_explanation[INTERFACE_STRING_LENGTH] = {0, }; // À̸§ g_InterfaceManager.GetInterfaceString(facility_name_index, facility_effect_name); // ¼³¸í g_InterfaceManager.GetInterfaceString(facility_explanation_index, facility_effect_explanation); tooltip_manager_ptr_->InitTooltip(); // È¿°ú À̸§ tooltip_manager_ptr_->RegisterTooltip(facility_effect_name, -1, 22, StrToWzID("s210"), WzColor_RGBA(217, 117, 0, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); tooltip_manager_ptr_->AddEmptyLineForTooltip(); // È¿°ú ¼³¸í tooltip_manager_ptr_->RegisterTooltip(facility_effect_explanation, -1, 22, StrToWzID("s210"), WzColor_RGBA(255, 255, 255, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); } void uiGuildInstitution::ProcessResultTooltip( const int& facility_name_index, const int& facility_explanation_index, const int& facility_order, const FACILITY_TOOLTIP_TYPE& type ) { TCHAR facility_effect_name[INTERFACE_STRING_LENGTH] = {0, }; TCHAR facility_effect_explanation[INTERFACE_STRING_LENGTH] = {0, }; // À̸§ g_InterfaceManager.GetInterfaceString(facility_name_index, facility_effect_name); // ¼³¸í g_InterfaceManager.GetInterfaceString(facility_explanation_index, facility_effect_explanation); tooltip_manager_ptr_->InitTooltip(); // È¿°ú À̸§ tooltip_manager_ptr_->RegisterTooltip(facility_effect_name, -1, 22, StrToWzID("s210"), WzColor_RGBA(217, 117, 0, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); tooltip_manager_ptr_->AddEmptyLineForTooltip(); // È¿°ú ¼³¸í tooltip_manager_ptr_->RegisterTooltip(facility_effect_explanation, -1, 22, StrToWzID("s210"), WzColor_RGBA(255, 255, 255, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); BASE_GuildFacilityImageInfo* facility_image_info = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(facility_order); if (facility_image_info == NULL) return; GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (!(GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)facility_image_info->index_, facility_info))) return; int current_facility_level = facility_info.facility_level_; tooltip_manager_ptr_->AddEmptyLineForTooltip(); TCHAR format_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR guild_point_value[INTERFACE_STRING_LENGTH] = {0, }; if (type == TOOLTIP_TYPE_UPGRADE) { const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo((FCODE)facility_image_info->index_, (FLEVEL)current_facility_level + 1); if (facility_parser_info == NULL) return; _itot(facility_parser_info->upgrade_guild_point, guild_point_value, 10); TCHAR condition_string[INTERFACE_STRING_LENGTH] = {0, }; // 7119 : ¾÷±×·¹À̵å ÇÊ¿äÁ¶°Ç g_InterfaceManager.GetInterfaceString(7119, condition_string); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), WzColor_RGBA(217, 117, 0, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); int current_guild_point = GuildSystem::GetGuildSystemData().GetGuildInfo().m_GuildGP; switch (facility_parser_info->upgrade_type) { case FUI_ONLY_GUILDPOINT: { // 7120 : ±æµåÆ÷ÀÎÆ® : %s g_InterfaceManager.GetInterfaceString(7120, format_string); Snprintf(condition_string, INTERFACE_STRING_LENGTH, format_string, guild_point_value); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), //WzColor_RGBA(255, 255, 255, 255), current_guild_point >= (int)facility_parser_info->upgrade_guild_point ? WzColor_RGBA(0, 255, 0, 255) : WzColor_RGBA(128, 128, 128, 100), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); } break; case FUI_ONLY_ITEM: { TCHAR item_name[MAX_ITEMNAME_LENGTH] = {0, }; TCHAR num_string[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetItemName(facility_parser_info->upgrade_item_code, item_name); // 7121 : ÇÊ¿ä¾ÆÀÌÅÛ : %s(%s) g_InterfaceManager.GetInterfaceString(7121, format_string); Snprintf(num_string, INTERFACE_STRING_LENGTH, "%d/%d", HaveItemNum(facility_parser_info->upgrade_item_code), facility_parser_info->upgrade_item_num); Snprintf(condition_string, INTERFACE_STRING_LENGTH, format_string, item_name, num_string); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), HaveItemNum(facility_parser_info->upgrade_item_code) >= facility_parser_info->upgrade_item_num ? WzColor_RGBA(0, 255, 0, 255) : WzColor_RGBA(128, 128, 128, 100), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); } break; case FUI_GUILDPOINTANDITEM: { // 7120 : ±æµåÆ÷ÀÎÆ® : %s g_InterfaceManager.GetInterfaceString(7120, format_string); Snprintf(condition_string, INTERFACE_STRING_LENGTH, format_string, guild_point_value); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), current_guild_point >= (int)facility_parser_info->upgrade_guild_point ? WzColor_RGBA(0, 255, 0, 255) : WzColor_RGBA(128, 128, 128, 100), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); TCHAR item_name[MAX_ITEMNAME_LENGTH] = {0, }; TCHAR num_string[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetItemName(facility_parser_info->upgrade_item_code, item_name); // 7121 : ÇÊ¿ä¾ÆÀÌÅÛ : %s(%s) g_InterfaceManager.GetInterfaceString(7121, format_string); Snprintf(num_string, INTERFACE_STRING_LENGTH, "%d/%d", HaveItemNum(facility_parser_info->upgrade_item_code), facility_parser_info->upgrade_item_num); Snprintf(condition_string, INTERFACE_STRING_LENGTH, format_string, item_name, num_string); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), HaveItemNum(facility_parser_info->upgrade_item_code) >= facility_parser_info->upgrade_item_num ? WzColor_RGBA(0, 255, 0, 255) : WzColor_RGBA(128, 128, 128, 100), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); } break; } } else if (type == TOOLTIP_TYPE_ACTIVE) { BASE_GuildFacilityImageInfo* facility_image_info = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(facility_order); if (facility_image_info == NULL) return; GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (!(GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)facility_image_info->index_, facility_info))) return; int current_facility_level = facility_info.facility_level_; if (current_facility_level <= 0) current_facility_level = GetCurrentFacilityActiveLevel(facility_info.facility_code_); const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo((FCODE)facility_image_info->index_, (FLEVEL)current_facility_level); TCHAR condition_string[INTERFACE_STRING_LENGTH] = {0, }; if (facility_parser_info == NULL) return; TCHAR num_string[INTERFACE_STRING_LENGTH] = {0, }; FCODE current_active_level = GetCurrentFacilityActiveLevel((FCODE)facility_parser_info->facility_code); if (current_active_level > 0) { TCHAR format_string[INTERFACE_STRING_LENGTH] = {0, }; // 7126 : ±æµå½Ã¼³ %s·¹º§ÀÌ È°¼ºÈ­ ÁßÀÔ´Ï´Ù. g_InterfaceManager.GetInterfaceString(7126, format_string); Snprintf(num_string, INTERFACE_STRING_LENGTH, "%d", current_active_level); Snprintf(condition_string, INTERFACE_STRING_LENGTH, format_string, num_string); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), WzColor_RGBA(0, 255, 0, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); } else { // 7122 : Ȱ¼ºÈ­ ÇÊ¿äÁ¶°Ç g_InterfaceManager.GetInterfaceString(7122, condition_string); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), WzColor_RGBA(217, 117, 0, 255), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); TCHAR item_name[MAX_ITEMNAME_LENGTH] = {0, }; g_InterfaceManager.GetItemName(facility_parser_info->active_option.active_item_code, item_name); // 7121 : ÇÊ¿ä¾ÆÀÌÅÛ : %s(%s) g_InterfaceManager.GetInterfaceString(7121, format_string); Snprintf(num_string, INTERFACE_STRING_LENGTH, "%d/%d", HaveItemNum(facility_parser_info->active_option.active_item_code), facility_parser_info->active_option.active_item_count); Snprintf(condition_string, INTERFACE_STRING_LENGTH, format_string, item_name, num_string); tooltip_manager_ptr_->RegisterTooltip(condition_string, -1, 22, StrToWzID("s210"), HaveItemNum(facility_parser_info->active_option.active_item_code) >= facility_parser_info->active_option.active_item_count ? WzColor_RGBA(0, 255, 0, 255) : WzColor_RGBA(128, 128, 128, 100), TOOLTIP_BG_WZCOLOR, c_dwTOOLTIP_EXTRA_INFO_DT_LEFT); } } } bool uiGuildInstitution::OnMouseOver( SI_MESSAGE* message ) { switch( message->eResultMsg ) { case RT_MSG_MOUSEOVER: { POSTYPE pos = getCtrlIDToPos( message->dwCtrlID ); if ( pos >= kControl_CheckBT_C000 && pos < kControl_Size ) { mouse_over_pos_ = pos; } else { mouse_over_pos_ = kControl_Size; } } break; } return true; } void uiGuildInstitution::AskFacilityUpgrade(const DWORD& facility_code) { uiSystemMan* ui_system_manager_ptr = GET_DIALOG_MANAGER(uiSystemMan, UIMAN_SYSTEM); if (ui_system_manager_ptr) { TCHAR result_message[INTERFACE_STRING_LENGTH] = {0, }; // 7108 : ÇØ´ç ½Ã¼³À» ¾÷±×·¹À̵å ÇϽðڽÀ´Ï±î? g_InterfaceManager.GetInterfaceString(7108, result_message); ui_system_manager_ptr->Sys_SystemMessage(result_message, NULL, GuildSystem::Function::Callback_GuildFacilityUpgrade, uiSystemMessage::kConfirm_Type, true, 0, 100, 155536, 155537, facility_code ); } } void uiGuildInstitution::AskFacilityActive( const DWORD& facility_code, const DWORD& facility_level ) { const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo((FCODE)facility_code, (FLEVEL)facility_level); if (facility_parser_info == NULL) return; const BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(facility_parser_info->active_option.active_item_code); if (item_info == NULL) return; uiSystemMan* ui_system_manager_ptr = GET_DIALOG_MANAGER(uiSystemMan, UIMAN_SYSTEM); if (ui_system_manager_ptr) { TCHAR result_message[INTERFACE_STRING_LENGTH] = {0, }; TCHAR format_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR item_name[INTERFACE_STRING_LENGTH] = {0, }; // 7112 : ÇØ´ç ½Ã¼³À» Ȱ¼ºÈ­ Çϱâ À§Çؼ­´Â %s ¾ÆÀÌÅÛÀÌ ÇÊ¿äÇÕ´Ï´Ù.\n½Ã¼³ Ȱ¼ºÈ­¸¦ ÁøÇà ÇϽðڽÀ´Ï±î? g_InterfaceManager.GetInterfaceString(7112, format_string); g_InterfaceManager.GetItemName( facility_parser_info->active_option.active_item_code, item_name, INTERFACE_STRING_LENGTH ); Snprintf(result_message, INTERFACE_STRING_LENGTH, format_string, item_name); ui_system_manager_ptr->Sys_SystemMessage(result_message, NULL, GuildSystem::Function::Callback_GuildFacilityActive, uiSystemMessage::kConfirm_Type, true, 0, 100, 155536, 155537, facility_code ); } } bool uiGuildInstitution::HaveItem( const CODETYPE& item_code ) { SCSlotContainer* container_ptr = g_pHero->GetSlotContainer(SI_INVENTORY); POSTYPE start = 0; POSTYPE total = 0; if (container_ptr) { total = container_ptr->GetMaxSlotNum(); } BOOL bVal = FALSE; for (POSTYPE i = start; i < total; ++i) { if ( !container_ptr->IsEmpty(i) ) { SCSlot& slot = container_ptr->GetSlot(i); BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo( slot.GetCode() ); if(item_info) { if(item_info->m_Code == item_code) { return true; } } } } return false; } void uiGuildInstitution::UpdateAll() { UpdateInstitutionInfo(); UpdateButtonState(); UpdateFacilityListInfo(); } DWORD uiGuildInstitution::HaveItemNum( const CODETYPE& item_code ) { DWORD item_num = 0; SCSlotContainer* container_ptr = g_pHero->GetSlotContainer(SI_INVENTORY); POSTYPE start = 0; POSTYPE total = 0; if (container_ptr) { total = container_ptr->GetMaxSlotNum(); } for (POSTYPE i = start; i < total; ++i) { if ( !container_ptr->IsEmpty(i) ) { SCSlot& slot = container_ptr->GetSlot(i); BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo( slot.GetCode() ); if(item_info) { if(item_info->m_Code == item_code) { item_num += slot.GetNum(); } } } } return item_num; } void uiGuildInstitution::UpdateActiveButtonState() { int scroll_position = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control == NULL) { return; } scroll_position = scroll_control->GetScrollPosWZ(); for (DWORD index = 0; index < kListNumber; ++index) { // Ȱ¼ºÈ­ ¹öư CCtrlButtonWZ* control_ptr = static_cast(GetControlWZ_byPosition(kControl_Button_B000 + index)); if (control_ptr) { // 2305 : Ȱ¼ºÈ­ control_ptr->SetTextID(2305); control_ptr->SetDiscardMessage(false); GlobalFunc::EnableControl(control_ptr, true); BASE_GuildFacilityImageInfo* info_ptr = GuildFacilityImageParser::Instance()->GetGuildFacilityImageInfo(scroll_position + index + 1); GuildSystem::GuildSystemData::GuildFacilityInfoForClient facility_info; if (info_ptr && GuildSystem::GetGuildSystemData().get_guild_facility_info((FCODE)info_ptr->index_, facility_info)) { bool zero_level_and_active = false; FLEVEL current_active_level = GetCurrentFacilityActiveLevel((FCODE)info_ptr->index_); if (current_active_level > 0 && facility_info.facility_level_ <= 0) { zero_level_and_active = true; } const FACILITY_INFO* facility_parser_info = NULL; if (zero_level_and_active) { facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo(facility_info.facility_code_, current_active_level); } else { facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo(facility_info.facility_code_, facility_info.facility_level_); } if (facility_parser_info == NULL) { GlobalFunc::EnableControl(control_ptr, false); continue; } SkillScriptInfo* skill_info_ptr = SkillInfoParser::Instance()->GetSkillInfo(facility_parser_info->active_option.active_skill_code); if (skill_info_ptr == NULL) { GlobalFunc::EnableControl(control_ptr, false); continue; } BASE_ABILITYINFO* ability_info = NULL; ability_info = skill_info_ptr->GetAbilityInfoByIndex(0); if (ability_info == NULL) { GlobalFunc::EnableControl(control_ptr, false); continue; } // ÀÏ´Ü ÇöÀç Ȱ¼ºÈ­ ÁßÀÎ »óÅ¿¡ ´ëÇÑ Ã¼Å©·Î ½Ã°£À» ¼ÂÆÃÇÑ´Ù. SKILL_EFFECT* skill_effect_ptr = g_pHero->FindSkillEffect((eCHAR_STATE_TYPE)ability_info->m_wStateID); if (skill_effect_ptr) { GuildSystem::GetGuildSystemData().set_element_guild_facility_active(facility_info.facility_code_, true); TCHAR time_string[INTERFACE_STRING_LENGTH] = {0, }; if(skill_effect_ptr->iRemainTime > 0) { int sec, min, hr; sec = skill_effect_ptr->iRemainTime / 1000; min = sec / 60; sec = sec % 60; hr = min / 60; min = min % 60; Snprintf(time_string, INTERFACE_STRING_LENGTH, "%02d:%02d:%02d", hr, min, sec); control_ptr->SetTextWZ(time_string); } else { Snprintf(time_string, INTERFACE_STRING_LENGTH, "%02d:%02d:%02d", 0, 0, 0); control_ptr->SetTextWZ(time_string); } //GlobalFunc::EnableControl(control_ptr, true); control_ptr->SetDiscardMessage(true); } else if ( facility_info.facility_level_ > 0) { GuildSystem::GetGuildSystemData().set_element_guild_facility_active(facility_info.facility_code_, false); } else { GuildSystem::GetGuildSystemData().set_element_guild_facility_active(facility_info.facility_code_, false); GlobalFunc::EnableControl(control_ptr, false); } } else { GlobalFunc::EnableControl(control_ptr, false); } } } } FLEVEL uiGuildInstitution::GetCurrentFacilityActiveLevel(const FCODE& facility_index) { FLEVEL current_active_level = 0; for (BYTE active_level = 1; active_level <= 5; ++active_level) { const FACILITY_INFO* facility_parser_info = GuildFacilityInfoParser::Instance()->GetGuildFacilityInfo(facility_index, active_level); if (facility_parser_info == NULL) continue; SkillScriptInfo* skill_info_ptr = SkillInfoParser::Instance()->GetSkillInfo(facility_parser_info->active_option.active_skill_code); if (skill_info_ptr == NULL) continue; BASE_ABILITYINFO* ability_info = NULL; ability_info = skill_info_ptr->GetAbilityInfoByIndex(0); if (ability_info == NULL) continue; SKILL_EFFECT* skill_effect_ptr = g_pHero->FindSkillEffect((eCHAR_STATE_TYPE)ability_info->m_wStateID); if (skill_effect_ptr == NULL) continue; if (skill_effect_ptr->dwSkillID == facility_parser_info->active_option.active_skill_code) { current_active_level = active_level; break; } } return current_active_level; } #endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION #endif //_NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL