#include "SunClientPrecompiledHeader.h" #ifdef _DEV_VER #include "uiGMItemWindow/uiGMItemWindow.h" #include "uiGMWindowMan/uiGMWindowMan.h" #include "uiGMItemOptionWindow/uiGMItemOptionWindow.h" #include "uiGMItemResetWindow/uiGMItemResetWindow.h" #include "FTextSentence.h" #include "InterfaceManager.h" #include "GlobalFunc.h" #include "Mouse.h" #include #include #include "ItemUnitRenderer.h" #include "uiToolTipMan/uiToolTipMan.h" #include "ChatDialog.h" #include "uiChatMan/uiChatMan_def.h" #include "Const.h" #include "ItemTypeList.h" #include "AwakeningInfoParser.h" const long kClientHeight = 518; const DWORD item_info_font = StrToWzID("mn12"); const DWORD item_text_color[uiGMItemWindow::KMax_Text_Color] = { WzColor_RGBA(200, 200, 168, 255), WzColor_RGBA(255, 255, 255, 255), WzColor_RGBA(150, 150, 150, 255), WzColor_RGBA(128, 128, 128, 255)}; const DWORD item_text_background_color = WzColor_RGBA(255, 255, 255, 128); const DWORD item_select_background_color = WzColor_RGBA(255, 255, 255, 0); const DWORD item_select_text_color = WzColor_RGBA(255, 255, 0, 255);// argb const DWORD item_select_bar_color = WzColor_RGBA(255, 255, 192, 0);// argb const int state_string_code[uiGMItemWindow::kFind_Type_MAX] = {9958,//名称 412,//进步 54,//类型 155013};//消耗品 class uiSCItemSlot; void uiGMItemWindow::RegisterControl() { RegisterControlPosition(StrToWzID("B011"), kControl_Button_B011); RegisterControlPosition(StrToWzID("B012"), kControl_Button_B012); RegisterControlPosition(StrToWzID("B013"), kControl_Button_B013); RegisterControlPosition(StrToWzID("B014"), kControl_Button_B014); RegisterControlPosition(StrToWzID("B015"), kControl_Button_B015); RegisterControlPosition(StrToWzID("B016"), kControl_Button_B016); RegisterControlPosition(StrToWzID("B017"), kControl_Button_B017); RegisterControlPosition(StrToWzID("B018"), kControl_Button_B018); RegisterControlPosition(StrToWzID("B019"), kControl_Button_B019); RegisterControlPosition(StrToWzID("B020"), kControl_Button_B020); RegisterControlPosition(StrToWzID("B999"), kControl_Button_B999); RegisterControlPosition(StrToWzID("BT00"), kControl_Button_BT00); RegisterControlPosition(StrToWzID("BT01"), kControl_Button_BT01); RegisterControlPosition(StrToWzID("B000"), kControl_Button_B000); RegisterControlPosition(StrToWzID("B002"), kControl_Button_B002); RegisterControlPosition(StrToWzID("B003"), kControl_Button_B003); RegisterControlPosition(StrToWzID("B004"), kControl_Button_B004); RegisterControlPosition(StrToWzID("B005"), kControl_Button_B005); RegisterControlPosition(StrToWzID("B006"), kControl_Button_B006); RegisterControlPosition(StrToWzID("B007"), kControl_Button_B007); RegisterControlPosition(StrToWzID("B008"), kControl_Button_B008); RegisterControlPosition(StrToWzID("B009"), kControl_Button_B009); RegisterControlPosition(StrToWzID("B010"), kControl_Button_B010); RegisterControlPosition(StrToWzID("B001"), kControl_Button_B001); RegisterControlPosition(StrToWzID("B021"), kControl_Button_B021); RegisterControlPosition(StrToWzID("B022"), kControl_Button_B022); RegisterControlPosition(StrToWzID("B023"), kControl_Button_B023); RegisterControlPosition(StrToWzID("B024"), kControl_Button_B024); RegisterControlPosition(StrToWzID("B025"), kControl_Button_B025); #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID RegisterControlPosition(StrToWzID("B032"), kControl_Button_B032); #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE RegisterControlPosition(StrToWzID("B033"), kControl_Button_B033); #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE RegisterControlPosition(StrToWzID("B026"), kControl_Button_B026); RegisterControlPosition(StrToWzID("B027"), kControl_Button_B027); RegisterControlPosition(StrToWzID("B028"), kControl_Button_B028); RegisterControlPosition(StrToWzID("B029"), kControl_Button_B029); RegisterControlPosition(StrToWzID("B030"), kControl_Button_B030); RegisterControlPosition(StrToWzID("B031"), kControl_Button_B031); RegisterControlPosition(StrToWzID("T201"), kControl_Text_T201); RegisterControlPosition(StrToWzID("ST01"), kControl_Text_ST01); RegisterControlPosition(StrToWzID("ST02"), kControl_Text_ST02); RegisterControlPosition(StrToWzID("S000"), kControl_Text_S000); RegisterControlPosition(StrToWzID("P000"), kControl_Picture_P000); RegisterControlPosition(StrToWzID("LS00"), kControl_List_LS00); RegisterControlPosition(StrToWzID("LS01"), kControl_List_LS01); RegisterControlPosition(StrToWzID("VS00"), kControl_VScroll_VS00); RegisterControlPosition(StrToWzID("E000"), kControl_Edit_E000); RegisterControlPosition(StrToWzID("T999"), kControl_Text_T999); RegisterControlPosition(StrToWzID("T001"), kControl_Text_T001); } uiGMItemWindow::uiGMItemWindow(InterfaceManager* ui_manager): uiBase(ui_manager), search_gauge_control_size_(0.0f), search_gauge_texture_size_(0.0f), item_unit_renderer_(NULL), search_type_(kFind_From_Name) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT handle_texture_ = INVALID_HANDLE_VALUE; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } uiGMItemWindow::~uiGMItemWindow(void) { this->Release(); SAFE_RELEASENDELETE(item_unit_renderer_); CDialogWZ* dialog_ptr = GetDialogWZ(); if (dialog_ptr != NULL) { STD_UI_INTERSECT_RECT& intersect_list = dialog_ptr->GetIntersectRectList(); intersect_list.clear(); } } void uiGMItemWindow::Init(CDrawBase* draw_base) { uiBase::Init(draw_base); // 槽位初始化 SCItemSlotContainer::Init(kSlotTotalCount, SI_GM_ITEM); // 渲染器初始化 assert(!item_unit_renderer_); item_unit_renderer_ = new ItemUnitRenderer; item_unit_renderer_->Init(uiBase::GetDrawBase(), kSlotTotalCount); item_code_ = 0; search_new_ = true; set_search_end(true); set_search_string("\n");// 无法输入的字符串必须进行初始化,以便在搜索时不会重复。 sprintf(pre_find_word_,"\n"); item_name_info_iterator_ = ItemInfoParser::Instance()->GetItemNamesBegin(); item_name_info_iterator_end_ = ItemInfoParser::Instance()->GetItemNamesEnd(); search_index_ = 0; search_frame_per_update_time_ = PROGRAMPARAM->search_frame_per_update_time(); number_of_searching_per_a_frame_ = PROGRAMPARAM->number_of_searching_per_a_frame(); total_searched_count_ = 0; history_scroll_pos_ = 0; search_scroll_pos_ = 0; bookmark_scroll_pos_ = 0; last_make_item_code_ = 0; selected_class_ = eCHAR_NONE; ui_gm_window_manager_ = static_cast(GetMan()); RegisterControl(); if (ui_gm_window_manager_) { searched_results_ = ui_gm_window_manager_->searched_results(); created_histroys_ = ui_gm_window_manager_->created_histroys(); bookmark_lists_ = ui_gm_window_manager_->bookmark_lists(); } item_info_text_render_.resize(kDisplay_Item_Info_Num); CControlWZ* gauge_control = GetControlWZ(GetControlID_byPosition(kControl_Picture_P000)); if (gauge_control != NULL) { search_gauge_control_size_ = static_cast(gauge_control->GetSize().right); search_gauge_texture_size_ = gauge_control->GetCtrlImageFormat()->m_sImageState->m_sFRect.fWidth; } // 控制绘制回调函数设置 const POSTYPE info_control_pos = kControl_Button_B000; CControlWZ* item_info_control = NULL; for (int index_display = 0; index_display < kDisplay_Item_Info_Num; ++index_display) { item_info_control = GetControlWZ(GetControlID_byPosition(info_control_pos + index_display)); if (item_info_control == NULL) { continue; } item_info_control->SetCallbackDraw(uiGMItemWindow::CallBackRenderItemInfo, (void*)index_display); } BYTE control_positions[] = {kControl_List_LS01, /*kControl_Button_B001, kControl_Button_B021, kControl_Button_B022, kControl_Button_B023, kControl_Button_B024, kControl_Button_B025,*/ kControl_Button_B026, /*kControl_Button_B027, kControl_Button_B028,*/ kControl_Button_B030, 255}; BYTE number = 0; CControlWZ* hide_control = NULL; while (control_positions[number] != 255) { hide_control = GetControlWZ(GetControlID_byPosition(control_positions[number])); if (hide_control) { hide_control->ShowWindowWZ(WZ_HIDE); } ++number; } gauge_control = GetControlWZ(GetControlID_byPosition(kControl_Text_T999)); if (gauge_control) { gauge_control->SetTextWZ("GM项目窗口"); } static_state_control_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Text_T001))); /*if (static_state_control_) { static_state_control_->SetTextWZ("请输入商品名称"); }*/ RECT rect = { 0, 0, 0, 0 }; gauge_control = GetControlWZ(GetControlID_byPosition(kControl_Text_ST02)); if (gauge_control) { rect = gauge_control->GetSize(); } history_button_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Button_B029))); if (history_button_) { float width = history_button_->GetSizeWidth() - 25; float height = history_button_->GetSizeHeight() - 6; history_button_->MoveWindowWZ((float)(rect.left - width - 12 - 55), (float)(rect.top + rect.bottom - height + 2), width, height); } pickup_button_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Button_B028))); if (pickup_button_) { // 2013.03.26 拿起按钮位置更正(原始来源是注释掉的) - Hong Seong-hyeon //float width = pickup_button_->GetSizeWidth() - 56; float width = pickup_button_->GetSizeWidth() - 50; float height = pickup_button_->GetSizeHeight() - 6; pickup_button_->SetTextWZ("捡起"); //pickup_button_->MoveWindowWZ((float)(rect.left+78), (float)(rect.top + 40), width, height); pickup_button_->MoveWindowWZ((float)(rect.left-140), (float)(rect.top), width, height); } reset_button_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Button_B027))); if (reset_button_) { float width = reset_button_->GetSizeWidth() - 25; float height = reset_button_->GetSizeHeight() - 6; reset_button_->SetTextWZ("过滤掉"); reset_button_->MoveWindowWZ((float)(rect.left - width - 12), (float)(rect.top + rect.bottom - height + 2), width, height); } gauge_control = GetControlWZ(GetControlID_byPosition(kControl_Button_B031)); if (gauge_control) { float width = gauge_control->GetSizeWidth() - 50; float height = gauge_control->GetSizeHeight() - 6; gauge_control->MoveWindowWZ((float)(rect.left + rect.right), (float)(rect.top + rect.bottom - height + 2), width, height); gauge_control->SetTextWZ("选项"); } button_control_ = (CCtrlButtonWZ*)GetControlWZ(GetControlID_byPosition(kControl_Button_BT00)); if (button_control_) { ChangeFindIconImage(button_control_, false); } CCtrlButtonWZ* class_control = NULL; for (int i = eCHAR_BERSERKER; i < kTempClassTypeMax; ++i) { class_control = static_cast (GetControlWZ(GetControlID_byPosition(kControl_Button_B001+i-eCHAR_BERSERKER))); if (class_control) { ChangeClassIcon(class_control, i, true); //MoveClassIcon(class_control, i); } } static_edit_control_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Text_T201))); { static_edit_control_->SetTextWZA("请输入您的搜索词"); static_edit_control_->SetTextColor(RGBA(255,255,255,255)); } assert(static_edit_control_); //this->GetDialogWZ()->CreateControllWZ(StrToWzID("E002"), 创建控制 edit_control_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Edit_E000))); if (edit_control_) { edit_control_->SetFontID(gm_win_font); edit_control_->SetColorText(WzColor_RGBA(255,255,255,255)); edit_control_->SetColorCaret(WzColor_RGBA(255,255,255,255)); edit_control_->SetColorSelBack(WzColor_RGBA(255,50,50,255)); edit_control_->SetColorSelText(WzColor_RGBA(255,255,255,255)); } assert(edit_control_); find_list_ptr_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_LS00))); if (find_list_ptr_) { find_list_ptr_->ShowWindowWZ(WZ_HIDE); } assert(find_list_ptr_); CCtrlListWZ* state_select_list = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_LS01))); if (state_select_list != NULL) { TCHAR state_string[INTERFACE_STRING_LENGTH] = {0, }; int list_item_index = 0; for (int index = 0; index < kFind_Type_MAX;++index) { list_item_index = state_select_list->InsertItemBack(); g_InterfaceManager.GetInterfaceString(state_string_code[index], state_string); GlobalFunc::SetItem(state_select_list, list_item_index, state_string, item_info_font, DT_CENTER | DT_VCENTER, item_select_background_color, item_text_color[kComplete_Text_Color], item_select_text_color); } state_select_list->SetColorSelBar(item_select_bar_color); state_select_list->SetColorSelBarOnText(item_select_text_color); state_select_list->SetStartLineGapTop(4); state_select_list->SetSellHeight(18); state_select_list->SetCurSel(0); } seacrch_type_text_control_ = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Text_ST01))); if (seacrch_type_text_control_ != NULL) { TCHAR state_string[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetInterfaceString(state_string_code[kFind_From_Name], state_string); seacrch_type_text_control_->SetTextWZ(state_string); } // 重置滚动状态 CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (scroll_control != NULL) { scroll_control->SetScrollPosWZ(0); } // 成就率输出 gauge_control = GetControlWZ(GetControlID_byPosition(kControl_Text_S000)); if (gauge_control != NULL) { gauge_control->SetTextWZ("100.0%% (0)"); RECT size_rect = gauge_control->GetSize(); size_rect.left = size_rect.left - 25; size_rect.right = size_rect.right + 50; gauge_control->MoveWindowWZ((float)size_rect.left, (float)size_rect.top, (float)size_rect.right, (float)size_rect.bottom); } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT handle_texture_ = g_pSunRenderer->x_pManagerTexture->LoadTexture("Data\\Interface\\Common_bg01.tga" ,TLS_ORIGINAL_SIZE | TLS_NO_MULTITHREAD); texture_information_ = g_pSunRenderer->x_pManagerTexture->GetTextureInfo(handle_texture_); assert(texture_information_); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT LoadCreateHistory(); // 加载创建历史 } void uiGMItemWindow::ShowClassIcon(bool is_show) { CCtrlButtonWZ* class_control = NULL; #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE for (int i = kControl_Button_B001; i <= kControl_Button_B033; ++i) #else #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID for (int i = kControl_Button_B001; i <= kControl_Button_B032; ++i) #else for (int i = kControl_Button_B001; i <= kControl_Button_B025; ++i) #endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE { class_control = static_cast(GetControlWZ(GetControlID_byPosition(i))); if (class_control) { class_control->ShowWindowWZ((is_show)?WZ_SHOW:WZ_HIDE); } } } void uiGMItemWindow::LoadCreateHistory() { SetItemWindowState(kState_History); size_t size = created_histroys_->size(); RefreshList(kState_History, size, size); } void uiGMItemWindow::RefreshScroll(WORD item_index) { CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (scroll_control == NULL) { return; } int scroll_min = 0; int scroll_max = 0; int info_list_num = static_cast(GetFocusList()->size()); int current_scroll_pos = scroll_control->GetScrollPosWZ(); //if (item_index != 0) { current_scroll_pos = item_index; } scroll_control->GetScrollRangeWZ(&scroll_min, &scroll_max); scroll_max = max(0, (info_list_num - kDisplay_Item_Info_Num)); current_scroll_pos = min(current_scroll_pos, scroll_max); scroll_control->SetScrollRangeWZ(scroll_min, scroll_max); scroll_control->SetScrollPosWZ(current_scroll_pos); } void uiGMItemWindow::SetRectItemControl(int index_display, bool enable_reward) { if (index_display >= kDisplay_Item_Info_Num) { return; } const POSTYPE info_control_pos = kControl_Button_B000; const POSTYPE reward_control_pos = kControl_Button_B001; CControlWZ* ac_control = GetControlWZ(GetControlID_byPosition(info_control_pos + index_display)); if (ac_control == NULL) { return; } RECT ac_control_rect = ac_control->GetSizeRect(); // 获取pos对应的FTextRender并设置RECT item_info_text_render_[index_display].Init(GetDrawBase(), ac_control_rect); } bool uiGMItemWindow::ShowEditControl(bool is_show) { if (edit_control_ == NULL || static_edit_control_ == NULL) { return false; } TCHAR string_buffer[INTERFACE_STRING_LENGTH] = {0,}; if (is_show) { static_edit_control_->GetTextWZ(string_buffer, INTERFACE_STRING_LENGTH-1); static_edit_control_->ShowWindowWZ(WZ_HIDE); if (strcmp(string_buffer, "请输入您的搜索词") == 0) { edit_control_->SetTextWZ(""); } edit_control_->ShowWindowWZ(WZ_SHOW); } else { edit_control_->GetTextWZ(string_buffer, INTERFACE_STRING_LENGTH-1); edit_control_->ShowWindowWZ(WZ_HIDE); //HideFindWord(); if (string_buffer[0] == '\0') { sprintf(string_buffer, "请输入您的搜索词"); } static_edit_control_->SetTextWZ(string_buffer); static_edit_control_->ShowWindowWZ(WZ_SHOW); } return true; } void uiGMItemWindow::Release() { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT if (handle_texture_ != INVALID_HANDLE_VALUE) { g_pSunRenderer->x_pManagerTexture->DestroyTexture(handle_texture_); } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } void uiGMItemWindow::OnUpdateSolarDialog() { CDialogWZ* dialog_ptr = GetDialogWZ(); if (dialog_ptr != NULL) { // UI Inetersect 区域设置 - UI 只在设置的区域内运行. STD_UI_INTERSECT_RECT& intersect_list = dialog_ptr->GetIntersectRectList(); intersect_list.clear(); RECT enable_rect = dialog_ptr->GetClientWZ()->GetSizeRect(); enable_rect.bottom = (enable_rect.top + kClientHeight+30); intersect_list.push_back(enable_rect); // 鼠标滚轮处理 BYTE mouse_wheel_state = GetMouseWheelStatus(&enable_rect); OnMouseWheelScroll(mouse_wheel_state); if (ui_gm_window_manager_ && ui_gm_window_manager_->IsShowGMWindow(UI_GM_ITEM_OPTION_WINDOW)) { CCtrlButtonWZ* class_control = NULL; for (int i = eCHAR_BERSERKER; i < kTempClassTypeMax; ++i) { class_control = static_cast (GetControlWZ(GetControlID_byPosition(kControl_Button_B001+i-eCHAR_BERSERKER))); if (class_control) { MoveClassIcon(class_control, i); enable_rect = class_control->GetSizeRect(); intersect_list.push_back(enable_rect); } } } } UpdateToolTip(); if (g_Input.GetState(DIK_ESCAPE, KS_UP, TRUE) || g_Input.GetState(DIK_ESCAPE, IKS_UP, TRUE)) { if (IsVisible() == TRUE) { if (!search_end()) { SearchStop(); } } } /* // 추천 검색어 기능 (몇몇 문제가 있어서 제거: 검색된 아이템 아이콘이 위에 그려짐, \n이 검색어에 추가됨, 클릭했을 때 종종 제대로 적용이 안됨 if (search_end() && edit_control_ && edit_control_->GetState() == WZ_SHOW) { TCHAR string_buffer[INTERFACE_STRING_LENGTH] = {0,}; edit_control_->GetTextWZ(string_buffer, INTERFACE_STRING_LENGTH-1); size_t string_length = strlen(string_buffer); g_InterfaceManager.Trim(string_buffer); if (string_length > 0 && strcmp(string_buffer, pre_find_word_) != 0) { sprintf(pre_find_word_, string_buffer); RefreshPreFindList(string_buffer); } else if (string_length == 0) { HideFindWord(); } }*/ } void uiGMItemWindow::RefreshPreFindList(TCHAR* find_string) { BYTE search_count = 0; if (ui_gm_window_manager_) { search_count = ui_gm_window_manager_->PreSearchFindWord(find_string); } if (search_count > 0) { find_list_ptr_->DeleteItemAll(); DWORD size = ui_gm_window_manager_->activate_find_list()->size(); for (DWORD i = 0; i < size; ++i) { const char* string = ui_gm_window_manager_->GetActivateFindData(i); if (string != NULL) { InsertFindList(string); } } ShowFindWord(); } else { HideFindWord(); } } void uiGMItemWindow::OnRenderSolarDialog() { if (!item_unit_renderer_) { return; } item_unit_renderer_->Render(); if (this->m_MouseOverObject.eMouseOverType != eMOUSE_OVER_MAX) { if (eMOUSE_OVER_SLOT == m_MouseOverObject.eMouseOverType) { uiToolTipMan* tooltip_manager = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if (tooltip_manager) { tooltip_manager->RegisterSlotInfoTooltip(m_MouseOverObject.pSlot); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT CControlWZ* control = GetControlWZ(GetControlID_byPosition(kControl_Text_ST02)); RECT rect; float x = 0.0f; float y = 0.0f; if (control) { rect = control->GetSizeRect(); } else { this->GetDialogWZ()->GetClientRect(&rect); } x = static_cast(rect.left) - 14; y = static_cast(rect.top) + 2; uiToolTipMan* tooltip_manager = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); ITEM_PARAMETAS* item_parameta; if (ui_gm_window_manager_ != NULL) { item_parameta = ui_gm_window_manager_->item_parametas(); } if (item_parameta->class_type != eCHAR_NONE) { #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE if (item_parameta->class_type == eCHAR_WITCHBLADE) { g_pSunRenderer->RenderTexture( handle_texture_, x, y, 14.0f, 14.0f, 730.0f + (6 * 14), 297.0f + 28.0f, 14.0f, 14.0f, NULL, 0.0f ); } else { g_pSunRenderer->RenderTexture( handle_texture_, x, y, 14.0f, 14.0f, 730.0f + ((item_parameta->class_type - eCHAR_BERSERKER) * 14), 297.0f + 14.0f, 14.0f, 14.0f, NULL, 0.0f ); } #else g_pSunRenderer->RenderTexture( handle_texture_, x, y, 14.0f, 14.0f, 730.0f + ((item_parameta->class_type - eCHAR_BERSERKER) * 14), 297.0f + 14.0f, 14.0f, 14.0f, NULL, 0.0f ); #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE if (tooltip_manager && IsInRect(x, y, 14.0f, 14.0f)) { tooltip_manager->RegisterTooltip(GlobalFunc::GetClassString(static_cast(item_parameta->class_type))); tooltip_manager->SetTooltipDialogID( GetDialogKey() ); } } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } void uiGMItemWindow::OnShowWindow(BOOL is_show) { static bool once_move = false; if (is_show) { if (once_move == false) { this->MoveWindowWZ(20.0f, 100.0f); once_move = true; } RegisterESCKeyClose(true); ShowEditControl(false); if (ui_gm_window_manager_) { ui_gm_window_manager_->SetCaptionFilter(); } } else { //HideFindWord(); RegisterESCKeyClose(false); if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_OPTION_WINDOW, false); } } } void uiGMItemWindow::MouseOver_MsgProc(SI_MESSAGE* message) { switch (message->eResultMsg) { case RT_MSG_MOUSEOVER: { POSTYPE position = static_cast(GetControlPosition_byID(message->dwCtrlID)); if (position >= 0 && position < this->GetMaxSlotNum()) { if (!IsEmpty(position)) { SCSlot& rSlot = GetSlot(position); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT; m_MouseOverObject.pSlot = &rSlot; } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } break; } } void uiGMItemWindow::MessageProc(SI_MESSAGE* message) { switch (message->eResultMsg) { case RT_MSG_LBUTTONDCLICK: OnLButtonDoubleClick(message); break; case RT_MSG_LBUTTONCLICK: OnLButtonClick(message); break; case RT_MSG_RBUTTONCLICK: OnRButtonClick(message); break; case RT_MSG_EDIT_ENTERKEYDOWN: { OnSearch(); } break; case RT_MSG_SB_PAGETOP: case RT_MSG_SB_LINETOP: OnUpScroll(message); break; case RT_MSG_SB_PAGEBOTTOM: case RT_MSG_SB_LINEBOTTOM: OnDownScroll(message); break; case RT_MSG_SB_THUMBTRACK: case RT_MSG_SB_THUMBPOSITION: case RT_MSG_SB_ENDSCROLL: OnThumbScroll(message); default: SolarDialog::MessageProc(message); break; } } bool uiGMItemWindow::OnUpScroll(SI_MESSAGE* message) { bool result = true; WzID scroll_control_id = GetControlID_byPosition(kControl_VScroll_VS00); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(scroll_control_id)); if (scroll_control != NULL) { int scroll_min = 0; int scroll_max = 0; int current_scroll_pos = scroll_control->GetScrollPosWZ(); scroll_control->GetScrollRangeWZ(&scroll_min, &scroll_max); --current_scroll_pos; current_scroll_pos = max(0, current_scroll_pos); scroll_control->SetScrollPosWZ(current_scroll_pos); SetCurrentScrollPosition(current_scroll_pos); RefreshItemInfo(); } return result; } bool uiGMItemWindow::OnDownScroll(SI_MESSAGE* message) { bool result = true; WzID scroll_control_id = GetControlID_byPosition(kControl_VScroll_VS00); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(scroll_control_id)); if (scroll_control != NULL) { int scroll_min = 0; int scroll_max = 0; int current_scroll_pos = scroll_control->GetScrollPosWZ(); scroll_control->GetScrollRangeWZ(&scroll_min, &scroll_max); ++current_scroll_pos; current_scroll_pos = min(scroll_max, current_scroll_pos); scroll_control->SetScrollPosWZ(current_scroll_pos); SetCurrentScrollPosition(current_scroll_pos); RefreshItemInfo(); } return result; } void uiGMItemWindow::SetCurrentScrollPosition(int current_scroll_pos) { switch (item_window_state_) { case kState_BookMark: bookmark_scroll_pos_ = current_scroll_pos; break; case kState_History: history_scroll_pos_ = current_scroll_pos; break; case kState_Search: search_scroll_pos_ = current_scroll_pos; break; default: break; } } bool uiGMItemWindow::OnThumbScroll(SI_MESSAGE* message) { bool result = true; WzID scroll_control_id = GetControlID_byPosition(kControl_VScroll_VS00); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(scroll_control_id)); if (scroll_control != NULL) { int scroll_min = 0; int scroll_max = 0; int current_scroll_pos = scroll_control->GetScrollPosWZ(); scroll_control->GetScrollRangeWZ(&scroll_min, &scroll_max); current_scroll_pos = max(0, current_scroll_pos); current_scroll_pos = min(scroll_max, current_scroll_pos); SetCurrentScrollPosition(current_scroll_pos); RefreshItemInfo(); if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); } } return result; } void uiGMItemWindow::OnMouseWheelScroll(BYTE mouse_wheel_state) { if (mouse_wheel_state == MOUSE_WHEEL_UP) { OnUpScroll(NULL); if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); } } else if (mouse_wheel_state == MOUSE_WHEEL_DOWN) { OnDownScroll(NULL); if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); } } } void uiGMItemWindow::ItemSearch(TCHAR* search_word) { if (edit_control_) { edit_control_->SetTextWZ(search_word); OnSearch(); } else if (static_edit_control_) { static_edit_control_->SetTextWZ(search_word); OnSearch(); } } void uiGMItemWindow::OnSearch() { TCHAR find_message[MAX_VENDOR_SEARCH_LENGTH + 1]; memset(find_message , 0 , sizeof(find_message) ); if (edit_control_) { edit_control_->GetTextWZ(find_message, MAX_VENDOR_SEARCH_LENGTH); } else if (static_edit_control_) { static_edit_control_->GetTextWZ(find_message, MAX_VENDOR_SEARCH_LENGTH); } g_InterfaceManager.Trim(find_message); find_message[MAX_VENDOR_SEARCH_LENGTH] = '\0'; int size = _tcslen(find_message); if (size > 0) { if (find_message[size-1] == '\n') { find_message[size-1] = '\0'; } } if (search_end()) { if (_stricmp(find_message, search_string()) != 0) { SetItemWindowState(kState_Search); set_search_string(find_message); set_search_end(false); CCtrlListWZ* select_list = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_LS01))); if (select_list) { select_list->ShowWindowWZ(WZ_HIDE); } //HideFindWord(); } else { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "GMItemWin: 无法使用相同的搜索词进行搜索.(Warning)", CHAT_TYPE_SYSTEM); } } } bool uiGMItemWindow::GetFilterResult(DWORD item_code) { bool result_value = false; ITEM_PARAMETAS* item_parameta; if (ui_gm_window_manager_ != NULL) { item_parameta = ui_gm_window_manager_->item_parametas(); } if (item_parameta->filter_main == FILTER_ALL) { return true; } BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(item_code); if (item_info == NULL) { return false; } BYTE sub_filter = item_parameta->filter_subs[item_parameta->filter_main]; switch (item_parameta->filter_main) { case FILTER_EQUIP: result_value = GetFilterEquip(item_info, sub_filter); break; case FILTER_WASTE: result_value = GetFilterWaste(item_info, sub_filter); break; case FILTER_GRADE: result_value = GetFilterGrade(item_info, sub_filter); break; case FILTER_GENDER: result_value = GetFilterGender(item_info, sub_filter); break; case FILTER_ETC: result_value = GetFilterEtc(item_info, sub_filter); break; default: result_value = true; } return result_value; } bool uiGMItemWindow::GetClassResult(DWORD item_code) { bool result_value = false; ITEM_PARAMETAS* item_parameta; if (ui_gm_window_manager_ != NULL) { item_parameta = ui_gm_window_manager_->item_parametas(); } if (item_parameta->class_type == eCHAR_NONE) { return true; } BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(item_code); if (item_info == NULL) { return false; } switch (item_parameta->class_type) { case eCHAR_BERSERKER: //1 result_value = (item_info->m_wEqClass1 == 1)? true:false; break; case eCHAR_DRAGON: //2 result_value = (item_info->m_wEqClass2 == 1)? true:false; break; case eCHAR_SHADOW: //3 result_value = (item_info->m_wEqClass3 == 1)? true:false; break; case eCHAR_VALKYRIE: //4 result_value = (item_info->m_wEqClass4 == 1)? true:false; break; case eCHAR_ELEMENTALIST: //5 result_value = (item_info->m_wEqClass5 == 1)? true:false; break; case eCHAR_MYSTIC: //6 result_value = (item_info->m_wEqClass6 == 1)? true:false; break; case eCHAR_HELLROID: //7 //_NA_000000_20130812_NEW_CHARACTER_HELLROID result_value = (item_info->m_wEqClass7 == 1)? true:false; break; case eCHAR_WITCHBLADE: //8 //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE result_value = (item_info->m_wEqClass8 == 1)? true:false; break; } return result_value; } void uiGMItemWindow::FillFindListData(TCHAR* search_string) { unsigned int search_count = 0; _ITEM_NAME_INFO search_buffer; if (search_new_) { DeleteAllSlot(); item_name_info_iterator_ = ItemInfoParser::Instance()->GetItemNamesBegin(); search_index_ = 0; search_new_ = false; total_searched_count_ = 0; //ShowFindWord(); GetFocusList()->clear(); if (button_control_) { ChangeFindIconImage(button_control_, true); } ShowEditControl(false); if (search_type_ == kFind_From_Name || search_type_ == kFind_From_Description) { if (ui_gm_window_manager_) { ui_gm_window_manager_->AddFindWord(search_string); } } } while (item_name_info_iterator_ != item_name_info_iterator_end_) { search_buffer.m_dwItemCode = item_name_info_iterator_->m_dwItemCode; search_buffer.m_stName = item_name_info_iterator_->m_stName.c_str(); search_buffer.description_string = item_name_info_iterator_->description_string.c_str(); if (GetFilterResult(search_buffer.m_dwItemCode) == false || GetClassResult(search_buffer.m_dwItemCode) == false ) { ++search_count; ++item_name_info_iterator_; ++total_searched_count_; if (search_count >= number_of_searching_per_a_frame_) { break; } continue; } if (search_type_ == kFind_From_Name) { if (search_buffer.m_stName.find(search_string, 0) != -1) { searched_results_->push_back(search_buffer.m_dwItemCode); SetItemData(search_index_, search_index_); ++search_index_; } } else if (search_type_ == kFind_From_Description) { if (search_buffer.description_string.find(search_string, 0) != -1) { searched_results_->push_back(search_buffer.m_dwItemCode); SetItemData(search_index_, search_index_); ++search_index_; } } else if (search_type_ == kFind_From_ItemType) { WORD item_type = static_cast(atoi(search_string_)); BASE_ITEMINFO *item_info = ItemInfoParser::Instance()->GetItemInfo(search_buffer.m_dwItemCode); if (item_info && item_info->m_wType == item_type) { searched_results_->push_back(search_buffer.m_dwItemCode); SetItemData(search_index_, search_index_); ++search_index_; } } else // if (search_type_ == kFind_From_WasteType) { BYTE waste_type = static_cast(atoi(search_string_)); BASE_ITEMINFO *item_info = ItemInfoParser::Instance()->GetItemInfo(search_buffer.m_dwItemCode); if (item_info && item_info->m_byWasteType == waste_type) { searched_results_->push_back(search_buffer.m_dwItemCode); SetItemData(search_index_, search_index_); ++search_index_; } } ++search_count; ++item_name_info_iterator_; ++total_searched_count_; if (search_count >= number_of_searching_per_a_frame_) { break; } } if (item_name_info_iterator_ == item_name_info_iterator_end_) { set_search_end(true); search_new_ = true; if (ui_gm_window_manager_) { ui_gm_window_manager_->SetSearchEnd(); } if (button_control_) { ChangeFindIconImage(button_control_, false); } } /*SetSearchProgressData(total_searched_count_, search_index_); RefreshScroll(searched_results_->size()); RefreshItemInfo();*/ RefreshList(kState_Search, total_searched_count_, search_index_); } //------------------------------------------------------------------------------ void uiGMItemWindow::UpdateToolTip() { int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); bool is_mouse_over = false; int loop_end = kControl_Size; for (POSTYPE position = 0; position < loop_end; ++position) { CControlWZ* control = GetControlWZ(GetControlID_byPosition(position)); if(control) { RECT control_rect = control->GetSizeRect(); if (control_rect.left <= iMouseX && control_rect.right >= iMouseX) { if (control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { is_mouse_over = true; break; } } } } if (!is_mouse_over) { //tooltip_string_code_ = 0; m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } else { /*if (tooltip_string_code_ > 0) { uiToolTipMan* tooltip_manager = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); if (tooltip_manager) { tooltip_manager->RegisterTooltipForWareNInventoryLock(tooltip_string_code_); } }*/ } } void uiGMItemWindow::HideFindWord() { if (find_list_ptr_) { find_list_ptr_->ShowWindowWZ(WZ_HIDE); find_list_ptr_->SetCurSel(-1); } } void uiGMItemWindow::ShowFindWord() { if (find_list_ptr_) { find_list_ptr_->ShowWindowWZ(WZ_SHOW); } } void uiGMItemWindow::Process(DWORD tick_count) { static DWORD delay_tick = 0; if (!search_end()) { delay_tick += tick_count; if (delay_tick > search_frame_per_update_time_) { FillFindListData(search_string()); delay_tick = 0; } } } bool uiGMItemWindow::OnLButtonDoubleClick(SI_MESSAGE* message) { bool result = true; DWORD control_id = message->dwCtrlID; DWORD control_postion = GetControlPosition_byID(control_id); switch (control_postion) { case kControl_Button_B000: case kControl_Button_B002: case kControl_Button_B003: case kControl_Button_B004: case kControl_Button_B005: case kControl_Button_B006: case kControl_Button_B007: case kControl_Button_B008: case kControl_Button_B009: case kControl_Button_B010: { int current_scroll_pos = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (scroll_control != NULL) { current_scroll_pos = scroll_control->GetScrollPosWZ(); } int position = (control_postion - kControl_Button_B000); ITEM_PARAMETAS* item_parameta = NULL; if (ui_gm_window_manager_ == NULL) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "GMItemWin:找不到 GM 经理.(Error)", CHAT_TYPE_SYSTEM); result = false; } else { item_parameta = ui_gm_window_manager_->item_parametas(); size_t focus = (current_scroll_pos + position); if (GetFocusList()->size() > focus) { DWORD item_code = GetFocusData(focus); BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(item_code); CreateItem(item_info, item_parameta); } } } break; default: break; } return result; } bool uiGMItemWindow::OnRButtonClick(SI_MESSAGE* message) { bool result = true; DWORD control_id = message->dwCtrlID; DWORD control_postion = GetControlPosition_byID(control_id); switch (control_postion) { case kControl_Button_B000: // 항목버튼#1 case kControl_Button_B002: case kControl_Button_B003: case kControl_Button_B004: case kControl_Button_B005: case kControl_Button_B006: case kControl_Button_B007: case kControl_Button_B008: case kControl_Button_B009: case kControl_Button_B010: { if (ui_gm_window_manager_) { int current_scroll_pos = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (scroll_control != NULL) { current_scroll_pos = scroll_control->GetScrollPosWZ(); } int position = (control_postion - kControl_Button_B000); size_t focus = (current_scroll_pos + position); if (GetFocusList()->size() <= focus) { result = false; if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); } } else { DWORD item_code = GetFocusData(focus); BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(item_code); bool is_bookmark_state = (item_window_state_ == kState_BookMark)? true : false; ui_gm_window_manager_->SetPopupUpdateMenus(item_info, is_bookmark_state); } } } break; default: { if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); } } break; } return result; } bool uiGMItemWindow::OnLButtonClick(SI_MESSAGE* message) { bool result = true; DWORD control_id = message->dwCtrlID; DWORD control_postion = GetControlPosition_byID(control_id); switch (control_postion) { case kControl_Button_B999://닫기 버튼 { ShowInterface(FALSE); } case kControl_Edit_E000:// 입력창 { ShowEditControl(true); } break; case kControl_Button_BT01://검색어 타입 버튼 { ToggleShowControl(kControl_List_LS01); } break; case kControl_Button_B029: { if (search_end()) { if (item_window_state_ == kState_Search) { SetItemWindowState(kState_History); size_t size = created_histroys_->size(); RefreshList(kState_History, size, size); } else if (item_window_state_ == kState_History) { SetItemWindowState(kState_BookMark); size_t size = bookmark_lists_->size(); RefreshList(kState_BookMark, size, size); } else //kState_BookMark { SetItemWindowState(kState_Search); DWORD total_count = ItemInfoParser::Instance()->GetItemAllCount(); RefreshList(kState_Search, total_count, search_index_); } } } break; case kControl_Button_B028: { MSG_CG_GM_STRING_CMD_SYN msg; ZeroMemory(msg.m_szStringCmd,MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); StrnCopy(msg.m_szStringCmd,"捡起",MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); } break; case kControl_Button_B027: { if (ui_gm_window_manager_ && search_end()) { uiGMItemResetWindow* reset_window = static_cast(ui_gm_window_manager_->GetGMWindow(UI_GM_ITEM_RESET_WINDOW)); if (reset_window) { reset_window->ResetFilter(); ui_gm_window_manager_->SetItemParametas(ui_gm_window_manager_->GetItemOption()); SetFilterName("没有过滤器"); } } else { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "搜索时无法初始化过滤器.", CHAT_TYPE_SYSTEM); } } break; case kControl_Button_B031: { if (ui_gm_window_manager_) { ui_gm_window_manager_->ToggleGMWindow(UI_GM_ITEM_OPTION_WINDOW); } } break; case kControl_Button_BT00: { if (search_end()) { OnSearch(); } else { SearchStop(); } } break; case kControl_List_LS00: { if (find_list_ptr_ && edit_control_) { size_t select_string_number = find_list_ptr_->GetCurSel(); TCHAR select_string[MAX_VENDOR_SEARCH_LENGTH+1] = ""; if (ui_gm_window_manager_) { const char* string = ui_gm_window_manager_->GetActivateFindData(select_string_number); if (string != NULL) { static_edit_control_->SetTextWZ(string); edit_control_->SetTextWZ(string); sprintf(pre_find_word_, string); OnSearch(); HideFindWord(); } } } } break; case kControl_List_LS01: { CCtrlListWZ* select_list = static_cast(GetControlWZ(GetControlID_byPosition(kControl_List_LS01))); BYTE select_index = static_cast(select_list->GetCurSel()); if (select_list != NULL) { if (select_index >= 0 && select_index < kFind_Type_MAX) { if (search_type_ != select_index) { set_search_string("\n"); } search_type_ = select_index; if (seacrch_type_text_control_ != NULL) { TCHAR state_string[INTERFACE_STRING_LENGTH] = {0, }; g_InterfaceManager.GetInterfaceString(state_string_code[search_type_], state_string); seacrch_type_text_control_->SetTextWZ(state_string); } } select_list->ShowWindowWZ(WZ_HIDE); } } break; case kControl_Button_B001: case kControl_Button_B021: case kControl_Button_B022: case kControl_Button_B023: case kControl_Button_B024: #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT case kControl_Button_B025: #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID case kControl_Button_B032: #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE case kControl_Button_B033: #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE { BYTE class_type = static_cast(control_postion-kControl_Button_B001+eCHAR_BERSERKER); SetClass(class_type); } break; default: { RECT static_edit_rect = static_edit_control_->GetSizeRect(); int mouse_x = Mouse::Instance()->GetMouseX(); int mouse_y = Mouse::Instance()->GetMouseY(); if (mouse_x > static_edit_rect.left && mouse_x < static_edit_rect.right && mouse_y > static_edit_rect.top && mouse_y < static_edit_rect.bottom) { ShowEditControl(true);//kControl_Text_T201:// } else { if (find_list_ptr_->GetState() != WZ_SHOW) { ShowEditControl(false); } } } break; } if (control_postion != kControl_Button_BT01) { ShowControl(kControl_List_LS01, false); } if (ui_gm_window_manager_) { ui_gm_window_manager_->ShowGMWindow(UI_GM_ITEM_MENU_WINDOW, false); } return result; } void uiGMItemWindow::SetClass(BYTE class_type) { BYTE pre_selected_class = selected_class_; selected_class_ = class_type; if (pre_selected_class == selected_class_) { selected_class_ = eCHAR_NONE; } for (int i = eCHAR_BERSERKER; i < kTempClassTypeMax; ++i) { CCtrlButtonWZ* class_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Button_B001+i-eCHAR_BERSERKER))); if (class_control) { bool is_checked = false; if (eCHAR_NONE == selected_class_ || i == selected_class_) { is_checked = true; } else { is_checked = false; } ChangeClassIcon(class_control, i, is_checked); } } uiGMItemOptionWindow* dialog = GET_CAST_DIALOG(uiGMItemOptionWindow, IM_GM_WINDOW_MANAGER::GM_ITEM_OPTION_WINDOW); if (dialog) { dialog->SetClassType(selected_class_); } } void uiGMItemWindow::set_search_string(TCHAR *search_string) { strncpy(search_string_, search_string, MAX_CHAT_LEN); search_string_[MAX_CHAT_LEN] = '\0'; } void uiGMItemWindow::InsertFindList(const char* item_name) { int index = find_list_ptr_->InsertItemBack(); #ifdef _INTERNATIONAL_UI DWORD list_font = StrToWzID("st10"); #else DWORD list_font = StrToWzID("mn12"); #endif//_INTERNATIONAL_UI TCHAR string_title[MAX_VENDOR_TITLE_LENGTH+1] = {0,}; Snprintf(string_title , MAX_VENDOR_TITLE_LENGTH , item_name); GlobalFunc::SetItem(find_list_ptr_, index, 1, string_title, list_font, DT_VCENTER| DT_CENTER , RGBA(0,0,0,0), RGBA(180,180,180,255), RGBA(100,100,180,255)); } void uiGMItemWindow::RenderItemInfoText(DWORD index_display) { const POSTYPE info_control_pos = kControl_Button_B000; CControlWZ* control = GetControlWZ(GetControlID_byPosition(kControl_Button_B000 + index_display)); if (control != NULL) { item_info_text_render_[index_display].SetRect(control->GetSizeRect()); item_info_text_render_[index_display].convertLineInfo(); item_info_text_render_[index_display].Render(); } } void uiGMItemWindow::ClearItemInfoToDisplay(int index_display) { SetRectItemControl(index_display, false); SetItemDataString(index_display, NULL); AddItem(index_display, 0); } void uiGMItemWindow::RefreshItemInfo() { // 취합된 항목을 출력 int current_scroll_pos = 0; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (scroll_control != NULL) { current_scroll_pos = scroll_control->GetScrollPosWZ(); } int index_info = current_scroll_pos; int num_info = GetFocusList()->size(); for (int index_display = 0; index_display < kDisplay_Item_Info_Num; ++index_display, ++index_info) { if (index_info >= num_info) { ClearItemInfoToDisplay(index_display); } else { SetItemData(index_display, index_info); } } } void _copy2Clipboard(const char* string_message) { static char* char_ptr = NULL; TCHAR cheat_message[INTERFACE_STRING_LENGTH] = {0,}; sprintf(cheat_message, "//%s", string_message); if(OpenClipboard(NULL)) { HGLOBAL handle_clipboard_data = NULL; EmptyClipboard(); handle_clipboard_data = GlobalAlloc(GHND | GMEM_DDESHARE, strlen(cheat_message) + 1); if (handle_clipboard_data) { char_ptr = (char*)GlobalLock(handle_clipboard_data); strcpy(char_ptr, cheat_message); GlobalUnlock(handle_clipboard_data); SetClipboardData(CF_TEXT, handle_clipboard_data); } CloseClipboard(); } } void uiGMItemWindow::CreateItem(BASE_ITEMINFO* item_info, ITEM_PARAMETAS* item_parameta, BYTE create_type/*= CREATE_TYPE_NORMAL*/, BYTE lucky_expiry/*= 0*/) { TCHAR message_string[256] = {0,}; if (item_info == NULL) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "GMItemWin: 未找到商品信息.(Error)", CHAT_TYPE_SYSTEM); return; } CODETYPE item_code = item_info->m_Code; DWORD item_count = item_parameta->item_count; if (item_count == 0) { if (item_info->m_byDupNum == 0) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, "GMItemWin:%d 项脚本(DupNum 为 0)(Error)", CHAT_TYPE_SYSTEM); item_count = 1; } else { item_count = item_info->m_byDupNum; } } BYTE overlapping = (item_parameta->overlapping == true)?1:0; if (ui_gm_window_manager_) { ui_gm_window_manager_->AddHistory(item_info->m_Code); } switch (create_type) { case CREATE_TYPE_LIMITED: { BYTE is_divine = 0; if (item_parameta->item_type == ITEM_TYPE_DIVINE || item_parameta->item_type == ITEM_TYPE_DIVINE_ETHERIA) { is_divine = 1; } Sprintf(message_string,"createlimited %d 2%d %d %d %d %d", item_code, item_code, item_count, is_divine, item_parameta->enchant_level, item_parameta->socket_count); } break; case CREATE_TYPE_LUCKY: { Sprintf(message_string,"createlucky %d %d %d %d %d %d", item_code, item_count, kGradeLevel4, kGradeLevel4, lucky_expiry, item_parameta->item_type); } break; default: //CREATE_TYPE_NORMAL { if (item_parameta->socket_count <= SOCKET_MAX) { Sprintf(message_string,"make %d %d %d %d %d %d %d", item_code, item_count, overlapping, item_parameta->item_type, item_parameta->enchant_level, item_parameta->socket_count, item_parameta->awakening_level); } else if (item_parameta->awakening_level > 0 && item_parameta->socket_count > SOCKET_MAX) // { Sprintf(message_string,"make %d %d %d %d %d %d %d", item_code, item_count, overlapping, item_parameta->item_type, item_parameta->enchant_level, 0, item_parameta->awakening_level); } else { Sprintf(message_string,"make %d %d %d %d %d", item_code, item_count, overlapping, item_parameta->item_type, item_parameta->enchant_level); } } } _copy2Clipboard(message_string); last_make_item_code_ = item_code; if (ui_gm_window_manager_) { ui_gm_window_manager_->SetItemOptionMakeCaptions(message_string); } MSG_CG_GM_STRING_CMD_SYN msg; ZeroMemory(msg.m_szStringCmd,MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); StrnCopy(msg.m_szStringCmd,message_string,MSG_CG_GM_STRING_CMD_SYN::MAX_STRING_CMD_LENGTH); GlobalFunc::SendPacket(CI_GAMESERVERIDX,&msg,sizeof(msg)); } void uiGMItemWindow::SetItemData(int index_display, int index_info) { // index_display => control_pos const POSTYPE icon_control_pos = kControl_Button_B011; const POSTYPE reward_control_pos = kControl_Button_B001; int ac_info_list_size = static_cast(GetFocusList()->size()); if (index_info >= ac_info_list_size) { ShowControl(reward_control_pos + index_display, false); return; } bool enable_reward = false; BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(GetFocusData(index_info)); //.m_dwItemCode SetRectItemControl(index_display, false); SetItemDataString(index_display, item_info); SetItemSlot(index_display, item_info); } void uiGMItemWindow::SetItemSlot(int index_display, BASE_ITEMINFO* item_info) { if (index_display >= kDisplay_Item_Info_Num) { return; } if (item_info == NULL) { AddItem(index_display, 0); return; } AddItem(index_display, item_info->m_Code); } void uiGMItemWindow::SetItemDataString(int index_display, BASE_ITEMINFO* item_info) { if (index_display >= kDisplay_Item_Info_Num) { return; } FTextRender* item_info_text_render_ptr = &(item_info_text_render_[index_display]); item_info_text_render_ptr->ClearSentence(); if (item_info == NULL) { return; } FTextParser parser; FTextSentence sentence; RECT text_rect = item_info_text_render_ptr->GetRect(); int text_color_index = kComplete_Text_Color; TCHAR item_string[INTERFACE_STRING_LENGTH] = {0, }; TCHAR item_real_name[INTERFACE_STRING_LENGTH] = {0,}; //GetACObjectText(ac_info, ac_string); g_InterfaceManager.GetItemName(item_info->m_Code, item_real_name, INTERFACE_STRING_LENGTH); Sprintf(item_string, "(ID:%d) %s", item_info->m_Code, item_real_name); GlobalFunc::CovertSimpleText(item_string, INTERFACE_STRING_LENGTH, item_info_font, text_rect); parser.SetDefaultFont(item_info_font, item_text_color[text_color_index]); BOOL result = parser.Parser(item_string, sentence); if (result == TRUE) { item_info_text_render_ptr->Append(sentence); } ZeroMemory(item_string, INTERFACE_STRING_LENGTH); TCHAR* additional_string = ""; if (item_info->IsArmor()) { switch (item_info->GetSubTypeDetail()) { case ItemSubTypeDetail::kGeneral: if (item_info->m_Code < 10000) { additional_string = " [限制可能]"; } break; case ItemSubTypeDetail::kFate: additional_string = " [幸运的]"; break; } } Sprintf(item_string, "%s%s", item_info->m_pszName, additional_string); GlobalFunc::CovertSimpleText(item_string, INTERFACE_STRING_LENGTH, item_info_font, text_rect); parser.SetDefaultFont(item_info_font, item_text_color[kDisable_Text_Color]); result = parser.Parser(item_string, sentence); if (result == TRUE) { item_info_text_render_ptr->Append(sentence); } item_info_text_render_ptr->SetMargin(8, 4, 8, 3); item_info_text_render_ptr->convertLineInfo(); } void uiGMItemWindow::CallBackRenderItemInfo(CControlWZ* control_ptr, void* parameter) { uiGMItemWindow* gm_item_window = GET_CAST_DIALOG(uiGMItemWindow, IM_GM_WINDOW_MANAGER::GM_ITEM_WINDOW); if (gm_item_window == NULL) { return; } gm_item_window->RenderItemInfoText((DWORD)parameter); } void uiGMItemWindow::SetSearchProgressData(DWORD search_count, DWORD find_count) { float gauge_ratio = 0.0f; DWORD total_count = ItemInfoParser::Instance()->GetItemAllCount(); if (item_window_state_ != kState_Search) { total_count = search_count; } TCHAR data_string[INTERFACE_STRING_LENGTH] = {0, }; CControlWZ* data_control = GetControlWZ(GetControlID_byPosition(kControl_Picture_P000)); if (data_control != NULL) { RECT gauge_rect = data_control->GetSizeRect(); if (total_count > 0) { gauge_ratio = (float)search_count / total_count; if (gauge_ratio < 0.01f) { gauge_ratio = 0.01f; } else if (gauge_ratio > 1.0f) { gauge_ratio = 1.0f; } } else { gauge_ratio = 1.0f; } float gauge_width = search_gauge_control_size_ * gauge_ratio; float texture_width = search_gauge_texture_size_ * gauge_ratio; data_control->GetCtrlImageFormat()->m_sImageState->m_sFRect.fWidth = texture_width; data_control->MoveWindowWZ(static_cast(gauge_rect.left), static_cast(gauge_rect.top), gauge_width, static_cast(gauge_rect.bottom - gauge_rect.top)); } data_control = GetControlWZ(GetControlID_byPosition(kControl_Text_S000)); if (data_control != NULL) { Snprintf(data_string, INTERFACE_STRING_LENGTH - 1, "%.1f%% (%d)", (gauge_ratio * 100.0f), find_count); data_control->SetTextWZ(data_string); } } //------------------------------------------------------------------------------ bool uiGMItemWindow::AddItem(POSTYPE at_pos, SLOTCODE item_code) { if (item_code == 0) { DeleteSlot(at_pos, NULL); return false; } BASE_ITEMINFO* base_item_info = ItemInfoParser::Instance()->GetItemInfo(item_code); if (!base_item_info) { assert(!"GM_Item_Window(项目不存在)"); return false; } static DWORD SERIAL = 10000000; SCItemSlot item_slot; item_slot.SetSlotType(ST_ITEM); item_slot.SetCode(item_code); WORD item_count = 1; ITEM_PARAMETAS* item_parameta; if (ui_gm_window_manager_ != NULL) { item_parameta = ui_gm_window_manager_->item_parametas(); } if (item_parameta->item_count == 0) { if (base_item_info) { item_count = base_item_info->m_byDupNum; } else { item_count = 1; } } else { item_count = item_parameta->item_count; if (item_count > 255) { item_count = 255; } } item_slot.SetNum((DURATYPE)item_count); bool is_equip = false; if (base_item_info->IsWeapon() || base_item_info->IsArmor()) { if (item_parameta->item_type == ITEM_TYPE_NORMAL || item_parameta->item_type == ITEM_TYPE_DIVINE) { item_slot.SetEnchant(item_parameta->enchant_level); const AwakeningInfo* awakening_info = AwakeningInfoParser::Instance()->FindData(item_slot.GetCode()); if ( awakening_info ) { item_slot.SetAwakening(item_parameta->awakening_level); } eSOCKET_IDENTIFY_TYPE socket_type = eSOCKET_IDENTIFIED_ITEM; if (item_parameta->socket_count <= SOCKET_MAX) { item_slot.SetSocketNum(item_parameta->socket_count); } else { socket_type = eSOCKET_FAIL_IDENTIFY_PROCESS; } item_slot.SetSocketIdentifyType(socket_type); } is_equip = true; } if (is_equip || base_item_info->m_wType == eITEMTYPE_PET) { KindOfItemType::value_type item_type = KindOfItemType::Default; switch (item_parameta->item_type) { case ITEM_TYPE_DIVINE: item_type = KindOfItemType::Divine; break; case ITEM_TYPE_ETHERIA: item_type = KindOfItemType::Etheria; break; case ITEM_TYPE_DIVINE_ETHERIA: item_type = KindOfItemType::EtheriaWithDivine; break; case ITEM_TYPE_SKIN: item_type = KindOfItemType::Shell; break; } nsSlot::ItemTypeChanger::ChangeItemByType(&item_slot, item_type); } item_slot.SetSerial(++SERIAL); DeleteSlot(at_pos, NULL); InsertSlot(at_pos, item_slot); return true; } //------------------------------------------------------------------------------ RC::eSLOT_INSERT_RESULT uiGMItemWindow::InsertSlot(POSTYPE at_pos, SCSlot& slot) { RC::eSLOT_INSERT_RESULT eInsertSlotResult = SCSlotContainer::InsertSlot(at_pos, slot); CControlWZ* control_ptr = GetControlWZ(GetControlID_byPosition(at_pos)); RECT rect = control_ptr->GetSizeRect(); SCSlot& real_slot = GetSlot(at_pos); if(item_unit_renderer_) { item_unit_renderer_->AddItemUnit(slot.GetSerial(), slot.GetCode(), &rect, &real_slot ,control_ptr); } else { assert(item_unit_renderer_); } ReFreshRenderSlot(); return eInsertSlotResult; } //------------------------------------------------------------------------------ BOOL uiGMItemWindow::DeleteSlot(POSTYPE at_pos, SCSlot* slot_out) { if (item_unit_renderer_) { item_unit_renderer_->RemoveItemUnit(GetSlot(at_pos).GetSerial()); } SCSlotContainer::DeleteSlot(at_pos, slot_out); ReFreshRenderSlot(); return TRUE; } //------------------------------------------------------------------------------ void uiGMItemWindow::DeleteAllSlot() { if (item_unit_renderer_ == NULL) { assert(item_unit_renderer_); return; } for (int slot_pos = kControl_Button_B011; slot_pos <= kControl_Button_B020; ++slot_pos) { this->DeleteSlot(slot_pos, NULL); } } void uiGMItemWindow::ReFreshRenderSlot() { ItemUnitRenderer::RenderUnit* item_unit_render = NULL; RECT slot_rect; CControlWZ* control_ptr = NULL; CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); for (int i = 0; i < GetMaxSlotNum(); ++i) { POSTYPE current_scroll_pos = scroll_control->GetScrollPosWZ(); SCSlot& rSlot = GetSlot(i); if (IsEmpty(i)) { continue; } /*if (GetCurInvenContainer() == 0 && // 0: InventoryDialog::INVENTORY (i < EXTEND_INVENTORY_MAX))*/ { if(item_unit_renderer_ == NULL) { continue; } item_unit_render = item_unit_renderer_->GetItemUnit(rSlot.GetSerial()); control_ptr = GetControlWZ(GetControlID_byPosition(i)); slot_rect = control_ptr->GetSizeRect(); if (item_unit_render == NULL) { item_unit_render = item_unit_renderer_->AddItemUnit(rSlot.GetSerial(), rSlot.GetCode(), &slot_rect, &rSlot ,control_ptr); } else { item_unit_renderer_->ChangePositionItemUnit(rSlot.GetSerial(), &slot_rect, control_ptr); } } } } void uiGMItemWindow::ChangeFindIconImage(CControlWZ* control, bool is_searching) { SI_TFORMAT sImageFormat; sImageFormat.m_sImageState[E_BASE].m_sImageName = "all_butten4.tga"; sImageFormat.m_sImageState[E_BASE].m_blIs = TRUE; sImageFormat.m_sImageState[E_ON].m_sImageName = "all_butten4.tga"; sImageFormat.m_sImageState[E_ON].m_blIs = TRUE; sImageFormat.m_sImageState[E_CLICK].m_sImageName = "all_butten4.tga"; sImageFormat.m_sImageState[E_CLICK].m_blIs = TRUE; SI_ToolTip tooltip; tooltip.initialize(); tooltip.m_blUse = true; tooltip.m_dwFontID = item_info_font; tooltip.m_coBack = item_text_background_color; tooltip.m_coText = item_text_color[kInComplete_Text_Color]; if (is_searching) { sImageFormat.m_sImageState[E_BASE].m_sFRect.fTopX = 410; sImageFormat.m_sImageState[E_BASE].m_sFRect.fTopY = 195; sImageFormat.m_sImageState[E_ON].m_sFRect.fTopX = 425; sImageFormat.m_sImageState[E_ON].m_sFRect.fTopY = 195; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fTopX = 440; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fTopY = 195; tooltip.m_dwStrID = 11260; } else { sImageFormat.m_sImageState[E_BASE].m_sFRect.fTopX = 410; sImageFormat.m_sImageState[E_BASE].m_sFRect.fTopY = 195; sImageFormat.m_sImageState[E_ON].m_sFRect.fTopX = 425; sImageFormat.m_sImageState[E_ON].m_sFRect.fTopY = 195; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fTopX = 440; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fTopY = 195; tooltip.m_dwStrID = 9707; } sImageFormat.m_sImageState[E_BASE].m_sFRect.fWidth = 15; sImageFormat.m_sImageState[E_BASE].m_sFRect.fHeight = 15; sImageFormat.m_sImageState[E_ON].m_sFRect.fWidth = 15; sImageFormat.m_sImageState[E_ON].m_sFRect.fHeight = 15; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fWidth = 15; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fHeight = 15; control->SetToolTipInfo(&tooltip); control->SetCtrlImageFormat(&sImageFormat); } void uiGMItemWindow::MoveClassIcon(CControlWZ* control, BYTE class_type) { if (control == NULL) { return; } RECT rect = { 0, 0, 0, 0 }; rect = control->GetSizeRect(); LONG long_width = 40; float width = 40.f; float height = 40.f; uiGMItemOptionWindow* dialog = GET_CAST_DIALOG(uiGMItemOptionWindow, IM_GM_WINDOW_MANAGER::GM_ITEM_OPTION_WINDOW); RECT rc; dialog->GetDialogWZ()->GetClientRect(&rc); LONG dialog_width = (rc.right - rc.left); rect.top = rc.bottom; rect.left = rc.left + ((class_type-eCHAR_BERSERKER) * (long_width+3)) + (dialog_width - ((long_width + 3) * (eCHAR_TYPE_MAX - 1)))/2; control->MoveWindowWZ((float)(rect.left), (float)(rect.top), width, height); } void uiGMItemWindow::ChangeClassIcon(CControlWZ* control, BYTE class_type, bool is_checked) { SI_TFORMAT sImageFormat; #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE float x_positions[kTempClassTypeMax] = { 0.f, 614.f, 654.f, 694.f, 734.f, 774.f, 814.f, 947.f , 987.f }; float y_positions[E_NUM] = { 371.f, 411.f, 451.f, 371.f, 491.f}; float y_helloid_position[E_NUM] = { 708.f, 748.f, 788.f, 708.f, 828.f }; float y_witchblade_position[E_NUM] = { 240, 280, 240, 240, 280 }; #else #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID float x_positions[kTempClassTypeMax] = { 0.f, 614.f, 654.f, 694.f, 734.f, 774.f, 814.f, 947.f }; float y_positions[E_NUM] = { 371.f, 411.f, 451.f, 371.f, 491.f}; float y_helloid_position[E_NUM] = { 708.f, 748.f, 788.f, 708.f, 828.f }; #else float x_positions[kTempClassTypeMax] = { 0.f, 614.f, 654.f, 694.f, 734.f, 774.f, 814.f}; float y_positions[E_NUM] = { 371.f, 411.f, 451.f, 371.f, 491.f}; #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID #else float x_positions[kTempClassTypeMax] = { 0.f, 322.f, 353.f, 384.f, 415.f, 446.f}; float y_positions[E_NUM] = { 2.f, 33.f, 64.f, 95.f, 126.f}; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE for (int i = E_BASE; i < E_NUM; ++i) { sImageFormat.m_sImageState[i].m_blIs = TRUE; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT sImageFormat.m_sImageState[i].m_sImageName = "Common_bg01.tga"; sImageFormat.m_sImageState[i].m_sFRect.fWidth = 40; sImageFormat.m_sImageState[i].m_sFRect.fHeight = 40; #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID if (class_type == eCHAR_HELLROID) { switch (i) { case E_BASE: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_helloid_position[E_ON]; break; case E_ON: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_helloid_position[E_CHECK]; break; case E_CLICK: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_helloid_position[E_CLICK]; break; case E_DISABLE: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_helloid_position[E_DISABLE]; break; case E_CHECK: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_helloid_position[E_ON]; break; } if (!is_checked && i == E_BASE) { sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_helloid_position[E_BASE]; } } #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE else if (class_type == eCHAR_WITCHBLADE) { sImageFormat.m_sImageState[i].m_sImageName = "Common_bg02.tga"; switch (i) { case E_BASE: sImageFormat.m_sImageState[i].m_sFRect.fTopX = 788; sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_witchblade_position[E_ON]; break; case E_ON: sImageFormat.m_sImageState[i].m_sFRect.fTopX = 868; sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_witchblade_position[E_CHECK]; break; case E_CLICK: sImageFormat.m_sImageState[i].m_sFRect.fTopX = 868; sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_witchblade_position[E_CLICK]; break; case E_DISABLE: sImageFormat.m_sImageState[i].m_sFRect.fTopX = 788; sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_witchblade_position[E_DISABLE]; break; case E_CHECK: sImageFormat.m_sImageState[i].m_sFRect.fTopX = 788; sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_witchblade_position[E_ON]; break; } if (!is_checked && i == E_BASE) { sImageFormat.m_sImageState[i].m_sFRect.fTopX = 788; sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_witchblade_position[E_BASE]; } } #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE else { switch (i) { case E_BASE: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_ON]; break; case E_ON: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_CHECK]; break; case E_CLICK: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_CLICK]; break; case E_DISABLE: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_DISABLE]; break; case E_CHECK: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_ON]; break; } if (!is_checked && i == E_BASE) { sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_BASE]; } } #else switch (i) { case E_BASE: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_ON]; break; case E_ON: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_CHECK]; break; case E_CLICK: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_CLICK]; break; case E_DISABLE: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_DISABLE]; break; case E_CHECK: sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_ON]; break; } if (!is_checked && i == E_BASE) { sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_BASE]; } #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID #else sImageFormat.m_sImageState[i].m_sImageName = "Dlg3_6.tga"; sImageFormat.m_sImageState[i].m_sFRect.fWidth = 27; sImageFormat.m_sImageState[i].m_sFRect.fHeight = 27; if (is_checked && i == E_BASE) { sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[E_CHECK]; } else { sImageFormat.m_sImageState[i].m_sFRect.fTopY = y_positions[i]; } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE if (class_type != eCHAR_WITCHBLADE) { sImageFormat.m_sImageState[E_BASE].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_ON].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_DISABLE].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_CHECK].m_sFRect.fTopX = x_positions[class_type]; } #else sImageFormat.m_sImageState[E_BASE].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_ON].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_CLICK].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_DISABLE].m_sFRect.fTopX = x_positions[class_type]; sImageFormat.m_sImageState[E_CHECK].m_sFRect.fTopX = x_positions[class_type]; #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE SI_ToolTip tooltip; tooltip.initialize(); tooltip.m_blUse = true; tooltip.m_dwFontID = item_info_font; tooltip.m_coBack = item_text_background_color; tooltip.m_coText = item_text_color[kInComplete_Text_Color]; #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE DWORD class_string[kTempClassTypeMax+1] = { 0, 10001, 10003, 10005, 10007, 10009, 10002, 10006, 2685 }; #else #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID DWORD class_string[kTempClassTypeMax+1] = { 0, 10001, 10003, 10005, 10007, 10009, 10002, 10006 }; #else DWORD class_string[kTempClassTypeMax+1] = { 0, 10001, 10003, 10005, 10007, 10009, 10002 }; #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE tooltip.m_dwStrID = class_string[class_type]; control->SetTextWZ(""); control->SetToolTipInfo(&tooltip); control->SetCtrlImageFormat(&sImageFormat); } void uiGMItemWindow::ESCKeyProcess(DWORD wParam,DWORD lParam) { uiGMItemWindow* dialog = GET_CAST_DIALOG(uiGMItemWindow, IM_GM_WINDOW_MANAGER::GM_ITEM_WINDOW); if (dialog == NULL) { return; } if (dialog->search_end()) { dialog->ShowInterface(FALSE); } else { dialog->SearchStop(); } } void uiGMItemWindow::SearchStop() { set_search_end(true); search_new_ = true; set_search_string("\n"); if (button_control_) { ChangeFindIconImage(button_control_, false); } } void uiGMItemWindow::RegisterESCKeyClose(bool is_value) { if (is_value) { keyMsg msg; ZeroMemory(&msg, sizeof(msg)); msg.dwType = eDoType_GM_Item_Window; msg.wParam = IM_GM_WINDOW_MANAGER::GM_ITEM_WINDOW; msg.DoSomething = uiGMItemWindow::ESCKeyProcess; g_KeyQueueManager.PushBack(msg); } else { g_KeyQueueManager.DeleteMsg(eDoType_GM_Item_Window); } } void uiGMItemWindow::SetFilterName(TCHAR *filter_name) { CCtrlStaticWZ* filter_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_Text_ST02))); if (filter_control != NULL) { filter_control->SetTextWZ(filter_name); } set_search_string("\n"); } bool uiGMItemWindow::GetFilterEquip(BASE_ITEMINFO* item_infomation, BYTE sub_filter) { switch (sub_filter) { case EQUIP_ALL: if (item_infomation->IsWeapon() || item_infomation->IsArmor() || item_infomation->IsAccessory() || item_infomation->IsSpecialAccessory()) { return true; } break; case EQUIP_WEAPON: if (item_infomation->IsWeapon()) { return true; } break; case EQUIP_ARMOR: if (item_infomation->IsArmor()) { return true; } break; case EQUIP_ACCESSORY: if (item_infomation->IsAccessory()) { return true; } break; case EQUIP_SPECIALACCESSORY: if (item_infomation->IsSpecialAccessory()) { return true; } break; default: assert(!"无效的物品装备子过滤器"); return true; break; } return false; } bool uiGMItemWindow::GetFilterWaste(BASE_ITEMINFO *item_infomation, BYTE sub_filter) { switch (sub_filter) { case WASTE_ALL: if (item_infomation->m_byWasteType != 0) { return true; } break; case WASTE_CAN_USE: if (item_infomation->IsCanUseWaste()) { return true; } break; case WASTE_ONLY_WASTE: if (item_infomation->IsCanOnlyUseWaste()) { return true; } break; case WASTE_POTION: if (item_infomation->IsPotion()) { return true; } break; default: assert(!"无效的物品消耗品子过滤器"); return true; break; } return false; } bool uiGMItemWindow::GetFilterGrade(BASE_ITEMINFO *item_infomation, BYTE sub_filter) { ItemSubTypeDetailValue sub_type = item_infomation->GetSubTypeDetail(); ItemSubTypeDetailValue filter_type = ItemSubTypeDetail::kInvalid; switch (sub_filter) { case GRADE_NORMAL: filter_type = ItemSubTypeDetail::kGeneral; break; case GRADE_ULTIMATE: filter_type = ItemSubTypeDetail::kSuperJapan; break; case GRADE_ELITE1: filter_type = ItemSubTypeDetail::kElite1_0st; break; case GRADE_CORRUPT1: filter_type = ItemSubTypeDetail::kCurruptTemple; break; case GRADE_ELITE1_5: filter_type = ItemSubTypeDetail::kElite1_5st; break; case GRADE_ELITE2: filter_type = ItemSubTypeDetail::kElite2_0st; break; case GRADE_ELITE2_5: filter_type = ItemSubTypeDetail::kElite2_5st; break; case GRADE_UNIQUE1: filter_type = ItemSubTypeDetail::kUnique1_0st; break; case GRADE_UNIQUE1_5: filter_type = ItemSubTypeDetail::kUnique1_5st; break; case GRADE_UNIQUE2: filter_type = ItemSubTypeDetail::kUnique2_0st; break; case GRADE_UNIQUE2_5: filter_type = ItemSubTypeDetail::kUnique2_5st; break; case GRADE_LUCKY: filter_type = ItemSubTypeDetail::kFate; break; case GRADE_FIGTER_ELITE2: filter_type = ItemSubTypeDetail::kFigter_Elite2_0st; break; case GRADE_ELITE3: filter_type = ItemSubTypeDetail::kElite3_0st; break; case GRADE_ELITE3_5: filter_type = ItemSubTypeDetail::kElite3_5st; break; case GRADE_ELITE4: filter_type = ItemSubTypeDetail::kElite4_0st; break; default: assert(!"无效的项目评级子过滤器"); return true; break; } return (sub_type == filter_type)?true:false; } bool uiGMItemWindow::GetFilterGender(BASE_ITEMINFO *item_infomation, BYTE sub_filter) { switch (sub_filter) { case GENDER_FREE: if (item_infomation->gender_type == 0) { return true; } break; case GENDER_MALE: if (item_infomation->IsCanUseGender(1)) { return true; } break; case GENDER_FEMALE: if (item_infomation->IsCanUseGender(2)) { return true; } break; case GENDER_MALE_ONLY: if (item_infomation->gender_type == 1) { return true; } break; case GENDER_FEMAIL_ONLY: if (item_infomation->gender_type == 2) { return true; } break; default: assert(!"无效的项目性别子过滤器"); return true; break; } return false; } bool uiGMItemWindow::GetFilterEtc(BASE_ITEMINFO *item_infomation, BYTE sub_filter) { switch (sub_filter) { case ETC_NORMAL: if (item_infomation->m_SCNCode == 40011) { return true; } break; case ETC_QUEST: if (item_infomation->m_wType == eITEMTYPE_QUEST || item_infomation->m_wQuestCode != 0) { return true; } case ETC_AC: if (item_infomation->m_wType == eITEMTYPE_AC) { return true; } break; case ETC_ENCHANT_COMPOSITE: if (item_infomation->m_wType == eITEMTYPE_ENCHANT || item_infomation->m_wType == eITEMTYPE_CRYSTAL || item_infomation->m_wType == eITEMTYPE_SOCKET || item_infomation->m_wType == eITEMTYPE_SOCKETMATERIAL || item_infomation->m_wType == eITEMTYPE_ACCESSORYMATERIAL || item_infomation->m_wType == eITEMTYPE_SACCESSORYMATERIAL) { return true; } break; case ETC_ZARD: if (item_infomation->m_wType == eITEMTYPE_SOCKET_ZARD || item_infomation->m_wType == eITEMTYPE_SOCKET_IDENTIFY || item_infomation->m_wType == eITEMTYPE_SOCKET_COMPOSE_ADDITIVE || item_infomation->m_wType == eITEMTYPE_STAT_CHANGE || item_infomation->m_wType == eITEMTYPE_SOCKETEXTRACT) { return true; } break; case ETC_CHARGE: if (item_infomation->IsChargeItem()) { return true; } break; case ETC_PET: if (item_infomation->m_wType == eITEMTYPE_PET || item_infomation->m_wType == eITEMTYPE_PET_FEED || item_infomation->m_wType == eITEMTYPE_PET_NAME_CARD) { return true; } break; case ETC_RIDER: if (item_infomation->IsRiderItem() || item_infomation->IsRiderPartsItem() || item_infomation->m_wType == eITEMTYPE_EXTEND_DATE_RIDER || item_infomation->m_wType == eITEMTYPE_WAX) { return true; } break; case ETC_CHARACTER: if (item_infomation->m_wType == eITEMTYPE_CHANGE_CHARACTER_GENDER || item_infomation->m_wType == eITEMTYPE_EXTEND_CHARACTER_SLOT || item_infomation->m_wType == eITEMTYPE_CHANGE_CHARACTER_APPEARANCE_ALL || item_infomation->m_wType == eITEMTYPE_CHANGE_CHARACTER_FACE || item_infomation->m_wType == eITEMTYPE_CHANGE_CHARACTER_HAIR || item_infomation->m_wType == eITEMTYPE_CHANGE_CHARACTER_HEIGHT) { return true; } break; case ETC_RANDOM: if (item_infomation->m_wType == eITEMTYPE_RANDOMIZE_ITEM) { return true; } break; case ETC_LOTTO: if (item_infomation->m_wType == eITEMTYPE_LOTTO) { return true; } break; case ETC_COSTUM: if (item_infomation->m_wType == eITEMTYPE_COSTUME) { return true; } break; default: assert(!"无效的项目类型子过滤器"); return true; break; } return false; } void uiGMItemWindow::SetItemWindowState(BYTE state) { item_window_state_ = state; if (history_button_ == NULL) { return; } CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (state == kState_History) { if (scroll_control) { search_scroll_pos_ = scroll_control->GetScrollPosWZ(); } static_state_control_->SetTextWZ("历史列表"); history_button_->SetTextWZ("收藏夹"); } else if (state == kState_BookMark) { if (scroll_control) { history_scroll_pos_ = scroll_control->GetScrollPosWZ(); } static_state_control_->SetTextWZ("收藏夹列表"); history_button_->SetTextWZ("查看搜索"); } else //if (state == kState_Search) { if (scroll_control) { bookmark_scroll_pos_ = scroll_control->GetScrollPosWZ(); } static_state_control_->SetTextWZ("最近的搜索结果"); history_button_->SetTextWZ("查看历史"); } } void uiGMItemWindow::RefreshList(BYTE state, DWORD search_count, DWORD find_size) { WORD scroll_pos = 0; switch (state) { case kState_History: scroll_pos = history_scroll_pos_; break; case kState_BookMark: scroll_pos = bookmark_scroll_pos_; break; case kState_Search: scroll_pos = search_scroll_pos_; break; } if (item_window_state_ == state) { SetSearchProgressData(search_count, find_size); RefreshScroll(scroll_pos); RefreshItemInfo(); } } void uiGMItemWindow::CreateItemFromList() { ITEM_PARAMETAS* item_parameta = ui_gm_window_manager_->item_parametas(); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ(GetControlID_byPosition(kControl_VScroll_VS00))); if (scroll_control == NULL) { return; } int current_scroll_pos = scroll_control->GetScrollPosWZ(); size_t focus = 0; for (int index = 0; index < kDisplay_Item_Info_Num; ++index) { focus = (current_scroll_pos + index); if (GetFocusList()->size() > focus) { DWORD item_code = GetFocusData(focus); BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(item_code); CreateItem(item_info, item_parameta); } else { break; } } } #endif //_DEV_VER