diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index fe1b54a..e0ca8ed 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -53,6 +53,7 @@ local rage_customization = require("MHR_Overlay.UI.Customizations.rage_customiza local body_parts_customization = require("MHR_Overlay.UI.Customizations.body_parts_customization"); local ailments_customization = require("MHR_Overlay.UI.Customizations.ailments_customization"); local ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization"); +local module_visibility_customization = require("MHR_Overlay.UI.Customizations.module_visibility_customization"); local large_monster_UI_customization = require("MHR_Overlay.UI.Customizations.large_monster_UI_customization"); @@ -107,6 +108,7 @@ rage_customization.init_module(); body_parts_customization.init_module(); ailments_customization.init_module(); ailment_buildups_customization.init_module(); +module_visibility_customization.init_module(); drawing.init_module(); @@ -124,157 +126,127 @@ log.info("[MHR Overlay] Loaded."); ----------------------------LOOP----------------------------- -- #region + +local function draw_modules(module_visibility_config, flow_state_name) + if module_visibility_config.small_monster_UI and config.current_config.small_monster_UI.enabled then + local success = pcall(small_monster_UI.draw); + if not success then + customization_menu.status = string.format("[%s] Small monster drawing function threw an exception", flow_state_name); + end + end + + local large_monster_UI_config = config.current_config.large_monster_UI; + + local dynamic_enabled = large_monster_UI_config.dynamic.enabled and + module_visibility_config.large_monster_dynamic_UI; + local static_enabled = large_monster_UI_config.static.enabled and + module_visibility_config.large_monster_static_UI; + local highlighted_enabled = large_monster_UI_config.highlighted.enabled and + module_visibility_config.large_monster_highlighted_UI; + + if dynamic_enabled or static_enabled or highlighted_enabled then + local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled); + if not success then + customization_menu.status = string.format("[%s] Large Monster drawing function threw an exception", flow_state_name); + end + end + + if config.current_config.time_UI.enabled and module_visibility_config.time_UI then + local success = pcall(time_UI.draw); + if not success then + customization_menu.status = string.format("[%s] Time Drawing function threw an exception", flow_state_name); + end + end + + if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then + local success = pcall(damage_meter_UI.draw); + if not success then + customization_menu.status = string.format("[%s] Damage Meter drawing function threw an exception", flow_state_name); + end + end + + if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then + local success = pcall(env_creature_UI.draw); + if not success then + customization_menu.status = string.format("[%s] Endemic Life drawing function threw an exception", flow_state_name); + end + end +end + local function main_loop() customization_menu.status = "OK"; singletons.init(); screen.update_window_size(); player.update_myself_position(); quest_status.update_is_online(); - quest_status.update_is_result_screen(); - quest_status.update_is_host(); + quest_status.update_is_quest_host(); time.tick(); - --xy = tostring(singletons.quest_manager:call("isPlayQuest")) .. - --"\n" .. tostring(singletons.quest_manager:call("isActiveQuest")) .. - --"\n" .. tostring(singletons.quest_manager:call("isSingleQuest")) .. - --"\n" .. tostring(singletons.quest_manager:call("isStartQuest")) .. - --"\n" .. tostring(quest_status.index); + --xy = xy .. quest_status.get_flow_state(quest_status.flow_state, true); player.update_player_list(quest_status.index >= 2); - if quest_status.index < 2 then - quest_status.update_is_training_area(); - if quest_status.is_training_area then - local dynamic_enabled = config.current_config.large_monster_UI.dynamic.enabled and - config.current_config.global_settings.module_visibility.training_area - .large_monster_dynamic_UI; - local static_enabled = config.current_config.large_monster_UI.static.enabled and - config.current_config.global_settings.module_visibility.training_area.large_monster_static_UI; - local highlighted_enabled = config.current_config.large_monster_UI.highlighted.enabled and - config.current_config.global_settings.module_visibility.training_area - .large_monster_highlighted_UI; + if quest_status.flow_state == quest_status.flow_states.IN_LOBBY then - if dynamic_enabled or static_enabled or highlighted_enabled then - local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled); - if not success then - customization_menu.status = "Large monster drawing function threw an exception"; - end - end - - if config.current_config.damage_meter_UI.enabled and - config.current_config.global_settings.module_visibility.training_area.damage_meter_UI then - local success = pcall(damage_meter_UI.draw); - if not success then - customization_menu.status = "Damage meter drawing function threw an exception"; - end - end - - if config.current_config.endemic_life_UI.enabled and - config.current_config.global_settings.module_visibility.training_area.endemic_life_UI then - local success = pcall(env_creature_UI.draw); - if not success then - customization_menu.status = "Endemic life drawing function threw an exception"; - end - end - end - elseif quest_status.is_result_screen then - if config.current_config.small_monster_UI.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen.small_monster_UI then - local success = pcall(small_monster_UI.draw); + if config.current_config.endemic_life_UI.enabled and + config.current_config.global_settings.module_visibility.in_lobby.endemic_life_UI then + local success = pcall(env_creature_UI.draw); if not success then - customization_menu.status = "Small monster drawing function threw an exception"; + customization_menu.status = "[In Lobby] Endemic life drawing function threw an exception"; end end - local dynamic_enabled = config.current_config.large_monster_UI.dynamic.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen - .large_monster_dynamic_UI; - local static_enabled = config.current_config.large_monster_UI.static.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen - .large_monster_static_UI; - local highlighted_enabled = config.current_config.large_monster_UI.highlighted.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen - .large_monster_highlighted_UI; + elseif quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then + + local large_monster_UI_config = config.current_config.large_monster_UI; + local module_visibility_config = config.current_config.global_settings.module_visibility.in_training_area; + + local dynamic_enabled = large_monster_UI_config.dynamic.enabled and module_visibility_config.large_monster_dynamic_UI; + local static_enabled = large_monster_UI_config.static.enabled and module_visibility_config.large_monster_static_UI; + local highlighted_enabled = large_monster_UI_config.highlighted.enabled and module_visibility_config.large_monster_highlighted_UI; if dynamic_enabled or static_enabled or highlighted_enabled then local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled); if not success then - customization_menu.status = "Large monster drawing function threw an exception"; + customization_menu.status = "[In Training Area] Large monster drawing function threw an exception"; end end - if config.current_config.time_UI.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen.time_UI then - local success = pcall(time_UI.draw); - if not success then - customization_menu.status = "Time drawing function threw an exception"; - end - end - - if config.current_config.damage_meter_UI.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen.damage_meter_UI then + if config.current_config.damage_meter_UI.enabled and module_visibility_config.damage_meter_UI then local success = pcall(damage_meter_UI.draw); if not success then - customization_menu.status = "Damage meter drawing function threw an exception"; + customization_menu.status = "[In Training Area] Damage meter drawing function threw an exception"; end end - if config.current_config.endemic_life_UI.enabled and - config.current_config.global_settings.module_visibility.quest_result_screen.endemic_life_UI then + if config.current_config.endemic_life_UI.enabled and module_visibility_config.endemic_life_UI then local success = pcall(env_creature_UI.draw); if not success then - customization_menu.status = "Endemic life drawing function threw an exception"; - end - end - elseif quest_status.index == 2 then - - if config.current_config.small_monster_UI.enabled and - config.current_config.global_settings.module_visibility.during_quest.small_monster_UI then - local success = pcall(small_monster_UI.draw); - if not success then - customization_menu.status = "Small monster drawing function threw an exception"; + customization_menu.status = "[In Training Area] Endemic life drawing function threw an exception"; end end - local dynamic_enabled = config.current_config.large_monster_UI.dynamic.enabled and - config.current_config.global_settings.module_visibility.during_quest.large_monster_dynamic_UI; - local static_enabled = config.current_config.large_monster_UI.static.enabled and - config.current_config.global_settings.module_visibility.during_quest.large_monster_static_UI; - local highlighted_enabled = config.current_config.large_monster_UI.highlighted.enabled and - config.current_config.global_settings.module_visibility.during_quest - .large_monster_highlighted_UI; - - if dynamic_enabled or static_enabled or highlighted_enabled then - local success = pcall(large_monster_UI.draw, dynamic_enabled, static_enabled, highlighted_enabled); - if not success then - customization_menu.status = "Large monster drawing function threw an exception"; - end - end - - if config.current_config.time_UI.enabled and - config.current_config.global_settings.module_visibility.during_quest.time_UI then - local success = pcall(time_UI.draw); - if not success then - customization_menu.status = "Time drawing function threw an exception"; - end - end - - if config.current_config.damage_meter_UI.enabled and - config.current_config.global_settings.module_visibility.during_quest.damage_meter_UI then - local success = pcall(damage_meter_UI.draw); - if not success then - customization_menu.status = "Damage meter drawing function threw an exception"; - end - end - - if config.current_config.endemic_life_UI.enabled and - config.current_config.global_settings.module_visibility.during_quest.endemic_life_UI then - local success = pcall(env_creature_UI.draw); - if not success then - customization_menu.status = "Endemic life drawing function threw an exception"; - end - end - end + elseif quest_status.flow_state == quest_status.flow_states.CUTSCENE then + draw_modules(config.current_config.global_settings.module_visibility.cutscene, "Cutscene"); + elseif quest_status.flow_state == quest_status.flow_states.LOADING_QUEST then + draw_modules(config.current_config.global_settings.module_visibility.loading_quest, "Loading Quest"); + elseif quest_status.flow_state == quest_status.flow_states.QUEST_START_ANIMATION then + draw_modules(config.current_config.global_settings.module_visibility.quest_start_animation, "Quest Start Animation"); + elseif quest_status.flow_state >= quest_status.flow_states.PLAYING_QUEST and quest_status.flow_state <= quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then + draw_modules(config.current_config.global_settings.module_visibility.playing_quest, "Playing Quest"); + elseif quest_status.flow_state == quest_status.flow_states.KILLCAM then + draw_modules(config.current_config.global_settings.module_visibility.killcam, "Killcam"); + elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_TIMER then + draw_modules(config.current_config.global_settings.module_visibility.quest_end_timer, "Quest End Timer"); + elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_ANIMATION then + draw_modules(config.current_config.global_settings.module_visibility.quest_end_animation, "Quest End Animation"); + elseif quest_status.flow_state == quest_status.flow_states.QUEST_END_SCREEN then + draw_modules(config.current_config.global_settings.module_visibility.quest_end_screen, "Quest End Screen"); + elseif quest_status.flow_state == quest_status.flow_states.REWARD_SCREEN then + draw_modules(config.current_config.global_settings.module_visibility.reward_screen, "Reward Screen"); + elseif quest_status.flow_state == quest_status.flow_states.SUMMARY_SCREEN then + draw_modules(config.current_config.global_settings.module_visibility.summary_screen, "Summary Screen"); + end end -- #endregion @@ -318,6 +290,35 @@ if debug.enabled then if d2d ~= nil then d2d.register(function() end, function() + local is_ready_quest = singletons.quest_manager:call("isReadyQuest"); + local is_ready_play_quest = singletons.quest_manager:call("isReadyPlayQuest"); + local is_play_quest = singletons.quest_manager:call("isPlayQuest"); + local is_stay_quest = singletons.quest_manager:call("isStayQuest"); + local is_end_wait = singletons.quest_manager:call("isEndWait"); + local is_active_quest = singletons.quest_manager:call("isActiveQuest"); + local quest_clear = singletons.quest_manager:call("checkQuestClear"); + local is_result_demo_play_start = singletons.quest_manager:call("isResultDemoPlayStart"); + local isResultGuestDrawOff = singletons.quest_manager:call("isResultGuestDrawOff"); + + local game_manager = sdk.get_managed_singleton("snow.SnowGameManager"); + local current_status = game_manager:get_field("_CurrentStatus"); + + local demo_camera = sdk.get_managed_singleton("snow.camera.DemoCamera"); + local is_play_demo = demo_camera:call("IsPlayDemo"); + + --[[xy = "\nquest_status.index: " .. tostring(quest_status.index); + xy = xy .. "\nis_ready_quest: " .. tostring(is_ready_quest); + xy = xy .. "\nis_ready_play_quest: " .. tostring(is_ready_play_quest); + xy = xy .. "\nis_play_quest: " .. tostring(is_play_quest); + xy = xy .. "\nis_stay_quest: " .. tostring(is_stay_quest); + xy = xy .. "\nis_end_wait: " .. tostring(is_end_wait); + xy = xy .. "\nis_active_quest: " .. tostring(is_active_quest); + xy = xy .. "\nquest_clear: " .. tostring(quest_clear); + xy = xy .. "\nis_result_demo_play_start: " .. tostring(is_result_demo_play_start); + xy = xy .. "\nisResultGuestDrawOff: " .. tostring(isResultGuestDrawOff); + xy = xy .. "\ncurrent_status: " .. tostring(current_status); + xy = xy .. "\nis_play_demo: " .. tostring(is_play_demo);--]] + 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); @@ -326,8 +327,8 @@ if debug.enabled then else re.on_frame(function() if xy ~= "" then - draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000); draw.text("xy:\n" .. tostring(xy), 550, 10, 0xFFFFFFFF); + draw.text("xy:\n" .. tostring(xy), 551, 11, 0xFF000000); end end); end diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua index 69ce630..3f24cad 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua @@ -500,8 +500,8 @@ function player.init_UI(_player) local cached_config = config.current_config.damage_meter_UI; _player.damage_UI = damage_UI_entity.new(cached_config.damage_bar, cached_config.highlighted_damage_bar, - cached_config.player_name_label, cached_config.dps_label, cached_config.master_hunter_rank_label, - cached_config.damage_value_label, cached_config.damage_percentage_label, cached_config.cart_count_label); + cached_config.player_name_label, cached_config.dps_label, cached_config.master_hunter_rank_label, + cached_config.damage_value_label, cached_config.damage_percentage_label, cached_config.cart_count_label); end function player.init_total_UI(_player) diff --git a/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua b/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua index c54de07..c65e69a 100644 --- a/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua +++ b/reframework/autorun/MHR_Overlay/Game_Handler/quest_status.lua @@ -1,4 +1,5 @@ local quest_status = {}; + local singletons; local customization_menu; local player; @@ -8,35 +9,235 @@ local damage_meter_UI; local time; local env_creature; +quest_status.flow_states = { + NONE = 0, + IN_LOBBY = 1, + IN_TRAINING_AREA = 2, + CUTSCENE = 4, + LOADING_QUEST = 8, + QUEST_START_ANIMATION = 16, + PLAYING_QUEST = 32, + + PLAYER_DEATH_ANIMATION = 64, + PLAYER_CART_ANIMATION = 128, + FAST_TRAVEL_ANIMATION = 256, + WYVERN_RIDING_START_ANIMATION = 512, + + KILLCAM = 1024, + QUEST_END_TIMER = 2048, + QUEST_END_ANIMATION = 4096, + QUEST_END_SCREEN = 8192, + REWARD_SCREEN = 16384, + SUMMARY_SCREEN = 32768, +}; + +quest_status.previous_flow_state = quest_status.flow_states.NONE; +quest_status.flow_state = quest_status.flow_states.NONE; + quest_status.index = 0; quest_status.is_online = false; -quest_status.is_host = false; -quest_status.is_training_area = false; -quest_status.is_result_screen = false; -quest_status.is_quest_clear = false; +quest_status.is_quest_host = 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 quest_manager_type_def = sdk.find_type_definition("snow.QuestManager"); +local on_changed_game_status_method = quest_manager_type_def:get_method("onChangedGameStatus"); +local is_result_demo_play_start_method = quest_manager_type_def:get_method("isResultDemoPlayStart"); +local set_quest_clear_method = quest_manager_type_def:get_method("setQuestClear"); +local set_quest_clear_sub_method = quest_manager_type_def:get_method("setQuestClearSub"); +local set_quest_clear_sub_hyakurui_method = quest_manager_type_def:get_method("setQuestClearSubHyakuryu"); +local set_quest_fail_method = quest_manager_type_def:get_method("setQuestFail"); -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 game_manager_type_def = sdk.find_type_definition("snow.SnowGameManager"); +local get_status_method = game_manager_type_def:get_method("getStatus"); 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 fast_travel_method = village_area_manager_type_def:get_method("fastTravel"); 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"); +local is_play_quest_method = quest_manager_type_def:get_method("isPlayQuest"); +local is_end_wait_method = quest_manager_type_def:get_method("isEndWait"); +local demo_camera_type_def = sdk.find_type_definition("snow.camera.DemoCamera"); +local demo_request_activation_method = demo_camera_type_def:get_method("RequestActivation"); +local demo_end_method = demo_camera_type_def:get_method("DemoEnd"); + +local gui_quest_end_base_type_def = sdk.find_type_definition("snow.gui.GuiQuestEndBase"); +local quest_end_set_state_method = gui_quest_end_base_type_def:get_method("setState"); + +local gui_result_reward_type_def = sdk.find_type_definition("snow.gui.GuiResultReward"); +local gui_result_reward_do_open_method = gui_result_reward_type_def:get_method("doOpen"); + +local gui_result_pay_off_type_def = sdk.find_type_definition("snow.gui.GuiResultPayOff"); +local gui_result_pay_off_do_open_method = gui_result_pay_off_type_def:get_method("doOpen"); + +local unique_event_manager_type_def = sdk.find_type_definition("snow.eventcut.UniqueEventManager"); +local play_event_common_method = unique_event_manager_type_def:get_method("playEventCommon"); +local event_manager_dispose_method = unique_event_manager_type_def:get_method("dispose"); + +function quest_status.get_flow_state(flow_state, new_line) + for key, value in pairs(quest_status.flow_states) do + if value == flow_state then + if new_line then + return "\n" .. tostring(key); + else + return tostring(key); + end + end + end +end + +--type 2 = quest start +--type 3 = monster killcam +--type 5 = end screen +function quest_status.on_demo_request_activation(request_data_base) + if request_data_base == nil then + return; + end + + if quest_status.index ~= 2 then + return; + end + + local request_data_type = request_data_base:call("get_Type"); + if request_data_type == nil then + return; + end + + -- QUEST_START_ANIMATION + if request_data_type == 2 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.QUEST_START_ANIMATION; + + -- KILLCAM + elseif request_data_type == 3 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.KILLCAM; + + -- QUEST_END_ANIMATION + elseif request_data_type == 5 or request_data_type == 6 or request_data_type == 7 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.QUEST_END_ANIMATION; + + -- PLAYER_DEATH_ANIMATION + elseif request_data_type == 8 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.PLAYER_DEATH_ANIMATION; + + -- PLAYER_CART_ANIMATION + elseif request_data_type == 9 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.PLAYER_CART_ANIMATION; + + -- FAST_TRAVEL_ANIMATION + elseif request_data_type == 10 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.FAST_TRAVEL_ANIMATION; + + -- WYVERN_RIDING_START_ANIMATION + elseif request_data_type == 11 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.WYVERN_RIDING_START_ANIMATION; + end +end + +function quest_status.on_demo_end() + if quest_status.index == 2 then + if quest_status.flow_state == quest_status.flow_states.PLAYER_DEATH_ANIMATION + or quest_status.flow_state == quest_status.flow_states.PLAYER_CART_ANIMATION + or quest_status.flow_state == quest_status.flow_states.FAST_TRAVEL_ANIMATION + or quest_status.flow_state == quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then + + local next_flow_state = quest_status.previous_flow_state; + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = next_flow_state; + + elseif quest_status.flow_state == quest_status.flow_states.QUEST_START_ANIMATION then + + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.PLAYING_QUEST; + + elseif quest_status.flow_state == quest_status.flow_states.KILLCAM then + + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.QUEST_END_TIMER; + end + end +end + +function quest_status.on_set_quest_clear() + if quest_status.index == 2 and quest_status.flow_state ~= quest_status.flow_states.KILLCAM then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.QUEST_END_TIMER; + end +end + +function quest_status.on_quest_end_set_state() + if quest_status.index == 2 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.QUEST_END_SCREEN; + end +end + +function quest_status.on_gui_result_reward_do_open() + if quest_status.index == 3 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.REWARD_SCREEN; + end +end + +function quest_status.on_gui_result_pay_off_do_open() + if quest_status.index == 3 then + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.SUMMARY_SCREEN; + end +end + +function quest_status.on_play_event_common() + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.CUTSCENE; +end + +function quest_status.on_event_manager_dispose() + if quest_status.flow_state == quest_status.flow_states.CUTSCENE then + + local next_flow_state = quest_status.previous_flow_state; + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = next_flow_state; + end +end + +function quest_status.on_set_quest_fail() + if quest_status.flow_state == quest_status.flow_states.PLAYER_DEATH_ANIMATION or + quest_status.flow_state == quest_status.flow_states.PLAYER_CART_ANIMATION or + quest_status.flow_state == quest_status.flow_states.FAST_TRAVEL_ANIMATION or + quest_status.flow_state == quest_status.flow_states.WYVERN_RIDING_START_ANIMATION then + + quest_status.previous_flow_state = quest_status.flow_state; + quest_status.flow_state = quest_status.flow_states.QUEST_END_ANIMATION; + end +end + +function quest_status.on_village_fast_travel(area) + if area == nil then + return; + end + + quest_status.previous_flow_state = quest_status.flow_state; + + if area == 7 then + quest_status.flow_state = quest_status.flow_states.IN_TRAINING_AREA; + else + quest_status.flow_state = quest_status.flow_states.IN_LOBBY; + end +end 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 + quest_status.index = new_quest_status; + if quest_status.index < 3 then player.init(); small_monster.init_list(); large_monster.init_list(); @@ -47,11 +248,15 @@ function quest_status.on_changed_game_status(new_quest_status) 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; + if quest_status.index == 0 then + quest_status.flow_state = quest_status.flow_states.NONE; + elseif quest_status.index == 1 then + quest_status.flow_state = quest_status.flow_states.IN_LOBBY; + elseif quest_status.index == 2 then + quest_status.flow_state = quest_status.flow_states.LOADING_QUEST; + elseif quest_status.index == 3 then + quest_status.flow_state = quest_status.flow_states.SUMMARY_SCREEN; + end end function quest_status.init() @@ -59,16 +264,26 @@ function quest_status.init() return; end - local new_quest_status = get_status_method:call(singletons.quest_manager); + local new_quest_status = get_status_method:call(singletons.game_manager); if new_quest_status == nil then customization_menu.status = "No quest status"; return; end quest_status.index = new_quest_status; + + if quest_status.index == 0 then + quest_status.flow_state = quest_status.flow_states.NONE; + elseif quest_status.index == 1 then + quest_status.flow_state = quest_status.flow_states.IN_LOBBY; + elseif quest_status.index == 2 then + quest_status.flow_state = quest_status.flow_states.PLAYING_QUEST; + elseif quest_status.index == 3 then + quest_status.flow_state = quest_status.flow_states.SUMMARY_SCREEN; + end + quest_status.update_is_online(); quest_status.update_is_training_area(); - quest_status.update_is_result_screen(); end function quest_status.update_is_online() @@ -88,17 +303,17 @@ function quest_status.update_is_online() quest_status.is_online = is_quest_online; end -function quest_status.update_is_host() +function quest_status.update_is_quest_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 + local is_quest_host = is_quest_host_method:call(singletons.lobby_manager, true); + if is_quest_host == nil then return; end - quest_status.is_host = is_host; + quest_status.is_quest_host = is_quest_host; end function quest_status.update_is_training_area() @@ -112,25 +327,9 @@ function quest_status.update_is_training_area() return; end - if quest_status.is_training_area == true and _is_training_area == false then - player.init(); + if _is_training_area then + quest_status.flow_state = quest_status.flow_states.IN_TRAINING_AREA; end - - quest_status.is_training_area = _is_training_area; -end - -function quest_status.update_is_result_screen() - if singletons.quest_manager == nil then - customization_menu.status = "No quest manager"; - return; - end - - local is_result_demo_play_start = is_result_demo_play_start_method:call(singletons.quest_manager); - if is_result_demo_play_start == nil then - return; - end - - quest_status.is_result_screen = is_result_demo_play_start; end function quest_status.init_module() @@ -145,7 +344,7 @@ function quest_status.init_module() quest_status.init(); - sdk.hook(on_changed_game_status, function(args) + sdk.hook(on_changed_game_status_method, function(args) quest_status.on_changed_game_status(sdk.to_int64(args[3])); end, function(retval) return retval; end); @@ -160,6 +359,46 @@ function quest_status.init_module() sdk.hook(set_quest_clear_sub_hyakurui_method, function(args) quest_status.on_set_quest_clear(); end, function(retval) return retval; end); + + sdk.hook(demo_request_activation_method, function(args) + quest_status.on_demo_request_activation(sdk.to_managed_object(args[3])); + end, function(retval) return retval; end); + + sdk.hook(demo_end_method, function(args) + quest_status.on_demo_end(); + 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(quest_end_set_state_method, function(args) + quest_status.on_quest_end_set_state(); + end, function(retval) return retval; end); + + sdk.hook(gui_result_reward_do_open_method, function(args) + quest_status.on_gui_result_reward_do_open(); + end, function(retval) return retval; end); + + sdk.hook(gui_result_pay_off_do_open_method, function(args) + quest_status.on_gui_result_pay_off_do_open(); + end, function(retval) return retval; end); + + sdk.hook(play_event_common_method, function(args) + quest_status.on_play_event_common(); + end, function(retval) return retval; end); + + sdk.hook(event_manager_dispose_method, function(args) + quest_status.on_event_manager_dispose(); + end, function(retval) return retval; end); + + sdk.hook(set_quest_fail_method, function(args) + quest_status.on_set_quest_fail(); + end, function(retval) return retval; end); + + sdk.hook(fast_travel_method, function(args) + quest_status.on_village_fast_travel(sdk.to_int64(args[3])); + end, function(retval) return retval; end); end return quest_status; diff --git a/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua b/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua index b6f1636..19cbfcc 100644 --- a/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua +++ b/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua @@ -10,6 +10,7 @@ singletons.village_area_manager = nil; singletons.gui_manager = nil; singletons.game_keyboard = nil; singletons.scene_manager = nil; +singletons.game_manager = nil; function singletons.init() singletons.init_message_manager(); @@ -22,6 +23,7 @@ function singletons.init() singletons.init_gui_manager(); singletons.init_game_keyboard(); singletons.init_scene_manager(); + singletons.init_game_manager(); end function singletons.init_message_manager() @@ -156,6 +158,19 @@ function singletons.init_scene_manager() return singletons.scene_manager; end +function singletons.init_game_manager() + if singletons.game_manager ~= nil then + return; + end + + singletons.game_manager = sdk.get_managed_singleton("snow.SnowGameManager"); + if singletons.game_manager == nil then + --log.error("[MHR Overlay] No enemy manager"); + end + + return singletons.game_manager; +end + function singletons.init_module() singletons.init(); end diff --git a/reframework/autorun/MHR_Overlay/Misc/config.lua b/reframework/autorun/MHR_Overlay/Misc/config.lua index 6166b60..e21a004 100644 --- a/reframework/autorun/MHR_Overlay/Misc/config.lua +++ b/reframework/autorun/MHR_Overlay/Misc/config.lua @@ -34,7 +34,39 @@ function config.init() }, module_visibility = { - during_quest = { + in_lobby = { + endemic_life_UI = false + }, + + in_training_area = { + large_monster_dynamic_UI = true, + large_monster_static_UI = true, + large_monster_highlighted_UI = true, + damage_meter_UI = true, + endemic_life_UI = true + }, + + cutscene = { + small_monster_UI = false, + large_monster_dynamic_UI = false, + large_monster_static_UI = false, + large_monster_highlighted_UI = false, + time_UI = false, + damage_meter_UI = false, + endemic_life_UI = false + }, + + loading_quest = { + small_monster_UI = false, + large_monster_dynamic_UI = false, + large_monster_static_UI = false, + large_monster_highlighted_UI = false, + time_UI = false, + damage_meter_UI = false, + endemic_life_UI = false + }, + + quest_start_animation = { small_monster_UI = true, large_monster_dynamic_UI = true, large_monster_static_UI = true, @@ -44,7 +76,57 @@ function config.init() endemic_life_UI = true }, - quest_result_screen = { + playing_quest = { + small_monster_UI = true, + large_monster_dynamic_UI = true, + large_monster_static_UI = true, + large_monster_highlighted_UI = true, + time_UI = true, + damage_meter_UI = true, + endemic_life_UI = true + }, + + killcam = { + small_monster_UI = true, + large_monster_dynamic_UI = true, + large_monster_static_UI = true, + large_monster_highlighted_UI = true, + time_UI = true, + damage_meter_UI = true, + endemic_life_UI = true + }, + + quest_end_timer = { + small_monster_UI = true, + large_monster_dynamic_UI = true, + large_monster_static_UI = true, + large_monster_highlighted_UI = true, + time_UI = true, + damage_meter_UI = true, + endemic_life_UI = true + }, + + quest_end_animation = { + small_monster_UI = false, + large_monster_dynamic_UI = false, + large_monster_static_UI = false, + large_monster_highlighted_UI = false, + time_UI = false, + damage_meter_UI = false, + endemic_life_UI = false + }, + + quest_end_screen = { + small_monster_UI = false, + large_monster_dynamic_UI = false, + large_monster_static_UI = false, + large_monster_highlighted_UI = false, + time_UI = false, + damage_meter_UI = false, + endemic_life_UI = false + }, + + reward_screen = { small_monster_UI = false, large_monster_dynamic_UI = false, large_monster_static_UI = true, @@ -54,13 +136,15 @@ function config.init() endemic_life_UI = false }, - training_area = { - large_monster_dynamic_UI = true, + summary_screen = { + small_monster_UI = false, + large_monster_dynamic_UI = false, large_monster_static_UI = true, large_monster_highlighted_UI = true, + time_UI = true, damage_meter_UI = true, - endemic_life_UI = true - } + endemic_life_UI = false + }, }, hotkeys_with_modifiers = { @@ -221,7 +305,7 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 50, + x = 32, y = 0 }, color = 0xFFCCF4E1, diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index df04fb8..e7dd795 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -147,10 +147,19 @@ language.default_language = { large_monster_highlighted_UI = "Large Monster Highlighted UI", language = "Language", - module_visibility_on_different_screens = "Module Visibility on Different Screens", - during_quest = "During Quest", - quest_result_screen = "Quest Result Screen", - training_area = "Training Area", + module_visibility_based_on_game_state = "Module Visibility based on Game State", + in_lobby = "In Lobby", + in_training_area = "In Training Area", + cutscene = "Cutscene", + loading_quest = "Loading Quest", + quest_start_animation = "Quest Start Animation", + playing_quest = "Playing Quest", + killcam = "Killcam", + quest_end_timer = "Quest End Timer", + quest_end_animation = "Quest End Animation", + quest_end_screen = "Quest End Screen", + reward_screen = "Reward Screen", + summary_screen = "Summary Screen", performance = "Performance", diff --git a/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua b/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua new file mode 100644 index 0000000..942fb08 --- /dev/null +++ b/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua @@ -0,0 +1,82 @@ +local module_visibility_customization = {}; + +local table_helpers; +local config; +local screen; +local player; +local large_monster; +local small_monster; +local env_creature; +local language; +local part_names; +local time_UI; +local keyboard; +local customization_menu; +local label_customization; +local bar_customization; + +function module_visibility_customization.draw(cached_config) + local changed = false; + local config_changed = false; + + changed, cached_config.small_monster_UI = imgui.checkbox( + language.current_language.customization_menu.small_monster_UI, + cached_config.small_monster_UI); + + config_changed = config_changed or changed; + + changed, cached_config.large_monster_dynamic_UI = imgui.checkbox( + language.current_language.customization_menu.large_monster_dynamic_UI, + cached_config.large_monster_dynamic_UI); + + config_changed = config_changed or changed; + + changed, cached_config.large_monster_static_UI = imgui.checkbox( + language.current_language.customization_menu.large_monster_static_UI, + cached_config.large_monster_static_UI); + + config_changed = config_changed or changed; + + changed, cached_config.large_monster_highlighted_UI = imgui.checkbox( + language.current_language.customization_menu.large_monster_highlighted_UI, + cached_config.large_monster_highlighted_UI); + + config_changed = config_changed or changed; + + changed, cached_config.time_UI = imgui.checkbox( + language.current_language.customization_menu.time_UI, + cached_config.time_UI); + + config_changed = config_changed or changed; + + changed, cached_config.damage_meter_UI = imgui.checkbox( + language.current_language.customization_menu.damage_meter_UI, + cached_config.damage_meter_UI); + + config_changed = config_changed or changed; + + changed, cached_config.endemic_life_UI = imgui.checkbox( + language.current_language.customization_menu.endemic_life_UI, + cached_config.endemic_life_UI); + + config_changed = config_changed or changed; + + return config_changed; +end + +function module_visibility_customization.init_module() + table_helpers = require("MHR_Overlay.Misc.table_helpers"); + language = require("MHR_Overlay.Misc.language"); + config = require("MHR_Overlay.Misc.config"); + screen = require("MHR_Overlay.Game_Handler.screen"); + player = require("MHR_Overlay.Damage_Meter.player"); + small_monster = require("MHR_Overlay.Monsters.small_monster"); + large_monster = require("MHR_Overlay.Monsters.large_monster"); + env_creature = require("MHR_Overlay.Endemic_Life.env_creature"); + part_names = require("MHR_Overlay.Misc.part_names"); + time_UI = require("MHR_Overlay.UI.Modules.time_UI"); + keyboard = require("MHR_Overlay.Game_Handler.keyboard"); + customization_menu = require("MHR_Overlay.UI.customization_menu"); +end + +return module_visibility_customization; \ No newline at end of file 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 6b97c46..16d4869 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua @@ -77,7 +77,7 @@ function damage_meter_UI.draw() 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; - elseif quest_status.index < 2 then + elseif quest_status.flow_state == quest_status.flow_states.IN_LOBBY or quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then local player_info_list = hunter_info_field:get_data(singletons.lobby_manager); quest_players = damage_meter_UI.get_players(player_info_list); else 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 4eaeb2d..336875a 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua @@ -143,6 +143,10 @@ function large_monster_UI.draw_dynamic(displayed_monsters, highlighted_monster, break end + if monster.id == 549 or monster.id == 25 or monster.id == 2073 then + goto continue + end + if monster.dead_or_captured and cached_config.settings.hide_dead_or_captured then goto continue end diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index 6fd2dec..63b7dc1 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -23,6 +23,7 @@ local rage_customization; local body_parts_customization; local ailments_customization; local ailment_buildups_customization; +local module_visibility_customization; customization_menu.font = nil; customization_menu.font_range = {0x1, 0xFFFF, 0}; @@ -759,129 +760,111 @@ function customization_menu.draw_global_settings() imgui.tree_pop(); end - if imgui.tree_node(language.current_language.customization_menu.module_visibility_on_different_screens) then - if imgui.tree_node(language.current_language.customization_menu.during_quest) then - changed, cached_config.module_visibility.during_quest.small_monster_UI = - imgui.checkbox(language.current_language.customization_menu.small_monster_UI, - cached_config.module_visibility.during_quest.small_monster_UI); + if imgui.tree_node(language.current_language.customization_menu.module_visibility_based_on_game_state) then + if imgui.tree_node(language.current_language.customization_menu.in_lobby) then - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.during_quest.large_monster_dynamic_UI = imgui.checkbox( - language.current_language.customization_menu.large_monster_dynamic_UI, - cached_config.module_visibility.during_quest.large_monster_dynamic_UI); - - config_changed = config_changed or changed; - imgui.same_line(); - - changed, cached_config.module_visibility.during_quest.large_monster_static_UI = imgui.checkbox( - language.current_language.customization_menu.large_monster_static_UI, - cached_config.module_visibility.during_quest.large_monster_static_UI); - - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.during_quest.large_monster_highlighted_UI = imgui.checkbox( - language.current_language.customization_menu.large_monster_highlighted_UI, - cached_config.module_visibility.during_quest.large_monster_highlighted_UI); - - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.during_quest.time_UI = - imgui.checkbox(language.current_language.customization_menu.time_UI, - cached_config.module_visibility.during_quest.time_UI); - - config_changed = config_changed or changed; - imgui.same_line(); - - changed, cached_config.module_visibility.during_quest.damage_meter_UI = - imgui.checkbox(language.current_language.customization_menu.damage_meter_UI, - cached_config.module_visibility.during_quest.damage_meter_UI); - - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.during_quest.endemic_life_UI = - imgui.checkbox(language.current_language.customization_menu.endemic_life_UI, - cached_config.module_visibility.during_quest.endemic_life_UI); + changed, cached_config.module_visibility.in_lobby.endemic_life_UI = imgui.checkbox( + language.current_language.customization_menu.endemic_life_UI, + cached_config.module_visibility.in_lobby.endemic_life_UI); config_changed = config_changed or changed; imgui.tree_pop(); end - if imgui.tree_node(language.current_language.customization_menu.quest_result_screen) then - changed, cached_config.module_visibility.quest_result_screen.small_monster_UI = imgui.checkbox( - language.current_language.customization_menu.small_monster_UI, - cached_config.module_visibility.quest_result_screen.small_monster_UI); + if imgui.tree_node(language.current_language.customization_menu.in_training_area) then - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.quest_result_screen.large_monster_dynamic_UI = imgui.checkbox( + changed, cached_config.module_visibility.in_training_area.large_monster_dynamic_UI = imgui.checkbox( language.current_language.customization_menu.large_monster_dynamic_UI, - cached_config.module_visibility.quest_result_screen.large_monster_dynamic_UI); + cached_config.module_visibility.in_training_area.large_monster_dynamic_UI); config_changed = config_changed or changed; - imgui.same_line(); - changed, cached_config.module_visibility.quest_result_screen.large_monster_static_UI = imgui.checkbox( + changed, cached_config.module_visibility.in_training_area.large_monster_static_UI = imgui.checkbox( language.current_language.customization_menu.large_monster_static_UI, - cached_config.module_visibility.quest_result_screen.large_monster_static_UI); + cached_config.module_visibility.in_training_area.large_monster_static_UI); config_changed = config_changed or changed; - changed, cached_config.module_visibility.quest_result_screen.large_monster_highlighted_UI = imgui.checkbox( + changed, cached_config.module_visibility.in_training_area.large_monster_highlighted_UI = imgui.checkbox( language.current_language.customization_menu.large_monster_highlighted_UI, - cached_config.module_visibility.quest_result_screen.large_monster_highlighted_UI); + cached_config.module_visibility.in_training_area.large_monster_highlighted_UI); config_changed = config_changed or changed; - changed, cached_config.module_visibility.quest_result_screen.time_UI = - imgui.checkbox(language.current_language.customization_menu.time_UI, - cached_config.module_visibility.quest_result_screen.time_UI); - - config_changed = config_changed or changed; - imgui.same_line(); - - changed, cached_config.module_visibility.quest_result_screen.damage_meter_UI = imgui.checkbox( + changed, cached_config.module_visibility.in_training_area.damage_meter_UI = imgui.checkbox( language.current_language.customization_menu.damage_meter_UI, - cached_config.module_visibility.quest_result_screen.damage_meter_UI); + cached_config.module_visibility.in_training_area.damage_meter_UI); config_changed = config_changed or changed; - changed, cached_config.module_visibility.during_quest.endemic_life_UI = - imgui.checkbox(language.current_language.customization_menu.endemic_life_UI, - cached_config.module_visibility.during_quest.endemic_life_UI); + changed, cached_config.module_visibility.in_training_area.endemic_life_UI = imgui.checkbox( + language.current_language.customization_menu.endemic_life_UI, + cached_config.module_visibility.in_training_area.endemic_life_UI); config_changed = config_changed or changed; imgui.tree_pop(); end - if imgui.tree_node(language.current_language.customization_menu.training_area) then - changed, cached_config.module_visibility.training_area.large_monster_dynamic_UI = imgui.checkbox( - language.current_language.customization_menu.large_monster_dynamic_UI, - cached_config.module_visibility.training_area.large_monster_dynamic_UI); - + if imgui.tree_node(language.current_language.customization_menu.cutscene) then + changed = module_visibility_customization.draw(cached_config.module_visibility.cutscene); config_changed = config_changed or changed; - imgui.same_line(); - - changed, cached_config.module_visibility.training_area.large_monster_static_UI = imgui.checkbox( - language.current_language.customization_menu.large_monster_static_UI, - cached_config.module_visibility.training_area.large_monster_static_UI); - - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.training_area.damage_meter_UI = - imgui.checkbox(language.current_language.customization_menu.damage_meter_UI, - cached_config.module_visibility.training_area.damage_meter_UI); - - config_changed = config_changed or changed; - - changed, cached_config.module_visibility.during_quest.endemic_life_UI = - imgui.checkbox(language.current_language.customization_menu.endemic_life_UI, - cached_config.module_visibility.during_quest.endemic_life_UI); - - config_changed = config_changed or changed; - imgui.tree_pop(); end + + if imgui.tree_node(language.current_language.customization_menu.loading_quest) then + changed = module_visibility_customization.draw(cached_config.module_visibility.loading_quest); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.quest_start_animation) then + changed = module_visibility_customization.draw(cached_config.module_visibility.quest_start_animation); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.playing_quest) then + changed = module_visibility_customization.draw(cached_config.module_visibility.playing_quest); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.killcam) then + changed = module_visibility_customization.draw(cached_config.module_visibility.killcam); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.quest_end_timer) then + changed = module_visibility_customization.draw(cached_config.module_visibility.quest_end_timer); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.quest_end_animation) then + changed = module_visibility_customization.draw(cached_config.module_visibility.quest_end_animation); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.quest_end_screen) then + changed = module_visibility_customization.draw(cached_config.module_visibility.quest_end_screen); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.reward_screen) then + changed = module_visibility_customization.draw(cached_config.module_visibility.reward_screen); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.summary_screen) then + changed = module_visibility_customization.draw(cached_config.module_visibility.summary_screen); + config_changed = config_changed or changed; + imgui.tree_pop(); + end + imgui.tree_pop(); end @@ -2018,6 +2001,7 @@ function customization_menu.init_module() body_parts_customization = require("MHR_Overlay.UI.Customizations.body_parts_customization"); ailments_customization = require("MHR_Overlay.UI.Customizations.ailments_customization"); ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization"); + module_visibility_customization = require("MHR_Overlay.UI.Customizations.module_visibility_customization"); customization_menu.init(); customization_menu.reload_font(false); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index 6e41295..3b389bc 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -79,6 +79,7 @@ "creature_name_label": "Creature Name Label", "crown": "Crown", "crown_thresholds": "Crown Thresholds", + "cutscene": "Cutscene", "damage": "Damage", "damage_bar": "Damage Bar", "damage_bars_are_relative_to": "Damage Bars are relative to", @@ -89,7 +90,6 @@ "dps": "DPS", "dps_label": "DPS Label", "dps_mode": "DPS Mode", - "during_quest": "During Quest", "dynamic_positioning": "Dynamic Positioning", "dynamically_positioned": "Dynamically Positioned", "enable_for": "Enable for", @@ -139,11 +139,14 @@ "hotkeys": "Hotkeys", "hunter_rank": "Hunter Rank", "hunter_rank_label": "Hunter Rank Label", + "in_lobby": "In Lobby", + "in_training_area": "In Training Area", "include": "Include", "inside": "Inside", "installation_damage": "Installation Damage", "italic": "Italic", "join_time": "Join Time", + "killcam": "Killcam", "kunai_damage": "Kunai Damage", "language": "Language", "large_monster_UI": "Large Monster UI", @@ -152,6 +155,7 @@ "large_monster_static_UI": "Large Monster Static UI", "large_monsters": "Large Monsters", "last": "Last", + "loading_quest": "Loading Quest", "loss_health": "Sever Health", "loss_health_percentage": "Sever Health Percentage", "lowest_health": "Lowest Health", @@ -165,7 +169,7 @@ "mod_name": "MHR Overlay", "mode": "Mode", "modifiers": "Modifiers", - "module_visibility_on_different_screens": "Module Visibility on Different Screens", + "module_visibility_based_on_game_state": "Module Visibility based on Game State", "modules": "Modules", "monster_can_be_captured": "Monster can be captured", "monster_damage": "Monster Damage", @@ -195,11 +199,15 @@ "player_name_label": "Player Name Label", "player_name_size_limit": "Player Name Size Limit", "player_spacing": "Player Spacing", + "playing_quest": "Playing Quest", "poison_damage": "Poison Damage", "position": "Position", "press_any_key": "Press any key...", "prioritize_large_monsters": "Large Monsters on High Priority", - "quest_result_screen": "Quest Result Screen", + "quest_end_animation": "Quest End Animation", + "quest_end_screen": "Quest End Screen", + "quest_end_timer": "Quest End Timer", + "quest_start_animation": "Quest Start Animation", "quest_time": "Quest Time", "rage": "Rage", "reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.", @@ -207,6 +215,7 @@ "render_highlighted_monster": "Render Highlighted Monster", "render_not_highlighted_monsters": "Render Not Highlighted Monsters", "reversed_order": "Reversed Order", + "reward_screen": "Reward Screen", "settings": "Settings", "severe_filter": "Severe", "shadow": "Shadow", @@ -223,6 +232,7 @@ "statically_positioned": "Statically Positioned", "status": "Status", "style": "Style", + "summary_screen": "Summary Screen", "text_label": "Text Label", "thickness": "Thickness", "time_UI": "Time UI", @@ -245,7 +255,6 @@ "total_dps_label": "Total DPS Label", "tracked_damage_types": "Tracked Damage Types", "tracked_monster_types": "Tracked Monster Types", - "training_area": "Training Area", "type": "Type", "value_label": "Value Label", "vertical": "Vertical", diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index e1c4125..e3c535d 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -79,6 +79,7 @@ "creature_name_label": "환경생물 이름 정보", "crown": "금관", "crown_thresholds": "금관 판정값", + "cutscene": "Cutscene", "damage": "대미지", "damage_bar": "대미지 바", "damage_bars_are_relative_to": "기준으로 대미지 바", @@ -89,7 +90,6 @@ "dps": "DPS", "dps_label": "DPS 정보", "dps_mode": "DPS 모드", - "during_quest": "퀘스트 중", "dynamic_positioning": "유동 위치", "dynamically_positioned": "유동 위치 UI", "enable_for": "표시 대상", @@ -139,11 +139,14 @@ "hotkeys": "단축키", "hunter_rank": "헌터 랭크", "hunter_rank_label": "헌터 랭크 정보", + "in_lobby": "In Lobby", + "in_training_area": "In Training Area", "include": "포함", "inside": "내부", "installation_damage": "설비 대미지", "italic": "기울임", "join_time": "참가 시간", + "killcam": "Killcam", "kunai_damage": "쿠나이 대미지", "language": "언어", "large_monster_UI": "대형 몬스터 UI", @@ -152,6 +155,7 @@ "large_monster_static_UI": "대형 몬스터 고정 UI", "large_monsters": "대형 몬스터", "last": "마지막", + "loading_quest": "Loading Quest", "loss_health": "절단 수치", "loss_health_percentage": "절단 수치 비율", "lowest_health": "가장 체력이 낮은", @@ -165,7 +169,7 @@ "mod_name": "MHR Overlay", "mode": "모드", "modifiers": "설정 배율", - "module_visibility_on_different_screens": "상황별 UI 표시", + "module_visibility_based_on_game_state": "Module Visibility based on Game State", "modules": "UI", "monster_can_be_captured": "몬스터 포획 가능", "monster_damage": "몬스터 대미지", @@ -195,11 +199,15 @@ "player_name_label": "헌터명 정보", "player_name_size_limit": "헌터명 크기 제한", "player_spacing": "플레이어 간격", + "playing_quest": "Playing Quest", "poison_damage": "독 대미지", "position": "위치", "press_any_key": "설정할 키를 누르세요...", "prioritize_large_monsters": "대형 몬스터를 우선적으로", - "quest_result_screen": "퀘스트 결과 화면", + "quest_end_animation": "Quest End Animation", + "quest_end_screen": "Quest End Screen", + "quest_end_timer": "Quest End Timer", + "quest_start_animation": "Quest Start Animation", "quest_time": "퀘스트 시간", "rage": "분노", "reframework_outdated": "설치된 REFramework가 구버전입니다. 업데이트 하지 않으면 MHR Overlay가 제대로 동작하지 않을 수 있습니다.", @@ -207,6 +215,7 @@ "render_highlighted_monster": "타겟이 된 몬스터 표시", "render_not_highlighted_monsters": "타겟이 아닌 몬스터 표시", "reversed_order": "역순", + "reward_screen": "Reward Screen", "settings": "설정", "severe_filter": "절단", "shadow": "그림자", @@ -223,6 +232,7 @@ "statically_positioned": "고정 위치 UI", "status": "상태", "style": "스타일", + "summary_screen": "Summary Screen", "text_label": "텍스트 정보", "thickness": "두께", "time_UI": "시간 UI", @@ -245,7 +255,6 @@ "total_dps_label": "총 DPS 정보", "tracked_damage_types": "추적할 대미지 종류", "tracked_monster_types": "추적할 몬스터 타입", - "training_area": "훈련장", "type": "순으로", "value_label": "값 정보", "vertical": "세로", diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index 108ee07..6a92b7d 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -79,6 +79,7 @@ "creature_name_label": "Метка имени существа", "crown": "Корона", "crown_thresholds": "Лимиты корон", + "cutscene": "Катсцена", "damage": "Урон", "damage_bar": "Шкала урона", "damage_bars_are_relative_to": "Шкалы урона расположены относительно к", @@ -89,7 +90,6 @@ "dps": "Урон в секунду", "dps_label": "Метка урона в секунду", "dps_mode": "Режим урона в секунду", - "during_quest": "Во время квеста", "dynamic_positioning": "Динамическое позиционирование", "dynamically_positioned": "Рассположенный динамично", "enable_for": "Показывать для", @@ -139,11 +139,14 @@ "hotkeys": "Горячие клавиши", "hunter_rank": "Ранг охотника", "hunter_rank_label": "Метка ранга охотника", + "in_lobby": "В лобби", + "in_training_area": "В тренировочной зоне", "include": "Элементы", "inside": "Внутри", "installation_damage": "Урон от установок", "italic": "Курсив", "join_time": "Время присоединения", + "killcam": "Камера смерти", "kunai_damage": "Урон от кунаев", "language": "Язык", "large_monster_UI": "Интерфейс больший монстров", @@ -152,6 +155,7 @@ "large_monster_static_UI": "Статический интерфейс больших монстров", "large_monsters": "Большие монстры", "last": "Последний", + "loading_quest": "Загрузка квеста", "loss_health": "Отсечение части", "loss_health_percentage": "Отсечение части в процентах", "lowest_health": "Наименьшее здоровье", @@ -165,7 +169,7 @@ "mod_name": "MHR Overlay", "mode": "Режим", "modifiers": "Модификаторы", - "module_visibility_on_different_screens": "Видимость модулей на разных экранах", + "module_visibility_based_on_game_state": "Видимость модулей в зависимости от состояния игры", "modules": "Модули", "monster_can_be_captured": "Монстр может быть схвачен", "monster_damage": "Урон от монстров", @@ -195,11 +199,15 @@ "player_name_label": "Метка имени игрока", "player_name_size_limit": "Ограничить ширину имени игрока", "player_spacing": "Расстояние между игроками", + "playing_quest": "Во время квеста", "poison_damage": "Урон от отравления", "position": "Расположение", "press_any_key": "Нажмите любую клавишу...", "prioritize_large_monsters": "Большие монстры в приоритете", - "quest_result_screen": "Экран результатов квеста", + "quest_end_animation": "Анимация конца квеста", + "quest_end_screen": "Экран конца квеста", + "quest_end_timer": "Таймер конца квеста", + "quest_start_animation": "Анимация начала квеста", "quest_time": "Время квеста", "rage": "Ярость", "reframework_outdated": "Установленная версия REFramework устарела. Пожалуйста, обновитесь, иначе MHR Overlay будет работать некорректно.", @@ -207,6 +215,7 @@ "render_highlighted_monster": "Показывать помеченного монстра", "render_not_highlighted_monsters": "Показывать непомеченных монстров", "reversed_order": "Обратный порядок", + "reward_screen": "Экран наград", "settings": "Настройки", "severe_filter": "Отсечение", "shadow": "Тень", @@ -223,8 +232,9 @@ "statically_positioned": "Рассположенный статично", "status": "Статус", "style": "Стиль", + "summary_screen": "Экран Результатов", "text_label": "Текстовая метка", - "thickness": "Thickness", + "thickness": "Толщина", "time_UI": "Интерфейс времени", "time_label": "Метка времени", "time_limit": "Ограничение по времени", @@ -245,7 +255,6 @@ "total_dps_label": "Метка общего урона в секунду", "tracked_damage_types": "Отслеживаемые типы урона", "tracked_monster_types": "Отслеживаемые типы монстров", - "training_area": "Тренировочная зона", "type": "Тип", "value_label": "Метка значений", "vertical": "Вертикально", diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index d613f4f..5c2ea23 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -79,6 +79,7 @@ "creature_name_label": "生物名标签", "crown": "皇冠", "crown_thresholds": "皇冠阈值", + "cutscene": "Cutscene", "damage": "伤害", "damage_bar": "伤害条", "damage_bars_are_relative_to": "伤害条基于", @@ -89,7 +90,6 @@ "dps": "DPS", "dps_label": "DPS标签", "dps_mode": "DPS模式", - "during_quest": "任务中", "dynamic_positioning": "动态位置", "dynamically_positioned": "动态位置", "enable_for": "开启", @@ -139,11 +139,14 @@ "hotkeys": "热键", "hunter_rank": "猎人等級", "hunter_rank_label": "猎人等级标签", + "in_lobby": "In Lobby", + "in_training_area": "In Training Area", "include": "包含", "inside": "Inside", "installation_damage": "设备伤害", "italic": "斜体", "join_time": "加入时间", + "killcam": "Killcam", "kunai_damage": "苦无伤害", "language": "语言", "large_monster_UI": "大型怪物UI", @@ -152,6 +155,7 @@ "large_monster_static_UI": "大型怪物固定UI", "large_monsters": "大型怪物群", "last": "最后", + "loading_quest": "Loading Quest", "loss_health": "Sever Health", "loss_health_percentage": "Sever Health Percentage", "lowest_health": "Lowest Health", @@ -165,7 +169,7 @@ "mod_name": "MHR Overlay", "mode": "Mode", "modifiers": "更改项", - "module_visibility_on_different_screens": "不同场景中使用的模块", + "module_visibility_based_on_game_state": "Module Visibility based on Game State", "modules": "模块", "monster_can_be_captured": "可捕获的怪物", "monster_damage": "怪物伤害", @@ -195,11 +199,15 @@ "player_name_label": "玩家名标签", "player_name_size_limit": "Player Name Size Limit", "player_spacing": "玩家间距", + "playing_quest": "Playing Quest", "poison_damage": "中毒伤害", "position": "位置", "press_any_key": "按任意键...", "prioritize_large_monsters": "大型怪物优先", - "quest_result_screen": "任务结果页", + "quest_end_animation": "Quest End Animation", + "quest_end_screen": "Quest End Screen", + "quest_end_timer": "Quest End Timer", + "quest_start_animation": "Quest Start Animation", "quest_time": "任务时间", "rage": "愤怒", "reframework_outdated": "Installed REFramework version is outdated. Please, update. Otherwise, MHR Overlay won't work correctly.", @@ -207,6 +215,7 @@ "render_highlighted_monster": "渲染高亮怪物", "render_not_highlighted_monsters": "渲染非高亮怪物", "reversed_order": "逆向排序", + "reward_screen": "Reward Screen", "settings": "设定", "severe_filter": "Severe", "shadow": "阴影", @@ -223,6 +232,7 @@ "statically_positioned": "固定位置", "status": "状态", "style": "Style", + "summary_screen": "Summary Screen", "text_label": "文字标签", "thickness": "Thickness", "time_UI": "时间UI", @@ -245,7 +255,6 @@ "total_dps_label": "总DPS标签", "tracked_damage_types": "跟踪的伤害类型", "tracked_monster_types": "跟踪的怪物类型", - "training_area": "训练场", "type": "类型", "value_label": "数字", "vertical": "垂直", diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index de0bd96..35718e4 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -79,6 +79,7 @@ "creature_name_label": "環境生物名稱", "crown": "皇冠", "crown_thresholds": "皇冠的大小判定範圍", + "cutscene": "Cutscene", "damage": "傷害", "damage_bar": "傷害條", "damage_bars_are_relative_to": "傷害條基於", @@ -89,7 +90,6 @@ "dps": "DPS", "dps_label": "DPS文字", "dps_mode": "DPS模式", - "during_quest": "任務中", "dynamic_positioning": "浮動的資訊位置", "dynamically_positioned": "浮動的魔物資訊", "enable_for": "啟用對象", @@ -139,11 +139,14 @@ "hotkeys": "快捷鍵", "hunter_rank": "獵人等級", "hunter_rank_label": "獵人等級", + "in_lobby": "In Lobby", + "in_training_area": "In Training Area", "include": "細部資訊調整", "inside": "內部", "installation_damage": "設備傷害", "italic": "斜體", "join_time": "加入時間", + "killcam": "Killcam", "kunai_damage": "苦無傷害", "language": "語言", "large_monster_UI": "大型魔物 UI", @@ -152,6 +155,7 @@ "large_monster_static_UI": "大型魔物固定 UI", "large_monsters": "大型魔物群", "last": "最後", + "loading_quest": "Loading Quest", "loss_health": "Sever Health", "loss_health_percentage": "Sever Health Percentage", "lowest_health": "最低血量", @@ -165,7 +169,7 @@ "mod_name": "MHR Overlay", "mode": "Mode", "modifiers": "更改項", - "module_visibility_on_different_screens": "不同場景中使用的模組", + "module_visibility_based_on_game_state": "Module Visibility based on Game State", "modules": "模組", "monster_can_be_captured": "可捕獲的魔物", "monster_damage": "魔物傷害", @@ -195,11 +199,15 @@ "player_name_label": "玩家名稱", "player_name_size_limit": "玩家名稱大小限制", "player_spacing": "玩家間格", + "playing_quest": "Playing Quest", "poison_damage": "毒傷害", "position": "位置", "press_any_key": "輸入任意鍵...", "prioritize_large_monsters": "大型魔物優先", - "quest_result_screen": "任務結算頁", + "quest_end_animation": "Quest End Animation", + "quest_end_screen": "Quest End Screen", + "quest_end_timer": "Quest End Timer", + "quest_start_animation": "Quest Start Animation", "quest_time": "任務時間", "rage": "憤怒度", "reframework_outdated": "已安裝的 REFramework 版本已過期. 麻煩請更新版本, 否則 MHR Overlay 無法正確作用.", @@ -207,6 +215,7 @@ "render_highlighted_monster": "渲染目標魔物", "render_not_highlighted_monsters": "渲染非目標魔物", "reversed_order": "反向排序", + "reward_screen": "Reward Screen", "settings": "設定", "severe_filter": "Severe", "shadow": "陰影", @@ -223,6 +232,7 @@ "statically_positioned": "固定的魔物資訊", "status": "狀態", "style": "樣式", + "summary_screen": "Summary Screen", "text_label": "文字", "thickness": "粗細", "time_UI": "時間 UI", @@ -245,7 +255,6 @@ "total_dps_label": "全體DPS文字", "tracked_damage_types": "追蹤的傷害類型", "tracked_monster_types": "追蹤的魔物類型", - "training_area": "訓練場", "type": "類型", "value_label": "數字", "vertical": "垂直",