From c2f44dce04dab96139092dca3e538b8bc5e88e7c Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Thu, 21 Jul 2022 13:29:03 +0300 Subject: [PATCH 1/8] Rename Otomo to Buddy to avoid confusion. --- reframework/autorun/MHR_Overlay/Misc/language.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index b21e68a..45e1fbf 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -109,8 +109,8 @@ language.default_language = { dung_bomb = "Dung Bomb", steel_fang = "Steel Fang", quick_sand = "Quick Sand", - fall_otomo_trap = "Fall Otomo Trap", - shock_otomo_trap = "Shock Otomo Trap" + fall_otomo_trap = "Fall Buddy Trap", + shock_otomo_trap = "Shock Buddy Trap" }, UI = { @@ -287,7 +287,7 @@ language.default_language = { bomb_damage = "Bomb Damage", kunai_damage = "Kunai Damage", installation_damage = "Installation Damage", - otomo_damage = "Otomo Damage", + otomo_damage = "Buddy Damage", monster_damage = "Monster Damage", poison_damage = "Poison Damage", blast_damage = "Blast Damage", From 293eef9655e0395556d985d78a706c4a4bfcefcc Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:47:51 +0300 Subject: [PATCH 2/8] Fix myself being displayed in Damage Meter twice --- .../MHR_Overlay/Damage_Meter/player.lua | 193 ++++++------------ .../UI/Modules/damage_meter_UI.lua | 4 +- 2 files changed, 69 insertions(+), 128 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua index 3337ef4..7eab415 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua @@ -14,12 +14,12 @@ player.myself = nil; player.myself_position = Vector3f.new(0, 0, 0); player.total = nil; -function player.new(player_id, player_name, player_master_rank, player_hunter_rank) +function player.new(id, name, master_rank, hunter_rank) local new_player = {}; - new_player.id = player_id; - new_player.name = player_name; - new_player.hunter_rank = player_hunter_rank; - new_player.master_rank = player_master_rank; + new_player.id = id; + new_player.name = name; + new_player.hunter_rank = hunter_rank; + new_player.master_rank = master_rank; new_player.cart_count = 0; @@ -155,12 +155,11 @@ function player.new(player_id, player_name, player_master_rank, player_hunter_ra new_player.display.elemental_damage = 0; new_player.display.ailment_damage = 0; - if player_name == "Total" then + if name == "Total" then player.init_total_UI(new_player); else player.init_UI(new_player); end - return new_player; end @@ -364,12 +363,14 @@ end local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager"); local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo"); +local myself_quest_index_field = lobby_manager_type_def:get_field("_myselfQuestIndex"); local quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo"); local hunter_info_field = lobby_manager_type_def:get_field("_hunterInfo"); local my_hunter_info_type_def = my_hunter_info_field:get_type(); local name_field = my_hunter_info_type_def:get_field("_name"); +local hunter_unique_id_field = my_hunter_info_type_def:get_field("_HunterUniqueId"); local member_index_field = my_hunter_info_type_def:get_field("_memberIndex"); local hunter_rank_field = my_hunter_info_type_def:get_field("_hunterRank"); local master_rank_field = my_hunter_info_type_def:get_field("_masterRank"); @@ -378,107 +379,25 @@ local hunter_info_type_def = hunter_info_field:get_type(); local get_count_method = hunter_info_type_def:get_method("get_Count"); local get_item_method = hunter_info_type_def:get_method("get_Item"); + +local guid_type = hunter_unique_id_field:get_type(); +local guid_equals_method = guid_type:get_method("Equals(System.Guid)"); + local progress_manager_type_def = sdk.find_type_definition("snow.progress.ProgressManager"); local get_hunter_rank_method = progress_manager_type_def:get_method("get_HunterRank"); local get_master_rank_method = progress_manager_type_def:get_method("get_MasterRank"); - -local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager"); local get_master_player_id_method = player_manager_type_def:get_method("getMasterPlayerID"); -function player.update_player_list_in_village() - if singletons.lobby_manager == nil then - return; - end - - if singletons.progress_manager == nil then - return; - end - - -- myself player - local myself_player_info = my_hunter_info_field:get_data(singletons.lobby_manager); - if myself_player_info == nil then - customization_menu.status = "No myself player info list"; - return; - end - - local myself_player_name = name_field:get_data(myself_player_info); - if myself_player_name == nil then - customization_menu.status = "No myself player name"; - return; - end - - local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager); - if myself_hunter_rank == nil then - customization_menu.status = "No myself hunter rank"; - myself_hunter_rank = 0; - end - - - local myself_master_rank = get_master_rank_method:call(singletons.progress_manager); - if myself_master_rank == nil then - customization_menu.status = "No myself master rank"; - myself_master_rank = 0; - end - - local myself_id = get_master_player_id_method:call(singletons.player_manager); - if myself_id == nil then - customization_menu.status = "No myself player id"; - elseif player.myself == nil or myself_id ~= player.myself.id then - player.myself = player.new(myself_id, myself_player_name, myself_master_rank, myself_hunter_rank); - player.list[myself_id] = player.myself; - end - - -- other players - local player_info_list = hunter_info_field:get_data(singletons.lobby_manager); - if player_info_list == nil then - customization_menu.status = "No player info list"; - return; - end - - local count = get_count_method:call(player_info_list); - if count == nil then - customization_menu.status = "No player info list count"; - return; - end - - for i = 0, count - 1 do - local player_info = get_item_method:call(player_info_list, i); - if player_info == nil then - goto continue; - end - - local player_id = member_index_field:get_data(player_info); - if player_id == nil then - goto continue; - end - - local player_hunter_rank = hunter_rank_field:get_data(player_info); - if player_hunter_rank == nil then - goto continue; - end - - local player_master_rank = master_rank_field:get_data(player_info); - if player_hunter_rank == nil then - player_master_rank = 0; - end - - local player_name = name_field:get_data(player_info); - if player_name == nil then - goto continue; - end - - if player.myself.id == player_id then - player.list[player_id] = player.myself; - elseif player.list[player_id] == nil or player.list[player_id].name ~= player_name then - player.list[player_id] = player.new(player_id, player_name, player_master_rank, player_hunter_rank); - end - - ::continue:: +function player.update_player_list(is_on_quest) + if is_on_quest then + player.update_player_list_(quest_hunter_info_field); + else + player.update_player_list_(hunter_info_field); end end -function player.update_player_list_on_quest() +function player.update_player_list_(hunter_info_field_) if singletons.lobby_manager == nil then return; end @@ -500,28 +419,41 @@ function player.update_player_list_on_quest() return; end - local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager); - if myself_hunter_rank == nil then - customization_menu.status = "No myself hunter rank"; - myself_hunter_rank = 0; - end + local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager) or 0; + local myself_master_rank = get_master_rank_method:call(singletons.progress_manager) or 0; - local myself_master_rank = get_master_rank_method:call(singletons.progress_manager); - if myself_hunter_rank == nil then - customization_menu.status = "No myself master rank"; - myself_hunter_rank = 0; - end + local myself_id = get_master_player_id_method:call(singletons.player_manager) or -1; + --if quest_status.is_online then + --myself_id = get_master_player_id_method:call(singletons.player_manager) or -1; + --else + --myself_id = myself_quest_index_field:call(singletons.lobby_manager) or -1; + --end - local myself_id = get_master_player_id_method:call(singletons.player_manager); if myself_id == nil then customization_menu.status = "No myself player id"; - elseif player.myself == nil or myself_id ~= player.myself.id then - player.myself = player.new(myself_id, myself_player_name, myself_master_rank, myself_hunter_rank); - player.list[myself_id] = player.myself; + return; + end + + local myself_guid = hunter_unique_id_field:get_data(myself_player_info); + if myself_guid == nil then + customization_menu.status = "No myself guid"; + return; + end + + --local myself_guid_string = guid_tostring_method:call(myself_guid); + --if myself_guid_string == nil then + -- customization_menu.status = "No myself guid string"; + -- return; + --end + + if myself_id ~= player.myself.id then + player.list[player.myself.id] = nil; + player.myself = player.new(myself_id, myself_guid, myself_player_name, myself_master_rank, myself_hunter_rank); + player.list[myself_id] = player.myself; end -- other players - local player_info_list = quest_hunter_info_field:get_data(singletons.lobby_manager); + local player_info_list = hunter_info_field_:get_data(singletons.lobby_manager); if player_info_list == nil then customization_menu.status = "No player info list"; return; @@ -545,25 +477,36 @@ function player.update_player_list_on_quest() goto continue; end - local player_hunter_rank = hunter_rank_field:get_data(player_info); - if player_hunter_rank == nil then - goto continue; + local player_guid = hunter_unique_id_field:get_data(player_info); + if player_guid == nil then + customization_menu.status = "No player guid"; + return; end - local player_master_rank = master_rank_field:get_data(player_info); - if player_master_rank == nil then - player_master_rank = 0; - end + --local player_guid_string = guid_tostring_method:call(player_guid); + --if player_guid_string == nil then + -- customization_menu.status = "No player guid string"; + -- return; + --end + + local player_hunter_rank = hunter_rank_field:get_data(player_info) or 0; + local player_master_rank = master_rank_field:get_data(player_info) or 0; local player_name = name_field:get_data(player_info); if player_name == nil then goto continue; end - if player.myself.id == player_id then - player.list[player_id] = player.myself; - elseif player.list[player_id] == nil or player.list[player_id].name ~= player_name then - player.list[player_id] = player.new(player_id, player_name, player_master_rank, player_hunter_rank); + if player.list[player_id] == nil or + not guid_equals_method:call(player.list[player_id].guid, player_guid) + --player.list[player_id].guid ~= player_guid + then + local _player = player.new(player_id, player_guid, player_name, player_master_rank, player_hunter_rank); + player.list[player_id] = _player; + + if player_name == player.myself.name and player_hunter_rank == player.myself.hunter_rank and player_master_rank == player.myself.master_rank then + player.myself = _player; + end end ::continue:: diff --git a/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua b/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua index e986683..dc63496 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua @@ -54,7 +54,7 @@ function damage_meter_UI.get_players(player_info_list) local _player = player.get_player(player_id); if _player ~= nil then - if player_id == player.myself.id and cached_config.settings.my_damage_bar_location ~= "Normal" then + if _player == player.myself and cached_config.settings.my_damage_bar_location ~= "Normal" then goto continue; end table.insert(quest_players, _player); @@ -74,8 +74,6 @@ function damage_meter_UI.draw() return; end - - local quest_players = {}; if damage_meter_UI.freeze_displayed_players and damage_meter_UI.last_displayed_players ~= {} then quest_players = damage_meter_UI.last_displayed_players; From 2fa521b833316d9fb451cac9074c2bc964c8beb8 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:48:30 +0300 Subject: [PATCH 3/8] Fixe Player Name Size Limit --- reframework/autorun/MHR_Overlay/UI/drawing.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/UI/drawing.lua b/reframework/autorun/MHR_Overlay/UI/drawing.lua index 41f957c..07c0430 100644 --- a/reframework/autorun/MHR_Overlay/UI/drawing.lua +++ b/reframework/autorun/MHR_Overlay/UI/drawing.lua @@ -40,15 +40,17 @@ function drawing.limit_text_size(text, size_limit) end local limited_text = text; - while true do + while limited_text ~= "..." do local text_width, text_height = drawing.font:measure(limited_text); if text_width < size_limit then - return limited_text; + break; else limited_text = unicode_helpers.sub(limited_text, 1, -5) .. "..."; end end + + return limited_text; end function drawing.scale_color_opacity(color, scale) From 697541fd52a733d73cec105a8b98b7ae1e3bc553 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:49:13 +0300 Subject: [PATCH 4/8] Add option to Freeze DPS on Quest Clear --- .../autorun/MHR_Overlay/Game_Handler/time.lua | 44 +++---------------- .../autorun/MHR_Overlay/Misc/config.lua | 13 ++++-- .../autorun/MHR_Overlay/Misc/language.lua | 2 + .../MHR_Overlay/UI/customization_menu.lua | 6 +++ .../data/MHR Overlay/languages/en-us.json | 7 +-- .../data/MHR Overlay/languages/ko-kr.json | 1 + .../data/MHR Overlay/languages/ru-ru.json | 33 +++++++------- .../data/MHR Overlay/languages/zh-cn.json | 1 + .../data/MHR Overlay/languages/zh-tw.json | 1 + 9 files changed, 48 insertions(+), 60 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Game_Handler/time.lua b/reframework/autorun/MHR_Overlay/Game_Handler/time.lua index 6b39a1f..0ae24b4 100644 --- a/reframework/autorun/MHR_Overlay/Game_Handler/time.lua +++ b/reframework/autorun/MHR_Overlay/Game_Handler/time.lua @@ -1,6 +1,7 @@ local time = {}; local singletons; local customization_menu; +local quest_status; local player; local config; local small_monster; @@ -47,28 +48,25 @@ function time.tick() if time.total_elapsed_script_seconds - time.last_elapsed_script_seconds > 1 then time.last_elapsed_script_seconds = time.total_elapsed_script_seconds; time.update_players_dps(); - --time.update_small_monsters(); end end function time.update_players_dps() local cached_config = config.current_config.damage_meter_UI.settings; - - local myself_updated = false; + + if cached_config.freeze_dps_on_quest_clear and quest_status.is_quest_clear then + return; + end local new_total_dps = 0; for _, _player in pairs(player.list) do - if _player == player.myself then - myself_updated = true; - end - if _player.join_time == -1 then _player.join_time = time.total_elapsed_script_seconds; end if cached_config.dps_mode == "Quest Time" then if time.total_elapsed_seconds > 0 then - player.myself.dps = player.myself.display.total_damage / time.total_elapsed_seconds; + _player.dps = _player.display.total_damage / time.total_elapsed_seconds; end elseif cached_config.dps_mode == "Join Time" then if time.total_elapsed_script_seconds - _player.join_time > 0 then @@ -82,45 +80,17 @@ function time.update_players_dps() new_total_dps = new_total_dps + _player.dps; end - - if not myself_updated then - if player.myself.join_time == -1 then - player.myself.join_time = time.total_elapsed_script_seconds; - end - - if cached_config.dps_mode == "Quest Time" then - if time.total_elapsed_seconds > 0 then - player.myself.dps = player.myself.display.total_damage / time.total_elapsed_seconds; - end - elseif cached_config.dps_mode == "Join Time" then - if time.total_elapsed_script_seconds - player.myself.join_time > 0 then - player.myself.dps = player.myself.display.total_damage / (time.total_elapsed_script_seconds - player.myself.join_time); - end - elseif cached_config.dps_mode == "First Hit" then - if time.total_elapsed_script_seconds - player.myself.first_hit_time > 0 then - player.myself.dps = player.myself.display.total_damage / (time.total_elapsed_script_seconds - player.myself.first_hit_time); - end - end - - new_total_dps = new_total_dps + player.myself.dps; - end player.total.dps = new_total_dps; end -function time.update_small_monsters() - for enemy, monster in pairs(small_monster.list) do - small_monster.update(enemy, monster); - end -end - function time.init_module() player = require("MHR_Overlay.Damage_Meter.player"); singletons = require("MHR_Overlay.Game_Handler.singletons"); customization_menu = require("MHR_Overlay.UI.customization_menu"); - time = require("MHR_Overlay.Game_Handler.time"); config = require("MHR_Overlay.Misc.config"); small_monster = require("MHR_Overlay.Monsters.small_monster"); + quest_status = require("MHR_Overlay.Game_Handler.quest_status"); end return time; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Misc/config.lua b/reframework/autorun/MHR_Overlay/Misc/config.lua index 50b686b..a9357d1 100644 --- a/reframework/autorun/MHR_Overlay/Misc/config.lua +++ b/reframework/autorun/MHR_Overlay/Misc/config.lua @@ -3740,21 +3740,26 @@ function config.init() }, settings = { - orientation = "Vertical", -- "Vertical" or "Horizontal" + + + hide_myself = false, + hide_other_players = false, + hide_total_damage = false, hide_module_if_total_damage_is_zero = false, hide_player_if_player_damage_is_zero = false, hide_total_if_total_damage_is_zero = false, total_damage_offset_is_relative = true, + + freeze_dps_on_quest_clear = true, + orientation = "Vertical", -- "Vertical" or "Horizontal" highlighted_bar = "Me", damage_bar_relative_to = "Top Damage", -- "total damage" or "top damage" my_damage_bar_location = "First", -- "normal" or "first" or "last" dps_mode = "First Hit", - hide_myself = false, - hide_other_players = false, - hide_total_damage = false, + player_name_size_limit = 150 }, diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 45e1fbf..8614a85 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -382,6 +382,8 @@ language.default_language = { prioritize_large_monsters = "Large Monsters on High Priority", max_monster_updates_per_tick = "Max Monster Updates per Tick", + + freeze_dps_on_quest_clear = "Freeze DPS when Quest is cleared" } }; diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index c7a114d..1da78e7 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -15018,6 +15018,12 @@ function customization_menu.draw() config_changed = config_changed or changed; damage_meter_UI_changed = damage_meter_UI_changed or changed; + changed, config.current_config.damage_meter_UI.settings.freeze_dps_on_quest_clear = imgui.checkbox( + language.current_language.customization_menu.freeze_dps_on_quest_clear, + config.current_config.damage_meter_UI.settings.freeze_dps_on_quest_clear); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + changed, customization_menu.damage_meter_UI_orientation_index = imgui.combo(language.current_language.customization_menu .orientation, customization_menu.damage_meter_UI_orientation_index, customization_menu.displayed_orientation_types); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index b4d70af..f4264df 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -17,7 +17,7 @@ "blast": "Blast", "dung_bomb": "Dung Bomb", "exhaust": "Exhaust", - "fall_otomo_trap": "Fall Otomo Trap", + "fall_otomo_trap": "Fall Buddy Trap", "fall_trap": "Fall Trap", "fireblight": "Fireblight", "flash": "Flash", @@ -26,7 +26,7 @@ "poison": "Poison", "quick_sand": "Quick Sand", "ride": "Wyvern Riding", - "shock_otomo_trap": "Shock Otomo Trap", + "shock_otomo_trap": "Shock Buddy Trap", "shock_trap": "Shock Trap", "sleep": "Sleep", "steel_fang": "Steel Fang", @@ -98,6 +98,7 @@ "first_hit": "First Hit", "flinch_count": "Flinch Count", "foreground": "Foreground", + "freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared", "global_position_modifier": "Global Position Modifier", "global_scale_modifier": "Global Scale Modifier", "global_settings": "Global Settings", @@ -164,7 +165,7 @@ "orientation": "Orientation", "other_damage": "Other Damage", "other_players": "Other Players", - "otomo_damage": "Otomo Damage", + "otomo_damage": "Buddy Damage", "part_health": "Part Health", "part_name": "Part Name", "part_name_label": "Part Name Label", diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 306d130..af71ebd 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -98,6 +98,7 @@ "first_hit": "첫 공격", "flinch_count": "경직 횟수", "foreground": "전경색", + "freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared", "global_position_modifier": "전역 위치 배율", "global_scale_modifier": "전역 크기 배율", "global_settings": "전역 설정", diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index beb5360..33bd3a0 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -98,6 +98,7 @@ "first_hit": "Первый удар", "flinch_count": "Кол-во вздрагиваний", "foreground": "Передний план", + "freeze_dps_on_quest_clear": "Заморозить УВС после завершения квеста", "global_position_modifier": "Глобальный модификатор расположения", "global_scale_modifier": "Глобальный модификатор размера", "global_settings": "Общие настройки", @@ -239,7 +240,7 @@ "font_name": "NotoSansKR-Bold.otf", "parts": { "abdomen": "Брюхо", - "antenna": "Antenna", + "antenna": "Антернна", "arms": "Передние лапы", "arms_mud": "Передние лапы (в грязи)", "back": "Спина", @@ -247,49 +248,49 @@ "body": "Тело", "body_mud": "Тело (в грязи)", "carapace": "Панцирь", - "chest": "Chest", + "chest": "Грудь", "chest_windsac": "Грудь (мешочек)", "claw": "Когти", "crest": "Crest", "dorsal_fin": "Спинной плавник", - "foreleg": "Foreleg", - "forelegs": "Forelegs", + "foreleg": "Передняя лапа", + "forelegs": "Передние лапы", "head": "Голова", "head_mud": "Голова (в грязи)", - "hind_leg": "Hind Leg", - "hind_legs": "Hind Legs", + "hind_leg": "Задняя лапа", + "hind_legs": "Задние лапы", "large_mudbulb": "Большой мешочек грязи", "left_arm": "Передняя лапа Л", "left_arm_ice": "Передняя лапа Л (во льду)", "left_claw": "Клешня Л", "left_cutwing": "Крыло Л", - "left_foreleg": "Foreleg L", - "left_hind_leg": "Hind Leg L", + "left_foreleg": "Передняя лапа Л", + "left_hind_leg": "Задня лапа Л", "left_leg": "Задняя лапа Л", "left_leg_mud": "Задняя лапа Л (в грязи)", "left_legs": "Левые лапы", "left_wing": "Крыло Л", - "left_wingclaw": "Wingclaw L", + "left_wingclaw": "Крыло-коготь Л", "legs": "Задние лапы", "lower_back": "Нижняя часть спины", "lower_body": "Нижняя часть тела", "mane": "Грива", - "mudbulb": "Mudbulb", + "mudbulb": "Мешочек грязи", "neck": "Шея", "rear": "Зад", "right_arm": "Передняя лапа П", "right_arm_ice": "Передняя лапа П (во льду)", "right_claw": "Клешня П", "right_cutwing": "Крыло П", - "right_foreleg": "Foreleg R", - "right_hind_leg": "Hind Leg R", + "right_foreleg": "Передняя лапа П", + "right_hind_leg": "Задняя лапа П", "right_leg": "Задняя лапа П", "right_leg_mud": "Задняя лапа П (в грязи)", "right_legs": "Правые лапы", "right_wing": "Крыло П", - "right_wingclaw": "Wingclaw R", + "right_wingclaw": "Крыло-коготь П", "rock": "Камень", - "shell": "Shell", + "shell": "Панцирь", "spinning": "Вращение", "tail": "Хвост", "tail_mud": "Хвост (в грязи)", @@ -300,8 +301,8 @@ "unknown": "?", "upper_back": "Верхняя часть спины", "upper_body": "Верхняя часть тела", - "wingclaw": "Wingclaw", - "wingclaws": "Wingclaws", + "wingclaw": "Крыло-коготь", + "wingclaws": "Крыло-коготь", "wings": "Крылья" } } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index 1c6b4df..b8990ed 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -98,6 +98,7 @@ "first_hit": "第一击", "flinch_count": "胆怯次数", "foreground": "前景", + "freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared", "global_position_modifier": "全局位置更改", "global_scale_modifier": "全局比例更改", "global_settings": "全局设定", diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index 523ac7a..ba67778 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -98,6 +98,7 @@ "first_hit": "第一擊", "flinch_count": "膽怯次數", "foreground": "圖形化顯示條的底色", + "freeze_dps_on_quest_clear": "Freeze DPS when Quest is cleared", "global_position_modifier": "全域位置更改", "global_scale_modifier": "全域比例更改", "global_settings": "全域設定", From 8785d72814e88147bc3826f3d368557c3b04faf6 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:49:42 +0300 Subject: [PATCH 5/8] Add is_host andis_quest_clear --- .../MHR_Overlay/Game_Handler/quest_status.lua | 67 ++++++++++++++----- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua b/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua index 121dc4d..b0d01b0 100644 --- a/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua +++ b/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua @@ -11,36 +11,48 @@ local env_creature; quest_status.index = 0; quest_status.is_online = false; +quest_status.is_host = false; quest_status.is_training_area = false; -quest_status.update_is_result_screen = false; +quest_status.is_result_screen = false; +quest_status.is_quest_clear = false; local quest_manager_type_definition = sdk.find_type_definition("snow.QuestManager"); local on_changed_game_status = quest_manager_type_definition:get_method("onChangedGameStatus"); local get_status_method = quest_manager_type_definition:get_method("getStatus"); local is_result_demo_play_start_method = quest_manager_type_definition:get_method("isResultDemoPlayStart"); +local set_quest_clear_method = quest_manager_type_definition:get_method("setQuestClear"); +local set_quest_clear_sub_method = quest_manager_type_definition:get_method("setQuestClearSub"); +local set_quest_clear_sub_hyakurui_method = quest_manager_type_definition:get_method("setQuestClearSubHyakuryu"); + local village_area_manager_type_def = sdk.find_type_definition("snow.VillageAreaManager"); local check_current_area_training_area_method = village_area_manager_type_def:get_method("checkCurrentArea_TrainingArea"); local lobby_manager_type_definition = sdk.find_type_definition("snow.LobbyManager"); local is_quest_online_method = lobby_manager_type_definition:get_method("IsQuestOnline"); +local is_quest_host_method = lobby_manager_type_definition:get_method("isQuestHost"); -function quest_status.update(args) - local new_quest_status = sdk.to_int64(args[3]); - if new_quest_status ~= nil then - if (quest_status.index < 2 and new_quest_status == 2) - or new_quest_status < 2 then - player.init(); - small_monster.init_list(); - large_monster.init_list(); - env_creature.init_list(); - damage_meter_UI.freeze_displayed_players = false; - damage_meter_UI.last_displayed_players = {}; - end - quest_status.index = new_quest_status; +function quest_status.on_changed_game_status(new_quest_status) + if (quest_status.index < 2 and new_quest_status == 2) + or new_quest_status < 2 then + + player.init(); + small_monster.init_list(); + large_monster.init_list(); + env_creature.init_list(); + + quest_status.is_quest_clear = false; + damage_meter_UI.freeze_displayed_players = false; + damage_meter_UI.last_displayed_players = {}; end + + quest_status.index = new_quest_status; +end + +function quest_status.on_set_quest_clear() + quest_status.is_quest_clear = true; end function quest_status.init() @@ -77,6 +89,19 @@ function quest_status.update_is_online() quest_status.is_online = is_quest_online; end +function quest_status.update_is_host() + if singletons.lobby_manager == nil then + return; + end + + local is_host = is_quest_host_method:call(singletons.lobby_manager, true); + if is_host == nil then + return; + end + + quest_status.is_host = is_host; +end + function quest_status.update_is_training_area() if singletons.village_area_manager == nil then customization_menu.status = "No village area manager"; @@ -122,7 +147,19 @@ function quest_status.init_module() quest_status.init(); sdk.hook(on_changed_game_status, function(args) - pcall(quest_status.update, args); + quest_status.on_changed_game_status(sdk.to_int64(args[3])); + end, function(retval) return retval; end); + + sdk.hook(set_quest_clear_method, function(args) + quest_status.on_set_quest_clear(); + end, function(retval) return retval; end); + + sdk.hook(set_quest_clear_sub_method, function(args) + quest_status.on_set_quest_clear(); + end, function(retval) return retval; end); + + sdk.hook(set_quest_clear_sub_hyakurui_method, function(args) + quest_status.on_set_quest_clear(); end, function(retval) return retval; end); end From 99a56ff6ff7b94e3351211f4663da2c1354683f8 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:49:53 +0300 Subject: [PATCH 6/8] refactor naming --- .../autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua b/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua index efb561b..9477850 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua @@ -18,8 +18,8 @@ local get_boss_enemy_method = enemy_manager_type_def:get_method("getBossEnemy"); local gui_manager_type_def = sdk.find_type_definition("snow.gui.GuiManager"); local get_tg_camera_method = gui_manager_type_def:get_method("get_refGuiHud_TgCamera"); -local tg_camera_type = get_tg_camera_method:get_return_type(); -local get_targeting_enemy_index_field = tg_camera_type:get_field("OldTargetingEmIndex"); +local tg_camera_type_def = get_tg_camera_method:get_return_type(); +local get_targeting_enemy_index_field = tg_camera_type_def:get_field("OldTargetingEmIndex"); function large_monster_UI.draw(dynamic_enabled, static_enabled, highlighted_enabled) if singletons.enemy_manager == nil then From 638fd40a43435f26c99b3cddd9b51c65c14a54c4 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:52:22 +0300 Subject: [PATCH 7/8] Add debug module - To prevent silly me from accidentally leaving debug stuff in releases --- reframework/autorun/MHR_Overlay/Misc/debug.lua | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 reframework/autorun/MHR_Overlay/Misc/debug.lua diff --git a/reframework/autorun/MHR_Overlay/Misc/debug.lua b/reframework/autorun/MHR_Overlay/Misc/debug.lua new file mode 100644 index 0000000..42ad7ec --- /dev/null +++ b/reframework/autorun/MHR_Overlay/Misc/debug.lua @@ -0,0 +1,5 @@ +local debug = {}; + +debug.enabled = false; + +return debug; \ No newline at end of file From 7d3b7b3e398f8cc87b213e818f066acf8892dd3c Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sat, 23 Jul 2022 17:53:34 +0300 Subject: [PATCH 8/8] Update MHR_Overlay.lua --- reframework/autorun/MHR_Overlay.lua | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index 88dedbc..022405f 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -1,6 +1,7 @@ -local debug = false; xy = ""; +local debug = require("MHR_Overlay.Misc.debug"); + local keyboard = require("MHR_Overlay.Game_Handler.keyboard"); local quest_status = require("MHR_Overlay.Game_Handler.quest_status"); local screen = require("MHR_Overlay.Game_Handler.screen"); @@ -104,13 +105,10 @@ local function main_loop() player.update_myself_position(); quest_status.update_is_online(); quest_status.update_is_result_screen(); + quest_status.update_is_host(); time.tick(); - if quest_status.index < 2 then - player.update_player_list_in_village(); - else - player.update_player_list_on_quest(); - end + player.update_player_list(quest_status.index >= 2); if quest_status.index < 2 then quest_status.update_is_training_area(); @@ -478,17 +476,21 @@ end -if debug then +if debug.enabled then if d2d ~= nil then d2d.register(function() end, function() - d2d.text(drawing.font, "xy: " .. tostring(xy), 551, 11, 0xFF000000); - d2d.text(drawing.font, "xy: " .. tostring(xy), 550, 10, 0xFFFFFFFF); + if xy ~= "" then + d2d.text(drawing.font, "xy:\n" .. tostring(xy), 551, 11, 0xFF000000); + d2d.text(drawing.font, "xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF); + end end); else re.on_frame(function() - draw.text("xy: " .. tostring(xy), 551, 11, 0xFF000000); - draw.text("xy: " .. tostring(xy), 550, 10, 0xFFFFFFFF); + if xy ~= "" then + draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000); + draw.text("xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF); + end end); end end \ No newline at end of file