#include "SunClientPrecompiledHeader.h" #ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM #include "uiSUNRankingDialog.h" #include "SUNRankingSlot.h" #include "InterfaceManager.h" #include "Hero.h" #include "uiGuideSystemMan/uiGuideSystemMan.h" #include "ExpValueInfoParser.h" #include "GlobalFunc.h" void uiSUNRankingDialog::RankingArticleInit() { CCtrlButtonCheckWZ* check_button = NULL; for ( int i = kControl_CheckBT_C001; i <= kControl_CheckBT_C006; ++i ) { check_button = static_cast(GetControlWZ_byPosition(i)); if ( check_button ) { check_button->SetCheckState(false); } } // ù ¹øÂ° Ç׸ñÀ» üũ »óÅ·ΠÇÑ´Ù. check_button = static_cast(GetControlWZ_byPosition(kControl_CheckBT_C000)); if ( check_button ) { check_button->SetCheckState( true ); } } void uiSUNRankingDialog::DropdownClassFilterInit() { dropdown_class_filter_.Init(GetButtonControlWZ(GetControlID_byPosition(kControl_Button_B004)), GetButtonControlWZ(GetControlID_byPosition(kControl_Button_B003)), GetListControlWZ(GetControlID_byPosition(kControl_List_L001)), NULL, NULL/*GetPictureControlWZ(GetControlID_byPosition(kControl_Picture_P003))*/); if ( dropdown_class_filter_.list_control() ) { dropdown_class_filter_.list_control()->SetUnuseSelBar( true ); dropdown_class_filter_.list_control()->DeleteItemAll(); dropdown_class_filter_.list_control()->SetStartLineGapTop( 10 ); dropdown_class_filter_.list_control()->SetSellHeight(16); } // 3600 : °³Àη©Å· // 3601 : ±æµå¿ø·©Å· dropdown_class_filter_.InsertItem( 3600, (void*)PRIVATE_MODE, StrToWzID("st10"), DT_VCENTER | DT_CENTER ); dropdown_class_filter_.InsertItem( 3601, (void*)GUILD_MODE, StrToWzID("st10"), DT_VCENTER | DT_CENTER ); dropdown_class_filter_.Select( 0 ); } void uiSUNRankingDialog::ResizeVscroll( const LONG& scroll_count ) { // ¿©±â¼­ VScroll max¿Í pos¸¦ ¼ÂÆÃÇØÁØ´Ù. RECT dest_rect; CControlWZ* control_ptr = GetControlWZ_byPosition(kControl_Picture_P008); if ( control_ptr ) { dest_rect = control_ptr->GetSizeRect(); } RECT my_slot_rect = dest_rect; my_slot_rect.bottom = (dest_rect.bottom - dest_rect.top) / kranking_screen_view_max_slot_count; dest_rect.top = dest_rect.top - my_slot_rect.bottom; dest_rect.bottom = dest_rect.bottom - my_slot_rect.bottom; move_pivot_ = my_slot_rect.bottom / kdivide_slot; int scroll_max = kdivide_slot * (scroll_count - kranking_screen_view_max_slot_count); if ( vscroll_control_ ) { vscroll_control_->SetScrollRangeWZ(0, scroll_max); vscroll_control_->SetScrollPosWZ(0); if ( scroll_max <= 0 ) { vscroll_control_->SetChangeSizeThumb(0); } else { float thumb_size = (kranking_screen_view_max_slot_count / (float)scroll_count) * 100; vscroll_control_->SetChangeSizeThumb((int)thumb_size); } } SUNRankingSlot::set_move_pivot_(move_pivot_); } void uiSUNRankingDialog::set_sun_ranking_mode_( const int& sun_ranking_mode ) { if ( sun_ranking_mode < 0 || sun_ranking_mode >= SUN_RANKING_MAX ) { return; } sun_ranking_mode_ = sun_ranking_mode; int string_index = 0; // ÅØ½ºÆ® switch ( sun_ranking_mode_ ) { case SUN_RANKING_BEST_OF_BEST + PRIVATE_MODE: case SUN_RANKING_BEST_OF_BEST + GUILD_MODE: { // 3610 : ÁøÁ¤ÇÑ ·©Ä¿, ´Ù¹æ¸é¿¡ ÃâÁßÇÑ ¿øÁ¤´ë ÃÖ°íÀÇ Àü»ç´Â ´©±¸Àΰ¡? string_index = 3610; } break; case SUN_RANKING_ELETE_WARRIOR + PRIVATE_MODE: case SUN_RANKING_ELETE_WARRIOR + GUILD_MODE: { // 3611 : Á¡·ÉÀü°ú °ø¼ºÀü¿¡¼­ °¡Àå ¸¹Àº ųÀ» ±â·ÏÇÑ PVPÀÇ ÃÖ°­ÀÚ! string_index = 3611; } break; case SUN_RANKING_LEVEL_KING + PRIVATE_MODE: case SUN_RANKING_LEVEL_KING + GUILD_MODE: { // 3612 : ¿­Á¤°ú ²ö±âÀÇ »ó¡, SUN ÃÖ°í ·¹º§Àº ´©±¸Àΰ¡ string_index = 3612; } break; case SUN_RANKING_LEGEND_EQUIP + PRIVATE_MODE: case SUN_RANKING_LEGEND_EQUIP + GUILD_MODE: { // 3613 : ¼ö¸¹Àº ÀüÅõ¸¦ ½Â¸®·Î À̲ö Àü¼³ÀûÀÎ Àåºñ string_index = 3613; } break; case SUN_RANKING_STRONG_ONE_SHOT + PRIVATE_MODE: case SUN_RANKING_STRONG_ONE_SHOT + GUILD_MODE: { // 3614 : ¹èƲÁ¸¿¡¼­ °¡Àå °­·ÂÇÑ ÃÖ°íµ¥Áö¹Ì·®À» ±â·ÏÇÑ Ä¡¸íÀûÀÎ µô·¯! string_index = 3614; } break; case SUN_RANKING_BEST_ATTACKKER + PRIVATE_MODE: case SUN_RANKING_BEST_ATTACKKER + GUILD_MODE: { // 3615 : ¹èƲÁ¸¿¡¼­ °¡Àå ³ôÀº ´©Àû µ¥Áö¹Ì·®À» ±â·ÏÇÑ ÃÖ°íÀÇ °ø°Ý¼ö! string_index = 3615; } break; case SUN_RANKING_MASTER_OF_HEAL + PRIVATE_MODE: case SUN_RANKING_MASTER_OF_HEAL + GUILD_MODE: { // 3616 : ¹èƲÁ¸¿¡¼­ °¡Àå ³ôÀº Ä¡À¯·®À» ±â·ÏÇÑ Ä¡À¯ÀÇ ´ÞÀÎ! string_index = 3616; } break; #ifdef _NA_008679_20160202_REWORK_BATTLEGROUND case SUN_RANKING_BATTLEGROUND_WIN_COUNT + PRIVATE_MODE: case SUN_RANKING_BATTLEGROUND_WIN_COUNT + GUILD_MODE: { // 3562 ÇÑ 4ÁÖ°£ ÀüÀå¿¡ Âü¿©ÇÏ¿© ȹµæÇÑ ÃÑ ½Â¸® Ƚ¼ö! string_index = 3562; } break; case SUN_RANKING_BATTLEGROUND_KILL_COUNT + PRIVATE_MODE: case SUN_RANKING_BATTLEGROUND_KILL_COUNT + GUILD_MODE: { // 3563 ÀüÀå¿¡¼­ °¡Àå ¸¹Àº ųÀ» ±â·ÏÇÑ PVPÀÇ ÃÖ°­ÀÚ string_index = 3563; } break; #endif //_NA_008679_20160202_REWORK_BATTLEGROUND } if ( string_index != 0 ) { TCHAR format_string[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetInterfaceString(string_index, format_string); CControlWZ* control_ptr = GetControlWZ_byPosition(kControl_List_L002); if ( control_ptr != NULL) { RECT control_rect = control_ptr->GetSizeRect(); if (description_ftext_parser_.Parser(format_string, description_ftext_sentence_)) { description_ftext_render_.ClearSentence(); description_ftext_render_.Append(description_ftext_sentence_); description_ftext_sentence_.Release(); description_ftext_render_.SetRect(control_rect); } } } ResizeVscroll( sun_ranking_slot_view_list_[get_sun_ranking_mode_()].size() ); } bool uiSUNRankingDialog::isSunRankingModeValidCheck(const int& mode) { if (mode < 0 || mode >= SUN_RANKING_MAX) { return false; } return true; } void uiSUNRankingDialog::WaitPlayAnimation() { if (ui_sun_ranking_manager_->get_Is_wait_receive_packet_() == false) { return; } static FRECT img_rect = {0,}; CControlWZ* control_ptr = GetControlWZ_byPosition(kControl_Picture_P008); if ( control_ptr == NULL ) { return; } img_rect.left = static_cast(control_ptr->GetSizeRect().left); img_rect.top = static_cast(control_ptr->GetSizeRect().top); img_rect.right = static_cast(control_ptr->GetSizeRect().right); img_rect.bottom = static_cast(control_ptr->GetSizeRect().bottom); img_rect.left = img_rect.left + ((img_rect.right - img_rect.left - ANIMATION_FRAME_WIDTH) / 2) + 0.5f; img_rect.top = img_rect.top + ((img_rect.bottom - img_rect.top - ANIMATION_FRAME_HEIGHT) / 2); int frame = 30;//ÃÊ´ç ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·¡ÀÓ int count = ((wait_animation_timer_.SpentTime() / frame) % ANIMATION_FRAME); g_pSunRenderer->RenderTexture(wait_texture_, img_rect.left, img_rect.top, ANIMATION_FRAME_WIDTH, ANIMATION_FRAME_HEIGHT, texture_rectangles_[count].left, texture_rectangles_[count].top, texture_rectangles_[count].right, texture_rectangles_[count].bottom); ++count; } void uiSUNRankingDialog::OpenTutorialGuid() { uiGuideSystemMan* ui_guide_system_manager = GET_DIALOG_MANAGER(uiGuideSystemMan, UIMAN_GUIDE_SYSTEM); if ( ui_guide_system_manager ) { ui_guide_system_manager->OpenGuideInfoDialog(); ui_guide_system_manager->OpenGuideDialog(uiGuideSystemMan::kDialogType_Information, 6007); } } void uiSUNRankingDialog::UpdateSlotList( SunRankingInfoForClient* infos, const int& my_ranking, const SCORE& my_score ) { if ( infos == NULL ) { return; } int mode = get_sun_ranking_mode_(); if ( isSunRankingModeValidCheck(mode) == false ) { return; } SUNRankingSlotListIter list_iter; for ( list_iter = sun_ranking_slot_view_list_[mode].begin(); list_iter != sun_ranking_slot_view_list_[mode].end(); ) { delete (*list_iter); (*list_iter) = NULL; list_iter = sun_ranking_slot_view_list_[mode].erase(list_iter); } sun_ranking_slot_view_list_[mode].clear(); SUN_RANKING_SCORE_INFO my_ranking_score_info; CControlWZ* control_ptr = GetControlWZ_byPosition(kControl_Picture_P008); SUNRankingSlot* ranking_slot = new SUNRankingSlot; if ( mode == SUN_RANKING_LEVEL_KING || mode == SUN_RANKING_LEVEL_KING + 1 ) { my_ranking_score_info.is_level_value_ = true; my_ranking_score_info.score_ = ExpValueInfoParser::Instance()->CalculateAccumExpToLevel(my_score); my_ranking_score_info.extra_score_info_ = CalculateExpToPercent((LEVELTYPE)my_ranking_score_info.score_, my_score); } else { my_ranking_score_info.score_ = my_score; } ranking_slot->Init(control_ptr, vscroll_control_, 0, g_pHero->GetClass(), my_ranking, g_pHero->GetName(), my_ranking_score_info); sun_ranking_slot_view_list_[mode].push_back(ranking_slot); int rank = 1; int real_rank = 1; int prev_rank = 1; for ( int i = 0; i < MSG_CG_ETC_SUN_RANKING_ACK::MAX_INFO_COUNT; ++i ) { if ( infos[i].class_code == eCHAR_NONE ) { continue; } real_rank = rank; if ( i != 0 ) { if ( infos[i-1].score == infos[i].score ) { real_rank = prev_rank; } } SUN_RANKING_SCORE_INFO ranking_score_info; if ( mode == SUN_RANKING_LEVEL_KING || mode == SUN_RANKING_LEVEL_KING + 1 ) { ranking_score_info.is_level_value_ = true; ranking_score_info.score_ = ExpValueInfoParser::Instance()->CalculateAccumExpToLevel(infos[i].score); ranking_score_info.extra_score_info_ = CalculateExpToPercent((LEVELTYPE)ranking_score_info.score_, infos[i].score); } else { ranking_score_info.score_ = infos[i].score; } ranking_slot = new SUNRankingSlot; ranking_slot->Init(control_ptr, vscroll_control_, i+1, infos[i].class_code, real_rank, infos[i].char_name, ranking_score_info ); sun_ranking_slot_view_list_[mode].push_back(ranking_slot); prev_rank = real_rank; ++rank; } #ifdef _DEV_VER current_time_[mode] = 10000; // °³¹ß ¹öÀü¿¡¼­´Â 2ÃÊ ¼ÂÆÃ #else current_time_[mode] = 300000; // 5ºÐ ¼ÂÆÃ #endif // _DEV_VER ResizeVscroll( sun_ranking_slot_view_list_[mode].size() ); } float uiSUNRankingDialog::CalculateExpToPercent( const LEVELTYPE& level, const EXPTYPE& accum_exp ) { float fExpPercent=0.0f; EXPTYPE destexp = 0; EXPTYPE curaccumexp = 0; BASE_ACCUM_EXP_INFO* accum_exp_info = NULL; accum_exp_info = ExpValueInfoParser::Instance()->GetAccumExpInfo(level + 1); if ( accum_exp_info == NULL ) { destexp = 0; } else { destexp = accum_exp_info->m_AccumExp; } accum_exp_info = ExpValueInfoParser::Instance()->GetAccumExpInfo(level); if ( accum_exp_info == NULL ) { curaccumexp = 0; } else { curaccumexp = accum_exp_info->m_AccumExp; } EXPTYPE curexp = accum_exp; __int64 iXpForNextLevel = (__int64)destexp - (__int64)curaccumexp; __int64 iCurrentXpForNextLevel = (__int64)curexp - (__int64)curaccumexp; if (iXpForNextLevel < 1) { iXpForNextLevel = 1; } if (iCurrentXpForNextLevel < 0) { iCurrentXpForNextLevel = 0; } fExpPercent = ((float)iCurrentXpForNextLevel / (float)iXpForNextLevel) * 100.0f; fExpPercent = min(100.0f,fExpPercent); return fExpPercent; } void uiSUNRankingDialog::set_settle_date_( const SETTLE_DATE& settle_date ) { settle_date_ = settle_date; settle_date_.ConvertTimeString(); } void uiSUNRankingDialog::ResetSettleDate() { settle_date_.type = 0; settle_date_.day = 0; settle_date_.time = 0; ZeroMemory(settle_date_.result_string, INTERFACE_STRING_LENGTH); settle_date_.is_initialize = false; settle_date_.is_convert = false; } void uiSUNRankingDialog::ResetSUNRankingDialog() { SUNRankingSlotListIter list_iter; for ( int i = SUN_RANKING_BEST_OF_BEST; i < SUN_RANKING_MAX; ++i ) { for ( list_iter = sun_ranking_slot_view_list_[i].begin(); list_iter != sun_ranking_slot_view_list_[i].end(); ) { delete (*list_iter); (*list_iter) = NULL; list_iter = sun_ranking_slot_view_list_[i].erase(list_iter); } sun_ranking_slot_view_list_[i].clear(); } set_sun_ranking_mode_(SUN_RANKING_BEST_OF_BEST); InitTimer(); RankingArticleInit(); dropdown_class_filter_.Select(0); } void uiSUNRankingDialog::ResultMessageProc( const RC::eSUN_RANKING_RESULT& result_code ) { TCHAR temp_string[INTERFACE_STRING_LENGTH] = {0, }; int string_index = 0; switch ( result_code ) { case RC::RC_SUN_RANKING_SETTLE: { // ·©Å· Á¤»ê Áß ÀÔ´Ï´Ù. string_index = 3635; } break; case RC::RC_SUN_RANKING_INVALID_RANKING_TYPE: { // ¾Ë¼ö ¾ø´Â ·©Å· ŸÀÔ. string_index = 3636; } break; } if ( string_index > 0 ) { g_InterfaceManager.GetInterfaceString(string_index, temp_string); GlobalFunc::OutputMsg_Error(eOUTPUT_MSG_CENTER_SHOW, temp_string); } } #endif // _NA_008016_20150203_SUN_RANKING_SYSTEM