#include "SunClientPrecompiledHeader.h" #ifdef _NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL #ifdef _NA_008334_20150608_SONNENSCHEIN #include "GuildSystem/uiGuildPvE.h" #include "GuildSystem/uiGuildInfo.h" #include "InterfaceManager.h" #include "MultiVScrollDialog.h" #include "CastDialog.h" #include "ChaosSystem/ChaosSystemPacketFunction.h" #include "ChaosSystem/GuildMissionTreeParser.h" #include "ItemInfoParser.h" #include "ItemManager.h" #include "SCItemSlot.h" #include "ChaosSystem/ChaosSystemData.h" #include "FTextSentence.h" #include "FTextRender.h" #include "ChaosZoneSystem/PacketStruct_ChaosZoneSystem.h" #include "GlobalFunc.h" #include "Map.h" #include "uiToolTipMan/uiToolTipMan.h" #include "Mouse.h" #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION #include "Hero.h" #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION #include "ChaosZoneInfoParser.h" const DWORD uiGuildPvE::kDialog_ID = StrToWzID("7349"); #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION const int refresh_member_list_time = 5; #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION //---------------------------------------------------------------------------- /** */ // ±æµå¿ø Á¤·Ä ÇÔ¼ö template bool sortGuildMemberByTypeHigh(GUILD_MEMBER_INFO & lhw, GUILD_MEMBER_INFO& rhw) { return lhw.*p < rhw.*p; } template bool sortGuildMemberByTypeLow(GUILD_MEMBER_INFO & lhw, GUILD_MEMBER_INFO& rhw) { return lhw.*p > rhw.*p; } //½ºÆ®¸µ StrCmpÀÌ¿ëÇÑ Á¤·Ä bool sortGuildMemberByNameHigh(GUILD_MEMBER_INFO & lhw, GUILD_MEMBER_INFO & rhw) { int returnValue = StrnCmp(lhw.m_tszCharName , rhw.m_tszCharName, MAX_CHARNAME_LENGTH); if( returnValue < 0 ) return true; else return false; } bool sortGuildMemberByNameLow(GUILD_MEMBER_INFO & lhw, GUILD_MEMBER_INFO & rhw) { int returnValue = StrnCmp(lhw.m_tszCharName , rhw.m_tszCharName, MAX_CHARNAME_LENGTH); if( returnValue > 0 ) return true; else return false; } //---------------------------------------------------------------------------- /** */ uiGuildPvE::uiGuildPvE(InterfaceManager* ui_manager) :uiBase(ui_manager) { //set_mission_info_vscroll(NULL); set_member_vscroll(NULL); init_mission_tree_ = false; #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION select_zone_type_ = kChaosZoneTypeNone; onedays_mission_end_time_ = 0; onedays_mission_event_state_ = 0; list_refresh_timer_.On(refresh_member_list_time); #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION } //---------------------------------------------------------------------------- /** */ uiGuildPvE::~uiGuildPvE(void) { } //---------------------------------------------------------------------------- /** */ void uiGuildPvE::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); RegisterControlPosition(StrToWzID("C008"), kControl_CheckBT_C008); RegisterControlPosition(StrToWzID("B000"), kControl_Button_B000); RegisterControlPosition(StrToWzID("B001"), kControl_Button_B001); RegisterControlPosition(StrToWzID("B002"), kControl_Button_B002); RegisterControlPosition(StrToWzID("B004"), kControl_Button_B004); RegisterControlPosition(StrToWzID("B009"), kControl_Button_B009); RegisterControlPosition(StrToWzID("L000"), kControl_List_L000); //RegisterControlPosition(StrToWzID("L001"), kControl_List_L001); RegisterControlPosition(StrToWzID("L002"), kControl_List_L002); RegisterControlPosition(StrToWzID("V000"), kControl_VScroll_V000); //RegisterControlPosition(StrToWzID("V001"), kControl_VScroll_V001); RegisterControlPosition(StrToWzID("V002"), kControl_VScroll_V002); RegisterControlPosition(StrToWzID("S003"), kControl_Static_S003); //set_mission_info_vscroll(new MultiVScrollDialog(GetControlWZ_byPosition(kControl_VScroll_V001), //GetControlWZ_byPosition(kControl_List_L001))); set_member_vscroll(new MultiVScrollDialog(GetControlWZ_byPosition(kControl_VScroll_V002), GetControlWZ_byPosition(kControl_List_L002))); // ¹Ì¼Ç³»¿ë /* CCtrlListWZ* list_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_L001))); if (list_control) { RECT list_rect = list_control->GetSizeRect(); ftext_render_.Init(draw_base, list_rect); ftext_render_.SetMargin(0,0,0,-5); ftext_render_.SetGap(0,0); ftext_render_.convertLineInfo(); }*/ // ¸â¹ö ¸®½ºÆ® CCtrlListWZ* list_control = static_cast(GetControlWZ_byPosition(kControl_List_L002)); if (list_control) { list_control->SetUseReport(true); list_control->SetSellHeight(19); list_control->SetReportUseCnt(3); list_control->SetHideReportRender(TRUE); list_control->SetReportButtonInfo(0, 144, NULL); // ±æµå¿øÀ̸§ list_control->SetReportButtonInfo(1, 46, NULL); // ·¹º§ // 2016.1.22 / [SUNJP-1810] ÀϺ» ÆùÆ®°¡ °ø°£ÀÌ À۾Ƽ­ Å©±â Á¶Àý list_control->SetReportButtonInfo(2, 108, NULL); // Ŭ·¡½º //list_control->SetReportButtonInfo(1, 60, NULL); // ·¹º§ //list_control->SetReportButtonInfo(2, 94, NULL); // Ŭ·¡½º } // Æ®¸® »ý¼º InitMissionTree(); } //---------------------------------------------------------------------------- /** */ void uiGuildPvE::Release() { /* if (mission_info_vscroll()) { delete(mission_info_vscroll()); set_mission_info_vscroll(NULL); }*/ if (member_vscroll()) { delete(member_vscroll()); set_member_vscroll(NULL); } tree_menu().Release(); select_tree_.menu_index = 0; } //---------------------------------------------------------------------------- /** */ void uiGuildPvE::MessageProc(SI_MESSAGE* message) { if (IsLock()) return; if (GetMan() == NULL) return; switch (message->eResultMsg) { case RT_MSG_LBUTTONCLICK: OnLButtonClick(message); break; case RT_MSG_SB_LINETOP: { if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V000) { OnVScrollUp(message); } /* if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V001) { OnVScrollUp_MissionInfo(message); }*/ if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V002 && member_vscroll()) { member_vscroll()->OnVScrollUp(message); } } break; case RT_MSG_SB_LINEBOTTOM: { if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V000) { OnVScrollDown(message); } /* if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V001) { OnVScrollDown_MissionInfo(message); }*/ if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V002 && member_vscroll()) { member_vscroll()->OnVScrollDown(message); } } break; case RT_MSG_SB_THUMBTRACK: //!< ½æÀ» µå·¡±× Çϰí ÀÖ´Ù. case RT_MSG_SB_THUMBPOSITION: //!< ½æÀ» µå·¡±×ÇÑÈÄ ¸¶¿ì½º¸¦ ³õ¾Ò´Ù. case RT_MSG_SB_ENDSCROLL: //!< ½ºÅ©·ÑÀÌ Á¾·á µÇ¾ú´Ù. { if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V000) { OnVScrollThumb(message); } /* if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V001) { OnVScrollThumb_MissionInfo(message); }*/ if (GetControlPosition_byID(message->dwCtrlID) == kControl_VScroll_V002 && member_vscroll()) { member_vscroll()->OnVScrollThumb(message); } } break; default: SolarDialog::MessageProc(message); break; } } //---------------------------------------------------------------------------- /** */ bool uiGuildPvE::OnLButtonClick(SI_MESSAGE* message) { TreeMenuGroup::TreeObject* tree_object = NULL; if (tree_menu().MessageProc(message, OUT tree_object) == true) { SelectIndex(tree_object); } bool result = true; DWORD control_position = GetControlPosition_byID(message->dwCtrlID); switch (control_position) { case kControl_CheckBT_C000: case kControl_CheckBT_C001: case kControl_CheckBT_C003: case kControl_CheckBT_C004: case kControl_CheckBT_C002: case kControl_CheckBT_C008: { 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(); } break; case kControl_Button_B009: { #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION ClickStart(); #else if (g_pMap->IsField() || g_pMap->IsVill()) { ChaosSystem::PacketFunction::SEND_CG_SONNENSCHEIN_CREATE_SYN(); } else { // 6415 ¸¶À»°ú Çʵ忡¼­¸¸ ÀÔÀåÀÌ °¡´É ÇÕ´Ï´Ù. TCHAR string[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(6415, string, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Warning(eOUTPUT_MSG_CHAT, string); } #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION } break; case kControl_Button_B000: case kControl_Button_B001: case kControl_Button_B002: { GuildSystem::GuildSystemData::GuildMemberSortType sort_type = static_cast(control_position - kControl_Button_B000); SortGuildMember(sort_type); UpdateGuildMemberList(); } break; case kControl_Button_B004: { RequestGuildMemberList(); } break; default: { } break; } return result; } //---------------------------------------------------------------------------- /** */ void uiGuildPvE::OnShowWindow(BOOL val) { if (val) { RefreshTab(); if (select_tree_.menu_index == 0) { TreeMenuGroup::TreeObject* tree_object = NULL; tree_object = tree_menu().Find(1,1,0,0); if (tree_object != NULL) { tree_menu().Select(tree_object); SelectIndex(tree_object); } } // ¹Ì¼ÇÂü¿© ¹öư Ȱ¼ºÈ­ CControlWZ* control = GetControlWZ(GetControlID_byPosition(kControl_Button_B009)); if (g_pMap && control) { if (g_pMap->IsField() || g_pMap->IsVill()) { control->EnableWindowWZ(true); } else { control->EnableWindowWZ(false); } } RequestGuildMemberList(); } else { } } //---------------------------------------------------------------------------- /** */ void uiGuildPvE::NetworkProc(MSG_BASE* recv_packet) {/* if(recv_packet->m_byCategory == CG_GUILD){ switch (recv_packet->m_byProtocol) { case CG_GUILD_WAREHOUSE_OPEN_ACK: { / *MSG_CG_GUILD_WAREHOUSE_OPEN_ACK* warehouse_packet = (MSG_CG_GUILD_WAREHOUSE_OPEN_ACK*)recv_packet; ShowInterfaceWithSound(TRUE); FlushUnitDraw(); BitStream bitstream(warehouse_packet->m_BitStreamBuffer, warehouse_packet->m_Size, FALSE); SCItemSlotContainer::Serialize(bitstream, eSLOT_SERIALIZE_CLIENT_SAVE); set_max_tab(warehouse_packet->m_SlotTabNum); set_balance(warehouse_packet->m_WarehouseMoney); set_current_tab(0); ReFreshRenderSlot(); control_flag().insert(kUseStart);* / } break; default: { } break; } }*/ } //---------------------------------------------------------------------------- /** */ void uiGuildPvE::OnUpdateSolarDialog() { VScrollDialog::Update(); /* if (mission_info_vscroll()) { RECT area; if (mission_info_vscroll()->GetScrollArea(area)) { BYTE wheel_msg = uiBase::GetMouseWheelStatus(&area); switch (wheel_msg) { case MOUSE_WHEEL_UP: { OnVScrollUp_MissionInfo(NULL); break; } case MOUSE_WHEEL_DOWN: { OnVScrollDown_MissionInfo(NULL); break; } } } }*/ if (member_vscroll()) { member_vscroll()->Update(); } } void uiGuildPvE::OnRenderSolarDialog() { /* CCtrlListWZ* list_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_L001))); if (list_control) { RECT list_rect = list_control->GetSizeRect(); ftext_render_.SetRect(list_rect); ftext_render_.Render(); }*/ RenderTooltip(); } void uiGuildPvE::Process(DWORD tick_count) { if (wait_timer_.Check() != TIMER_STAT_NONE) { if (wait_timer_.Check() == TIMER_STAT_FINISH) { #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION // ¹Ì¼Ç Á¾·ù switch (select_zone_type_) { case eCHAOSZONE_TYPE_SONNENSCHEIN: { // ±æµåPVE - ¼Ò³Ù»þÀÎ TreeMenuGroup::TreeObject* find_tree = tree_menu().Find(select_tree_.menu_index); if (find_tree) { MAPCODE map_code = static_cast(find_tree->info->user_data); ChaosSystem::PacketFunction::SEND_CG_SONNENSCHEIN_ENTER_CHECK_SYN(GetRequireItem(map_code)); } } break; case eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION: { // ±æµåÀÏÀÏ¹Ì¼Ç TreeMenuGroup::TreeObject* find_tree = tree_menu().Find(select_tree_.menu_index); if (find_tree) { MAPCODE map_code = static_cast(find_tree->info->user_data); ChaosSystem::PacketFunction::SEND_CG_ONEDAYSGUILDMISSION_ENTER_CHECK_SYN(GetRequireItem(map_code)); } } break; default: { ChaosSystem::GetChaosZoneData().set_is_wait(false); if (g_InterfaceManager.IsLockDlg()) { g_InterfaceManager.UnLockDlgs(); } break; } } WaitGague(false); #else TreeMenuGroup::TreeObject* find_tree = tree_menu().Find(select_tree_.menu_index); if (find_tree) { MAPCODE map_code = static_cast(find_tree->info->user_data); const ChaosZoneInfo* find_info = ChaosZoneInfoParser::Instance()->FindData(map_code); if (find_info == NULL) { return; } // ¹Ì¼Ç Á¾·ù switch (find_info->kind_of_room) { case eCHAOSZONE_TYPE_SONNENSCHEIN: { // ±æµåPVE - ¼Ò³Ù»þÀÎ ChaosSystem::PacketFunction::SEND_CG_SONNENSCHEIN_ENTER_CHECK_SYN(GetRequireItem(map_code)); } break; default: // ChaosSystem::GetChaosZoneData().set_is_wait(false); if (g_InterfaceManager.IsLockDlg()) { g_InterfaceManager.UnLockDlgs(); } break; } WaitGague(false); } #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION } else { CastDialog* cast_dialog = static_cast(g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CASTING)); if (cast_dialog) { cast_dialog->SetGage((wait_timer_.SpentTime()/50.0f)); } } } } //========= ½ºÅ©·Ñ¹Ù ó¸® ======================= //------------------------------------------------------------------------------ CCtrlVScrollWZ* uiGuildPvE::vscroll_control() { return GetVScrollControlWZ(GetControlID_byPosition(kControl_VScroll_V000)); } //------------------------------------------------------------------------------ bool uiGuildPvE::GetScrollArea(RECT& area) { if (IsOverControl(GetControlWZ_byPosition(kControl_List_L000)) == true) { area = GetControlWZ_byPosition(kControl_List_L000)->GetSizeRect(); return true; } return false; } //------------------------------------------------------------------------------ bool uiGuildPvE::OnVScrollThumb(SI_MESSAGE* msg) { if (vscroll_control() == NULL) { return false; } if (VScrollDialog::OnVScrollThumb(msg) == true) { GetListControlWZ(GetControlID_byPosition(kControl_List_L000))->SetBeginDrawIndex(vscroll_control()->GetScrollPosWZ()); return true; } return false; } //------------------------------------------------------------------------------ bool uiGuildPvE::OnVScrollUp(SI_MESSAGE* msg) { if (vscroll_control() == NULL) { return false; } if (VScrollDialog::OnVScrollUp(msg) == true) { GetListControlWZ(GetControlID_byPosition(kControl_List_L000))->SetBeginDrawIndex(vscroll_control()->GetScrollPosWZ()); return true; } return false; } //------------------------------------------------------------------------------ bool uiGuildPvE::OnVScrollDown(SI_MESSAGE* msg) { if (vscroll_control() == NULL) { return false; } if (VScrollDialog::OnVScrollDown(msg) == true) { GetListControlWZ(GetControlID_byPosition(kControl_List_L000))->SetBeginDrawIndex(vscroll_control()->GetScrollPosWZ()); return true; } return false; } //------------------------------------------------------------------------------ /* bool uiGuildPvE::OnVScrollThumb_MissionInfo(SI_MESSAGE* msg) { if (mission_info_vscroll() && mission_info_vscroll()->OnVScrollThumb(msg) == true) { CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V001)); if (scroll_control) { ftext_render_.SetBeginLineIndex(scroll_control->GetScrollPosWZ()); } return true; } return false; } //------------------------------------------------------------------------------ bool uiGuildPvE::OnVScrollUp_MissionInfo(SI_MESSAGE* msg) { if (mission_info_vscroll() && mission_info_vscroll()->OnVScrollUp(msg) == true) { CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V001)); if (scroll_control) { ftext_render_.SetBeginLineIndex(scroll_control->GetScrollPosWZ()); } return true; } return false; } //------------------------------------------------------------------------------ bool uiGuildPvE::OnVScrollDown_MissionInfo(SI_MESSAGE* msg) { if (mission_info_vscroll() && mission_info_vscroll()->OnVScrollDown(msg) == true) { CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V001)); if (scroll_control) { ftext_render_.SetBeginLineIndex(scroll_control->GetScrollPosWZ()); } return true; } return false; }*/ //------------------------------------------------------------------------------ void uiGuildPvE::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_C008) ? (true) : (false)); } } //------------------------------------------------------------------------------ /* void uiGuildPvE::UpdateGuildMissionInfo(MAPCODE map_code) { // ¹Ì¼Ç ³»¿ë const GuildMissionInfo* guild_mission_info = GuildMissionTreeParser::Instance()->FindData(map_code); if (guild_mission_info) { // ÀüÀå ¼³¸í ftext_render_.ClearSentence(); FTextParser parser; FTextSentence sentence; //FTextSentence temp_sentence; TCHAR temp_string[INTERFACE_STRING_LENGTH]= " "; //TCHAR str_format[INTERFACE_STRING_LENGTH]={0,}; BOOL result = false; // ºóÁÙ //parser.Parser(temp_string, temp_sentence); if (guild_mission_info->mission_string_code != 0) { // ½ºÆ®¸µ¿¡ ÁٹٲÞÀº # ´ë½Å À¸·Î ³Ö¾îÁÖ¼¼¿ä g_InterfaceManager.GetInterfaceString(guild_mission_info->mission_string_code, temp_string, INTERFACE_STRING_LENGTH); result = parser.Parser(temp_string, sentence); if (result == TRUE) { //ftext_render_.Append(temp_sentence); //ºóÁÙ ftext_render_.Append(sentence); } } ftext_render_.convertLineInfo(); CCtrlListWZ* list_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_L001))); if (list_control) { RECT list_rect = list_control->GetSizeRect(); ftext_render_.SetRect(list_rect); } CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V001)); if (scroll_control) { int scroll_range = ftext_render_.GetMaxLine() - ftext_render_.GetDrawLineInRect(); scroll_control->SetScrollRangeWZ(0,scroll_range); scroll_control->SetScrollPosWZ(0); } } }*/ //------------------------------------------------------------------------------ void uiGuildPvE::RequestGuildMemberList() { member_container_.clear(); #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION disconnect_member_list_.clear(); #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION UpdateGuildMemberList(); #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION // ¹Ì¼Ç Á¾·ù switch (select_zone_type_) { case eCHAOSZONE_TYPE_SONNENSCHEIN: // ±æµåPVE - ¼Ò³Ù»þÀÎ ChaosSystem::PacketFunction::SEND_CG_SONNENSCHEIN_ENTERPLAYER_LIST_SYN(); break; case eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION: // ±æµåÀÏÀÏ¹Ì¼Ç ChaosSystem::PacketFunction::SEND_CG_ONEDAYSGUILDMISSION_ENTERPLAYER_LIST_SYN(); list_refresh_timer_.Off(); list_refresh_timer_.On(refresh_member_list_time); break; default: break; } #else TreeMenuGroup::TreeObject* find_tree = tree_menu().Find(select_tree_.menu_index); if (find_tree) { MAPCODE map_code = static_cast(find_tree->info->user_data); const ChaosZoneInfo* find_info = ChaosZoneInfoParser::Instance()->FindData(map_code); if (find_info == NULL) { return; } // ¹Ì¼Ç Á¾·ù switch (find_info->kind_of_room) { case eCHAOSZONE_TYPE_SONNENSCHEIN: // ±æµåPVE - ¼Ò³Ù»þÀÎ ChaosSystem::PacketFunction::SEND_CG_SONNENSCHEIN_ENTERPLAYER_LIST_SYN(); break; default: break; } } #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION } //------------------------------------------------------------------------------ void uiGuildPvE::SetGuildMemberList(MSG_BASE* recv_message) { if (recv_message == NULL) { return; } if (select_zone_type_ != eCHAOSZONE_TYPE_SONNENSCHEIN) { return; } MSG_CG_SONNENSCHEIN_ENTERPLAYER_LIST_ACK* recv_packet = static_cast(recv_message); member_container_.clear(); for (int i = 0; i < recv_packet->enter_player_count; ++i) { CHARGUID character_guid = recv_packet->enter_player_list[i]; if (character_guid == 0) { break; } GUILD_MEMBER_INFO* member_info = GuildSystem::GetGuildSystemData().GetGuildMemberInfo(character_guid); if (member_info == NULL) { break; } member_container_.push_back(*member_info); } SortGuildMember(GuildSystemData::kSortByName, true); UpdateGuildMemberList(); } //------------------------------------------------------------------------------ void uiGuildPvE::UpdateGuildMemberList() { // ¸â¹ö ¸®½ºÆ® CCtrlListWZ* list_control = static_cast(GetControlWZ_byPosition(kControl_List_L002)); if (list_control == NULL) { return; } list_control->DeleteItemAll(); TCHAR temp_string[INTERFACE_STRING_LENGTH] = {0,}; const DWORD kTextColor[3] = {RGBA(255,255,255,255), RGBA(240,200,120,255), RGBA(128, 128, 128, 255)}; int color_index = 0; int list_index = 0; size_t member_number = member_container_.size(); for (size_t i = 0; i < member_number; ++i) { if (i >= MAX_GUILD_MEMBER_NUM) { break; } GUILD_MEMBER_INFO& member_info = member_container_[i]; color_index = 0; if ((g_pHero != NULL) && (StrnCmp(g_pHero->GetName(), member_info.m_tszCharName, MAX_CHARNAME_LENGTH) == 0)) { color_index = 1; } #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION if (select_zone_type_ == eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION) { for (size_t i = 0; i < disconnect_member_list_.size(); ++i) { if (member_info.m_CharGuid == disconnect_member_list_[i]) { // ƨ±ä»ç¶÷ ¸®½ºÆ®¿¡ ÀÖÀ¸¸é ȸ»ö color_index = 2; } } } #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION list_index = list_control->InsertItemBack(); // ±æµå¿ø À̸§ list_control->SetItemWZ(list_index, 0, member_info.m_tszCharName, StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0,0,0,0), kTextColor[color_index], kTextColor[color_index]); // ·¹º§ Snprintf(temp_string, INTERFACE_STRING_LENGTH-1, "%d", member_info.m_Level); list_control->SetItemWZ(list_index, 1, temp_string, StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0,0,0,0), kTextColor[color_index], kTextColor[color_index]); // Ŭ·¡½º list_control->SetItemWZ(list_index, 2, GlobalFunc::GetClassString(static_cast(member_info.m_byClass)), StrToWzID("st11"), DT_CENTER | DT_VCENTER, RGBA(0,0,0,0), kTextColor[color_index], kTextColor[color_index]); } if (member_vscroll()) { int max_line_count = list_control->GetListRowCnt(); int draw_line_count = list_control->GetDrawRowCount(); int scroll_max_num = max(0, max_line_count - draw_line_count); member_vscroll()->ResizeingVScrollControl(scroll_max_num, 0); } // Âü¿© Àοø CCtrlStaticWZ* static_control = static_cast(GetControlWZ_byPosition(kControl_Static_S003)); if (static_control) { TCHAR string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR temp_string[INTERFACE_STRING_LENGTH] = {0, }; sprintf(temp_string,"%d",member_number); g_InterfaceManager.GetInterfaceStringFormat(string, INTERFACE_STRING_LENGTH, 3537, temp_string); // 3537 %s ¸í static_control->SetTextWZ(string); } } //------------------------------------------------------------------------------ void uiGuildPvE::WaitGague(bool is_show, int second /* = 5 */) { CastDialog* cast_dialog = static_cast(g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CASTING)); if (is_show) { wait_timer_.On(second); wait_second_ = second; if (cast_dialog) { g_InterfaceManager.HideAllWindows(); g_InterfaceManager.ShowGameInterface(TRUE); // 5116 Àá½Ã¸¸ ±â´Ù·Á ÁֽʽÿÀ. int string_code = 5116; TCHAR message[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(string_code, message); cast_dialog->SetText(message); cast_dialog->ShowWindow(TRUE); } } else { wait_timer_.Off(); if (cast_dialog) { cast_dialog->ShowWindow(FALSE); cast_dialog->SetText(""); } } } //------------------------------------------------------------------------------ SLOTCODE uiGuildPvE::GetRequireItem(const MAPCODE map_code) { SLOTCODE item_code = 0; const ChaosZoneInfo* find_info = ChaosZoneInfoParser::Instance()->FindData(map_code); if (find_info) { for (int i = 0; i < MAX_REQUIRE_ITEM; ++i) { if (find_info->require_item[i] != 0) { BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(find_info->require_item[i]); if (item_info) { //¾ÆÀÌÅÛ Ã£±â SCItemSlot* item_slot = ItemManager::Instance()->FindFirstItemSlot(SI_INVENTORY, static_cast(find_info->require_item[i])); if (item_slot && item_slot->GetNum() > 0) { //nop item_code = static_cast(find_info->require_item[i]); break; } } } } } return item_code; } //------------------------------------------------------------------------------ void uiGuildPvE::InitMissionTree() { if (init_mission_tree_ == true) { return; } init_mission_tree_ = true; select_tree_.menu_index = 0; tree_menu().Init(BASE_TreeMenuInfo::kGroupType_SonnenSchein_MissionList, GetListControlWZ(GetControlID_byPosition(kControl_List_L000)), GetVScrollControlWZ(GetControlID_byPosition(kControl_VScroll_V000)), false, NULL); tree_menu().set_menu_height_gab(20); const int limit_depth = 100; const GuildMissionInfo* find_info; TreeMenuInfoParser::Instance()->Remove(BASE_TreeMenuInfo::kGroupType_SonnenSchein_MissionList); for (BYTE LGroupCount = 1; LGroupCount <= limit_depth; ++LGroupCount) { find_info = GuildMissionTreeParser::Instance()->FindData(LGroupCount, 1); if (find_info == NULL) { break; } for (BYTE SGroupCount = 1; SGroupCount <= limit_depth; ++SGroupCount) { find_info = GuildMissionTreeParser::Instance()->FindData(LGroupCount, SGroupCount); if (find_info == NULL) { break; } if (SGroupCount == 1) { MakeGuildPvETree(LGroupCount, 0, 0, find_info->large_group_string, NULL, find_info->font_color, find_info->map_code); } MakeGuildPvETree(LGroupCount, SGroupCount, 1, find_info->sub_group_string, NULL, find_info->font_color, find_info->map_code); } } tree_menu().ApplyTreeGroup(BASE_TreeMenuInfo::kGroupType_SonnenSchein_MissionList); tree_menu().Fill(); } //------------------------------------------------------------------------------ void uiGuildPvE::MakeGuildPvETree(BYTE depth_3, BYTE depth_2, BYTE depth, DWORD string_code, TCHAR* string, const DWORD* font_colors, MAPCODE map_code) { BASE_TreeMenuInfo tree_menu_info; ZeroMemory(&tree_menu_info, sizeof(tree_menu_info)); tree_menu_info.font_id[BASE_TreeMenuInfo::kFontType_Enable] = StrToWzID("st10"); tree_menu_info.font_id[BASE_TreeMenuInfo::kFontType_Disable] = StrToWzID("st10"); tree_menu_info.font_id[BASE_TreeMenuInfo::kFontType_Over] = StrToWzID("st10"); tree_menu_info.font_id[BASE_TreeMenuInfo::kFontType_Select] = StrToWzID("st10"); tree_menu_info.font_color[BASE_TreeMenuInfo::kFontType_Enable] = font_colors[BASE_TreeMenuInfo::kFontType_Enable]; tree_menu_info.font_color[BASE_TreeMenuInfo::kFontType_Disable] = font_colors[BASE_TreeMenuInfo::kFontType_Disable]; tree_menu_info.font_color[BASE_TreeMenuInfo::kFontType_Over] = font_colors[BASE_TreeMenuInfo::kFontType_Over]; tree_menu_info.font_color[BASE_TreeMenuInfo::kFontType_Select] = font_colors[BASE_TreeMenuInfo::kFontType_Select]; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_Enable] = 0; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_Disable] = 10007; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_Collpase] = 10002; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_Unfold] = 10003; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_CheckOn] = 0; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_CheckOff] = 0; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_Cursor] = 10008; tree_menu_info.tree_group = BASE_TreeMenuInfo::kGroupType_SonnenSchein_MissionList; tree_menu_info.menu_depth[3] = depth_3; tree_menu_info.menu_depth[2] = depth_2; tree_menu_info.menu_depth[1] = 0; tree_menu_info.menu_depth[0] = 0; tree_menu_info.string_code = string_code; if (string_code == 0) { strncpy(tree_menu_info.string_name, string, sizeof(tree_menu_info.string_name)); } switch (depth) { case 0: tree_menu_info.menu_type = BASE_TreeMenuInfo::kMenuType_Group; break; case 1: tree_menu_info.menu_type = BASE_TreeMenuInfo::kMenuType_CheckButton; tree_menu_info.menu_depth_width = 20; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_CheckOn] = 10006; tree_menu_info.image_code[BASE_TreeMenuInfo::kIconType_CheckOff] = 10005; break; default: tree_menu_info.menu_type = BASE_TreeMenuInfo::kMenuType_None; break; } tree_menu_info.user_data = map_code; TreeMenuInfoParser::Instance()->Insert(tree_menu_info); } //------------------------------------------------------------------------------ bool uiGuildPvE::SelectIndex(TreeMenuGroup::TreeObject* tree_object) { if (tree_object == NULL) { return false; } if (select_tree_.menu_index == tree_object->info->menu_index) { tree_object->is_check = true; return false; // ÀÌ¹Ì ¼±ÅÃÇÑ Ç׸ñÀÌ´Ù } if (tree_object->info->menu_depth[2] <= 0) { return false;//Ç׸ñÀÌ ¾Æ´Ï´Ù. Æú´õÀÌ´Ù. } /*if (tree_object->is_enable == false) { return false;//ºñȰ¼º Ç׸ñ ÀÌ´Ù. }*/ TreeMenuGroup::TreeObject* old_tree_object = tree_menu().Find(select_tree_.menu_index); if (old_tree_object) { old_tree_object->is_check = false; } //¼±ÅÃÇѰÍÀº Ç×»ó üũ tree_object->is_check = true; select_tree_.menu_index = tree_object->info->menu_index; // // ³»¿ë °»½Å /* MAPCODE map_code = static_cast(tree_object->info->user_data); UpdateGuildMissionInfo(map_code);*/ #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION // ¼±ÅÃÇÑ Æ®¸®ÀÇ Ä«¿À½ºÁ¸ ŸÀÔ ÀúÀå MAPCODE map_code = static_cast(tree_object->info->user_data); const ChaosZoneInfo* find_info = ChaosZoneInfoParser::Instance()->FindData(map_code); if (find_info) { select_zone_type_ = static_cast(find_info->kind_of_room); } #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION // ±æ¿ø¸®½ºÆ® ¸ñ·Ï ¿äû RequestGuildMemberList(); return true; } void uiGuildPvE::SortGuildMember(GuildSystemData::GuildMemberSortType sort_type, bool force_high_case) { static bool high_case = true; // default ¿À¸§ Â÷¼ø static bool low_case = false; // default ³»¸² Â÷¼ø // ´Ù¸¥ ¼ÒÆÃ ÅÇ ´­·¶À» ¶§, ±âº» ¼ÒÆÃ ¹æ½ÄÀ¸·Î ¼ÂÆÃµÇµµ·Ï ÇÔ. static GuildSystemData::GuildMemberSortType prev_sort_type = GuildSystemData::kMaxType; if ((prev_sort_type != sort_type) || (force_high_case == true)) { high_case = true; low_case = false; } prev_sort_type = sort_type; switch (sort_type) { case GuildSystemData::kSortByName: { if (high_case) { sort(member_container_.begin(),member_container_.end(), sortGuildMemberByNameHigh); } else { sort(member_container_.begin(),member_container_.end(), sortGuildMemberByNameLow); } high_case ^= 1; } break; case GuildSystemData::kSortByLevel: { if (low_case) { sort(member_container_.begin(), member_container_.end(), sortGuildMemberByTypeHigh); } else { sort(member_container_.begin(), member_container_.end(), sortGuildMemberByTypeLow); } low_case ^= 1; } break; case GuildSystemData::kSortByClass: { if (high_case) { sort(member_container_.begin(), member_container_.end(), sortGuildMemberByTypeHigh); } else { sort(member_container_.begin(), member_container_.end(), sortGuildMemberByTypeLow); } high_case ^= 1; } break; } } void uiGuildPvE::RenderTooltip() { uiToolTipMan* tooltip_manager = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); if (tree_menu().list_control() == NULL || tooltip_manager == NULL) { return; } int mouse_x = Mouse::Instance()->GetMouseX(); int mouse_y = Mouse::Instance()->GetMouseY(); RECT position = tree_menu().list_control()->GetSizeRect(); if (position.left < mouse_x && position.right > mouse_x && position.top < mouse_y && position.bottom > mouse_y) { TreeMenuGroup::TreeObject* tree_object = tree_menu().OverTreeObject(); if (tree_object) { MAPCODE map_code = static_cast(tree_object->info->user_data); const GuildMissionInfo* find_info = GuildMissionTreeParser::Instance()->FindData(map_code); if (find_info) { #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION const ChaosZoneInfo* chaos_info = ChaosZoneInfoParser::Instance()->FindData(map_code); if (chaos_info) { switch (chaos_info->kind_of_room) { case eCHAOSZONE_TYPE_SONNENSCHEIN: { // ±æµåPVE - ¼Ò³Ù»þÀÎ tooltip_manager->RegisterTooltipGuildMissionTree(find_info); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } break; case eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION: { // ±æµåÀÏÀÏ¹Ì¼Ç if (list_refresh_timer_.Check() != TIMER_STAT_NONE) { if (list_refresh_timer_.Check() == TIMER_STAT_FINISH) { list_refresh_timer_.Off(); list_refresh_timer_.On(refresh_member_list_time); ChaosSystem::PacketFunction::SEND_CG_ONEDAYSGUILDMISSION_ENTERPLAYER_LIST_SYN(); } } tooltip_manager->RegisterTooltipGuildMissionTree_OneDayMission( find_info, onedays_mission_end_time_, onedays_mission_event_state_); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } break; default: break; } } #else tooltip_manager->RegisterTooltipGuildMissionTree(find_info); tooltip_manager->SetTooltipDialogID(GetDialogKey()); #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION } } } } #ifdef _NA_008543_20151027_ONE_DAYS_GUILD_MISSION void uiGuildPvE::ClickStart() { if (g_pMap->IsField() || g_pMap->IsVill()) { // ¹Ì¼Ç Á¾·ù switch (select_zone_type_) { case eCHAOSZONE_TYPE_SONNENSCHEIN: // ±æµåPVE - ¼Ò³Ù»þÀÎ ChaosSystem::PacketFunction::SEND_CG_SONNENSCHEIN_CREATE_SYN(); break; case eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION: // ±æµåÀÏÀÏ¹Ì¼Ç ChaosSystem::PacketFunction::SEND_CG_ONEDAYSGUILDMISSION_CREATE_SYN(); break; default: break; } } else { // 6415 ¸¶À»°ú Çʵ忡¼­¸¸ ÀÔÀåÀÌ °¡´É ÇÕ´Ï´Ù. TCHAR string[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(6415, string, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Warning(eOUTPUT_MSG_CHAT, string); } } void uiGuildPvE::SetGuildMemberList_OneDaysGuildMission(MSG_BASE* recv_message) { if (recv_message == NULL) { return; } MSG_CG_ONEDAYSGUILDMISSION_ENTERPLAYER_LIST_ACK* recv_packet = static_cast(recv_message); if (select_zone_type_ != eCHAOSZONE_TYPE_ONEDAYSGUILDMISSION) { onedays_mission_end_time_ = GetTickCount() + recv_packet->remain_time_; onedays_mission_event_state_ = recv_packet->event_state_; return; } member_container_.clear(); disconnect_member_list_.clear(); for (int i = 0; i < recv_packet->enter_player_count; ++i) { CHARGUID character_guid = recv_packet->enter_player_list[i]; if (character_guid == 0) { break; } GUILD_MEMBER_INFO* member_info = GuildSystem::GetGuildSystemData().GetGuildMemberInfo(character_guid); if (member_info == NULL) { break; } member_container_.push_back(*member_info); } for (int i = 0; i < recv_packet->stand_by_user_list_cnt; ++i) { CHARGUID character_guid = recv_packet->stand_by_user_list[i]; if (character_guid == 0) { break; } // ½ºÅ¸Æ®¾÷¸â¹ö°¡ ¸â¹ö¸®½ºÆ®¿¡ ¾øÀ¸¸é ³Ö¾îÁÜ BOOL is_find = FALSE; for (size_t j = 0; j < member_container_.size(); ++j) { GUILD_MEMBER_INFO& member_info = member_container_[j]; if (member_info.m_CharGuid == character_guid) { is_find = TRUE; break; } } if (is_find == FALSE) { // ƨ±ä »ç¶÷À¸·Î Ãß°¡ disconnect_member_list_.push_back(character_guid); GUILD_MEMBER_INFO* member_info = GuildSystem::GetGuildSystemData().GetGuildMemberInfo(character_guid); if (member_info) { member_container_.push_back(*member_info); } } } SortGuildMember(GuildSystemData::kSortByName, true); UpdateGuildMemberList(); onedays_mission_end_time_ = GetTickCount() + recv_packet->remain_time_; onedays_mission_event_state_ = recv_packet->event_state_; } #endif //_NA_008543_20151027_ONE_DAYS_GUILD_MISSION #endif //_NA_008334_20150608_SONNENSCHEIN #endif //_NA_003923_20120222_GUILD_RENEWAL_UI_RENEWAL