From 39e324e0a50d96d67cdeb303a8f85862ad6e7413 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Wed, 16 Feb 2022 21:02:34 +0200 Subject: [PATCH] Added DPS, missing offsets and additional options. --- reframework/autorun/MHR_Overlay.lua | 12 +- .../MHR_Overlay/Damage_Meter/player.lua | 15 +- .../MHR_Overlay/Game_Handler/singletons.lua | 16 +- .../autorun/MHR_Overlay/Game_Handler/time.lua | 78 ++++ .../autorun/MHR_Overlay/Misc/config.lua | 331 +++++++++++------ .../autorun/MHR_Overlay/Misc/language.lua | 18 +- .../MHR_Overlay/Monsters/large_monster.lua | 96 ++++- .../MHR_Overlay/Monsters/small_monster.lua | 13 +- .../UI/Modules/damage_meter_UI.lua | 21 +- .../UI/Modules/large_monster_UI.lua | 28 +- .../MHR_Overlay/UI/Modules/time_UI.lua | 33 +- .../UI/UI_Entities/damage_UI_entity.lua | 10 +- .../MHR_Overlay/UI/customization_menu.lua | 348 +++++++++++++++++- .../data/MHR Overlay/languages/en-us.json | 16 +- .../data/MHR Overlay/languages/ko-kr.json | 14 +- .../data/MHR Overlay/languages/ru-ru.json | 196 ++++++++++ .../data/MHR Overlay/languages/zh-tw.json | 12 + 17 files changed, 1057 insertions(+), 200 deletions(-) create mode 100644 reframework/autorun/MHR_Overlay/Game_Handler/time.lua create mode 100644 reframework/data/MHR Overlay/languages/ru-ru.json diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index 8f04491..b31afe5 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -3,6 +3,7 @@ x = ""; local quest_status = require("MHR_Overlay.Game_Handler.quest_status"); local screen = require("MHR_Overlay.Game_Handler.screen"); local singletons = require("MHR_Overlay.Game_Handler.singletons"); +local time = require("MHR_Overlay.Game_Handler.time"); local config = require("MHR_Overlay.Misc.config"); local language = require("MHR_Overlay.Misc.language"); @@ -36,6 +37,7 @@ local drawing = require("MHR_Overlay.UI.drawing"); screen.init_module(); singletons.init_module(); table_helpers.init_module(); +time.init_module(); language.init_module(); config.init_module(); @@ -63,8 +65,6 @@ large_monster_UI.init_module(); small_monster_UI.init_module(); time_UI.init_module(); - - log.info("[MHR Overlay] loaded"); -- #endregion ------------------------INIT MODULES------------------------- @@ -89,8 +89,8 @@ re.on_frame(function() end); re.on_frame(function() - draw.text("x: " .. tostring(x), 451, 51, 0xFF000000); - draw.text("x: " .. tostring(x), 450, 50, 0xFFFFFFFF); + --draw.text("x: " .. tostring(x), 451, 51, 0xFF000000); + --draw.text("x: " .. tostring(x), 450, 50, 0xFFFFFFFF); end); -- #endregion --------------------------RE_IMGUI--------------------------- @@ -106,7 +106,7 @@ end, function() singletons.init(); player.update_myself_position(); quest_status.update_is_online(); - + time.tick(); if quest_status.index < 2 then quest_status.update_is_training_area(); @@ -143,6 +143,8 @@ end, function() 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 diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua index aab8755..21a69ff 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/player.lua @@ -4,6 +4,7 @@ local table_helpers; local singletons; local customization_menu; local damage_UI_entity; +local time; player.list = {}; player.myself = nil; @@ -17,6 +18,10 @@ function player.new(player_id, player_name, player_hunter_rank) new_player.name = player_name; new_player.hunter_rank = player_hunter_rank; + new_player.join_time = time.total_elapsed_seconds; + new_player.first_hit_time = -1; + new_player.dps = 0; + new_player.small_monsters = {}; new_player.small_monsters.total_damage = 0; @@ -115,6 +120,10 @@ function player.update_damage(_player, damage_source_type, is_large_monster, dam return; end + if _player.first_hit_time == -1 then + _player.first_hit_time = time.total_elapsed_seconds; + end + local player_monster_type = _player.small_monsters; if is_large_monster then player_monster_type = _player.large_monsters; @@ -262,14 +271,15 @@ function player.init_UI(_player) config.current_config.damage_meter_UI.damage_bar, config.current_config.damage_meter_UI.highlighted_damage_bar, config.current_config.damage_meter_UI.player_name_label, + config.current_config.damage_meter_UI.dps_label, config.current_config.damage_meter_UI.hunter_rank_label, config.current_config.damage_meter_UI.damage_value_label, config.current_config.damage_meter_UI.damage_percentage_label ); end -function player.draw(_player, position_on_screen, opacity_scale, top_damage) - damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_damage); +function player.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps) + damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps); end function player.init_module() @@ -278,6 +288,7 @@ function player.init_module() singletons = require("MHR_Overlay.Game_Handler.singletons"); customization_menu = require("MHR_Overlay.UI.customization_menu"); damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity"); + time = require("MHR_Overlay.Game_Handler.time"); player.init_total(); end diff --git a/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua b/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua index 09de2c2..c356275 100644 --- a/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua +++ b/reframework/autorun/MHR_Overlay/Game_Handler/singletons.lua @@ -27,7 +27,7 @@ function singletons.init_message_manager() singletons.message_manager = sdk.get_managed_singleton("snow.gui.MessageManager"); if singletons.message_manager == nil then - log.error("[MHR Overlay] No message manager"); + --log.error("[MHR Overlay] No message manager"); end return singletons.message_manager; @@ -40,7 +40,7 @@ function singletons.init_enemy_manager() singletons.enemy_manager = sdk.get_managed_singleton("snow.enemy.EnemyManager"); if singletons.enemy_manager == nil then - log.error("[MHR Overlay] No enemy manager"); + --log.error("[MHR Overlay] No enemy manager"); end return singletons.enemy_manager; @@ -53,7 +53,7 @@ function singletons.init_lobby_manager() singletons.lobby_manager = sdk.get_managed_singleton("snow.LobbyManager"); if singletons.lobby_manager == nil then - log.error("[MHR Overlay] No lobby manager"); + --log.error("[MHR Overlay] No lobby manager"); return false; end @@ -67,7 +67,7 @@ function singletons.init_progress_manager() singletons.progress_manager = sdk.get_managed_singleton("snow.progress.ProgressManager"); if singletons.progress_manager == nil then - log.error("[MHR Overlay] No progress manager"); + --log.error("[MHR Overlay] No progress manager"); return false; end @@ -81,7 +81,7 @@ function singletons.init_quest_manager() singletons.quest_manager = sdk.get_managed_singleton("snow.QuestManager"); if singletons.quest_manager == nil then - log.error("[MHR Overlay] No quest manager"); + --log.error("[MHR Overlay] No quest manager"); end return singletons.quest_manager; @@ -94,7 +94,7 @@ function singletons.init_player_manager() singletons.player_manager = sdk.get_managed_singleton("snow.player.PlayerManager"); if singletons.player_manager == nil then - log.error("[MHR Overlay] No player manager"); + --log.error("[MHR Overlay] No player manager"); end return singletons.player_manager; @@ -107,7 +107,7 @@ function singletons.init_village_area_manager() singletons.village_area_manager = sdk.get_managed_singleton("snow.VillageAreaManager"); if singletons.village_area_manager == nil then - log.error("[MHR Overlay] No village manager"); + --log.error("[MHR Overlay] No village area manager"); end return singletons.village_area_manager; @@ -120,7 +120,7 @@ function singletons.init_gui_manager() singletons.gui_manager = sdk.get_managed_singleton("snow.gui.GuiManager"); if singletons.gui_manager == nil then - log.error("[MHR Overlay] No gui manager"); + --log.error("[MHR Overlay] No gui manager"); end return singletons.gui_manager; diff --git a/reframework/autorun/MHR_Overlay/Game_Handler/time.lua b/reframework/autorun/MHR_Overlay/Game_Handler/time.lua new file mode 100644 index 0000000..fd57642 --- /dev/null +++ b/reframework/autorun/MHR_Overlay/Game_Handler/time.lua @@ -0,0 +1,78 @@ +local time = {}; +local singletons; +local customization_menu; +local player; +local config; + +local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager"); +local get_quest_elapsed_time_min_method = quest_manager_type_def:get_method("getQuestElapsedTimeMin"); +local get_quest_elapsed_time_sec_method = quest_manager_type_def:get_method("getQuestElapsedTimeSec"); + +time.total_elapsed_seconds = 0; +time.elapsed_minutes = 0; +time.elapsed_seconds = 0; + +time.last_whole_seconds = 0; + +function time.tick() + if singletons.quest_manager == nil then + return; + end + + local quest_time_elapsed_minutes = get_quest_elapsed_time_min_method:call(singletons.quest_manager); + if quest_time_elapsed_minutes == nil then + customization_menu.status = "No quest time elapsed minutes"; + return; + end + + time.elapsed_minutes = quest_time_elapsed_minutes; + + local quest_time_total_elapsed_seconds = get_quest_elapsed_time_sec_method:call(singletons.quest_manager); + if quest_time_total_elapsed_seconds == nil then + customization_menu.status = "No quest time total elapsed seconds"; + return; + end + + time.total_elapsed_seconds = quest_time_total_elapsed_seconds; + time.elapsed_seconds = quest_time_total_elapsed_seconds - quest_time_elapsed_minutes * 60; + + if time.total_elapsed_seconds - time.last_whole_seconds > 1 then + time.last_whole_seconds = time.total_elapsed_seconds; + time.update_players_dps(); + end +end + +function time.update_players_dps() + + local new_total_dps = 0; + for _, _player in pairs(player.list) do + if config.current_config.damage_meter_UI.settings.dps_mode == "Quest Time" then + if time.total_elapsed_seconds > 0 then + _player.dps = _player.display.total_damage / time.total_elapsed_seconds; + end + elseif config.current_config.damage_meter_UI.settings.dps_mode == "Join Time" then + if time.total_elapsed_seconds - _player.join_time > 0 then + _player.dps = _player.display.total_damage / (time.total_elapsed_seconds - _player.join_time); + end + elseif config.current_config.damage_meter_UI.settings.dps_mode == "First Hit" then + if time.total_elapsed_seconds - _player.first_hit_time > 0 then + _player.dps = _player.display.total_damage / (time.total_elapsed_seconds - _player.first_hit_time); + end + else + end + + new_total_dps = new_total_dps + _player.dps; + end + + player.total.dps = new_total_dps; +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"); +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 1b5d1e5..bdf0280 100644 --- a/reframework/autorun/MHR_Overlay/Misc/config.lua +++ b/reframework/autorun/MHR_Overlay/Misc/config.lua @@ -119,13 +119,18 @@ function config.init() health = { visibility = true, + + offset = { + x = 0, + y = 17 + }, text_label = { visibility = false, text = "%s", offset = { - x = -25, - y = 12 + x = -22, + y = -5 }, color = 0xFFCCF4E1, @@ -144,7 +149,7 @@ function config.init() text = "%.0f/%.0f", -- current_health/max_health offset = { x = 50, - y = 25 + y = 0 }, color = 0xFFCCF4E1, @@ -163,7 +168,7 @@ function config.init() text = "%5.1f%%", offset = { - x = 55, + x = -5, y = 0 }, color = 0xFFCCF4E1, @@ -182,7 +187,7 @@ function config.init() visibility = true, offset = { x = 0, - y = 17 + y = 0 }, size = { @@ -200,13 +205,18 @@ function config.init() stamina = { visibility = false, + + offset = { + x = 10, + y = 30 + }, text_label = { visibility = true, text = "%s", offset = { - x = 15, - y = 37 + x = 5, + y = 0 }, color = 0xFFA3F5F0, @@ -224,8 +234,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 15, - y = 54 + x = 25, + y = 16 }, color = 0xFFA3F5F0, @@ -244,8 +254,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 55, - y = 64 + x = 45, + y = 29 }, color = 0xFFA3F5F0, @@ -262,8 +272,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 54 + x = 0, + y = 17 }, size = { @@ -285,6 +295,8 @@ function config.init() settings = { hide_dead_or_captured = true, + render_highlighted_monster = true, + render_not_highlighted_monsters = true, max_distance = 300, opacity_falloff = true }, @@ -329,13 +341,18 @@ function config.init() health = { visibility = true, + + offset = { + x = 0, + y = 17 + }, text_label = { visibility = false, text = "%s", offset = { x = -25, - y = 19 + y = 2 }, color = 0xFFCCF4E1, @@ -354,7 +371,7 @@ function config.init() text = "%.0f/%.0f", -- current_health/max_health offset = { x = 5, - y = 19 + y = 2 }, color = 0xFFFFFFFF, @@ -374,7 +391,7 @@ function config.init() offset = { x = 150, - y = 19 + y = 2 }, color = 0xFFFFFFFF, @@ -392,7 +409,7 @@ function config.init() visibility = true, offset = { x = 0, - y = 17 + y = 0 }, size = { @@ -429,13 +446,18 @@ function config.init() stamina = { visibility = true, + + offset = { + x = 10, + y = 37 + }, text_label = { visibility = true, text = "%s", offset = { - x = 15, - y = 37 + x = 15-10, + y = 0 }, color = 0xFFA3F5F0, @@ -453,8 +475,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 54 + x = 55-10, + y = 17 }, color = 0xFFFFFFFF, @@ -473,8 +495,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 54 + x = 145-10, + y = 17 }, color = 0xFFFFFFFF, @@ -491,8 +513,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 54 + x = 10-10, + y = 17 }, size = { @@ -509,13 +531,18 @@ function config.init() rage = { visibility = true, + + offset = { + x = 10, + y = 61 + }, text_label = { visibility = true, text = "%s", offset = { - x = 15, - y = 61 + x = 5, + y = 0 }, color = 0xFFFF9393, @@ -533,8 +560,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 78 + x = 45, + y = 17 }, color = 0xFFFFFFFF, @@ -553,8 +580,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 78 + x = 135, + y = 17 }, color = 0xFFFFFFFF, @@ -570,11 +597,11 @@ function config.init() timer_label = { visibility = true, - text = "%.0f:%02.0f", + text = "%2.0f:%02.0f", offset = { - x = 157, - y = 78 + x = 140, + y = 17 }, color = 0xFFFFFFFF, @@ -591,8 +618,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 78 + x = 0, + y = 17 }, size = { @@ -611,8 +638,8 @@ function config.init() visibility = false, offset = { - x = 0, - y = 50 + x = 10, + y = 111 }, spacing = { @@ -639,8 +666,8 @@ function config.init() }, offset = { - x = 15, - y = 61 + x = 5, + y = 0 }, color = 0xFFf9d9ff, @@ -658,8 +685,8 @@ function config.init() visibility = false, text = language.current_language.UI.HP, offset = { - x = -15, - y = 69 + x = -25, + y = 8 }, color = 0xF1F4A3CC, @@ -677,8 +704,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 74 + x = 45, + y = 13 }, color = 0xFFFFFFFF, @@ -697,8 +724,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 74 + x = 135, + y = 13 }, color = 0xFFFFFFFF, @@ -715,8 +742,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 75 + x = 0, + y = 14 }, size = { @@ -742,6 +769,9 @@ function config.init() settings = { hide_dead_or_captured = true, + render_highlighted_monster = true, + render_not_highlighted_monsters = true, + highlighted_monster_location = "Normal", orientation = "Horizontal" }, @@ -785,13 +815,18 @@ function config.init() health = { visibility = true, + + offset = { + x = 0, + y = 17 + }, text_label = { visibility = false, text = "%s", offset = { x = -25, - y = 19 + y = 2 }, color = 0xFFCCF4E1, @@ -810,7 +845,7 @@ function config.init() text = "%.0f/%.0f", -- current_health/max_health offset = { x = 5, - y = 19 + y = 2 }, color = 0xFFFFFFFF, @@ -830,7 +865,7 @@ function config.init() offset = { x = 150, - y = 19 + y = 2 }, color = 0xFFFFFFFF, @@ -848,7 +883,7 @@ function config.init() visibility = true, offset = { x = 0, - y = 17 + y = 0 }, size = { @@ -885,13 +920,18 @@ function config.init() stamina = { visibility = true, + + offset = { + x = 0, + y = 37 + }, text_label = { visibility = false, text = "%s", offset = { x = 15, - y = 37 + y = 0 }, color = 0xFFA3F5F0, @@ -910,7 +950,7 @@ function config.init() text = "%.0f/%.0f", -- current_health/max_health offset = { x = 55, - y = 54 + y = 17 }, color = 0xFFFFFFFF, @@ -930,7 +970,7 @@ function config.init() offset = { x = 145, - y = 54 + y = 17 }, color = 0xFFFFFFFF, @@ -948,7 +988,7 @@ function config.init() visibility = true, offset = { x = 0, - y = 37 + y = 0 }, size = { @@ -965,13 +1005,18 @@ function config.init() rage = { visibility = true, + + offset = { + x = 0, + y = 42 + }, text_label = { visibility = false, text = "%s", offset = { x = 15, - y = 61 + y = 19 }, color = 0xFFFF9393, @@ -990,7 +1035,7 @@ function config.init() text = "%.0f/%.0f", -- current_health/max_health offset = { x = 55, - y = 78 + y = 36 }, color = 0xFFFFFFFF, @@ -1010,7 +1055,7 @@ function config.init() offset = { x = 150, - y = 33 + y = -9 }, color = 0xFFFFFFFF, @@ -1026,11 +1071,11 @@ function config.init() timer_label = { visibility = true, - text = "%.0f:%02.0f", + text = "%2.0f:%02.0f", offset = { - x = 150, - y = 33 + x = 157, + y = -9 }, color = 0xFFFFFFFF, @@ -1048,7 +1093,7 @@ function config.init() visibility = true, offset = { x = 0, - y = 42 + y = 0 }, size = { @@ -1067,7 +1112,7 @@ function config.init() visibility = false, offset = { - x = 0, + x = 10, y = 50 }, @@ -1095,8 +1140,8 @@ function config.init() }, offset = { - x = 15, - y = 61 + x = 5, + y = 0 }, color = 0xFFf9d9ff, @@ -1114,8 +1159,8 @@ function config.init() visibility = false, text = language.current_language.UI.HP, offset = { - x = -15, - y = 69 + x = -25, + y = 8 }, color = 0xF1F4A3CC, @@ -1133,8 +1178,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 74 + x = 45, + y = 13 }, color = 0xFFFFFFFF, @@ -1153,8 +1198,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 74 + x = 135, + y = 13 }, color = 0xFFFFFFFF, @@ -1171,8 +1216,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 75 + x = 0, + y = 14 }, size = { @@ -1230,13 +1275,18 @@ function config.init() health = { visibility = true, - + + offset = { + x = 0, + y = 17 + }, + text_label = { visibility = false, text = "%s", offset = { x = -25, - y = 19 + y = 2 }, color = 0xFFCCF4E1, @@ -1255,7 +1305,7 @@ function config.init() text = "%.0f/%.0f", -- current_health/max_health offset = { x = 5, - y = 19 + y = 2 }, color = 0xFFFFFFFF, @@ -1275,7 +1325,7 @@ function config.init() offset = { x = 150, - y = 19 + y = 2 }, color = 0xFFFFFFFF, @@ -1293,7 +1343,7 @@ function config.init() visibility = true, offset = { x = 0, - y = 17 + y = 0 }, size = { @@ -1325,18 +1375,23 @@ function config.init() color = 0xB9000000 } - } + }, }, stamina = { visibility = true, + + offset = { + x = 10, + y = 37 + }, text_label = { visibility = true, text = "%s", offset = { - x = 15, - y = 37 + x = 15-10, + y = 0 }, color = 0xFFA3F5F0, @@ -1354,8 +1409,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 54 + x = 55-10, + y = 17 }, color = 0xFFFFFFFF, @@ -1374,8 +1429,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 54 + x = 145-10, + y = 17 }, color = 0xFFFFFFFF, @@ -1392,8 +1447,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 54 + x = 10-10, + y = 17 }, size = { @@ -1410,13 +1465,18 @@ function config.init() rage = { visibility = true, + + offset = { + x = 10, + y = 61 + }, text_label = { visibility = true, text = "%s", offset = { - x = 15, - y = 61 + x = 5, + y = 0 }, color = 0xFFFF9393, @@ -1434,8 +1494,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 78 + x = 45, + y = 17 }, color = 0xFFFFFFFF, @@ -1454,8 +1514,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 78 + x = 135, + y = 17 }, color = 0xFFFFFFFF, @@ -1471,11 +1531,11 @@ function config.init() timer_label = { visibility = true, - text = "%.0f:%02.0f", + text = "%2.0f:%02.0f", offset = { - x = 157, - y = 78 + x = 140, + y = 17 }, color = 0xFFFFFFFF, @@ -1492,8 +1552,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 78 + x = 0, + y = 17 }, size = { @@ -1512,8 +1572,8 @@ function config.init() visibility = true, offset = { - x = 0, - y = 50 + x = 10, + y = 111 }, spacing = { @@ -1540,8 +1600,8 @@ function config.init() }, offset = { - x = 15, - y = 61 + x = 5, + y = 0 }, color = 0xFFf9d9ff, @@ -1559,8 +1619,8 @@ function config.init() visibility = false, text = language.current_language.UI.HP, offset = { - x = -15, - y = 69 + x = -25, + y = 8 }, color = 0xF1F4A3CC, @@ -1578,8 +1638,8 @@ function config.init() visibility = true, text = "%.0f/%.0f", -- current_health/max_health offset = { - x = 55, - y = 74 + x = 45, + y = 13 }, color = 0xFFFFFFFF, @@ -1598,8 +1658,8 @@ function config.init() text = "%5.1f%%", offset = { - x = 145, - y = 74 + x = 135, + y = 13 }, color = 0xFFFFFFFF, @@ -1616,8 +1676,8 @@ function config.init() bar = { visibility = true, offset = { - x = 10, - y = 75 + x = 0, + y = 14 }, size = { @@ -1681,7 +1741,7 @@ function config.init() }, spacing = { - x = 270, + x = 300, y = 24 }, @@ -1695,11 +1755,12 @@ function config.init() highlighted_bar = "Me", damage_bar_relative_to = "Top Damage", -- "total damage" or "top damage" - my_damage_bar_location = "First" -- "normal" or "first" or "last" + my_damage_bar_location = "First", -- "normal" or "first" or "last" + dps_mode = "First Hit" }, sorting = { - type = "Damage", -- "normal" or "damage" + type = "Damage", -- "normal" or "damage" or "dps" reversed_order = false }, @@ -1729,7 +1790,7 @@ function config.init() text = "%s", offset = { - x = 5, + x = 45, y = 0 }, color = 0xFFCCF4E1, @@ -1806,6 +1867,26 @@ function config.init() color = 0xFF000000 } }, + + dps_label = { + visibility = true, + text = "%.1f", + + offset = { + x = 265, + y = 0 + }, + color = 0xFFCCF4E1, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, total_damage_label = { visibility = true, @@ -1844,6 +1925,26 @@ function config.init() color = 0xFF000000 } }, + + total_dps_label = { + visibility = true, + text = "%.1f", + + offset = { + x = 265, + y = 0 + }, + color = 0xFFFF7373, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, damage_bar = { visibility = true, diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 8902edb..52ced3d 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -114,7 +114,9 @@ language.default_language = { static_orientation = "Static Orientation", - hide_dead_or_captured = "Hide dead or captured", + hide_dead_or_captured = "Hide Dead or Captured", + render_highlighted_monster = "Render Highlighted Monster", + render_not_highlighted_monsters = "Render Not Highlighted Monsters", opacity_falloff = "Opacity Falloff", max_distance = "Max Distance", @@ -189,7 +191,9 @@ language.default_language = { player_name_label = "Player Name Label", hunter_rank_label = "Hunter Rank Label", damage_value_label = "Damage Value Label", - damage_percentage_label = "Damage Percetange Label", + damage_percentage_label = "Damage Percentage Label", + dps_label = "DPS Label", + total_dps_label = "Total DPS Label", total_damage_label = "Total Damage Label", total_damage_value_label = "Total Damage Value Label", damage_bar = "Damage Bar", @@ -232,6 +236,16 @@ language.default_language = { word_player = "Word \"Player\""; player_id = "Player ID", player_name = "Player Name", + + dps_mode = "DPS Mode", + dps = "DPS", + top_dps = "Top DPS", + total_dps = "Total DPS", + first_hit = "First Hit", + quest_time = "Quest Time", + join_time = "Join Time", + fight_time = "Fight Time" + } }; diff --git a/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua b/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua index 08fc43c..3e7a6bc 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua @@ -207,7 +207,7 @@ function large_monster.init_dynamic_UI(monster) config.current_config.large_monster_UI.dynamic.rage.text_label, config.current_config.large_monster_UI.dynamic.rage.value_label, config.current_config.large_monster_UI.dynamic.rage.percentage_label, - config.current_config.large_monster_UI.static.rage.timer_label + config.current_config.large_monster_UI.dynamic.rage.timer_label ); for REpart, part in pairs(monster.parts) do @@ -561,11 +561,31 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale) drawing.draw_label(monster.dynamic_name_label, position_on_screen, opacity_scale, monster_name_text); - health_UI_entity.draw(monster, monster.health_dynamic_UI, position_on_screen, opacity_scale); - drawing.draw_capture_line(monster.health_dynamic_UI.bar, position_on_screen, opacity_scale, monster.capture_percentage); + local health_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.health.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.health.offset.y + }; - stamina_UI_entity.draw(monster, monster.stamina_dynamic_UI, position_on_screen, opacity_scale); - rage_UI_entity.draw(monster, monster.rage_dynamic_UI, position_on_screen, opacity_scale); + local stamina_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.stamina.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.stamina.offset.y + }; + + local rage_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.rage.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.rage.offset.y + }; + + local parts_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.parts.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.parts.offset.y + }; + + health_UI_entity.draw(monster, monster.health_dynamic_UI, health_position_on_screen, opacity_scale); + drawing.draw_capture_line(monster.health_dynamic_UI.bar, health_position_on_screen, opacity_scale, monster.capture_percentage); + + stamina_UI_entity.draw(monster, monster.stamina_dynamic_UI, stamina_position_on_screen, opacity_scale); + rage_UI_entity.draw(monster, monster.rage_dynamic_UI, rage_position_on_screen, opacity_scale); --sort parts here local displayed_parts = {}; @@ -612,8 +632,8 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale) for j, part in ipairs(displayed_parts) do local part_position_on_screen = { - x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.parts.offset.x + config.current_config.large_monster_UI.dynamic.parts.spacing.x * (j - 1), - y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.parts.offset.y + config.current_config.large_monster_UI.dynamic.parts.spacing.y * (j - 1); + x = parts_position_on_screen.x + config.current_config.large_monster_UI.dynamic.parts.spacing.x * (j - 1), + y = parts_position_on_screen.y + config.current_config.large_monster_UI.dynamic.parts.spacing.y * (j - 1); } body_part.draw_dynamic(part, part_position_on_screen, opacity_scale); @@ -646,12 +666,31 @@ function large_monster.draw_static(monster, position_on_screen, opacity_scale) drawing.draw_label(monster.static_name_label, position_on_screen, opacity_scale, monster_name_text); + local health_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.static.health.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.static.health.offset.y + }; - health_UI_entity.draw(monster, monster.health_static_UI, position_on_screen, opacity_scale); - drawing.draw_capture_line(monster.health_static_UI.bar, position_on_screen, opacity_scale, monster.capture_percentage); + local stamina_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.static.stamina.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.static.stamina.offset.y + }; - stamina_UI_entity.draw(monster, monster.stamina_static_UI, position_on_screen, opacity_scale); - rage_UI_entity.draw(monster, monster.rage_static_UI, position_on_screen, opacity_scale); + local rage_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.static.rage.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.static.rage.offset.y + }; + + local parts_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.static.parts.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.static.parts.offset.y + }; + + health_UI_entity.draw(monster, monster.health_static_UI, health_position_on_screen, opacity_scale); + drawing.draw_capture_line(monster.health_static_UI.bar, health_position_on_screen, opacity_scale, monster.capture_percentage); + + stamina_UI_entity.draw(monster, monster.stamina_static_UI, stamina_position_on_screen, opacity_scale); + rage_UI_entity.draw(monster, monster.rage_static_UI, rage_position_on_screen, opacity_scale); --sort parts here local displayed_parts = {}; @@ -698,8 +737,8 @@ function large_monster.draw_static(monster, position_on_screen, opacity_scale) for j, part in ipairs(displayed_parts) do local part_position_on_screen = { - x = position_on_screen.x + config.current_config.large_monster_UI.static.parts.offset.x + config.current_config.large_monster_UI.static.parts.spacing.x * (j - 1), - y = position_on_screen.y + config.current_config.large_monster_UI.static.parts.offset.y + config.current_config.large_monster_UI.static.parts.spacing.y * (j - 1); + x = parts_position_on_screen.x + config.current_config.large_monster_UI.static.parts.spacing.x * (j - 1), + y = parts_position_on_screen.y + config.current_config.large_monster_UI.static.parts.spacing.y * (j - 1); } body_part.draw_static(part, part_position_on_screen, opacity_scale); @@ -732,12 +771,31 @@ function large_monster.draw_highlighted(monster, position_on_screen, opacity_sca drawing.draw_label(monster.highlighted_name_label, position_on_screen, opacity_scale, monster_name_text); + local health_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.health.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.health.offset.y + }; - health_UI_entity.draw(monster, monster.health_highlighted_UI, position_on_screen, opacity_scale); - drawing.draw_capture_line(monster.health_highlighted_UI.bar, position_on_screen, opacity_scale, monster.capture_percentage); + local stamina_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.stamina.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.stamina.offset.y + }; - stamina_UI_entity.draw(monster, monster.stamina_highlighted_UI, position_on_screen, opacity_scale); - rage_UI_entity.draw(monster, monster.rage_highlighted_UI, position_on_screen, opacity_scale); + local rage_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.rage.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.rage.offset.y + }; + + local parts_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.parts.offset.x, + y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.parts.offset.y + }; + + health_UI_entity.draw(monster, monster.health_highlighted_UI, health_position_on_screen, opacity_scale); + drawing.draw_capture_line(monster.health_highlighted_UI.bar, health_position_on_screen, opacity_scale, monster.capture_percentage); + + stamina_UI_entity.draw(monster, monster.stamina_highlighted_UI, stamina_position_on_screen, opacity_scale); + rage_UI_entity.draw(monster, monster.rage_highlighted_UI, rage_position_on_screen, opacity_scale); --sort parts here local displayed_parts = {}; @@ -784,8 +842,8 @@ function large_monster.draw_highlighted(monster, position_on_screen, opacity_sca for j, part in ipairs(displayed_parts) do local part_position_on_screen = { - x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.parts.offset.x + config.current_config.large_monster_UI.highlighted.parts.spacing.x * (j - 1), - y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.parts.offset.y + config.current_config.large_monster_UI.highlighted.parts.spacing.y * (j - 1); + x = parts_position_on_screen.x + config.current_config.large_monster_UI.highlighted.parts.spacing.x * (j - 1), + y = parts_position_on_screen.y + config.current_config.large_monster_UI.highlighted.parts.spacing.y * (j - 1); } body_part.draw_highlighted(part, part_position_on_screen, opacity_scale); diff --git a/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua b/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua index 8885f6c..a7fabc0 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua @@ -234,9 +234,18 @@ end function small_monster.draw(monster, position_on_screen, opacity_scale) drawing.draw_label(monster.name_label, position_on_screen, opacity_scale, monster.name); + local health_position_on_screen = { + x = position_on_screen.x + config.current_config.small_monster_UI.health.offset.x, + y = position_on_screen.y + config.current_config.small_monster_UI.health.offset.y + }; + + local stamina_position_on_screen = { + x = position_on_screen.x + config.current_config.small_monster_UI.stamina.offset.x, + y = position_on_screen.y + config.current_config.small_monster_UI.stamina.offset.y + }; - health_UI_entity.draw(monster, monster.health_UI, position_on_screen, opacity_scale); - stamina_UI_entity.draw(monster, monster.stamina_UI, position_on_screen, opacity_scale); + health_UI_entity.draw(monster, monster.health_UI, health_position_on_screen, opacity_scale); + stamina_UI_entity.draw(monster, monster.stamina_UI, stamina_position_on_screen, opacity_scale); end function small_monster.init_list() 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 41413e8..fd39464 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/damage_meter_UI.lua @@ -149,7 +149,17 @@ function damage_meter_UI.draw() table.insert(reversed_quest_players, quest_players[i]); end quest_players = reversed_quest_players; - elseif config.current_config.damage_meter_UI.sorting.type == "Damage" then + elseif config.current_config.damage_meter_UI.sorting.type == "DPS" then + if config.current_config.damage_meter_UI.sorting.reversed_order then + table.sort(quest_players, function(left, right) + return left.dps < right.dps; + end); + else + table.sort(quest_players, function(left, right) + return left.dps > right.dps; + end); + end + else if config.current_config.damage_meter_UI.sorting.reversed_order then table.sort(quest_players, function(left, right) return left.display.total_damage < right.display.total_damage; @@ -173,10 +183,15 @@ function damage_meter_UI.draw() end local top_damage = 0; + local top_dps = 0; for _, _player in ipairs(quest_players) do if _player.display.total_damage > top_damage then top_damage = _player.display.total_damage; end + + if _player.dps > top_dps then + top_dps = _player.dps; + end end -- draw @@ -187,7 +202,7 @@ function damage_meter_UI.draw() goto continue1 end - player.draw(_player, position_on_screen, 1, top_damage); + player.draw(_player, position_on_screen, 1, top_damage, top_dps); if config.current_config.damage_meter_UI.settings.orientation == "Horizontal" then position_on_screen.x = position_on_screen.x + config.current_config.damage_meter_UI.spacing.x; @@ -210,7 +225,7 @@ function damage_meter_UI.draw() drawing.draw_label(config.current_config.damage_meter_UI.total_damage_label, position_on_screen, 1, language.current_language.UI.total_damage); drawing.draw_label(config.current_config.damage_meter_UI.total_damage_value_label, position_on_screen, 1, player.total.display.total_damage); - + drawing.draw_label(config.current_config.damage_meter_UI.total_dps_label, position_on_screen, 1, player.total.dps); end function damage_meter_UI.init_module() 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 847cdb2..87182cb 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/large_monster_UI.lua @@ -70,7 +70,7 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled, highlighted_enab end if dynamic_enabled then - large_monster_UI.draw_dynamic(displayed_monsters); + large_monster_UI.draw_dynamic(displayed_monsters, highlighted_monster); end if highlighted_enabled then @@ -78,12 +78,12 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled, highlighted_enab end if static_enabled then - large_monster_UI.draw_static(displayed_monsters); + large_monster_UI.draw_static(displayed_monsters, highlighted_monster); end end -function large_monster_UI.draw_dynamic(displayed_monsters) +function large_monster_UI.draw_dynamic(displayed_monsters, highlighted_monster) local i = 0; for _, monster in ipairs(displayed_monsters) do if config.current_config.large_monster_UI.dynamic.settings.max_distance == 0 then @@ -94,6 +94,16 @@ function large_monster_UI.draw_dynamic(displayed_monsters) goto continue; end + if monster == highlighted_monster then + if not config.current_config.large_monster_UI.dynamic.settings.render_highlighted_monster then + goto continue; + end + else + if not config.current_config.large_monster_UI.dynamic.settings.render_not_highlighted_monsters then + goto continue; + end + end + local position_on_screen = {}; local world_offset = Vector3f.new(config.current_config.large_monster_UI.dynamic.world_offset.x, config.current_config.large_monster_UI.dynamic.world_offset.y, config.current_config.large_monster_UI.dynamic.world_offset.z); @@ -123,7 +133,7 @@ function large_monster_UI.draw_dynamic(displayed_monsters) end end -function large_monster_UI.draw_static(displayed_monsters) +function large_monster_UI.draw_static(displayed_monsters, highlighted_monster) -- sort here if config.current_config.large_monster_UI.static.sorting.type == "Normal" and config.current_config.large_monster_UI.static.sorting.reversed_order then local reversed_monsters = {}; @@ -173,6 +183,16 @@ function large_monster_UI.draw_static(displayed_monsters) goto continue; end + if monster == highlighted_monster then + if not config.current_config.large_monster_UI.static.settings.render_highlighted_monster then + goto continue; + end + else + if not config.current_config.large_monster_UI.static.settings.render_not_highlighted_monsters then + goto continue; + end + end + local monster_position_on_screen = { x = position_on_screen.x, y = position_on_screen.y diff --git a/reframework/autorun/MHR_Overlay/UI/Modules/time_UI.lua b/reframework/autorun/MHR_Overlay/UI/Modules/time_UI.lua index 18011b1..af67dca 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/time_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/time_UI.lua @@ -1,45 +1,24 @@ local time_UI = {}; -local singletons; -local customization_menu; +local time; local screen; local config; local drawing; -local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager"); -local get_quest_elapsed_time_min_method = quest_manager_type_def:get_method("getQuestElapsedTimeMin"); -local get_quest_elapseD_time_sec_method = quest_manager_type_def:get_method("getQuestElapsedTimeSec"); - function time_UI.draw() - if singletons.quest_manager == nil then - return; - end + local elapsed_minutes = time.elapsed_minutes; + local elapsed_seconds = time.elapsed_seconds; - local quest_time_elapsed_minutes = get_quest_elapsed_time_min_method:call( singletons.quest_manager); - if quest_time_elapsed_minutes == nil then - customization_menu.status = "No quest time elapsed minutes"; + if elapsed_seconds == 0 and elapsed_minutes == 0 then return; end - local quest_time_total_elapsed_seconds = get_quest_elapseD_time_sec_method:call(singletons.quest_manager); - if quest_time_total_elapsed_seconds == nil then - customization_menu.status = "No quest time total elapsed seconds"; - return; - end - - if quest_time_total_elapsed_seconds == 0 then - return; - end - - local quest_time_elapsed_seconds = quest_time_total_elapsed_seconds - quest_time_elapsed_minutes * 60; - local position_on_screen = screen.calculate_absolute_coordinates(config.current_config.time_UI.position); - drawing.draw_label(config.current_config.time_UI.time_label, position_on_screen, 1, quest_time_elapsed_minutes, quest_time_elapsed_seconds); + drawing.draw_label(config.current_config.time_UI.time_label, position_on_screen, 1, elapsed_minutes, elapsed_seconds); end function time_UI.init_module() - singletons = require("MHR_Overlay.Game_Handler.singletons"); - customization_menu = require("MHR_Overlay.UI.customization_menu"); + time = require("MHR_Overlay.Game_Handler.time"); screen = require("MHR_Overlay.Game_Handler.screen"); config = require("MHR_Overlay.Misc.config"); drawing = require("MHR_Overlay.UI.drawing"); diff --git a/reframework/autorun/MHR_Overlay/UI/UI_Entities/damage_UI_entity.lua b/reframework/autorun/MHR_Overlay/UI/UI_Entities/damage_UI_entity.lua index a9ad460..ade8081 100644 --- a/reframework/autorun/MHR_Overlay/UI/UI_Entities/damage_UI_entity.lua +++ b/reframework/autorun/MHR_Overlay/UI/UI_Entities/damage_UI_entity.lua @@ -5,13 +5,14 @@ local config; local player; local language; -function damage_UI_entity.new(bar, highlighted_bar, player_name_label, hunter_rank_label, value_label, percentage_label) +function damage_UI_entity.new(bar, highlighted_bar, player_name_label, dps_label, hunter_rank_label, value_label, percentage_label) local entity = {}; --entity.visibility = visibility; entity.bar = table_helpers.deep_copy(bar); entity.highlighted_bar = table_helpers.deep_copy(highlighted_bar); entity.player_name_label = table_helpers.deep_copy(player_name_label); + entity.dps_label = table_helpers.deep_copy(dps_label); entity.hunter_rank_label = table_helpers.deep_copy(hunter_rank_label); entity.value_label = table_helpers.deep_copy(value_label); entity.percentage_label = table_helpers.deep_copy(percentage_label); @@ -19,7 +20,7 @@ function damage_UI_entity.new(bar, highlighted_bar, player_name_label, hunter_ra return entity; end -function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_damage) +function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_damage, top_dps) local player_include = config.current_config.damage_meter_UI.player_name_label.include.others; if _player.id == _player.myself_id then @@ -56,10 +57,14 @@ function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_d end end + x = string.format("%s / %s", tostring(_player.dps), tostring(top_dps)); + if _player.id == player.myself_id and config.current_config.damage_meter_UI.settings.highlighted_bar == "Me" then drawing.draw_bar(_player.damage_UI.highlighted_bar, position_on_screen, opacity_scale, player_damage_bar_percentage); elseif config.current_config.damage_meter_UI.settings.highlighted_bar == "Top Damage" and _player.display.total_damage == top_damage then drawing.draw_bar(_player.damage_UI.highlighted_bar, position_on_screen, opacity_scale, player_damage_bar_percentage); + elseif config.current_config.damage_meter_UI.settings.highlighted_bar == "Top DPS" and _player.dps == top_dps then + drawing.draw_bar(_player.damage_UI.highlighted_bar, position_on_screen, opacity_scale, player_damage_bar_percentage); else drawing.draw_bar(_player.damage_UI.bar, position_on_screen, opacity_scale, player_damage_bar_percentage); end @@ -75,6 +80,7 @@ function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_d drawing.draw_label(_player.damage_UI.player_name_label, position_on_screen, opacity_scale, player_name_text); drawing.draw_label(_player.damage_UI.value_label, position_on_screen, opacity_scale, _player.display.total_damage); drawing.draw_label(_player.damage_UI.percentage_label, position_on_screen, opacity_scale, 100 * player_damage_percentage); + drawing.draw_label(_player.damage_UI.dps_label, position_on_screen, opacity_scale, _player.dps); end function damage_UI_entity.init_module() diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index 8c642b1..ee13733 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -45,6 +45,7 @@ customization_menu.damage_meter_UI_highlighted_bar_types = {}; customization_menu.damage_meter_UI_damage_bar_relative_types = {}; customization_menu.damage_meter_UI_my_damage_bar_location_types = {}; customization_menu.damage_meter_UI_sorting_types = {}; +customization_menu.damage_meter_UI_dps_modes = {}; customization_menu.fonts = {"Arial", "Arial Black", "Bahnschrift", "Calibri", "Cambria", "Cambria Math", "Candara", "Comic Sans MS", "Consolas", "Constantia", "Corbel", "Courier New", "Ebrima", @@ -63,15 +64,18 @@ customization_menu.small_monster_UI_sorting_type_index = 1; customization_menu.large_monster_UI_orientation_index = 1; customization_menu.large_monster_UI_sorting_type_index = 1; +customization_menu.large_monster_UI_highlighted_monster_location_index = 1; customization_menu.large_monster_dynamic_UI_parts_sorting_type_index = 1; customization_menu.large_monster_static_UI_parts_sorting_type_index = 1; +customization_menu.large_monster_highlighted_UI_parts_sorting_type_index = 1; customization_menu.damage_meter_UI_orientation_index = 1; customization_menu.damage_meter_UI_sorting_type_index = 1; customization_menu.damage_meter_UI_highlighted_bar_index = 1; customization_menu.damage_meter_UI_damage_bar_relative_index = 1; customization_menu.damage_meter_UI_my_damage_bar_location_index = 1; +customization_menu.damage_meter_UI_dps_mode_index = 1; customization_menu.small_monster_UI_anchor_index = 1; customization_menu.large_monster_UI_anchor_index = 1; @@ -106,11 +110,11 @@ function customization_menu.init() customization_menu.displayed_monster_UI_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.health, language.current_language.customization_menu.health_percentage, language.current_language.customization_menu.distance}; customization_menu.displayed_large_monster_UI_parts_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.health, language.current_language.customization_menu.health_percentage}; - customization_menu.displayed_damage_meter_UI_highlighted_bar_types = {language.current_language.customization_menu.me, language.current_language.customization_menu.top_damage, language.current_language.customization_menu.none}; + customization_menu.displayed_damage_meter_UI_highlighted_bar_types = {language.current_language.customization_menu.me, language.current_language.customization_menu.top_damage, language.current_language.customization_menu.top_dps, language.current_language.customization_menu.none}; customization_menu.displayed_damage_meter_UI_damage_bar_relative_types = {language.current_language.customization_menu.total_damage, language.current_language.customization_menu.top_damage}; customization_menu.displayed_damage_meter_UI_my_damage_bar_location_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.first, language.current_language.customization_menu.last}; - customization_menu.displayed_damage_meter_UI_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.damage}; - + customization_menu.displayed_damage_meter_UI_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.damage, language.current_language.customization_menu.dps}; + customization_menu.displayed_damage_meter_UI_dps_modes = {language.current_language.customization_menu.first_hit, language.current_language.customization_menu.quest_time, language.current_language.customization_menu.join_time}; @@ -121,12 +125,11 @@ function customization_menu.init() customization_menu.monster_UI_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.health, language.default_language.customization_menu.health_percentage, language.default_language.customization_menu.distance}; customization_menu.large_monster_UI_parts_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.health, language.default_language.customization_menu.health_percentage}; - customization_menu.damage_meter_UI_highlighted_bar_types = {language.default_language.customization_menu.me, language.default_language.customization_menu.top_damage, language.default_language.customization_menu.none}; + customization_menu.damage_meter_UI_highlighted_bar_types = {language.default_language.customization_menu.me, language.default_language.customization_menu.top_damage, language.default_language.customization_menu.top_dps, language.default_language.customization_menu.none}; customization_menu.damage_meter_UI_damage_bar_relative_types = {language.default_language.customization_menu.total_damage, language.default_language.customization_menu.top_damage}; customization_menu.damage_meter_UI_my_damage_bar_location_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.first, language.default_language.customization_menu.last}; - customization_menu.damage_meter_UI_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.damage}; - - + customization_menu.damage_meter_UI_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.damage, language.default_language.customization_menu.dps}; + customization_menu.damage_meter_UI_dps_modes = {language.default_language.customization_menu.first_hit, language.default_language.customization_menu.quest_time, language.default_language.customization_menu.join_time}; @@ -146,6 +149,9 @@ function customization_menu.init() customization_menu.large_monster_UI_sorting_type_index = table_helpers.find_index( customization_menu.monster_UI_sorting_types, config.current_config.large_monster_UI.static.sorting.type, false); + customization_menu.large_monster_UI_highlighted_monster_location_index = table_helpers.find_index( + customization_menu.damage_meter_UI_my_damage_bar_location_types, config.current_config.large_monster_UI.static.settings.highlighted_monster_location, false); + customization_menu.large_monster_dynamic_UI_parts_sorting_type_index = table_helpers.find_index( customization_menu.large_monster_UI_parts_sorting_types, config.current_config.large_monster_UI.dynamic.parts.sorting.type, false); @@ -154,6 +160,10 @@ function customization_menu.init() customization_menu.large_monster_UI_parts_sorting_types, config.current_config.large_monster_UI.static.parts.sorting.type, false); + customization_menu.large_monster_highlighted_UI_parts_sorting_type_index = table_helpers.find_index( + customization_menu.large_monster_UI_parts_sorting_types, + config.current_config.large_monster_UI.highlighted.parts.sorting.type, false); + customization_menu.damage_meter_UI_orientation_index = table_helpers.find_index(customization_menu.orientation_types, config.current_config.damage_meter_UI.settings.orientation, false); @@ -172,6 +182,11 @@ function customization_menu.init() customization_menu.damage_meter_UI_sorting_type_index = table_helpers.find_index( customization_menu.damage_meter_UI_sorting_types, config.current_config.damage_meter_UI.sorting.type, false); + customization_menu.damage_meter_UI_dps_mode_index = table_helpers.find_index( + customization_menu.damage_meter_UI_dps_modes, config.current_config.damage_meter_UI.settings.dps_mode, false); + + + customization_menu.selected_font_index = table_helpers.find_index(customization_menu.fonts, config.current_config.global_settings.UI_font.family, false); @@ -220,6 +235,10 @@ function customization_menu.draw() imgui.checkbox(language.current_language.customization_menu.large_monster_static_UI, config.current_config.large_monster_UI.static.enabled); config_changed = config_changed or changed; + changed, config.current_config.large_monster_UI.highlighted.enabled = + imgui.checkbox(language.current_language.customization_menu.large_monster_highlighted_UI, config.current_config.large_monster_UI.highlighted.enabled); + config_changed = config_changed or changed; + changed, config.current_config.time_UI.enabled = imgui.checkbox(language.current_language.customization_menu.time_UI, config.current_config.time_UI.enabled); config_changed = config_changed or changed; imgui.same_line(); @@ -1168,6 +1187,14 @@ function customization_menu.draw() large_monster_UI.dynamic.settings.hide_dead_or_captured); config_changed = config_changed or changed; + changed, config.current_config.large_monster_UI.dynamic.settings.render_highlighted_monster = imgui.checkbox(language.current_language.customization_menu.render_highlighted_monster, config.current_config. + large_monster_UI.dynamic.settings.render_highlighted_monster); + config_changed = config_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.settings.render_not_highlighted_monsters = imgui.checkbox(language.current_language.customization_menu.render_not_highlighted_monsters, config.current_config. + large_monster_UI.dynamic.settings.render_not_highlighted_monsters); + config_changed = config_changed or changed; + changed, config.current_config.large_monster_UI.dynamic.settings.opacity_falloff = imgui.checkbox(language.current_language.customization_menu.opacity_falloff, config.current_config.large_monster_UI.dynamic.settings.opacity_falloff); config_changed = config_changed or changed; @@ -1312,6 +1339,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.health.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.health.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.health.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.health.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.dynamic.health.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.health.text_label.visibility); @@ -1647,6 +1690,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.stamina.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.stamina.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.stamina.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.stamina.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.dynamic.stamina.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.stamina.text_label.visibility); @@ -1918,6 +1977,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.rage.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.rage.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.rage.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.rage.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.dynamic.rage.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.rage.text_label.visibility); @@ -2677,6 +2752,27 @@ function customization_menu.draw() changed, config.current_config.large_monster_UI.static.settings.hide_dead_or_captured = imgui.checkbox(language.current_language.customization_menu.hide_dead_or_captured, config.current_config. large_monster_UI.static.settings.hide_dead_or_captured); config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.settings.render_highlighted_monster = imgui.checkbox(language.current_language.customization_menu.render_highlighted_monster, config.current_config. + large_monster_UI.static.settings.render_highlighted_monster); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.settings.render_not_highlighted_monsters = imgui.checkbox(language.current_language.customization_menu.render_not_highlighted_monsters, config.current_config. + large_monster_UI.static.settings.render_not_highlighted_monsters); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, customization_menu.large_monster_UI_highlighted_monster_location_index = + imgui.combo(language.current_language.customization_menu.highlighted_monster_location, customization_menu.large_monster_UI_highlighted_monster_location_index, + customization_menu.displayed_damage_meter_UI_my_damage_bar_location_types); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + if changed then + config.current_config.large_monster_UI.static.settings.highlighted_monster_location = + customization_menu.damage_meter_UI_my_damage_bar_location_types[customization_menu.large_monster_UI_highlighted_monster_location_index]; + end changed, customization_menu.large_monster_UI_orientation_index = imgui.combo(language.current_language.customization_menu.orientation, customization_menu.large_monster_UI_orientation_index, customization_menu.displayed_orientation_types); @@ -2843,6 +2939,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.health.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.health.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.health.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.health.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.static.health.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.health.text_label.visibility); @@ -3178,6 +3290,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.stamina.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.stamina.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.stamina.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.stamina.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.static.stamina.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.stamina.text_label.visibility); @@ -3448,6 +3576,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.rage.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.rage.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.rage.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.rage.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.static.rage.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.rage.text_label.visibility); @@ -4327,6 +4471,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.health.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.health.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.health.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.health.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.highlighted.health.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.health.text_label.visibility); @@ -4662,6 +4822,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.stamina.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.stamina.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.stamina.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.stamina.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.highlighted.stamina.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.stamina.text_label.visibility); @@ -4932,6 +5108,22 @@ function customization_menu.draw() config_changed = config_changed or changed; large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.rage.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.rage.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.rage.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.rage.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.text_label) then changed, config.current_config.large_monster_UI.highlighted.rage.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.rage.text_label.visibility); @@ -5833,6 +6025,16 @@ function customization_menu.draw() customization_menu.damage_meter_UI_my_damage_bar_location_types[customization_menu.damage_meter_UI_my_damage_bar_location_index]; end + changed, customization_menu.damage_meter_UI_dps_mode_index = + imgui.combo(language.current_language.customization_menu.dps_mode, customization_menu.damage_meter_UI_dps_mode_index, + customization_menu.displayed_damage_meter_UI_dps_modes); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + if changed then + config.current_config.damage_meter_UI.settings.dps_mode = + customization_menu.damage_meter_UI_dps_modes[customization_menu.damage_meter_UI_dps_mode_index]; + end + imgui.tree_pop(); end @@ -6277,6 +6479,72 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.dps_label) then + changed, config.current_config.damage_meter_UI.dps_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.damage_meter_UI.dps_label.visibility); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.dps_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.damage_meter_UI.dps_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + changed, config.current_config.damage_meter_UI.dps_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.damage_meter_UI.dps_label.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.damage_meter_UI.dps_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.dps_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.damage_meter_UI.dps_label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.damage_meter_UI.dps_label.shadow.visibility); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.dps_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.damage_meter_UI.dps_label.shadow.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + changed, config.current_config.damage_meter_UI.dps_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.damage_meter_UI.dps_label.shadow.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.damage_meter_UI.dps_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.dps_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.total_damage_label) then changed, config.current_config.damage_meter_UI.total_damage_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.damage_meter_UI.total_damage_label.visibility); @@ -6408,6 +6676,72 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.total_dps_label) then + changed, config.current_config.damage_meter_UI.total_dps_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.damage_meter_UI.total_dps_label.visibility); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.total_dps_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.damage_meter_UI.total_dps_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + changed, config.current_config.damage_meter_UI.total_dps_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.damage_meter_UI.total_dps_label.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.damage_meter_UI.total_dps_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.total_dps_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.damage_meter_UI.total_dps_label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.damage_meter_UI.total_dps_label.shadow.visibility); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.total_dps_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.damage_meter_UI.total_dps_label.shadow.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + changed, config.current_config.damage_meter_UI.total_dps_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.damage_meter_UI.total_dps_label.shadow.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.damage_meter_UI.total_dps_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.total_dps_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.damage_bar) then changed, config.current_config.damage_meter_UI.damage_bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.damage_meter_UI.damage_bar.visibility); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index f725091..86aa6d7 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -30,22 +30,27 @@ "damage_bar": "Damage Bar", "damage_bars_are_relative_to": "Damage Bars are relative to", "damage_meter_UI": "Damage Meter UI", - "damage_percentage_label": "Damage Percetange Label", + "damage_percentage_label": "Damage Percentage Label", "damage_value_label": "Damage Value Label", "distance": "Distance", + "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", "enabled": "Enabled", "family": "Family", + "fight_time": "Fight Time", "first": "First", + "first_hit": "First Hit", "foreground": "Foreground", "global_settings": "Global Settings", "health": "Health", "health_percentage": "Health Percentage", "height": "Height", - "hide_dead_or_captured": "Hide dead or captured", + "hide_dead_or_captured": "Hide Dead or Captured", "hide_module_if_total_damage_is_zero": "Hide Module if Total Damage is 0", "hide_player_if_player_damage_is_zero": "Hide Player if Player Damage is 0", "hide_total_if_total_damage_is_zero": "Hide Total if Total Damage is 0", @@ -59,6 +64,7 @@ "include": "Include", "installation_damage": "Installation Damage", "italic": "Italic", + "join_time": "Join Time", "kunai_damage": "Kunai Damage", "language": "Language", "large_monster_UI": "Large Monster UI", @@ -97,7 +103,10 @@ "position": "Position", "prioritize_large_monsters": "Large Monsters on High Priority", "quest_summary_screen": "Quest Summary Screen", + "quest_time": "Quest Time", "rage": "Rage", + "render_highlighted_monster": "Render Highlighted Monster", + "render_not_highlighted_monsters": "Render Not Highlighted Monsters", "reversed_order": "Reversed Order", "settings": "Settings", "shadow": "Shadow", @@ -118,12 +127,15 @@ "time_label": "Time Label", "timer_label": "Timer Label", "top_damage": "Top Damage", + "top_dps": "Top DPS", "top_left": "Top-Left", "top_right": "Top-Right", "total_damage": "Total Damage", "total_damage_label": "Total Damage Label", "total_damage_offset_is_relative": "Total Damage Offset is Relative", "total_damage_value_label": "Total Damage Value Label", + "total_dps": "Total DPS", + "total_dps_label": "Total DPS Label", "tracked_damage_types": "Tracked Damage Types", "tracked_monster_types": "Tracked Monster Types", "training_area": "Training Area", diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 3253a57..4e4acbd 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -33,14 +33,18 @@ "damage_percentage_label": "대미지 비율 라벨", "damage_value_label": "대미지 값 라벨", "distance": "거리", + "dps": "DPS", + "dps_label": "DPS Label", + "dps_mode": "DPS Mode", "during_quest": "퀘스트 중", "dynamic_positioning": "유동 위치", "dynamically_positioned": "유동 위치 UI", "enable_for": "Enable for", - "enable_on": "Enable on", "enabled": "사용함", "family": "글꼴", + "fight_time": "Fight Time", "first": "처음", + "first_hit": "First Hit", "font": "글꼴", "font_notice": "글꼴 설정 변경시 스크립트 리로드가 필수입니다!", "foreground": "전경색", @@ -63,6 +67,7 @@ "include": "포함", "installation_damage": "설비 대미지", "italic": "기울임", + "join_time": "Join Time", "kunai_damage": "쿠나이 대미지", "language": "언어", "large_monster_UI": "대형 몬스터 UI", @@ -101,7 +106,10 @@ "position": "위치", "prioritize_large_monsters": "대형 몬스터를 우선적으로", "quest_summary_screen": "퀘스트 결과 화면", + "quest_time": "Quest Time", "rage": "분노", + "render_highlighted_monster": "Render Highlighted Monster", + "render_not_highlighted_monsters": "Render Not Highlighted Monsters", "reversed_order": "역순", "settings": "설정", "shadow": "그림자", @@ -122,12 +130,15 @@ "time_label": "시간 라벨", "timer_label": "타이머 라벨", "top_damage": "최고 대미지", + "top_dps": "Top DPS", "top_left": "좌상단", "top_right": "우상단", "total_damage": "총 대미지", "total_damage_label": "총 대미지 라벨", "total_damage_offset_is_relative": "총 대미지 위치를 상대적 위치로", "total_damage_value_label": "총 대미지 값 라벨", + "total_dps": "Total DPS", + "total_dps_label": "Total DPS Label", "tracked_damage_types": "추적할 대미지 종류", "tracked_monster_types": "추적할 몬스터 타입", "training_area": "훈련장", @@ -136,7 +147,6 @@ "vertical": "세로", "viewport_offset": "뷰포트 옵셋", "visible": "표시함", - "visible_on": "Visible on", "width": "너비", "word_player": "\"헌터\" 명칭", "world_offset": "전역 옵셋", diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json new file mode 100644 index 0000000..800bd61 --- /dev/null +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -0,0 +1,196 @@ +{ + "UI": { + "HP": "ОЗ:", + "gold": "Золото", + "mini": "Мини", + "player": "Игрок", + "rage": "Ярость:", + "silver": "Серебро", + "stamina": "Выносливость:", + "total_damage": "Общий урон" + }, + "customization_menu": { + "UI_font": "Шрифт интерфейса", + "UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!", + "anchor": "Привязка", + "background": "Фон", + "bar": "Шкала", + "body_parts": "Части тела", + "bold": "Жирный", + "bomb_damage": "Урон от бомб", + "bottom_left": "Левый нижний угол", + "bottom_right": "Правй нижний угол", + "break_count": "Счётчик повреждений", + "capture_line": "Линия здоровья захвата", + "color": "Цвет", + "colors": "Цвета", + "crown": "Корона", + "crown_thresholds": "Лимиты корон", + "damage": "Урон", + "damage_bar": "Шкала урона", + "damage_bars_are_relative_to": "Шкалы урона расположены относительно к", + "damage_meter_UI": "Интерфейс модуля урона", + "damage_percentage_label": "Метка урона в процентах", + "damage_value_label": "Метка значений урона", + "distance": "Расстояние", + "dps": "Урон в секунду", + "dps_label": "Метка урона в секунду", + "dps_mode": "Режим урона в секунду", + "during_quest": "Во время квеста", + "dynamic_positioning": "Динамическое позиционирование", + "dynamically_positioned": "Рассположенный динамично", + "enable_for": "Показывать для", + "enabled": "Включить", + "family": "Семейство", + "fight_time": "Время в бою", + "first": "Первый", + "first_hit": "Первый удар", + "foreground": "Передний план", + "global_settings": "Общие настройки", + "health": "Здоровье", + "health_percentage": "Здоровье в процентах", + "height": "Высота", + "hide_dead_or_captured": "Скрыть мёртвых и захваченных монстров", + "hide_module_if_total_damage_is_zero": "Скрыть модуль, если общий урон равен 0", + "hide_player_if_player_damage_is_zero": "Скрыть игрока, если его урон равен 0", + "hide_total_if_total_damage_is_zero": "Скрыть общий урон, если он равен 0", + "hide_undamaged_parts": "Скрыть неповреждённые части тела", + "highlighted": "Помеченный", + "highlighted_bar": "Помеченная шкала", + "highlighted_damage_bar": "Помеченная шкала урона", + "horizontal": "Горизонтально", + "hunter_rank": "Ранг охотника", + "hunter_rank_label": "Метка ранга охотника", + "include": "Элементы", + "installation_damage": "Урон от установок", + "italic": "Курсив", + "join_time": "Время присоединения", + "kunai_damage": "Урон от кунаев", + "language": "Язык", + "large_monster_UI": "Интерфейс больший монстров", + "large_monster_dynamic_UI": "Динамический интерфейс больших монстров", + "large_monster_highlighted_UI": "Интерфейс помеченного большого монстра", + "large_monster_static_UI": "Статический интерфейс больших монстров", + "large_monsters": "Большие монстры", + "last": "Последний", + "max_distance": "Макс. расстояние", + "max_monster_updates_per_tick": "Макс. кол-во обновлений за тик", + "me": "Я", + "menu_font": "Шрифт меню", + "mod_name": "MHR Overlay", + "module_visibility_on_different_screens": "Видимость модулей на разных экранах", + "modules": "Модули", + "monster_can_be_captured": "Монстр может быть схвачен", + "monster_damage": "Урон от монстров", + "monster_name": "Имя монстра", + "monster_name_label": "Метка имени монстра", + "my_damage_bar_location": "Позиция моей шкалы урона", + "none": "Нет", + "normal": "Обычный", + "offset": "Сдвиг", + "opacity_falloff": "Увеличение прозрачности от расстояния", + "orientation": "Ориентация", + "other_players": "Другие игроки", + "otomo_damage": "Урон от отомо", + "part_name": "Имя части тела", + "part_name_label": "Метка имени части тела", + "percentage_label": "Метка процентов", + "performance": "Производительность", + "player_damage": "Урон игрока", + "player_id": "ИД игрока", + "player_name": "Имя игрока", + "player_name_label": "Метка имени игрока", + "position": "Расположение", + "prioritize_large_monsters": "Большие монстры в приоритете", + "quest_summary_screen": "Экран результатов квеста", + "quest_time": "Quest Time", + "rage": "Ярость", + "render_highlighted_monster": "Показывать помеченного монстра", + "render_not_highlighted_monsters": "Показывать непомеченных монстров", + "reversed_order": "Обратный порядок", + "settings": "Настройки", + "shadow": "Тень", + "size": "Размер", + "small_monster_UI": "Интерфейс малых монстров", + "small_monsters": "Малые монстры", + "sorting": "Сортировка", + "spacing": "Расстояние между элементами", + "stamina": "Выносливость", + "static_orientation": "Статичная ориентация", + "static_position": "Статичное расположение", + "static_sorting": "Статичная сортировка", + "static_spacing": "Статичное расстояние между элементами", + "statically_positioned": "Рассположенный статично", + "status": "Статус", + "text_label": "Текстовая метка", + "time_UI": "Интерфейс времени", + "time_label": "Метка времени", + "timer_label": "Метка таймера", + "top_damage": "Наибольший урон", + "top_dps": "Наибольший урон в секунду", + "top_left": "Левый верхний угол", + "top_right": "Правый верхний угол", + "total_damage": "Общий урон", + "total_damage_label": "Метка общего урона", + "total_damage_offset_is_relative": "Относительный сдвиг общего урона", + "total_damage_value_label": "Метка значений общего урона", + "total_dps": "Общий урон в секунду", + "total_dps_label": "Метка общего урона в секунду", + "tracked_damage_types": "Отслеживаемые типы урона", + "tracked_monster_types": "Отслеживаемые типы монстров", + "training_area": "Тренировочная зона", + "type": "Тип", + "value_label": "Метка значений", + "vertical": "Вертикально", + "viewport_offset": "Сдвиг в экранном пространстве", + "visible": "Включить", + "width": "Ширина", + "word_player": "Слово \"Игрок\"", + "world_offset": "Сдвиг в игровом пространстве", + "x": "X", + "y": "Y", + "z": "Z" + }, + "font_name": "NotoSansKR-Bold.otf", + "parts": { + "abdomen": "Брюхо", + "arms": "Передние лапы", + "back": "Спина", + "back_windsac": "Спина (мешочек)", + "body": "Тело", + "carapace": "Панцирь", + "chest_windsac": "Грудь (мешочек)", + "claw": "Когти", + "dorsal_fin": "Спинной плавник", + "head": "Голова", + "head_mud": "Голова (в грязи)", + "large_mudbulb": "Большой мешочек грязи", + "left_arm": "Передняя лапа Л", + "left_arm_ice": "Передняя лапа Л (во льду)", + "left_cutwing": "Крыло Л", + "left_leg": "Задняя лапа Л", + "left_legs": "Левые лапы", + "left_wing": "Крыло Л", + "legs": "Задние лапы", + "lower_back": "Нижняя часть спины", + "lower_body": "Нижняя часть тела", + "mane": "Грива", + "neck": "Шея", + "rear": "Зад", + "right_arm": "Передняя лапа П", + "right_arm_ice": "Передняя лапа П (во льду)", + "right_cutwing": "Крыло П", + "right_leg": "Задняя лапа П", + "right_legs": "Правые лапы", + "right_wing": "Крыло П", + "rock": "Камень", + "spinning": "Вращение", + "tail": "Хвост", + "tail_mud": "Хвост (в грязи)", + "tail_windsac": "Хвост (мешочек)", + "torso": "Торс", + "upper_back": "Верхняя часть спины", + "upper_body": "Верхняя часть тела", + "wings": "Крылья" + } +} \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index 9a37a71..bdfc8fc 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -33,6 +33,9 @@ "damage_percentage_label": "傷害量百分比", "damage_value_label": "傷害量", "distance": "距離", + "dps": "DPS", + "dps_label": "DPS Label", + "dps_mode": "DPS Mode", "during_quest": "任務中", "dynamic_positioning": "浮動的資訊位置", "dynamically_positioned": "浮動的魔物資訊", @@ -40,7 +43,9 @@ "enable_on": "Enable on", "enabled": "可見", "family": "字體", + "fight_time": "Over Time spent in Fight", "first": "第一", + "first_hit": "Starting at First Hit", "foreground": "圖形化顯示條的底色", "global_settings": "全域設定", "health": "生命", @@ -60,6 +65,7 @@ "include": "細部資訊調整", "installation_damage": "設備傷害", "italic": "斜體", + "join_time": "Starting at Join", "kunai_damage": "苦無傷害", "language": "語言", "large_monster_UI": "大型魔物 UI", @@ -98,7 +104,10 @@ "position": "位置", "prioritize_large_monsters": "大型魔物優先", "quest_summary_screen": "任務結算畫面", + "quest_time": "Quest Time", "rage": "憤怒度", + "render_highlighted_monster": "Render Highlighted Monster", + "render_not_highlighted_monsters": "Render Not Highlighted Monsters", "reversed_order": "逆向排序", "settings": "設定", "shadow": "陰影", @@ -119,12 +128,15 @@ "time_label": "時間", "timer_label": "計時器", "top_damage": "最高傷害", + "top_dps": "Top DPS", "top_left": "左上", "top_right": "右上", "total_damage": "總傷害", "total_damage_label": "總傷害文字", "total_damage_offset_is_relative": "總傷害顯示位置調整", "total_damage_value_label": "總傷害量", + "total_dps": "Total DPS", + "total_dps_label": "Total DPS Label", "tracked_damage_types": "追蹤的傷害類型", "tracked_monster_types": "追蹤的魔物類型", "training_area": "訓練場",