From 758a02bce8580af93be1f0f0a14428649e0071e2 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Tue, 15 Aug 2023 16:02:01 +0300 Subject: [PATCH] Add Stats UI --- reframework/autorun/MHR_Overlay.lua | 35 +- .../autorun/MHR_Overlay/Misc/config.lua | 414 +++++++++++++++++- .../autorun/MHR_Overlay/Misc/language.lua | 37 +- .../autorun/MHR_Overlay/Misc/player_info.lua | 251 +++++++++++ .../module_visibility_customization.lua | 4 + .../MHR_Overlay/UI/Modules/stats_UI.lua | 266 +++++++++++ .../MHR_Overlay/UI/customization_menu.lua | 105 ++++- .../data/MHR Overlay/languages/en-us.json | 29 ++ .../data/MHR Overlay/languages/ja-jp.json | 29 ++ .../data/MHR Overlay/languages/ko-kr.json | 29 ++ .../data/MHR Overlay/languages/ru-ru.json | 29 ++ .../data/MHR Overlay/languages/zh-cn.json | 29 ++ .../data/MHR Overlay/languages/zh-tw.json | 29 ++ 13 files changed, 1272 insertions(+), 14 deletions(-) create mode 100644 reframework/autorun/MHR_Overlay/Misc/player_info.lua create mode 100644 reframework/autorun/MHR_Overlay/UI/Modules/stats_UI.lua diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index f1e6eef..3a6f3b2 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -42,6 +42,8 @@ local language = require("MHR_Overlay.Misc.language"); local part_names = require("MHR_Overlay.Misc.part_names"); local utils = require("MHR_Overlay.Misc.utils"); +local player_info = require("MHR_Overlay.Misc.player_info"); + local buffs = require("MHR_Overlay.Buffs.buffs"); local consumables = require("MHR_Overlay.Buffs.consumables"); local melody_effects = require("MHR_Overlay.Buffs.melody_effects"); @@ -71,6 +73,7 @@ local small_monster_UI = require("MHR_Overlay.UI.Modules.small_monster_UI"); local time_UI = require("MHR_Overlay.UI.Modules.time_UI"); local env_creature_UI = require("MHR_Overlay.UI.Modules.env_creature_UI"); local buff_UI = require("MHR_Overlay.UI.Modules.buff_UI"); +local stats_UI = require("MHR_Overlay.UI.Modules.stats_UI"); local body_part_UI_entity = require("MHR_Overlay.UI.UI_Entities.body_part_UI_entity"); local damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity"); @@ -119,6 +122,8 @@ ailment_buildup_UI_entity.init_dependencies(); body_part_UI_entity.init_dependencies(); buff_UI_entity.init_dependencies(); +player_info.init_dependencies(); + buffs.init_dependencies(); consumables.init_dependencies(); melody_effects.init_dependencies(); @@ -167,6 +172,7 @@ small_monster_UI.init_dependencies(); time_UI.init_dependencies(); env_creature_UI.init_dependencies(); buff_UI.init_dependencies(); +stats_UI.init_dependencies(); keyboard.init_dependencies(); @@ -191,6 +197,8 @@ ailment_buildup_UI_entity.init_module(); body_part_UI_entity.init_module(); buff_UI_entity.init_module(); +player_info.init_module(); + buffs.init_module(); consumables.init_module(); melody_effects.init_module(); @@ -239,6 +247,7 @@ small_monster_UI.init_module(); time_UI.init_module(); env_creature_UI.init_module(); buff_UI.init_module(); +stats_UI.init_module(); keyboard.init_module(); @@ -333,6 +342,13 @@ local function draw_modules(module_visibility_config, flow_state_name) error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Buff UI Draw Function threw an Exception", flow_state_name)); end end + + if config.current_config.stats_UI.enabled and module_visibility_config.stats_UI then + local success = pcall(stats_UI.draw); + if not success then + error_handler.report("MHR_Overlay.draw_modules", string.format("[%s] Stats UI Draw Function threw an Exception", flow_state_name)); + end + end end local function update_UI() @@ -390,7 +406,17 @@ local function update_UI() end local function draw_loop() - if quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then + if quest_status.flow_state == quest_status.flow_states.IN_LOBBY then + local module_visibility_config = config.current_config.global_settings.module_visibility.in_lobby; + + if config.current_config.stats_UI.enabled and module_visibility_config.stats_UI then + local success = pcall(stats_UI.draw); + if not success then + error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Stats UI Draw Function threw an Exception"); + end + end + + elseif quest_status.flow_state == quest_status.flow_states.IN_TRAINING_AREA then local large_monster_UI_config = config.current_config.large_monster_UI; local module_visibility_config = config.current_config.global_settings.module_visibility.in_training_area; @@ -427,6 +453,13 @@ local function draw_loop() end end + if config.current_config.stats_UI.enabled and module_visibility_config.stats_UI then + local success = pcall(stats_UI.draw); + if not success then + error_handler.report("MHR_Overlay.main_loop", "[In Training Area] Stats UI Draw Function threw an Exception"); + end + end + elseif quest_status.flow_state == quest_status.flow_states.CUTSCENE then draw_modules(config.current_config.global_settings.module_visibility.cutscene, "Cutscene"); diff --git a/reframework/autorun/MHR_Overlay/Misc/config.lua b/reframework/autorun/MHR_Overlay/Misc/config.lua index 9e957d2..7b234f3 100644 --- a/reframework/autorun/MHR_Overlay/Misc/config.lua +++ b/reframework/autorun/MHR_Overlay/Misc/config.lua @@ -84,13 +84,18 @@ function this.init_default() }, module_visibility = { + in_lobby = { + stats_UI = true + }, + in_training_area = { large_monster_dynamic_UI = true, large_monster_static_UI = true, large_monster_highlighted_UI = true, damage_meter_UI = true, endemic_life_UI = true, - buff_UI = true + buff_UI = true, + stats_UI = true }, cutscene = { @@ -101,7 +106,8 @@ function this.init_default() time_UI = false, damage_meter_UI = false, endemic_life_UI = false, - buff_UI = false + buff_UI = false, + stats_UI = false }, loading_quest = { @@ -112,7 +118,8 @@ function this.init_default() time_UI = false, damage_meter_UI = false, endemic_life_UI = false, - buff_UI = false + buff_UI = false, + stats_UI = false }, quest_start_animation = { @@ -123,7 +130,8 @@ function this.init_default() time_UI = true, damage_meter_UI = true, endemic_life_UI = true, - buff_UI = true + buff_UI = true, + stats_UI = true }, playing_quest = { @@ -134,7 +142,8 @@ function this.init_default() time_UI = true, damage_meter_UI = true, endemic_life_UI = true, - buff_UI = true + buff_UI = true, + stats_UI = true }, killcam = { @@ -145,7 +154,8 @@ function this.init_default() time_UI = true, damage_meter_UI = true, endemic_life_UI = true, - buff_UI = true + buff_UI = true, + stats_UI = true }, quest_end_timer = { @@ -156,7 +166,8 @@ function this.init_default() time_UI = true, damage_meter_UI = true, endemic_life_UI = true, - buff_UI = true + buff_UI = true, + stats_UI = true }, quest_end_animation = { @@ -167,7 +178,8 @@ function this.init_default() time_UI = false, damage_meter_UI = false, endemic_life_UI = false, - buff_UI = false + buff_UI = false, + stats_UI = false }, quest_end_screen = { @@ -178,7 +190,9 @@ function this.init_default() time_UI = false, damage_meter_UI = false, endemic_life_UI = false, - buff_UI = false + buff_UI = false, + stats_UI = false + }, reward_screen = { @@ -189,7 +203,8 @@ function this.init_default() time_UI = true, damage_meter_UI = true, endemic_life_UI = false, - buff_UI = false + buff_UI = false, + stats_UI = false }, summary_screen = { @@ -200,7 +215,8 @@ function this.init_default() time_UI = true, damage_meter_UI = true, endemic_life_UI = false, - buff_UI = false + buff_UI = false, + stats_UI = false }, }, @@ -6124,6 +6140,7 @@ function this.init_default() x = 205, y = 0 }, + color = 0xFFF59FC4, shadow = { @@ -7576,6 +7593,381 @@ function this.init_default() } }, + stats_UI = { + enabled = false, + + position = { + x = 0, + y = 0, + -- Possible values: "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right" + anchor = "Bottom-Right" + }, + + attack_label = { + visibility = true, + + settings = { + right_alignment_shift = 11 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -353, + y = -17 + }, + + color = 0xFFF27979, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + affinity_label = { + visibility = true, + + settings = { + right_alignment_shift = 14 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -242, + y = -17 + }, + + color = 0xFFF27979, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + defense_label = { + visibility = true, + + settings = { + right_alignment_shift = 13 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -103, + y = -17 + }, + + color = 0xFFBFF7FF, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + fire_resistance_label = { + visibility = false, + + settings = { + right_alignment_shift = 13 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -625, + y = -53 + }, + + color = 0xFFF27979, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + water_resistance_label = { + visibility = false, + + settings = { + right_alignment_shift = 14 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -507, + y = -53 + }, + + color = 0xFF7AB8F8, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + thunder_resistance_label = { + visibility = false, + + settings = { + right_alignment_shift = 16 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -382, + y = -53 + }, + + color = 0xFFFEFF88, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + ice_resistance_label = { + visibility = false, + + settings = { + right_alignment_shift = 12 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -228, + y = -53 + }, + + color = 0xFFBFF7FF, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + dragon_resistance_label = { + visibility = false, + + settings = { + right_alignment_shift = 15 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -117, + y = -53 + }, + + color = 0xFFB999FF, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + stamina_label = { + visibility = false, + + settings = { + right_alignment_shift = 16 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true, + max_value = true + }, + + offset = { + x = -382, + y = -35 + }, + + color = 0xFFFEFF88, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + element_label = { + visibility = false, + + settings = { + right_alignment_shift = 14 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -110, + y = -35 + }, + + color = 0xFFF59FC4, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + + element_2_label = { + visibility = false, + + settings = { + right_alignment_shift = 14 + }, + + text_formatting = "%s", + + include = { + name = true, + value = true + }, + + offset = { + x = -242, + y = -35 + }, + + color = 0xFFF59FC4, + + shadow = { + visibility = true, + + offset = { + x = 1, + y = 1 + }, + + color = 0xFF000000 + } + }, + }, + debug = { history_size = 64 }, diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 46a1cf6..d0f120f 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -665,7 +665,42 @@ this.default_language = { current_time = "Current Time", everything_seems_to_be_ok = "Everything seems to be OK!", history = "History", - history_size = "History Size" + history_size = "History Size", + + value = "Value", + + stats_UI = "Stats UI", + attack_label = "Attack Label", + defense_label = "Defense Label", + affinity_label = "Affinity Label", + fire_resistance_label = "Fire Resistance Label", + water_resistance_label = "Water Resistance Label", + thunder_resistance_label = "Thunder Resistance Label", + ice_resistance_label = "Ice Resistance Label", + dragon_resistance_label = "Dragon Resistance Label", + stamina_label = "Stamina Label", + element_label = "Element Label", + element_2_label = "Element 2 Label" + }, + + stats = { + attack = "Attack", + defense = "Defense", + affinity = "Affinity", + + fire_resistance = "Fire Res"; + water_resistance = "Water Res"; + thunder_resistance = "Thunder Res"; + ice_resistance = "Ice Res"; + dragon_resistance = "Dragon Res"; + + stamina = "Stamina", + + fire = "Fire", + water = "Water", + thunder = "Thunder", + ice = "Ice", + dragon = "Dragon", } }; diff --git a/reframework/autorun/MHR_Overlay/Misc/player_info.lua b/reframework/autorun/MHR_Overlay/Misc/player_info.lua new file mode 100644 index 0000000..386f6fe --- /dev/null +++ b/reframework/autorun/MHR_Overlay/Misc/player_info.lua @@ -0,0 +1,251 @@ +local this = {}; + +local drawing; +local customization_menu; +local singletons; +local config; +local utils; +local error_handler; +local quest_status; +local time; + +local sdk = sdk; +local tostring = tostring; +local pairs = pairs; +local ipairs = ipairs; +local tonumber = tonumber; +local require = require; +local pcall = pcall; +local table = table; +local string = string; +local Vector3f = Vector3f; +local d2d = d2d; +local math = math; +local json = json; +local log = log; +local fs = fs; +local next = next; +local type = type; +local setmetatable = setmetatable; +local getmetatable = getmetatable; +local assert = assert; +local select = select; +local coroutine = coroutine; +local utf8 = utf8; +local re = re; +local imgui = imgui; +local draw = draw; +local Vector2f = Vector2f; +local reframework = reframework; +local os = os; +local ValueType = ValueType; +local package = package; + +this.list = { + attack = 0; + defense = 0; + affinity = 0; + + stamina = 0; + max_stamina = 0; + + element_type = 0; + element_attack = 0; + + element_type_2 = 0; + element_attack_2 = 0; + + fire_resistance = 0; + water_resistance = 0; + thunder_resistance = 0; + ice_resistance = 0; + dragon_resistance = 0; +}; + +local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager"); +local get_player_method = player_manager_type_def:get_method("getPlayer"); +local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer"); + +local player_base_type_def = find_master_player_method:get_return_type(); +local get_player_data_method = player_base_type_def:get_method("get_PlayerData"); + +local player_data_type_def = get_player_data_method:get_return_type(); + +local attack_field = player_data_type_def:get_field("_Attack"); +local defence_field = player_data_type_def:get_field("_Defence"); +local critical_rate_field = player_data_type_def:get_field("_CriticalRate"); + + +local stamina_field = player_data_type_def:get_field("_stamina"); +local stamina_max_field = player_data_type_def:get_field("_staminaMax"); + +local element_type_field = player_data_type_def:get_field("_ElementType"); +local element_attack_field = player_data_type_def:get_field("_ElementAttack"); + +local element_type_2nd_field = player_data_type_def:get_field("_ElementType2nd"); +local element_attack_2nd_field = player_data_type_def:get_field("_ElementAttack2nd"); + +local resistance_element_field = player_data_type_def:get_field("_ResistanceElement"); + +local system_array_type_def = sdk.find_type_definition("System.Array"); +local length_method = system_array_type_def:get_method("get_Length"); +local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)"); + +function this.update() + if not config.current_config.stats_UI.enabled then + return; + end + + if quest_status.flow_state == quest_status.flow_states.NONE then + return; + end + + if singletons.player_manager == nil then + error_handler.report("player_info.update", "Failed to access Data: player_manager"); + return; + end + + local master_player = find_master_player_method:call(singletons.player_manager); + if master_player == nil then + error_handler.report("player_info.update", "Failed to access Data: master_player"); + return; + end + + local master_player_data = get_player_data_method:call(master_player); + if master_player_data == nil then + error_handler.report("player_info.update", "Failed to access Data: master_player_data"); + end + + this.update_generic("attack", master_player_data, attack_field); + this.update_generic("affinity", master_player_data, critical_rate_field); + this.update_generic("defense", master_player_data, defence_field); + + this.update_generic("stamina", master_player_data, stamina_field); + this.list.stamina = math.floor(this.list.stamina / 30); + + this.update_generic("max_stamina", master_player_data, stamina_max_field); + this.list.max_stamina = math.floor(this.list.max_stamina / 30); + + this.update_generic("element_type", master_player_data, element_type_field); + this.update_generic("element_attack", master_player_data, element_attack_field); + + this.update_generic("element_type_2", master_player_data, element_type_2nd_field); + this.update_generic("element_attack_2", master_player_data, element_attack_2nd_field); + + this.update_resistances(master_player_data); +end + +function this.update_generic(key, player_data, field) + local value = field:get_data(player_data); + if value == nil then + error_handler.report("player_info.update_generic", string.format("Failed to access Data: %s_value", key)); + return; + end + + this.list[key] = math.floor(value); +end + +function this.update_resistances(player_data) + local resistance_element_array = resistance_element_field:get_data(player_data); + if resistance_element_array == nil then + error_handler.report("player_info.update_resistances", "Failed to access Data: resistance_element_array"); + return; + end + + -- Fire Resistance + local fire_resistance_valtype = get_value_method:call(resistance_element_array, 0); + if fire_resistance_valtype == nil then + error_handler.report("player_info.update_resistances", "Failed to access Data: fire_resistance_valtype"); + return; + end + + local fire_resistance = fire_resistance_valtype:get_field("mValue"); + if fire_resistance ~= nil then + this.list.fire_resistance = math.floor(fire_resistance); + else + error_handler.report("player_info.update_resistances", "Failed to access Data: fire_resistance"); + return; + end + + -- Water Resistance + local water_resistance_valtype = get_value_method:call(resistance_element_array, 1); + if water_resistance_valtype == nil then + error_handler.report("player_info.update_resistances", "Failed to access Data: water_resistance_valtype"); + return; + end + + local water_resistance = water_resistance_valtype:get_field("mValue"); + if water_resistance ~= nil then + this.list.water_resistance = math.floor(water_resistance); + else + error_handler.report("player_info.update_resistances", "Failed to access Data: water_resistance"); + return; + end + + -- Thunder Resistance + local thunder_resistance_valtype = get_value_method:call(resistance_element_array, 2); + if thunder_resistance_valtype == nil then + error_handler.report("player_info.update_resistances", "Failed to access Data: thunder_resistance_valtype"); + return; + end + + local thunder_resistance = thunder_resistance_valtype:get_field("mValue"); + if thunder_resistance ~= nil then + this.list.thunder_resistance = math.floor(thunder_resistance); + else + error_handler.report("player_info.update_resistances", "Failed to access Data: thunder_resistance"); + return; + end + + -- Ice Resistance + local ice_resistance_valtype = get_value_method:call(resistance_element_array, 3); + if ice_resistance_valtype == nil then + error_handler.report("player_info.update_resistances", "Failed to access Data: ice_resistance_valtype"); + return; + end + + local ice_resistance = ice_resistance_valtype:get_field("mValue"); + if ice_resistance ~= nil then + this.list.ice_resistance = math.floor(ice_resistance); + else + error_handler.report("player_info.update_resistances", "Failed to access Data: ice_resistance"); + return; + end + + -- Dragon Resistance + local dragon_resistance_valtype = get_value_method:call(resistance_element_array, 4); + if dragon_resistance_valtype == nil then + error_handler.report("player_info.update_resistances", "Failed to access Data: dragon_resistance_valtype"); + return; + end + + local dragon_resistance = dragon_resistance_valtype:get_field("mValue"); + if dragon_resistance ~= nil then + this.list.dragon_resistance = math.floor(dragon_resistance); + else + error_handler.report("player_info.update_resistances", "Failed to access Data: dragon_resistance"); + return; + end +end + +function this.init_dependencies() + singletons = require("MHR_Overlay.Game_Handler.singletons"); + customization_menu = require("MHR_Overlay.UI.customization_menu"); + config = require("MHR_Overlay.Misc.config"); + utils = require("MHR_Overlay.Misc.utils"); + --health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity"); + --stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity"); + --screen = require("MHR_Overlay.Game_Handler.screen"); + drawing = require("MHR_Overlay.UI.drawing"); + --ailments = require("MHR_Overlay.Monsters.ailments"); + --ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity"); + error_handler = require("MHR_Overlay.Misc.error_handler"); + quest_status = require("MHR_Overlay.Game_Handler.quest_status"); + time = require("MHR_Overlay.Game_Handler.time"); +end + +function this.init_module() + time.new_timer(this.update, 0.5); +end + +return this; diff --git a/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua b/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua index 4c9b58c..20b35d4 100644 --- a/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua +++ b/reframework/autorun/MHR_Overlay/UI/Customizations/module_visibility_customization.lua @@ -97,6 +97,10 @@ function this.draw(cached_config) language.current_language.customization_menu.buff_UI, cached_config.buff_UI); + changed, cached_config.stats_UI = imgui.checkbox( + language.current_language.customization_menu.stats_UI, + cached_config.stats_UI); + config_changed = config_changed or changed; return config_changed; diff --git a/reframework/autorun/MHR_Overlay/UI/Modules/stats_UI.lua b/reframework/autorun/MHR_Overlay/UI/Modules/stats_UI.lua new file mode 100644 index 0000000..601e8ff --- /dev/null +++ b/reframework/autorun/MHR_Overlay/UI/Modules/stats_UI.lua @@ -0,0 +1,266 @@ +local this = {}; + +local buff_UI_entity; +local config; +local buffs; +local consumables; +local melody_effects; +local endemic_life_buff; +local screen; +local utils; +local error_handler; +local skills; +local dangos; +local abnormal_statuses; +local drawing; +local player_info; +local language; + +local sdk = sdk; +local tostring = tostring; +local pairs = pairs; +local ipairs = ipairs; +local tonumber = tonumber; +local require = require; +local pcall = pcall; +local table = table; +local string = string; +local Vector3f = Vector3f; +local d2d = d2d; +local math = math; +local json = json; +local log = log; +local fs = fs; +local next = next; +local type = type; +local setmetatable = setmetatable; +local getmetatable = getmetatable; +local assert = assert; +local select = select; +local coroutine = coroutine; +local utf8 = utf8; +local re = re; +local imgui = imgui; +local draw = draw; +local Vector2f = Vector2f; +local reframework = reframework; +local os = os; +local ValueType = ValueType; +local package = package; + +this.label_list = { + attack = nil, + + defense = nil, + fire_resistance = nil, + water_resistance = nil, + thunder_resistance = nil, + ice_resistance = nil, + dragon_resistance = nil +}; + +this.affinity_label = nil; +this.stamina_label = nil; +this.element_label = nil; +this.element_2_label = nil; + +function this.draw() + local cached_config = config.current_config.stats_UI; + + if not cached_config.enabled then + return; + end + + local cached_names = language.current_language.stats; + + local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier; + + local position_on_screen = screen.calculate_absolute_coordinates(cached_config.position); + + -- draw + for label_key, label in pairs(this.label_list) do + local name_text = ""; + if label.include.name then + name_text = string.format("%s: ", cached_names[label_key]); + end + + if label.include.value then + name_text = string.format("%s%s", name_text, tostring(player_info.list[label_key])); + end + + drawing.draw_label(label, position_on_screen, 1, name_text); + + ::continue:: + end + + -- Affinity Label + local affinity_name_text = ""; + if this.affinity_label.include.name then + affinity_name_text = string.format("%s: ", cached_names.affinity); + end + + if this.affinity_label.include.value then + affinity_name_text = string.format("%s%s%%", affinity_name_text, tostring(player_info.list.affinity)); + end + + drawing.draw_label(this.affinity_label, position_on_screen, 1, affinity_name_text); + + -- Stamina Label + local stamina_name_text = ""; + if this.stamina_label.include.name then + stamina_name_text = string.format("%s: ", cached_names.stamina); + end + + if this.stamina_label.include.value and not this.stamina_label.include.max_value then + stamina_name_text = string.format("%s%s", stamina_name_text, tostring(player_info.list.stamina)); + + elseif not this.stamina_label.include.value and this.stamina_label.include.max_value then + stamina_name_text = string.format("%s%s", stamina_name_text, tostring(player_info.list.max_stamina)); + + elseif this.stamina_label.include.value and this.stamina_label.include.max_value then + stamina_name_text = string.format("%s%s/%s", stamina_name_text, tostring(player_info.list.stamina), tostring(player_info.list.max_stamina)); + end + + drawing.draw_label(this.stamina_label, position_on_screen, 1, stamina_name_text); + + -- Element Label + if player_info.list.element_type ~= 0 then + + local element_name_text = ""; + if this.element_label.include.name then + + local ailment_names = language.current_language.ailments; + + if player_info.list.element_type == 1 then + element_name_text = string.format("%s: ", cached_names.fire); + elseif player_info.list.element_type == 2 then + element_name_text = string.format("%s: ", cached_names.water); + elseif player_info.list.element_type == 3 then + element_name_text = string.format("%s: ", cached_names.thunder); + elseif player_info.list.element_type == 4 then + element_name_text = string.format("%s: ", cached_names.ice); + elseif player_info.list.element_type == 5 then + element_name_text = string.format("%s: ", cached_names.dragon); + elseif player_info.list.element_type == 6 then + element_name_text = string.format("%s: ", ailment_names.poison); + elseif player_info.list.element_type == 7 then + element_name_text = string.format("%s: ", ailment_names.sleep); + elseif player_info.list.element_type == 8 then + element_name_text = string.format("%s: ", ailment_names.paralysis); + elseif player_info.list.element_type == 9 then + element_name_text = string.format("%s: ", ailment_names.blast); + end + + end + + if this.element_label.include.value then + element_name_text = string.format("%s%s", element_name_text, tostring(player_info.list.element_attack)); + end + + drawing.draw_label(this.element_label, position_on_screen, 1, element_name_text); + end + + + -- Element 2 Label + if player_info.list.element_type_2 ~= 0 then + + local element_2_name_text = ""; + if this.element_2_label.include.name then + + local ailment_names = language.current_language.ailments; + + if player_info.list.element_type_2 == 1 then + element_2_name_text = string.format("%s: ", cached_names.fire); + elseif player_info.list.element_type_2 == 2 then + element_2_name_text = string.format("%s: ", cached_names.water); + elseif player_info.list.element_type_2 == 3 then + element_2_name_text = string.format("%s: ", cached_names.thunder); + elseif player_info.list.element_type_2 == 4 then + element_2_name_text = string.format("%s: ", cached_names.ice); + elseif player_info.list.element_type_2 == 5 then + element_2_name_text = string.format("%s: ", cached_names.dragon); + elseif player_info.list.element_type_2 == 6 then + element_2_name_text = string.format("%s: ", ailment_names.poison); + elseif player_info.list.element_type_2 == 7 then + element_2_name_text = string.format("%s: ", ailment_names.sleep); + elseif player_info.list.element_type_2 == 8 then + element_2_name_text = string.format("%s: ", ailment_names.paralysis); + elseif player_info.list.element_type_2 == 9 then + element_2_name_text = string.format("%s: ", ailment_names.blast); + end + + end + + if this.element_2_label.include.value then + element_2_name_text = string.format("%s%s", element_2_name_text, tostring(player_info.list.element_attack_2)); + end + + drawing.draw_label(this.element_2_label, position_on_screen, 1, element_2_name_text); + end +end + +function this.init_UI() + this.label_list.attack = utils.table.deep_copy(config.current_config.stats_UI.attack_label); + this.label_list.defense = utils.table.deep_copy(config.current_config.stats_UI.defense_label); + + this.label_list.fire_resistance = utils.table.deep_copy(config.current_config.stats_UI.fire_resistance_label); + this.label_list.water_resistance = utils.table.deep_copy(config.current_config.stats_UI.water_resistance_label); + this.label_list.thunder_resistance = utils.table.deep_copy(config.current_config.stats_UI.thunder_resistance_label); + this.label_list.ice_resistance = utils.table.deep_copy(config.current_config.stats_UI.ice_resistance_label); + this.label_list.dragon_resistance = utils.table.deep_copy(config.current_config.stats_UI.dragon_resistance_label); + + this.affinity_label = utils.table.deep_copy(config.current_config.stats_UI.affinity_label); + this.stamina_label = utils.table.deep_copy(config.current_config.stats_UI.stamina_label); + this.element_label = utils.table.deep_copy(config.current_config.stats_UI.element_label); + this.element_2_label = utils.table.deep_copy(config.current_config.stats_UI.element_2_label); + + local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier; + + for label_key, label in pairs(this.label_list) do + label.offset.x = label.offset.x * global_scale_modifier; + label.offset.y = label.offset.y * global_scale_modifier; + end + + this.affinity_label.offset.x = this.affinity_label.offset.x * global_scale_modifier; + this.affinity_label.offset.y = this.affinity_label.offset.y * global_scale_modifier; + + this.stamina_label.offset.x = this.stamina_label.offset.x * global_scale_modifier; + this.stamina_label.offset.y = this.stamina_label.offset.y * global_scale_modifier; + + this.element_label.offset.x = this.element_label.offset.x * global_scale_modifier; + this.element_label.offset.y = this.element_label.offset.y * global_scale_modifier; + + this.element_2_label.offset.x = this.element_2_label.offset.x * global_scale_modifier; + this.element_2_label.offset.y = this.element_2_label.offset.y * global_scale_modifier; +end + +function this.init_dependencies() + config = require("MHR_Overlay.Misc.config"); + buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity"); + consumables = require("MHR_Overlay.Buffs.consumables"); + melody_effects = require("MHR_Overlay.Buffs.melody_effects"); + buffs = require("MHR_Overlay.Buffs.buffs"); + --singletons = require("MHR_Overlay.Game_Handler.singletons"); + config = require("MHR_Overlay.Misc.config"); + --customization_menu = require("MHR_Overlay.UI.customization_menu"); + --players = require("MHR_Overlay.Damage_Meter.players"); + --non_players = require("MHR_Overlay.Damage_Meter.non_players"); + --quest_status = require("MHR_Overlay.Game_Handler.quest_status"); + screen = require("MHR_Overlay.Game_Handler.screen"); + --drawing = require("MHR_Overlay.UI.drawing"); + utils = require("MHR_Overlay.Misc.utils"); + error_handler = require("MHR_Overlay.Misc.error_handler"); + endemic_life_buff = require("MHR_Overlay.Buffs.endemic_life_buffs"); + skills = require("MHR_Overlay.Buffs.skills"); + dangos = require("MHR_Overlay.Buffs.dangos"); + abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses"); + drawing = require("MHR_Overlay.UI.drawing"); + player_info = require("MHR_Overlay.Misc.player_info"); + language = require("MHR_Overlay.Misc.language"); +end + +function this.init_module() + this.init_UI(); +end + +return this; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index e72369b..9887d16 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -16,6 +16,7 @@ local quest_status; local buffs; local error_handler; local time; +local stats_UI; local label_customization; local bar_customization; @@ -365,6 +366,7 @@ function this.draw() local damage_meter_UI_changed = false; local endemic_life_UI_changed = false; local buff_UI_changed = false; + local stats_UI_changed = false; local debug_changed = false; local apply_font_requested = false; @@ -404,6 +406,7 @@ function this.draw() damage_meter_UI_changed = this.draw_damage_meter_UI(); endemic_life_UI_changed = this.draw_endemic_life_UI() buff_UI_changed = this.draw_buff_UI(); + stats_UI_changed = this.draw_stats_UI() imgui.new_line(); debug_changed = this.draw_debug(); @@ -471,6 +474,11 @@ function this.draw() end end + if stats_UI_changed or modifiers_changed or config_changed then + stats_UI.init_UI(); + end + + if this.menu_font_changed and (apply_font_requested or config_changed) then this.menu_font_changed = false; this.reload_font(); @@ -478,7 +486,7 @@ function this.draw() if window_changed or modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or large_monster_static_UI_changed or large_monster_highlighted_UI_changed or time_UI_changed or damage_meter_UI_changed or - endemic_life_UI_changed or buff_UI_changed or modifiers_changed or config_changed or debug_changed then + endemic_life_UI_changed or buff_UI_changed or stats_UI_changed or modifiers_changed or config_changed or debug_changed then config.save_current(); end @@ -1002,6 +1010,17 @@ function this.draw_global_settings(apply_font_requested, language_changed) if imgui.tree_node(language.current_language.customization_menu.module_visibility_based_on_game_state) then + if imgui.tree_node(language.current_language.customization_menu.in_lobby) then + + changed, cached_config.module_visibility.in_lobby.stats_UI = imgui.checkbox( + language.current_language.customization_menu.stats_UI, + cached_config.module_visibility.in_lobby.stats_UI); + + config_changed = config_changed or changed; + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.in_training_area) then changed, cached_config.module_visibility.in_training_area.large_monster_dynamic_UI = imgui.checkbox( @@ -1040,6 +1059,12 @@ function this.draw_global_settings(apply_font_requested, language_changed) config_changed = config_changed or changed; + changed, cached_config.module_visibility.in_training_area.stats_UI = imgui.checkbox( + language.current_language.customization_menu.stats_UI, + cached_config.module_visibility.in_training_area.stats_UI); + + config_changed = config_changed or changed; + imgui.tree_pop(); end @@ -2296,6 +2321,83 @@ function this.draw_buff_UI() return config_changed; end +function this.draw_stats_UI() + local changed = false; + local config_changed = false; + local index = 0; + + if imgui.tree_node(language.current_language.customization_menu.stats_UI) then + local cached_config = config.current_config.stats_UI; + + changed, cached_config.enabled = imgui.checkbox( + language.current_language.customization_menu.enabled, cached_config.enabled); + + config_changed = config_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.position) then + changed, cached_config.position.x = imgui.drag_float( + language.current_language.customization_menu.x, cached_config.position.x, 0.1, 0, screen.width, "%.1f"); + + config_changed = config_changed or changed; + + changed, cached_config.position.y = imgui.drag_float( + language.current_language.customization_menu.y, cached_config.position.y, 0.1, 0, screen.height, "%.1f"); + + config_changed = config_changed or changed; + + changed, index = imgui.combo( + language.current_language.customization_menu.anchor, + utils.table.find_index(this.anchor_types, cached_config.position.anchor), + this.displayed_anchor_types); + + config_changed = config_changed or changed; + + if changed then + cached_config.position.anchor = this.anchor_types[index]; + end + + imgui.tree_pop(); + end + + changed = label_customization.draw(language.current_language.customization_menu.attack_label, cached_config.attack_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.affinity_label, cached_config.affinity_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.defense_label, cached_config.defense_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.fire_resistance_label, cached_config.fire_resistance_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.water_resistance_label, cached_config.water_resistance_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.thunder_resistance_label, cached_config.thunder_resistance_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.ice_resistance_label, cached_config.ice_resistance_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.dragon_resistance_label, cached_config.dragon_resistance_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.stamina_label, cached_config.stamina_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.element_label, cached_config.element_label); + config_changed = config_changed or changed; + + changed = label_customization.draw(language.current_language.customization_menu.element_2_label, cached_config.element_2_label); + config_changed = config_changed or changed; + + imgui.tree_pop(); + end + + return config_changed; +end + function this.draw_debug() local cached_config = config.current_config.debug; @@ -2369,6 +2471,7 @@ function this.init_dependencies() buffs = require("MHR_Overlay.Buffs.buffs"); error_handler = require("MHR_Overlay.Misc.error_handler"); time = require("MHR_Overlay.Game_Handler.time"); + stats_UI = require("MHR_Overlay.UI.Modules.stats_UI"); label_customization = require("MHR_Overlay.UI.Customizations.label_customization"); bar_customization = require("MHR_Overlay.UI.Customizations.bar_customization"); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index 9e1fbf6..de56555 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -74,6 +74,7 @@ "UI_font": "UI Font", "UI_font_notice": "Any changes to the font require script reload!", "activation_count": "Activation Count", + "affinity_label": "Affinity Label", "ailment_buildups": "Ailment Buildups", "ailment_name": "Ailment Name", "ailment_name_label": "Ailment Name Label", @@ -87,6 +88,7 @@ "anomaly_health_percentage": "Anomaly Core Health Percentage", "apply": "Apply", "assign_new_key": "Assign new key", + "attack_label": "Attack Label", "auto_highlight": "Auto-highlight", "background": "Background", "bar": "Bar", @@ -135,15 +137,19 @@ "damage_value_label": "Damage Value Label", "debug": "Debug", "default_state": "Default State", + "defense_label": "Defense Label", "delete": "Delete", "distance": "Distance", "dps": "DPS", "dps_label": "DPS Label", "dps_mode": "DPS Mode", + "dragon_resistance_label": "Dragon Resistance Label", "duplicate": "Duplicate", "duration": "Duration", "dynamic_positioning": "Dynamic Positioning", "dynamically_positioned": "Dynamically Positioned", + "element_2_label": "Element 2 Label", + "element_label": "Element Label", "enable_for": "Enable for", "enabled": "Enabled", "endemic_life": "Endemic Life", @@ -155,6 +161,7 @@ "fill_direction": "Fill Direction", "filter": "Filter", "filter_mode": "Filter Mode", + "fire_resistance_label": "Fire Resistance Label", "first": "First", "first_hit": "First Hit", "flinch_count": "Flinch Count", @@ -204,6 +211,7 @@ "hotkeys": "Hotkeys", "hunter_rank": "Hunter Rank", "hunter_rank_label": "Hunter Rank Label", + "ice_resistance_label": "Ice Resistance Label", "id": "ID", "in_lobby": "In Lobby", "in_training_area": "In Training Area", @@ -311,16 +319,19 @@ "sorting": "Sorting", "spacing": "Spacing", "stamina": "Stamina", + "stamina_label": "Stamina Label", "static_orientation": "Static Orientation", "static_position": "Static Position", "static_sorting": "Static Sorting", "static_spacing": "Static Spacing", "statically_positioned": "Statically Positioned", + "stats_UI": "Stats UI", "status": "Status", "style": "Style", "summary_screen": "Summary Screen", "text_label": "Text Label", "thickness": "Thickness", + "thunder_resistance_label": "Thunder Resistance Label", "time_UI": "Time UI", "time_label": "Time Label", "time_limit": "Time Limit (seconds)", @@ -348,10 +359,12 @@ "tracked_monster_types": "Tracked Monster Types", "type": "Type", "use_d2d_if_available": "Use Direct2D if available", + "value": "Value", "value_label": "Value Label", "vertical": "Vertical", "viewport_offset": "Viewport Offset", "visible": "Visible", + "water_resistance_label": "Water Resistance Label", "width": "Width", "world_offset": "World Offset", "wyvern_riding": "Wyvern Riding", @@ -484,6 +497,22 @@ "wall_runner": "Wall Runner", "wind_mantle": "Wind Mantle" }, + "stats": { + "affinity": "Affinity", + "attack": "Attack", + "defense": "Defense", + "dragon": "Dragon", + "dragon_resistance": "Dragon Res", + "fire": "Fire", + "fire_resistance": "Fire Res", + "ice": "Ice", + "ice_resistance": "Ice Res", + "stamina": "Stamina", + "thunder": "Thunder", + "thunder_resistance": "Thunder Res", + "water": "Water", + "water_resistance": "Water Res" + }, "unicode_glyph_ranges": [ 0 ] diff --git a/reframework/data/MHR Overlay/languages/ja-jp.json b/reframework/data/MHR Overlay/languages/ja-jp.json index cb85c63..6e90478 100644 --- a/reframework/data/MHR Overlay/languages/ja-jp.json +++ b/reframework/data/MHR Overlay/languages/ja-jp.json @@ -74,6 +74,7 @@ "UI_font": "UI フォント", "UI_font_notice": "フォントの変更後はスクリプトリセットを行ってください。", "activation_count": "適用までのカウント", + "affinity_label": "Affinity Label", "ailment_buildups": "状態異常の蓄積値", "ailment_name": "状態異常表示", "ailment_name_label": "状態異常表示ラベル", @@ -87,6 +88,7 @@ "anomaly_health_percentage": "Anomaly Core Health Percentage", "apply": "適用", "assign_new_key": "新規に割り当てるキーを入力", + "attack_label": "Attack Label", "auto_highlight": "Auto-highlight", "background": "背景色", "bar": "バー", @@ -135,15 +137,19 @@ "damage_value_label": "ダメージラベル", "debug": "Debug", "default_state": "Default State", + "defense_label": "Defense Label", "delete": "Delete", "distance": "距離", "dps": "DPS", "dps_label": "DPSラベル", "dps_mode": "DPS モード", + "dragon_resistance_label": "Dragon Resistance Label", "duplicate": "Duplicate", "duration": "Duration", "dynamic_positioning": "動的な場所", "dynamically_positioned": "モンスターに追随して表示", + "element_2_label": "Element 2 Label", + "element_label": "Element Label", "enable_for": "有効にする", "enabled": "有効", "endemic_life": "Endemic Life", @@ -155,6 +161,7 @@ "fill_direction": "Fill Direction", "filter": "フィルター", "filter_mode": "Filter Mode", + "fire_resistance_label": "Fire Resistance Label", "first": "最初", "first_hit": "初撃", "flinch_count": "ひるみ回数", @@ -204,6 +211,7 @@ "hotkeys": "ホットキー", "hunter_rank": "ハンターランク", "hunter_rank_label": "ハンターランクのラベル", + "ice_resistance_label": "Ice Resistance Label", "id": "ID", "in_lobby": "In Lobby", "in_training_area": "In Training Area", @@ -311,16 +319,19 @@ "sorting": "ソート", "spacing": "間隔", "stamina": "スタミナ", + "stamina_label": "Stamina Label", "static_orientation": "モンスター情報の配置を修正", "static_position": "モンスター情報の場所を修正", "static_sorting": "モンスター情報の並べ替えを修正", "static_spacing": "モンスター情報間の距離を修正", "statically_positioned": "モンスター情報の一覧表示", + "stats_UI": "Stats UI", "status": "ステータス", "style": "Style", "summary_screen": "Summary Screen", "text_label": "テキストラベル", "thickness": "Thickness", + "thunder_resistance_label": "Thunder Resistance Label", "time_UI": "タイムUI", "time_label": "タイムラベル", "time_limit": "タイムリミット(s.)", @@ -348,10 +359,12 @@ "tracked_monster_types": "モンスタータイプでの追跡", "type": "タイプ", "use_d2d_if_available": "Use Direct2D if available", + "value": "Value", "value_label": "バリューラベル", "vertical": "縦", "viewport_offset": "表示領域からの位置", "visible": "表示する", + "water_resistance_label": "Water Resistance Label", "width": "幅", "world_offset": "表示位置", "wyvern_riding": "Wyvern Riding", @@ -484,6 +497,22 @@ "wall_runner": "Wall Runner", "wind_mantle": "Wind Mantle" }, + "stats": { + "affinity": "Affinity", + "attack": "Attack", + "defense": "Defense", + "dragon": "Dragon", + "dragon_resistance": "Dragon Res", + "fire": "Fire", + "fire_resistance": "Fire Res", + "ice": "Ice", + "ice_resistance": "Ice Res", + "stamina": "Stamina", + "thunder": "Thunder", + "thunder_resistance": "Thunder Res", + "water": "Water", + "water_resistance": "Water Res" + }, "unicode_glyph_ranges": [ 32, 255, diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 3abc817..b829e9c 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -74,6 +74,7 @@ "UI_font": "UI 글꼴", "UI_font_notice": "글꼴 변경시 스크립트를 리로드 해야합니다!", "activation_count": "활성 횟수", + "affinity_label": "Affinity Label", "ailment_buildups": "상태이상 누적치", "ailment_name": "상태이상 이름", "ailment_name_label": "상태이상 이름 정보", @@ -87,6 +88,7 @@ "anomaly_health_percentage": "괴이핵 체력 비율", "apply": "적용", "assign_new_key": "새 키를 할당", + "attack_label": "Attack Label", "auto_highlight": "자동 타겟 설정", "background": "배경색", "bar": "막대", @@ -136,15 +138,19 @@ "debug": "Debug", "debug_errors": "Debug Errors", "default_state": "기본 상태", + "defense_label": "Defense Label", "delete": "삭제하기", "distance": "간격", "dps": "DPS", "dps_label": "DPS 정보", "dps_mode": "DPS 모드", + "dragon_resistance_label": "Dragon Resistance Label", "duplicate": "복제하기", "duration": "지속시간", "dynamic_positioning": "유동 위치", "dynamically_positioned": "유동 위치 UI", + "element_2_label": "Element 2 Label", + "element_label": "Element Label", "enable_for": "표시 대상", "enabled": "사용함", "endemic_life": "환경생물", @@ -156,6 +162,7 @@ "fill_direction": "채우는 방향", "filter": "필터", "filter_mode": "필터 모드", + "fire_resistance_label": "Fire Resistance Label", "first": "맨 앞", "first_hit": "첫 공격", "flinch_count": "경직 횟수", @@ -205,6 +212,7 @@ "hotkeys": "단축키", "hunter_rank": "헌터 랭크", "hunter_rank_label": "헌터 랭크 정보", + "ice_resistance_label": "Ice Resistance Label", "id": "ID", "in_lobby": "로비 내", "in_training_area": "훈련구역 내", @@ -312,16 +320,19 @@ "sorting": "정렬방법", "spacing": "간격", "stamina": "스태미나", + "stamina_label": "Stamina Label", "static_orientation": "고정 방향", "static_position": "고정 위치", "static_sorting": "고정 정렬방법", "static_spacing": "고정 간격", "statically_positioned": "고정 위치 UI", + "stats_UI": "Stats UI", "status": "상태", "style": "스타일", "summary_screen": "결과 요약 화면", "text_label": "텍스트 정보", "thickness": "두께", + "thunder_resistance_label": "Thunder Resistance Label", "time_UI": "시간 UI", "time_label": "시간 정보", "time_limit": "시간 제한 (단위: 초)", @@ -349,10 +360,12 @@ "tracked_monster_types": "추적할 몬스터 타입", "type": "종류", "use_d2d_if_available": "가능한 Direct2D를 사용함", + "value": "Value", "value_label": "값 정보", "vertical": "세로", "viewport_offset": "뷰포트 오프셋", "visible": "표시함", + "water_resistance_label": "Water Resistance Label", "width": "너비", "world_offset": "전역 오프셋", "wyvern_riding": "용조종", @@ -485,6 +498,22 @@ "wall_runner": "Wall Runner", "wind_mantle": "Wind Mantle" }, + "stats": { + "affinity": "Affinity", + "attack": "Attack", + "defense": "Defense", + "dragon": "Dragon", + "dragon_resistance": "Dragon Res", + "fire": "Fire", + "fire_resistance": "Fire Res", + "ice": "Ice", + "ice_resistance": "Ice Res", + "stamina": "Stamina", + "thunder": "Thunder", + "thunder_resistance": "Thunder Res", + "water": "Water", + "water_resistance": "Water Res" + }, "unicode_glyph_ranges": [ 32, 255, diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index e26dc5c..8979fb2 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -74,6 +74,7 @@ "UI_font": "Шрифт интерфейса", "UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!", "activation_count": "Кол-во активаций", + "affinity_label": "Affinity Label", "ailment_buildups": "Накопление аномального статуса", "ailment_name": "Название аномального статуса", "ailment_name_label": "Метка названия аномального статуса", @@ -87,6 +88,7 @@ "anomaly_health_percentage": "Здоровье ядра аномалии в процентах", "apply": "Применить", "assign_new_key": "Привязать клавишу", + "attack_label": "Attack Label", "auto_highlight": "Автофокус", "background": "Фон", "bar": "Шкала", @@ -136,15 +138,19 @@ "debug": "Debug", "debug_errors": "Debug Errors", "default_state": "Состояние по умолчанию", + "defense_label": "Defense Label", "delete": "Удалить", "distance": "Расстояние", "dps": "Урон в секунду", "dps_label": "Метка урона в секунду", "dps_mode": "Режим урона в секунду", + "dragon_resistance_label": "Dragon Resistance Label", "duplicate": "Дублировать", "duration": "Продолжительность", "dynamic_positioning": "Динамическое позиционирование", "dynamically_positioned": "Рассположенный динамично", + "element_2_label": "Element 2 Label", + "element_label": "Element Label", "enable_for": "Показывать для", "enabled": "Включить", "endemic_life": "Местная живность", @@ -156,6 +162,7 @@ "fill_direction": "Направление заполнения", "filter": "Фильтр", "filter_mode": "Режим Фильтра", + "fire_resistance_label": "Fire Resistance Label", "first": "Первый", "first_hit": "Первый удар", "flinch_count": "Кол-во вздрагиваний", @@ -205,6 +212,7 @@ "hotkeys": "Горячие клавиши", "hunter_rank": "Ранг охотника", "hunter_rank_label": "Метка ранга охотника", + "ice_resistance_label": "Ice Resistance Label", "id": "ID", "in_lobby": "В лобби", "in_training_area": "В тренировочной зоне", @@ -312,16 +320,19 @@ "sorting": "Сортировка", "spacing": "Расстояние между элементами", "stamina": "Выносливость", + "stamina_label": "Stamina Label", "static_orientation": "Статичная ориентация", "static_position": "Статичное расположение", "static_sorting": "Статичная сортировка", "static_spacing": "Статичное расстояние между элементами", "statically_positioned": "Рассположенный статично", + "stats_UI": "Stats UI", "status": "Статус", "style": "Стиль", "summary_screen": "Экран Результатов", "text_label": "Текстовая метка", "thickness": "Толщина", + "thunder_resistance_label": "Thunder Resistance Label", "time_UI": "Интерфейс времени", "time_label": "Метка времени", "time_limit": "Ограничение по времени (cек.)", @@ -349,10 +360,12 @@ "tracked_monster_types": "Отслеживаемые типы монстров", "type": "Тип", "use_d2d_if_available": "Использовать Direct2D, если доступен", + "value": "Value", "value_label": "Метка значений", "vertical": "Вертикально", "viewport_offset": "Сдвиг в экранном пространстве", "visible": "Включить", + "water_resistance_label": "Water Resistance Label", "width": "Ширина", "world_offset": "Сдвиг в игровом пространстве", "wyvern_riding": "Езда на виверне", @@ -485,6 +498,22 @@ "wall_runner": "Wall Runner", "wind_mantle": "Wind Mantle" }, + "stats": { + "affinity": "Affinity", + "attack": "Attack", + "defense": "Defense", + "dragon": "Dragon", + "dragon_resistance": "Dragon Res", + "fire": "Fire", + "fire_resistance": "Fire Res", + "ice": "Ice", + "ice_resistance": "Ice Res", + "stamina": "Stamina", + "thunder": "Thunder", + "thunder_resistance": "Thunder Res", + "water": "Water", + "water_resistance": "Water Res" + }, "unicode_glyph_ranges": [ 32, 255, diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index b5a1b9e..076d832 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -74,6 +74,7 @@ "UI_font": "UI字体", "UI_font_notice": "当更改字体时,请重新加载脚本!", "activation_count": "激活次数", + "affinity_label": "Affinity Label", "ailment_buildups": "状态异常积累值", "ailment_name": "状态异常名", "ailment_name_label": "状态异常标签", @@ -87,6 +88,7 @@ "anomaly_health_percentage": "怪异核破坏百分比", "apply": "应用", "assign_new_key": "指定新按键", + "attack_label": "Attack Label", "auto_highlight": "自动高亮", "background": "背景", "bar": "状态条", @@ -136,15 +138,19 @@ "debug": "Debug", "debug_errors": "Debug Errors", "default_state": "默认阶段", + "defense_label": "Defense Label", "delete": "删除", "distance": "距离", "dps": "DPS", "dps_label": "DPS标签", "dps_mode": "DPS模式", + "dragon_resistance_label": "Dragon Resistance Label", "duplicate": "复制", "duration": "持续时间", "dynamic_positioning": "动态位置", "dynamically_positioned": "动态位置", + "element_2_label": "Element 2 Label", + "element_label": "Element Label", "enable_for": "开启", "enabled": "开启", "endemic_life": "环境生物", @@ -156,6 +162,7 @@ "fill_direction": "填充方向", "filter": "筛选器", "filter_mode": "筛选方式", + "fire_resistance_label": "Fire Resistance Label", "first": "第一", "first_hit": "第一击", "flinch_count": "胆怯次数", @@ -205,6 +212,7 @@ "hotkeys": "热键", "hunter_rank": "猎人等级", "hunter_rank_label": "猎人等级标签", + "ice_resistance_label": "Ice Resistance Label", "id": "ID", "in_lobby": "在大厅", "in_training_area": "在修炼场", @@ -312,16 +320,19 @@ "sorting": "排序方式", "spacing": "间距", "stamina": "耐力", + "stamina_label": "Stamina Label", "static_orientation": "固定方向", "static_position": "固定位置", "static_sorting": "固定排序", "static_spacing": "固定间距", "statically_positioned": "固定位置", + "stats_UI": "Stats UI", "status": "状态", "style": "样式", "summary_screen": "总结界面", "text_label": "文字标签", "thickness": "粗细度", + "thunder_resistance_label": "Thunder Resistance Label", "time_UI": "时间UI", "time_label": "时间标签", "time_limit": "时间限制(秒)", @@ -349,10 +360,12 @@ "tracked_monster_types": "跟踪的怪物类型", "type": "类型", "use_d2d_if_available": "可用时使用Direct2D", + "value": "Value", "value_label": "数字", "vertical": "垂直", "viewport_offset": "窗口偏移", "visible": "可见", + "water_resistance_label": "Water Resistance Label", "width": "宽度", "world_offset": "整体偏移", "wyvern_riding": "御龙", @@ -485,6 +498,22 @@ "wall_runner": "Wall Runner", "wind_mantle": "Wind Mantle" }, + "stats": { + "affinity": "Affinity", + "attack": "Attack", + "defense": "Defense", + "dragon": "Dragon", + "dragon_resistance": "Dragon Res", + "fire": "Fire", + "fire_resistance": "Fire Res", + "ice": "Ice", + "ice_resistance": "Ice Res", + "stamina": "Stamina", + "thunder": "Thunder", + "thunder_resistance": "Thunder Res", + "water": "Water", + "water_resistance": "Water Res" + }, "unicode_glyph_ranges": [ 32, 255, diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index 01280d7..dd9b445 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -74,6 +74,7 @@ "UI_font": "UI 字型", "UI_font_notice": "當更改文字時,請重新載入", "activation_count": "觸發次數", + "affinity_label": "Affinity Label", "ailment_buildups": "異常狀態累積值", "ailment_name": "異常狀態", "ailment_name_label": "異常狀態名稱", @@ -87,6 +88,7 @@ "anomaly_health_percentage": "Anomaly Core Health Percentage", "apply": "套用", "assign_new_key": "指定新按鍵", + "attack_label": "Attack Label", "auto_highlight": "自動高亮", "background": "圖形化顯示條的背景底色", "bar": "圖形化顯示條", @@ -136,15 +138,19 @@ "debug": "Debug", "debug_errors": "Debug Errors", "default_state": "Default State", + "defense_label": "Defense Label", "delete": "Delete", "distance": "距離", "dps": "DPS", "dps_label": "DPS文字", "dps_mode": "DPS模式", + "dragon_resistance_label": "Dragon Resistance Label", "duplicate": "Duplicate", "duration": "Duration", "dynamic_positioning": "浮動的資訊位置", "dynamically_positioned": "浮動的魔物資訊", + "element_2_label": "Element 2 Label", + "element_label": "Element Label", "enable_for": "啟用對象", "enabled": "啟用", "endemic_life": "Endemic Life", @@ -156,6 +162,7 @@ "fill_direction": "Fill Direction", "filter": "篩選器", "filter_mode": "Filter Mode", + "fire_resistance_label": "Fire Resistance Label", "first": "第一", "first_hit": "第一擊", "flinch_count": "膽怯次數", @@ -205,6 +212,7 @@ "hotkeys": "快捷鍵", "hunter_rank": "獵人等級", "hunter_rank_label": "獵人等級", + "ice_resistance_label": "Ice Resistance Label", "id": "ID", "in_lobby": "In Lobby", "in_training_area": "In Training Area", @@ -312,16 +320,19 @@ "sorting": "排序方式", "spacing": "間距", "stamina": "耐力", + "stamina_label": "Stamina Label", "static_orientation": "固定魔物資訊的對齊方式", "static_position": "固定魔物資訊的位置", "static_sorting": "固定魔物資訊的排序", "static_spacing": "固定魔物資訊的間距", "statically_positioned": "固定的魔物資訊", + "stats_UI": "Stats UI", "status": "狀態", "style": "樣式", "summary_screen": "Summary Screen", "text_label": "文字", "thickness": "粗細", + "thunder_resistance_label": "Thunder Resistance Label", "time_UI": "時間 UI", "time_label": "時間", "time_limit": "時限 (秒)", @@ -349,10 +360,12 @@ "tracked_monster_types": "追蹤的魔物類型", "type": "類型", "use_d2d_if_available": "Use Direct2D if available", + "value": "Value", "value_label": "數字", "vertical": "垂直", "viewport_offset": "視窗的位置", "visible": "可見", + "water_resistance_label": "Water Resistance Label", "width": "寬度", "world_offset": "地圖中的位置", "wyvern_riding": "Wyvern Riding", @@ -485,6 +498,22 @@ "wall_runner": "Wall Runner", "wind_mantle": "Wind Mantle" }, + "stats": { + "affinity": "Affinity", + "attack": "Attack", + "defense": "Defense", + "dragon": "Dragon", + "dragon_resistance": "Dragon Res", + "fire": "Fire", + "fire_resistance": "Fire Res", + "ice": "Ice", + "ice_resistance": "Ice Res", + "stamina": "Stamina", + "thunder": "Thunder", + "thunder_resistance": "Thunder Res", + "water": "Water", + "water_resistance": "Water Res" + }, "unicode_glyph_ranges": [ 32, 255,