#pragma once #ifdef _DEV_VER #include "uiBase.h" #include "FTextRender.h" //#include "Achievement.h" #include "NPCInfoParser.h" #include #include "VScrollDialog.h" #include "uiGMWindowMan/uiGMWindowMan.h" #define SEARCH_FRAME_UPDATE_TIME 100 #define NUMBER_OF_SEARCHING_PER_A_FRAME 200 #define MAX_VISIBLE_FINDLIST_NUM 6 struct NpcListInfo { MONSTERCODE m_MonsterCode; char m_debug_name[MAX_MONSTERNAME_LENGTH];//µð¹ö±× ³×ÀÓ LEVELTYPE m_Level; LEVELTYPE m_DisplayLevel; DWORD m_dwMaxHP; DWORD m_dwMaxMP; DWORD m_dwMaxSD; CODETYPE m_NCode; // ³×ÀÓÄÚµå BYTE m_byGrade; // º¸½º/ÀÏ¹Ý WORD m_wClass; // ¸ó½ºÅÍ °è¿­ NpcElementWeakness element_weakness; #ifdef _DH_NPC_GROUP_NAME DWORD group_name; //±×·ì³×ÀÓÄÚµå #endif//_DH_NPC_GROUP_NAME }; class uiGMWindowMan; class uiGMNpcWindow : public uiBase, public VScrollDialog, public SCItemSlotContainer { enum UIControlPos { kControl_Button_B004 = 0, kControl_Button_B000, kControl_Button_B005, kControl_Button_B006, kControl_Button_B007, kControl_Button_B008, kControl_Button_B009, kControl_Button_B010, kControl_Button_B001, kControl_Button_B002, kControl_Button_B012, kControl_Button_B003, kControl_Button_B011, kControl_Button_B013, kControl_Button_B014, kControl_Button_B015, kControl_Button_B016, kControl_Text_S000, kControl_Text_S002, kControl_Text_S008, kControl_Edit_E000, kControl_List_L000, kControl_List_L001, kControl_List_L002, kControl_VScroll_V001, kControl_VScroll_V000, kControl_Picture_P003, kControl_Picture_P002, kControl_Picture_P000, kControl_Picture_P001, kControl_Picture_P004, kControl_Picture_P005, kControl_Picture_P012, kControl_Picture_P011, kControl_Picture_P006, kControl_Size, }; enum { kDisplay_Item_Info_Num = 20, }; public: enum { kSelect_All = 0, kSelect_Progress, kSelect_Complete, KSelect_Max, }; enum { kComplete_Text_Color = 0, kInComplete_Text_Color, kEnable_Text_Color, kDisable_Text_Color, KMax_Text_Color, }; enum { kFind_From_Name, //À̸§ °Ë»ö kFind_From_Description, //¼³¸í(µð¹ö±×¿ëÀ̸§) °Ë»ö kFind_From_ItemType, //¾ÆÀÌÅÛ Å¸ÀÔ °Ë»ö kFind_From_WasteType, //¼Ò¸ð ŸÀÔ °Ë»ö(WasteType) kFind_Type_MAX, }; enum { kNpc_ID, //¶¥ºÒ¹Ù¶÷¹° »ö»ó¾ÆÀÌÄÜÀ» ÀÌ¿ëÇØº¸ÀÚ kNpc_Type,//Á¤¿¹ ·°Å°... <-> ¸ó½ºÅÍ, ¿£ÇǽÃ, Ç÷¹À̾î kNpc_State,//hp/mp/sd <-> damage kNpc_Name,//À̸§ <-> µð¹ö±×³×ÀÓ kNpc_lv,//Ç¥½Ã·¹º§ <-> ½ÇÁ¦·¹º§ kNpc_Location, //°ÅÁÖÁö¿ª<-> °ø°ÝŸÀÔ kNpc_Max, }; enum { kGradeLevel4 = 4, }; public: uiGMNpcWindow(InterfaceManager* ui_manager); virtual ~uiGMNpcWindow(void); virtual void Init(CDrawBase* draw_base); virtual void Release(); virtual void OnUpdateSolarDialog(); virtual void OnRenderSolarDialog(); virtual void MessageProc(SI_MESSAGE* message); virtual void MouseOver_MsgProc(SI_MESSAGE* message); virtual void OnShowWindow(BOOL is_show); virtual void Process(DWORD tick_count); void ItemSearch(TCHAR* search_word); void SearchStop(); bool search_end(){ return search_end_; } void set_search_end(bool search_end){ search_end_ = search_end; } TCHAR* search_string(){ return search_string_; } void set_search_string(TCHAR* search_string); void SetFilterName(TCHAR* filter_name); void CreateNpc(BASE_NPCINFO* npc_info, ITEM_PARAMETAS* item_parameta, BYTE create_type = ITEM_TYPE_NORMAL, BYTE lucky_expiry = 0); void CreateItemFromList(); void RefreshList(BYTE state, DWORD search_count, DWORD find_size); BYTE item_window_state(){ return item_window_state_; } void RefreshItemInfo(); DWORD last_summon_npc_code(){ return last_summon_npc_code_; } protected: virtual CCtrlVScrollWZ* vscroll_control(); virtual bool GetScrollArea(RECT& area); virtual bool OnVScrollDown(SI_MESSAGE* msg); virtual bool OnVScrollUp(SI_MESSAGE* msg); virtual bool OnVScrollThumb(SI_MESSAGE* msg); private: bool OnUpScroll(SI_MESSAGE* message); bool OnDownScroll(SI_MESSAGE* message); bool OnThumbScroll(SI_MESSAGE* message); void OnMouseWheelScroll(BYTE mouse_wheel_state); void RegisterControl(); bool OnLButtonClick(SI_MESSAGE* message); bool OnRButtonClick(SI_MESSAGE* message); bool OnLButtonDoubleClick(SI_MESSAGE* message); bool ShowEditControl(bool is_show); void OnSearch(); void FillFindListData(TCHAR* search_string); void HideFindWord(); void ShowFindWord(); void InsertFindList(const char* item_name); void SetItemData(int index_display, int index_info); void RefreshScroll(WORD ac_index_index); void ClearItemInfoToDisplay(int index_display); void SetNpcDataString(int index_display, BASE_NPCINFO* npc_info); void SetRectItemControl(int index_display, bool enable_reward); void RenderItemInfoText(DWORD index_display); static void CallBackRenderItemInfo(CControlWZ* control_ptr, void* parameter); void ShowControl(POSTYPE control_pos, bool is_show); void ToggleShowControl(POSTYPE control_pos); void SetSearchProgressData(DWORD search_count, DWORD find_count); void UpdateToolTip(); //void SetItemSlot(int index_display, BASE_NPCINFO* item_info); //bool AddItem(POSTYPE at_pos, SLOTCODE item_code); void ChangeFindIconImage(CControlWZ* control, bool is_searching); void RegisterESCKeyClose(bool is_value); static void ESCKeyProcess(DWORD wParam,DWORD lParam); bool GetFilterEquip(BASE_ITEMINFO* item_infomation, BYTE sub_filter); bool GetFilterWaste(BASE_ITEMINFO* item_infomation, BYTE sub_filter); bool GetFilterGrade(BASE_ITEMINFO* item_infomation, BYTE sub_filter); bool GetFilterEtc(BASE_ITEMINFO *item_infomation, BYTE sub_filter); bool GetFilterResult(DWORD item_code); void LoadCreateHistory(); std::vector* GetFocusList(); DWORD GetFocusData(DWORD index); void SetItemWindowState(BYTE state); void RefreshPreFindList(TCHAR* find_string); void SetCurrentScrollPosition(int current_scroll_pos); void SetNpcDataList(int index_display, NpcListInfo* npc_list_info); void ListInit(); private: uiGMWindowMan* ui_gm_window_manager_; CCtrlDxEditBox* edit_control_; CCtrlStaticWZ* static_edit_control_; CCtrlButtonWZ* static_state_control_; CCtrlListWZ* find_list_ptr_; CCtrlButtonWZ* button_control_; CCtrlButtonWZ* history_button_; CCtrlButtonWZ* monster_kill_button_; CCtrlButtonWZ* reset_button_; CCtrlButtonWZ* button_search_type_text_control_; std::vector item_info_text_render_; FTextRender info_detail_text_; NPC_NAME_INFO::iterator npc_name_info_iterator_; NPC_NAME_INFO::iterator npc_name_info_iterator_end_; std::vector npc_list_; TCHAR pre_find_word_[INTERFACE_STRING_LENGTH]; TCHAR search_string_[MAX_CHAT_LEN+1]; bool search_new_; bool search_end_; int search_index_; int find_scroll_current_value_; int find_scroll_value_max_; BYTE selected_class_; BYTE set_selected_class_; DWORD item_code_; unsigned int search_frame_per_update_time_; unsigned int number_of_searching_per_a_frame_; float search_gauge_control_size_; float search_gauge_texture_size_; BYTE search_type_; BYTE item_window_state_; unsigned int total_searched_count_; DWORD last_summon_npc_code_; int history_scroll_pos_; int search_scroll_pos_; int bookmark_scroll_pos_; std::vector* searched_results_; std::vector* created_histroys_; std::vector* bookmark_lists_; }; inline std::vector* uiGMNpcWindow::GetFocusList() { if (item_window_state_ == kState_History) { return created_histroys_; } else if (item_window_state_ == kState_BookMark) { return bookmark_lists_; } else // kState_Search { return searched_results_; } } inline DWORD uiGMNpcWindow::GetFocusData(DWORD index) { if (item_window_state_ == kState_History) { size_t size = created_histroys_->size();// È÷½ºÅ丮´Â ¿ª¼ø if (index < size) { size_t real_index = (size - index - 1); if (real_index > size) { real_index = 0; } return (*created_histroys_)[real_index]; } else { return 0; } } else if (item_window_state_ == kState_BookMark) { size_t size = bookmark_lists_->size();// ºÏ¸¶Å©µµ ¿ª¼ø if (index < size) { size_t real_index = (size - index - 1); if (real_index > size) { real_index = 0; } return (*bookmark_lists_)[real_index]; } else { return 0; } } else // kState_Search { return (*searched_results_)[index]; } } inline void uiGMNpcWindow::ShowControl(POSTYPE control_pos, bool is_show) { CControlWZ* control = GetControlWZ(GetControlID_byPosition(control_pos)); if (control != NULL) { control->ShowWindowWZ((is_show == true) ? WZ_SHOW : WZ_HIDE); } } inline void uiGMNpcWindow::ToggleShowControl(POSTYPE control_pos) { CControlWZ* control = GetControlWZ(GetControlID_byPosition(control_pos)); if (control != NULL) { ENUM_STATEWZ control_state = control->GetState(); control->ShowWindowWZ((control_state == WZ_HIDE) ? WZ_SHOW : WZ_HIDE); } } #endif//_DEV_VER