From 1c9174ca38848b57944a92c3e6b2f7b4f249b9f8 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Wed, 9 Feb 2022 20:08:34 +0200 Subject: [PATCH] Functions and fields are cached, part names added, part name language support added. --- MHR_Overlay.lua | 6 +- MHR_Overlay/Damage_Meter/damage_hook.lua | 31 +- MHR_Overlay/Damage_Meter/player.lua | 19 +- MHR_Overlay/Game_Handler/quest_status.lua | 5 +- MHR_Overlay/Misc/config.lua | 46 +- MHR_Overlay/Misc/language.lua | 110 ++++ MHR_Overlay/Misc/part_names.lua | 476 ++++++++++++++++++ MHR_Overlay/Misc/table_helpers.lua | 82 +-- MHR_Overlay/Monsters/body_part.lua | 6 +- MHR_Overlay/Monsters/large_monster.lua | 22 +- MHR_Overlay/Monsters/monster_hook.lua | 28 +- MHR_Overlay/UI/Modules/damage_meter_UI.lua | 46 +- MHR_Overlay/UI/Modules/large_monster_UI.lua | 8 +- MHR_Overlay/UI/Modules/small_monster_UI.lua | 8 +- MHR_Overlay/UI/Modules/time_UI.lua | 10 +- .../UI/UI_Entities/health_UI_entity.lua | 1 - MHR_Overlay/UI/customization_menu.lua | 331 ++++++++---- 17 files changed, 974 insertions(+), 261 deletions(-) create mode 100644 MHR_Overlay/Misc/language.lua create mode 100644 MHR_Overlay/Misc/part_names.lua diff --git a/MHR_Overlay.lua b/MHR_Overlay.lua index db9e341..7657049 100644 --- a/MHR_Overlay.lua +++ b/MHR_Overlay.lua @@ -5,7 +5,9 @@ local screen = require("MHR_Overlay.Game_Handler.screen"); local singletons = require("MHR_Overlay.Game_Handler.singletons"); local config = require("MHR_Overlay.Misc.config"); +local language = require("MHR_Overlay.Misc.language"); local table_helpers = require("MHR_Overlay.Misc.table_helpers"); +local part_names = require("MHR_Overlay.Misc.part_names"); local player = require("MHR_Overlay.Damage_Meter.player"); local damage_hook = require("MHR_Overlay.Damage_Meter.damage_hook"); @@ -35,8 +37,10 @@ screen.init_module(); singletons.init_module(); table_helpers.init_module(); +language.init_module(); config.init_module(); quest_status.init_module(); +part_names.init_module(); damage_UI_entity.init_module(); health_UI_entity.init_module(); @@ -85,7 +89,7 @@ re.on_frame(function() end); re.on_frame(function() - draw.text("x: " .. tostring(x), 450, 50, 0xFFFFFFFF); + --draw.text("x: " .. tostring(x), 450, 50, 0xFFFFFFFF); end); -- #endregion --------------------------RE_IMGUI--------------------------- diff --git a/MHR_Overlay/Damage_Meter/damage_hook.lua b/MHR_Overlay/Damage_Meter/damage_hook.lua index 53510c7..999843c 100644 --- a/MHR_Overlay/Damage_Meter/damage_hook.lua +++ b/MHR_Overlay/Damage_Meter/damage_hook.lua @@ -2,11 +2,21 @@ local damage_hook = {}; local quest_status; local player; - - local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); local enemy_character_base_after_calc_damage_damage_side = enemy_character_base_type_def:get_method("afterCalcDamage_DamageSide"); +local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy"); +local check_die_method = enemy_character_base_type_def:get_method("checkDie"); + +local enemy_calc_damage_info_type_def = sdk.find_type_definition("snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide"); +local get_attacker_id_method = enemy_calc_damage_info_type_def:get_method("get_AttackerID"); +local get_damage_attacker_type_method = enemy_calc_damage_info_type_def:get_method("get_DamageAttackerType"); + +local get_total_damage_method = enemy_calc_damage_info_type_def:get_method("get_TotalDamage"); +local get_physical_damage_method = enemy_calc_damage_info_type_def:get_method("get_PhysicalDamage"); +local get_elemental_damage_method = enemy_calc_damage_info_type_def:get_method("get_ElementDamage"); +local get_condition_damage_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage"); + sdk.hook(enemy_character_base_after_calc_damage_damage_side, function(args) damage_hook.update_damage(args); end, function(retval) @@ -19,12 +29,13 @@ function damage_hook.update_damage(args) return; end - local is_large_monster = enemy:call("get_isBossEnemy"); + local is_large_monster = is_boss_enemy_method:call(enemy); + if is_large_monster == nil then return; end - local dead_or_captured = enemy:call("checkDie"); + local dead_or_captured = check_die_method:call(enemy); if dead_or_captured == nil then return; end @@ -34,8 +45,8 @@ function damage_hook.update_damage(args) end local enemy_calc_damage_info = sdk.to_managed_object(args[3]); -- snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide - local attacker_id = enemy_calc_damage_info:call("get_AttackerID"); - local attacker_type = enemy_calc_damage_info:call("get_DamageAttackerType"); + local attacker_id = get_attacker_id_method:call(enemy_calc_damage_info); + local attacker_type = get_damage_attacker_type_method:call(enemy_calc_damage_info); if attacker_id >= 100 then return; @@ -47,10 +58,10 @@ function damage_hook.update_damage(args) end local damage_object = {} - damage_object.total_damage = enemy_calc_damage_info:call("get_TotalDamage"); - damage_object.physical_damage = enemy_calc_damage_info:call("get_PhysicalDamage"); - damage_object.elemental_damage = enemy_calc_damage_info:call("get_ElementDamage"); - damage_object.ailment_damage = enemy_calc_damage_info:call("get_ConditionDamage"); + damage_object.total_damage = get_total_damage_method:call(enemy_calc_damage_info); + damage_object.physical_damage = get_physical_damage_method:call(enemy_calc_damage_info); + damage_object.elemental_damage = get_elemental_damage_method:call(enemy_calc_damage_info); + damage_object.ailment_damage = get_condition_damage_method:call(enemy_calc_damage_info); -- -1 - bombs -- 0 - player diff --git a/MHR_Overlay/Damage_Meter/player.lua b/MHR_Overlay/Damage_Meter/player.lua index 95fcba0..2f7bff3 100644 --- a/MHR_Overlay/Damage_Meter/player.lua +++ b/MHR_Overlay/Damage_Meter/player.lua @@ -177,8 +177,6 @@ function player.update_display(_player) end end - - if config.current_config.damage_meter_UI.tracked_monster_types.large_monsters then if config.current_config.damage_meter_UI.tracked_damage_types.player_damage then player.merge_damage(_player.display, _player.large_monsters); @@ -215,31 +213,38 @@ function player.merge_damage(first, second) return first; end +local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager"); +local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer"); + +local get_game_object_method = sdk.find_type_definition("via.Component"):get_method("get_GameObject") +local get_transform_method = sdk.find_type_definition("via.GameObject"):get_method("get_Transform") +local get_position_method = sdk.find_type_definition("via.Transform"):get_method("get_Position") + function player.update_myself_position() if singletons.player_manager == nil then customization_menu.status = "No player manager"; return; end - local master_player = singletons.player_manager:call("findMasterPlayer") + local master_player = find_master_player_method:call(singletons.player_manager); if master_player == nil then customization_menu.status = "No master player"; return; end - local master_player_game_object = master_player:call("get_GameObject") + local master_player_game_object = get_game_object_method:call(master_player); if master_player_game_object == nil then customization_menu.status = "No master player game object"; return; end - - local master_player_transform = master_player_game_object:call("get_Transform") + + local master_player_transform = get_transform_method:call(master_player_game_object); if not master_player_transform then customization_menu.status = "No master player transform"; return; end - local master_player_position = master_player_transform:call("get_Position") + local master_player_position = get_position_method:call(master_player_transform); if master_player_position == nil then customization_menu.status = "No masterplayer position"; return; diff --git a/MHR_Overlay/Game_Handler/quest_status.lua b/MHR_Overlay/Game_Handler/quest_status.lua index 291a81a..50135b0 100644 --- a/MHR_Overlay/Game_Handler/quest_status.lua +++ b/MHR_Overlay/Game_Handler/quest_status.lua @@ -12,6 +12,9 @@ quest_status.is_training_area = false; local quest_manager_type_definition = sdk.find_type_definition("snow.QuestManager"); local on_changed_game_status = quest_manager_type_definition:get_method("onChangedGameStatus"); +local village_area_manager_type_def = sdk.find_type_definition("snow.VillageAreaManager"); +local check_current_area_training_area_method = village_area_manager_type_def:get_method("checkCurrentArea_TrainingArea"); + sdk.hook(on_changed_game_status, function(args) local new_quest_status = sdk.to_int64(args[3]); if new_quest_status ~= nil then @@ -66,7 +69,7 @@ function quest_status.update_is_training_area() return; end - local _is_training_area = singletons.village_area_manager:call("checkCurrentArea_TrainingArea"); + local _is_training_area = check_current_area_training_area_method:call(singletons.village_area_manager); if _is_training_area == nil then return; end diff --git a/MHR_Overlay/Misc/config.lua b/MHR_Overlay/Misc/config.lua index 589dd40..7f12070 100644 --- a/MHR_Overlay/Misc/config.lua +++ b/MHR_Overlay/Misc/config.lua @@ -1,11 +1,14 @@ local config = {}; local table_helpers; +local language; config.current_config = nil; config.config_file_name = "MHR Overlay/config.json"; config.default_config = { global_settings = { + language = "en-us", + module_visibility = { during_quest = { small_monster_UI = true, @@ -29,7 +32,7 @@ config.default_config = { damage_meter_UI = true } }, - + font = { family = "Consolas", size = 13, @@ -552,7 +555,7 @@ config.default_config = { }, parts = { - visibility = false, + visibility = true, offset = { x = 0, @@ -565,7 +568,7 @@ config.default_config = { }, settings = { - hide_undamaged_parts = true, + hide_undamaged_parts = false, }, sorting = { @@ -578,7 +581,7 @@ config.default_config = { text = "%s", include = { - part_name = false, + part_name = true, break_count = true }, @@ -586,7 +589,7 @@ config.default_config = { x = 15, y = 61 }, - color = 0xF1F4A3CC, + color = 0xFFf9d9ff, shadow = { visibility = true, @@ -603,7 +606,7 @@ config.default_config = { text = "HP:", offset = { x = -15, - y = 71 + y = 69 }, color = 0xF1F4A3CC, @@ -622,7 +625,7 @@ config.default_config = { text = "%.0f/%.0f", -- current_health/max_health offset = { x = 55, - y = 78 + y = 74 }, color = 0xFFFFFFFF, @@ -637,12 +640,12 @@ config.default_config = { }, percentage_label = { - visibility = false, + visibility = true, text = "%5.1f%%", offset = { x = 145, - y = 78 + y = 74 }, color = 0xFFFFFFFF, @@ -660,7 +663,7 @@ config.default_config = { visibility = true, offset = { x = 10, - y = 78 + y = 75 }, size = { @@ -669,7 +672,7 @@ config.default_config = { }, colors = { - foreground = 0xF4D0A3CC, + foreground = 0xB9ca85cc, background = 0x88000000 } } @@ -971,9 +974,7 @@ config.default_config = { }, parts = { - visibility = true, - - + visibility = false, offset = { x = 0, @@ -999,7 +1000,7 @@ config.default_config = { text = "%s", include = { - part_name = false, + part_name = true, break_count = true }, @@ -1007,7 +1008,7 @@ config.default_config = { x = 15, y = 61 }, - color = 0xF1F4A3CC, + color = 0xFFf9d9ff, shadow = { visibility = true, @@ -1024,7 +1025,7 @@ config.default_config = { text = "HP:", offset = { x = -15, - y = 71 + y = 69 }, color = 0xF1F4A3CC, @@ -1043,7 +1044,7 @@ config.default_config = { text = "%.0f/%.0f", -- current_health/max_health offset = { x = 55, - y = 78 + y = 74 }, color = 0xFFFFFFFF, @@ -1063,7 +1064,7 @@ config.default_config = { offset = { x = 145, - y = 78 + y = 74 }, color = 0xFFFFFFFF, @@ -1081,7 +1082,7 @@ config.default_config = { visibility = true, offset = { x = 10, - y = 78 + y = 75 }, size = { @@ -1090,7 +1091,7 @@ config.default_config = { }, colors = { - foreground = 0xF4D0A3CC, + foreground = 0xB9ca85cc, background = 0x88000000 } } @@ -1347,7 +1348,10 @@ end function config.init_module() table_helpers = require("MHR_Overlay.Misc.table_helpers"); + language = require("MHR_Overlay.Misc.language"); + config.load(); + language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false)); config.current_config.version = "v1.7"; end diff --git a/MHR_Overlay/Misc/language.lua b/MHR_Overlay/Misc/language.lua new file mode 100644 index 0000000..2447be4 --- /dev/null +++ b/MHR_Overlay/Misc/language.lua @@ -0,0 +1,110 @@ +local language = {}; +local table_helpers; + +language.current_language = {}; + +language.language_names = {}; +language.languages = {}; + +language.language_folder = "MHR Overlay\\languages\\"; + +language.default_language = { + parts = { + head = "Head", + neck = "Neck", + body = "Body", + torso = "Torso", + abdomen = "Abdomen", + back = "Back", + tail = "Tail", + + upper_body = "Upper Body", + lower_body = "Lower Body", + + upper_back = "Upper Back", + lower_back = "Lower Back", + + left_wing = "Wing L", + right_wing = "Wing R", + wings = "Wings", + + left_leg = "Leg L", + right_leg = "Leg R", + legs = "Legs", + left_legs = "Legs L", + right_legs = "Legs R", + + left_arm = "Arm L", + right_arm = "Arm R", + arms = "Arms", + + left_arm_ice = "Arm L (Ice)", + right_arm_ice = "Arm R (Ice)", + + left_cutwing = "Cutwing L", + right_cutwing = "Cutwing R", + + head_mud = "Head (Mud)", + tail_mud = "Tail (Mud)", + + tail_windsac = "Tail (Windsac)", + chest_windsac = "Chest (Windsac)", + back_windsac = "Back (Windsac)", + + large_mudbulb = "Large Mudbulb", + mane = "Mane", + rear = "Rear", + claw = "Claw", + dorsal_fin = "Dorsal Fin", + carapace = "Carapace", + spinning = "Spinning", + rock = "Rock" + } +}; + +function language.load() + local language_files = fs.glob([[MHR Overlay\\languages\\.*json]]); + + if language_files == nil then + return; + end + + for i, language_file in ipairs(language_files) do + local language_name = language_file:gsub(language.language_folder, ""):gsub(".json", ""); + + -- v will be something like `my-cool-mod\config-file-1.json`; + local loaded_language = json.load_file(language.language_folder .. "en-us.json"); + if loaded_language ~= nil then + log.info("[MHR Overlay] " .. language_name .. ".json loaded successfully"); + table.insert(language.language_names, language_name); + table.insert(language.languages, loaded_language); + else + log.error("[MHR Overlay] Failed to load " .. language_name .. ".json"); + end + end + + +end + +function language.save_default() + -- save current config to disk, replacing any existing file + local success = json.dump_file(language.language_folder .. "en-us.json", language.default_language); + if success then + log.info('[MHR Overlay] en-us.json saved successfully'); + else + log.error('[MHR Overlay] Failed to save en-us.json'); + end +end + + +function language.update(index) + language.current_language = table_helpers.deep_copy(language.languages[index]); +end + +function language.init_module() + table_helpers = require("MHR_Overlay.Misc.table_helpers"); + language.save_default(); + language.load(); +end + +return language; \ No newline at end of file diff --git a/MHR_Overlay/Misc/part_names.lua b/MHR_Overlay/Misc/part_names.lua new file mode 100644 index 0000000..f512274 --- /dev/null +++ b/MHR_Overlay/Misc/part_names.lua @@ -0,0 +1,476 @@ +local part_names = {}; +local language; +local table_helpers; + +part_names.list = {}; + +function part_names.init() + part_names.list = { + [98] = -- Great Izuchi+ 98 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.arms, + language.current_language.parts.tail, + }, + [54] = -- Great Baggi+ 54 + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.tail + }, + [107] = -- Kulu-Ya-Ku+ 107 boulders are cut out + { + language.current_language.parts.head, + language.current_language.parts.arms, + language.current_language.parts.body, + language.current_language.parts.tail, + language.current_language.parts.rock, + language.current_language.parts.rock + }, + [59] = -- Great Wroggi+ 59 + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.tail + }, + [60] = -- Arzuros+ 60 Unknown parts + { + language.current_language.parts.head, + language.current_language.parts.upper_body, + language.current_language.parts.arms, + language.current_language.parts.rear, + language.current_language.parts.lower_body + }, + [61] = -- Lagombi+ 61 + { + language.current_language.parts.head, + language.current_language.parts.upper_body, + language.current_language.parts.arms, + language.current_language.parts.rear, + language.current_language.parts.lower_body + }, + [62] = -- Volvidon+ 62 + { + language.current_language.parts.upper_back, + language.current_language.parts.upper_body, + language.current_language.parts.arms, + language.current_language.parts.lower_back, + language.current_language.parts.lower_body, + language.current_language.parts.spinning + }, + [91] = -- Aknosom+ 91 + { + language.current_language.parts.head, + language.current_language.parts.neck, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.body, + language.current_language.parts.tail, + language.current_language.parts.legs + }, + [47] = -- Royal Ludroth+ 47 + { + language.current_language.parts.head, + language.current_language.parts.mane, + language.current_language.parts.torso, + language.current_language.parts.left_legs, + language.current_language.parts.right_legs, + language.current_language.parts.tail + }, + [44] = -- Barroth+ 44 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.arms, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [3] = -- Khezu+ 3 + { + language.current_language.parts.head, + language.current_language.parts.neck, + language.current_language.parts.torso, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.tail + }, + [92] = -- Tetranadon+ 92 + { + language.current_language.parts.head, + language.current_language.parts.right_arm, + language.current_language.parts.left_arm, + language.current_language.parts.right_leg, + language.current_language.parts.left_leg, + language.current_language.parts.carapace, + language.current_language.parts.torso, + language.current_language.parts.tail + }, + [90] = -- Bishaten+ 90 + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.right_arm, + language.current_language.parts.left_arm, + language.current_language.parts.right_leg, + language.current_language.parts.left_leg, + language.current_language.parts.tail + }, + [102] = -- Pukei-Pukei+ 102 + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [108] = -- Jyuratodus+ 108 missing mud parts + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail, + language.current_language.parts.head_mud, + language.current_language.parts.tail_mud + }, + [4] = -- Basarios+ 4 + { + language.current_language.parts.torso, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.head, + language.current_language.parts.abdomen, + language.current_language.parts.tail + }, + [93] = -- Somnacanth+ 93 + { + language.current_language.parts.body, + language.current_language.parts.head, + language.current_language.parts.neck, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [1] = -- Rathian+ 1 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [42] = -- Barioth+ 42 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [109] = -- Tobi-Kadachi+ 109 + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.back, + language.current_language.parts.arms, + language.current_language.parts.legs, + language.current_language.parts.tail + }, + [89] = -- Magnamalo+ 89 + { + language.current_language.parts.head, + language.current_language.parts.torso, + language.current_language.parts.right_arm, + language.current_language.parts.left_arm, + language.current_language.parts.back, + language.current_language.parts.tail, + language.current_language.parts.legs + }, + [100] = -- Anjanath+ 100 (missing parts) + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing + }, + [37] = -- Nargacuga+ 37 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_cutwing, + language.current_language.parts.tail, + language.current_language.parts.arms, + language.current_language.parts.left_leg, + language.current_language.parts.right_cutwing, + language.current_language.parts.right_leg + }, + [82] = -- Mizutsune+ 82 + { + language.current_language.parts.head, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.body, + language.current_language.parts.tail, + language.current_language.parts.dorsal_fin + }, + [97] = -- Goss Harag+ 97 + { + + language.current_language.parts.head, + language.current_language.parts.back, + language.current_language.parts.left_arm, + language.current_language.parts.left_arm_ice, + language.current_language.parts.right_arm, + language.current_language.parts.right_arm_ice, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.body + }, + [2] = -- Rathalos+ 2 + { + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.neck, + language.current_language.parts.head, + language.current_language.parts.tail + }, + [95] = -- Almudron+ 95 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail, + language.current_language.parts.large_mudbulb, + language.current_language.parts.large_mudbulb, + }, + [57] = -- Zinogre+ 57 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.back, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [32] = -- Tigrex+ 32 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [7] = -- Diablos+ 7 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [94] = -- Rakna-Kadaki+ 94 (?) + { + language.current_language.parts.head, + language.current_language.parts.claw, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.abdomen, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm -- mb abdomen_cocooned) + }, + [24] = -- Kushala Daora+ 24 + { + language.current_language.parts.head, + language.current_language.parts.back, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.wings, + language.current_language.parts.tail + }, + [25] = -- Chameleos+ 25 + { + language.current_language.parts.head, + language.current_language.parts.abdomen, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail, + language.current_language.parts.wings + }, + [27] = -- Teostra+ 27 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.arms, + language.current_language.parts.legs, + language.current_language.parts.wings, + language.current_language.parts.tail + }, + [23] = -- Rajang+ 23 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [118] = -- Bazelgeuse+ 118 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.legs, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.tail + }, + [96] = -- Wind Serpent Ibushi+ 96 (missing parts) + { + language.current_language.parts.head, + language.current_language.parts.right_arm, + language.current_language.parts.left_arm, + language.current_language.parts.torso, + language.current_language.parts.back, + language.current_language.parts.tail, + language.current_language.parts.tail_windsac, + language.current_language.parts.chest_windsac, + language.current_language.parts.back_windsac + }, + [99] = -- Thunder Serpent Narwa+ 99 (no parts?) + {}, + [1379] = -- Narwa the Allmother+ 1379 (no parts?) + {}, + [1366] = -- Crimson Glow Valstrax+ 1366 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.tail, + language.current_language.parts.legs, + language.current_language.parts.chest_windsac + }, + [1852] = -- Apex Arzuros+ 1852 + { + language.current_language.parts.head, + language.current_language.parts.upper_body, + language.current_language.parts.arms, + language.current_language.parts.rear, + language.current_language.parts.lower_body + }, + [1793] = -- Apex Rathian+ 1793 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [1874] = -- Apex Mizutsune+ 1874 + { + language.current_language.parts.head, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.body, + language.current_language.parts.tail, + language.current_language.parts.dorsal_fin + }, + [1794] = -- Apex Rathalos+ 1794 + { + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.neck, + language.current_language.parts.head, + language.current_language.parts.tail + }, + [1799] = -- Apex Diablos+ 1799 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.left_wing, + language.current_language.parts.right_wing, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + }, + [1849] = -- Apex Zinogre+ 1849 + { + language.current_language.parts.head, + language.current_language.parts.body, + language.current_language.parts.back, + language.current_language.parts.left_arm, + language.current_language.parts.right_arm, + language.current_language.parts.left_leg, + language.current_language.parts.right_leg, + language.current_language.parts.tail + } + }; +end + +function part_names.get_part_name(monster_id, part_id) + + local monster_parts = part_names.list[monster_id]; + if monster_parts == nil then + return ""; + end + + local part_name = monster_parts[part_id]; + if part_name == nil then + return ""; + end + + return part_name; +end + +function part_names.init_module() + language = require("MHR_Overlay.Misc.language"); + table_helpers = require("MHR_Overlay.Misc.table_helpers"); + + part_names.init(); +end + +return part_names; \ No newline at end of file diff --git a/MHR_Overlay/Misc/table_helpers.lua b/MHR_Overlay/Misc/table_helpers.lua index 9d905c4..bffcc4a 100644 --- a/MHR_Overlay/Misc/table_helpers.lua +++ b/MHR_Overlay/Misc/table_helpers.lua @@ -62,82 +62,18 @@ function table_helpers.merge(...) end function table_helpers.tostring(table) - local cache, stack, output = {}, {}, {}; - local depth = 1; - local output_string = "{\n"; - - while true do - local size = 0; - for key, value in pairs(table) do - size = size + 1; - end - - local current_index = 1; - for key, value in pairs(table) do - if (cache[table] == nil) or (current_index >= cache[table]) then - - if (string.find(output_string, "}", output_string:len())) then - output_string = output_string .. ",\n"; - elseif not (string.find(output_string, "\n",output_string:len())) then - output_string = output_string .. "\n"; - end - - -- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings - table.insert(output, output_string); - output_string = ""; - - local key; - if (type(key) == "number" or type(key) == "boolean") then - key = "[" .. tostring(key) .. "]"; - else - key = "['" .. tostring(key) .. "']"; - end - - if (type(value) == "number" or type(value) == "boolean") then - output_string = output_string .. string.rep('\t', depth) .. key .. " = " .. tostring(value); - elseif (type(value) == "table") then - output_string = output_string .. string.rep('\t', depth) .. key .. " = {\n"; - table.insert(stack, table); - table.insert(stack, value); - cache[table] = current_index + 1; - break - else - output_string = output_string .. string.rep('\t', depth) .. key .. " = '" .. tostring(value) .. "'"; - end - - if (current_index == size) then - output_string = output_string .. "\n" .. string.rep('\t', depth - 1) .. "}"; - else - output_string = output_string .. ","; - end - else - -- close the table - if (current_index == size) then - output_string = output_string .. "\n" .. string.rep('\t', depth - 1) .. "}"; - end + if type(table) == 'table' then + local s = '{ \n'; + for k,v in pairs(table) do + if type(k) ~= 'number' then + k = '"' .. k .. '"'; end - - current_index = current_index + 1; - end - - if (size == 0) then - output_string = output_string .. "\n" .. string.rep('\t', depth - 1) .. "}"; - end - - if (#stack > 0) then - table = stack[#stack]; - stack[#stack] = nil; - depth = cache[table] == nil and depth + 1 or depth - 1; - else - break; + s = s .. '\t['..k..'] = ' .. table_helpers.tostring(v) .. ',\n'; end + return s .. '} \n'; + else + return tostring(table); end - - -- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings - table.insert(output, output_string); - output_string = table.concat(output); - - return output_string; end function table_helpers.init_module() diff --git a/MHR_Overlay/Monsters/body_part.lua b/MHR_Overlay/Monsters/body_part.lua index 537b653..59ef8a1 100644 --- a/MHR_Overlay/Monsters/body_part.lua +++ b/MHR_Overlay/Monsters/body_part.lua @@ -9,10 +9,11 @@ local rage_UI_entity; local body_part_UI_entity; local screen; local drawing; +local part_names; body_part.list = {}; -function body_part.new(REpart, id) +function body_part.new(REpart, name, id) local part = {}; part.REpart = REpart; @@ -22,7 +23,7 @@ function body_part.new(REpart, id) part.max_health = 99999; part.health_percentage = 0; - part.name = "??"; + part.name = name; part.break_count = 0; body_part.init_dynamic_UI(part); @@ -90,6 +91,7 @@ function body_part.init_module() body_part_UI_entity = require("MHR_Overlay.UI.UI_Entities.body_part_UI_entity"); screen = require("MHR_Overlay.Game_Handler.screen"); drawing = require("MHR_Overlay.UI.drawing"); + part_names = require("MHR_Overlay.Misc.part_names"); end return body_part; \ No newline at end of file diff --git a/MHR_Overlay/Monsters/large_monster.lua b/MHR_Overlay/Monsters/large_monster.lua index cc8b121..5bd7b33 100644 --- a/MHR_Overlay/Monsters/large_monster.lua +++ b/MHR_Overlay/Monsters/large_monster.lua @@ -9,6 +9,7 @@ local rage_UI_entity; local screen; local drawing; local body_part; +local part_names; large_monster.list = {}; @@ -213,7 +214,7 @@ local anger_param_get_timer_method = anger_param_type:get_method("get_Timer") local get_timer_anger_method = anger_param_type:get_method("get_TimerAnger") local get_count_anger_method = anger_param_type:get_method("get_CountAnger") -local get_gameobject_method = sdk.find_type_definition("via.Component"):get_method("get_GameObject") +local get_game_object_method = sdk.find_type_definition("via.Component"):get_method("get_GameObject") local get_transform_method = sdk.find_type_definition("via.GameObject"):get_method("get_Transform") local get_position_method = sdk.find_type_definition("via.Transform"):get_method("get_Position") @@ -230,7 +231,7 @@ function large_monster.update_position(enemy) -- as these are pretty much guaranteed to stay constant -- as long as the enemy is alive if monster.game_object == nil then - monster.game_object = get_gameobject_method:call(enemy) + monster.game_object = get_game_object_method:call(enemy) if monster.game_object == nil then customization_menu.status = "No enemy game object"; return; @@ -354,10 +355,6 @@ function large_monster.update(enemy) goto continue; end - if part_health == last_REpart_health then - break; - end - local part_max_health = REpart:call("get_Max"); if part_max_health == nil or part_max_health <= 0 then goto continue; @@ -365,8 +362,12 @@ function large_monster.update(enemy) local part = monster.parts[REpart]; if part == nil then - part = body_part.new(REpart, part_id); - monster.parts[REpart] = part; + local part_name = part_names.get_part_name(monster.id, part_id); + + if part_name ~= "" then + part = body_part.new(REpart, part_name, part_id); + monster.parts[REpart] = part; + end end body_part.update(part, part_health, part_max_health); @@ -473,7 +474,7 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale) 100 * monster.big_border, 100 * monster.king_border); end - drawing.draw_label(monster.dynamic_name_label, position_on_screen, opacity_scale, monster_name_text .. " " .. tostring(monster.id)); + 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); stamina_UI_entity.draw(monster, monster.stamina_dynamic_UI, position_on_screen, opacity_scale); @@ -550,7 +551,7 @@ function large_monster.draw_static(monster, position_on_screen, opacity_scale) 100 * monster.big_border, 100 * monster.king_border); end - drawing.draw_label(monster.static_name_label, position_on_screen, opacity_scale, monster_name_text .. " " .. tostring(monster.id)); + drawing.draw_label(monster.static_name_label, position_on_screen, opacity_scale, monster_name_text); health_UI_entity.draw(monster, monster.health_static_UI, position_on_screen, opacity_scale); stamina_UI_entity.draw(monster, monster.stamina_static_UI, position_on_screen, opacity_scale); @@ -624,6 +625,7 @@ function large_monster.init_module() rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity"); screen = require("MHR_Overlay.Game_Handler.screen"); drawing = require("MHR_Overlay.UI.drawing"); + part_names = require("MHR_Overlay.Misc.part_names"); end return large_monster; \ No newline at end of file diff --git a/MHR_Overlay/Monsters/monster_hook.lua b/MHR_Overlay/Monsters/monster_hook.lua index 37aca49..6719a4b 100644 --- a/MHR_Overlay/Monsters/monster_hook.lua +++ b/MHR_Overlay/Monsters/monster_hook.lua @@ -5,13 +5,14 @@ local large_monster; local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); local enemy_character_base_type_def_update_method = enemy_character_base_type_def:get_method("update"); +local is_boss_enemy_method = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"):get_method("get_isBossEnemy"); + sdk.hook(enemy_character_base_type_def_update_method, function(args) monster.update_monster(sdk.to_managed_object(args[2])); end, function(retval) return retval; end); -local is_boss_enemy_method = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"):get_method("get_isBossEnemy"); local tick_count = 0 local last_update_tick = 0 local recorded_monsters = {} @@ -30,21 +31,18 @@ local MAX_UPDATES_PER_TICK = 2 -- the reason for this is that the hooks on all the monsters' update functions -- causes a HUGE performance hit (adds ~3+ ms to UpdateBehavior and frame time) re.on_pre_application_entry("UpdateBehavior", function() - tick_count = tick_count + 1 - updates_this_tick = 0 + tick_count = tick_count + 1; + updates_this_tick = 0; - if num_known_monsters ~= 0 and - num_updated_monsters >= num_known_monsters or - tick_count >= num_known_monsters * 2 - then - recorded_monsters = {} - updated_monsters = {} - known_big_monsters = {} - last_update_tick = 0 - tick_count = 0 - num_known_monsters = 0 - num_updated_monsters = 0 - updates_this_tick = 0 + if num_known_monsters ~= 0 and num_updated_monsters >= num_known_monsters or tick_count >= num_known_monsters * 2 then + recorded_monsters = {}; + updated_monsters = {}; + known_big_monsters = {}; + last_update_tick = 0; + tick_count = 0; + num_known_monsters = 0; + num_updated_monsters = 0; + updates_this_tick = 0; end end) diff --git a/MHR_Overlay/UI/Modules/damage_meter_UI.lua b/MHR_Overlay/UI/Modules/damage_meter_UI.lua index 055541f..da78856 100644 --- a/MHR_Overlay/UI/Modules/damage_meter_UI.lua +++ b/MHR_Overlay/UI/Modules/damage_meter_UI.lua @@ -9,6 +9,28 @@ local drawing; damage_meter_UI.last_displayed_players = {}; +local lobby_manager_type_def = sdk.find_type_definition("snow.LobbyManager"); +local my_hunter_info_field = lobby_manager_type_def:get_field("_myHunterInfo"); +local myself_index_field = lobby_manager_type_def:get_field("_myselfIndex"); +local myself_quest_index_field = lobby_manager_type_def:get_field("_myselfQuestIndex"); + +local quest_hunter_info_field = lobby_manager_type_def:get_field("_questHunterInfo"); + +local my_hunter_info_type_def = my_hunter_info_field:get_type(); +local name_field = my_hunter_info_type_def:get_field("_name"); + +local quest_hunter_info_type_def = quest_hunter_info_field:get_type(); +local get_count_method = quest_hunter_info_type_def:get_method("get_Count"); +local get_item_method = quest_hunter_info_type_def:get_method("get_Item"); + +local hunter_info_type_def = sdk.find_type_definition("snow.LobbyManager.HunterInfo"); +local member_index_field = hunter_info_type_def:get_field("_memberIndex"); +local hunter_rank_field = hunter_info_type_def:get_field("_hunterRank"); +--local name_field = hunter_info_type_def:get_field("_name"); + +local progress_manager_type_def = sdk.find_type_definition("snow.progress.ProgressManager"); +local get_hunter_rank_method = progress_manager_type_def:get_method("get_HunterRank"); + function damage_meter_UI.draw() if player.total.display.total_damage == 0 and config.current_config.damage_meter_UI.settings.hide_module_if_total_damage_is_zero then @@ -24,40 +46,38 @@ function damage_meter_UI.draw() end -- myself player - local myself_player_info = singletons.lobby_manager:get_field("_myHunterInfo"); + local myself_player_info = my_hunter_info_field:get_data(singletons.lobby_manager); if myself_player_info == nil then customization_menu.status = "No myself player info list"; return; end - local myself_player_name = myself_player_info:get_field("_name"); + local myself_player_name = name_field:get_data(myself_player_info); if myself_player_name == nil then customization_menu.status = "No myself player name"; return; end if quest_status.is_online then - player.myself_id = singletons.lobby_manager:get_field("_myselfQuestIndex"); + player.myself_id = myself_quest_index_field:get_data(singletons.lobby_manager); if player.myself_id == nil then customization_menu.status = "No myself player id"; return; end else - player.myself_id = singletons.lobby_manager:get_field("_myselfIndex"); + player.myself_id = myself_index_field:get_data(singletons.lobby_manager); if player.myself_id == nil then customization_menu.status = "No myself player id"; return; end end - local myself_hunter_rank = singletons.progress_manager:call("get_HunterRank"); + local myself_hunter_rank = get_hunter_rank_method:call(singletons.progress_manager); if myself_hunter_rank == nil then customization_menu.status = "No myself hunter rank"; myself_hunter_rank = 0; end - x = singletons.lobby_manager:get_field("_myselfIndex"); - if player.list[player.myself_id] == nil then player.list[player.myself_id] = player.new(player.myself_id, myself_player_name, myself_hunter_rank); player.myself = player.list[player.myself_id]; @@ -71,12 +91,12 @@ function damage_meter_UI.draw() quest_players = damage_meter_UI.last_displayed_players; else -- other players - local player_info_list = singletons.lobby_manager:get_field("_questHunterInfo"); + local player_info_list = quest_hunter_info_field:get_data(singletons.lobby_manager); if player_info_list == nil then customization_menu.status = "No player info list"; end - local count = player_info_list:call("get_Count"); + local count = get_count_method:call(player_info_list); if count == nil then customization_menu.status = "No player info list count"; return; @@ -84,17 +104,17 @@ function damage_meter_UI.draw() for i = 0, count - 1 do - local player_info = player_info_list:call("get_Item", i); + local player_info = get_item_method:call(player_info_list, i); if player_info == nil then goto continue end - local player_id = player_info:get_field("_memberIndex"); + local player_id = member_index_field:get_data(player_info) if player_id == nil then goto continue end - local player_hunter_rank = player_info:get_field("_hunterRank"); + local player_hunter_rank = hunter_rank_field:get_data(player_info); if player_hunter_rank == nil then goto continue end @@ -104,7 +124,7 @@ function damage_meter_UI.draw() goto continue end - local player_name = player_info:get_field("_name"); + local player_name = name_field:get_data(player_info); if player_name == nil then goto continue end diff --git a/MHR_Overlay/UI/Modules/large_monster_UI.lua b/MHR_Overlay/UI/Modules/large_monster_UI.lua index b00b72b..7d8b9ed 100644 --- a/MHR_Overlay/UI/Modules/large_monster_UI.lua +++ b/MHR_Overlay/UI/Modules/large_monster_UI.lua @@ -11,6 +11,10 @@ local health_UI_entity; local stamina_UI_entity; local rage_UI_entity; +local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager"); +local get_boss_enemy_count_method = enemy_manager_type_def:get_method("getBossEnemyCount"); +local get_boss_enemy_method = enemy_manager_type_def:get_method("getBossEnemy"); + function large_monster_UI.draw(dynamic_enabled, static_enabled) if singletons.enemy_manager == nil then return; @@ -18,13 +22,13 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled) local displayed_monsters = {}; - local enemy_count = singletons.enemy_manager:call("getBossEnemyCount"); + local enemy_count = get_boss_enemy_count_method:call(singletons.enemy_manager); if enemy_count == nil then return; end for i = 0, enemy_count - 1 do - local enemy = singletons.enemy_manager:call("getBossEnemy", i); + local enemy = get_boss_enemy_method:call(singletons.enemy_manager, i); if enemy == nil then customization_menu.status = "No enemy"; break diff --git a/MHR_Overlay/UI/Modules/small_monster_UI.lua b/MHR_Overlay/UI/Modules/small_monster_UI.lua index 8e35b69..46cea22 100644 --- a/MHR_Overlay/UI/Modules/small_monster_UI.lua +++ b/MHR_Overlay/UI/Modules/small_monster_UI.lua @@ -10,6 +10,10 @@ local table_helpers; local health_UI_entity; local stamina_UI_entity; +local enemy_manager_type_def = sdk.find_type_definition("snow.enemy.EnemyManager"); +local get_zako_enemy_count_method = enemy_manager_type_def:get_method("getZakoEnemyCount"); +local get_zako_enemy_method = enemy_manager_type_def:get_method("getZakoEnemy"); + function small_monster_UI.draw() if singletons.enemy_manager == nil then return; @@ -17,14 +21,14 @@ function small_monster_UI.draw() local displayed_monsters = {}; - local enemy_count = singletons.enemy_manager:call("getZakoEnemyCount"); + local enemy_count = get_zako_enemy_count_method:call(singletons.enemy_manager); if enemy_count == nil then customization_menu.status = "No enemy count"; return; end for i = 0, enemy_count - 1 do - local enemy = singletons.enemy_manager:call("getZakoEnemy", i); + local enemy = get_zako_enemy_method:call(singletons.enemy_manager, i); if enemy == nil then customization_menu.status = "No enemy"; break diff --git a/MHR_Overlay/UI/Modules/time_UI.lua b/MHR_Overlay/UI/Modules/time_UI.lua index e07b6b6..18011b1 100644 --- a/MHR_Overlay/UI/Modules/time_UI.lua +++ b/MHR_Overlay/UI/Modules/time_UI.lua @@ -5,20 +5,22 @@ 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 quest_time_elapsed_minutes = singletons.quest_manager:call("getQuestElapsedTimeMin"); + 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 - local quest_time_total_elapsed_seconds = singletons.quest_manager:call("getQuestElapsedTimeSec"); + 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; diff --git a/MHR_Overlay/UI/UI_Entities/health_UI_entity.lua b/MHR_Overlay/UI/UI_Entities/health_UI_entity.lua index 0351c99..ea0d30b 100644 --- a/MHR_Overlay/UI/UI_Entities/health_UI_entity.lua +++ b/MHR_Overlay/UI/UI_Entities/health_UI_entity.lua @@ -16,7 +16,6 @@ end function health_UI_entity.draw(monster, health_UI, position_on_screen, opacity_scale) if not health_UI.visibility then - x = health_UI.visibility return; end diff --git a/MHR_Overlay/UI/customization_menu.lua b/MHR_Overlay/UI/customization_menu.lua index 21815fb..c14b6da 100644 --- a/MHR_Overlay/UI/customization_menu.lua +++ b/MHR_Overlay/UI/customization_menu.lua @@ -6,12 +6,15 @@ local screen; local player; local large_monster; local small_monster; +local language; customization_menu.is_opened = false; customization_menu.status = "OK"; customization_menu.window_flags = 0x10120; customization_menu.color_picker_flags = 327680; +customization_menu.selected_language_index = 1; + customization_menu.orientation_types = {"Horizontal", "Vertical"}; customization_menu.anchor_types = {"Top-left", "Top-Right", "Bottom-Left", "Bottom-Right"}; @@ -35,25 +38,25 @@ customization_menu.fonts = {"Arial", "Arial Black", "Bahnschrift", "Calibri", "C "Segoe UI Symbol", "SimSun", "Sitka", "Sylfaen", "Symbol", "Tahoma", "Times New Roman", "Trebuchet MS", "Verdana", "Webdings", "Wingdings", "Yu Gothic"}; -customization_menu.small_monster_UI_orientation_index = 0; -customization_menu.small_monster_UI_sorting_type_index = 0; +customization_menu.small_monster_UI_orientation_index = 1; +customization_menu.small_monster_UI_sorting_type_index = 1; -customization_menu.large_monster_UI_orientation_index = 0; -customization_menu.large_monster_UI_sorting_type_index = 0; +customization_menu.large_monster_UI_orientation_index = 1; +customization_menu.large_monster_UI_sorting_type_index = 1; -customization_menu.large_monster_dynamic_UI_parts_sorting_type_index = 0; -customization_menu.large_monster_static_UI_parts_sorting_type_index = 0; +customization_menu.large_monster_dynamic_UI_parts_sorting_type_index = 1; +customization_menu.large_monster_static_UI_parts_sorting_type_index = 1; -customization_menu.damage_meter_UI_orientation_index = 0; -customization_menu.damage_meter_UI_sorting_type_index = 0; -customization_menu.damage_meter_UI_highlighted_bar_index = 0; -customization_menu.damage_meter_UI_damage_bar_relative_index = 0; -customization_menu.damage_meter_UI_my_damage_bar_location_index = 0; +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.small_monster_UI_anchor_index = 0; -customization_menu.large_monster_UI_anchor_index = 0; -customization_menu.time_UI_anchor_index = 0; -customization_menu.damage_meter_UI_anchor_index = 0; +customization_menu.small_monster_UI_anchor_index = 1; +customization_menu.large_monster_UI_anchor_index = 1; +customization_menu.time_UI_anchor_index = 1; +customization_menu.damage_meter_UI_anchor_index = 1; customization_menu.selected_font_index = 9; @@ -65,10 +68,12 @@ function customization_menu.init() customization_menu.monster_UI_sorting_types, config.current_config.large_monster_UI.static.sorting.type, 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); + customization_menu.large_monster_UI_parts_sorting_types, + config.current_config.large_monster_UI.dynamic.parts.sorting.type, false); - customization_menu.large_monster_static_UI_parts_sorting_type_index = table_helpers.find_index( - customization_menu.large_monster_UI_parts_sorting_types, config.current_config.large_monster_UI.static.parts.sorting.type, false); + customization_menu.large_monster_static_UI_parts_sorting_type_index = table_helpers.find_index( + customization_menu.large_monster_UI_parts_sorting_types, + config.current_config.large_monster_UI.static.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); @@ -92,16 +97,16 @@ function customization_menu.init() config.current_config.global_settings.font.family, false); customization_menu.small_monster_UI_anchor_index = table_helpers.find_index(customization_menu.anchor_types, - config.current_config.small_monster_UI.static_position.anchor, false); + config.current_config.small_monster_UI.static_position.anchor, false); customization_menu.large_monster_UI_anchor_index = table_helpers.find_index(customization_menu.anchor_types, - config.current_config.large_monster_UI.static.position.anchor, false); + config.current_config.large_monster_UI.static.position.anchor, false); customization_menu.time_UI_anchor_index = table_helpers.find_index(customization_menu.anchor_types, - config.current_config.time_UI.position.anchor, false); - + config.current_config.time_UI.position.anchor, false); + customization_menu.damage_meter_UI_anchor_index = table_helpers.find_index(customization_menu.anchor_types, - config.current_config.damage_meter_UI.position.anchor, false); + config.current_config.damage_meter_UI.position.anchor, false); end function customization_menu.draw() @@ -123,7 +128,7 @@ function customization_menu.draw() config_changed = config_changed or changed; changed, config.current_config.large_monster_UI.dynamic.enabled = - imgui.checkbox("Large Monster Dynamic UI", config.current_config.large_monster_UI.dynamic.enabled); + imgui.checkbox("Large Monster Dynamic UI", config.current_config.large_monster_UI.dynamic.enabled); config_changed = config_changed or changed; imgui.same_line(); @@ -143,6 +148,27 @@ function customization_menu.draw() end if imgui.tree_node("Global Settings") then + changed, customization_menu.selected_language_index = imgui.combo("Language", customization_menu.selected_language_index, language.language_names); + config_changed = config_changed or changed; + if changed then + config.current_config.global_settings.language = language.language_names[customization_menu.selected_font_index]; + + language.update(customization_menu.selected_language_index); + + for _, monster in pairs(small_monster.list) do + small_monster.init_UI(monster); + end + + for _, monster in pairs(large_monster.list) do + large_monster.init_dynamic_UI(monster); + large_monster.init_static_UI(monster); + end + + for _, _player in pairs(player.list) do + player.init_UI(_player); + end + end + if imgui.tree_node("Module Visibility on Different Screens") then if imgui.tree_node("During Quest") then @@ -150,13 +176,15 @@ function customization_menu.draw() "Small Monster UI", config.current_config.global_settings.module_visibility.during_quest.small_monster_UI); config_changed = config_changed or changed; - changed, config.current_config.global_settings.module_visibility.during_quest.large_monster_dynamic_UI = imgui.checkbox( - "Large Monster Dynamic UI", config.current_config.global_settings.module_visibility.during_quest.large_monster_dynamic_UI); + changed, config.current_config.global_settings.module_visibility.during_quest.large_monster_dynamic_UI = + imgui.checkbox("Large Monster Dynamic UI", + config.current_config.global_settings.module_visibility.during_quest.large_monster_dynamic_UI); config_changed = config_changed or changed; imgui.same_line(); - changed, config.current_config.global_settings.module_visibility.during_quest.large_monster_static_UI = imgui.checkbox( - "Large Monster Static UI", config.current_config.global_settings.module_visibility.during_quest.large_monster_static_UI); + changed, config.current_config.global_settings.module_visibility.during_quest.large_monster_static_UI = + imgui.checkbox("Large Monster Static UI", + config.current_config.global_settings.module_visibility.during_quest.large_monster_static_UI); config_changed = config_changed or changed; changed, config.current_config.global_settings.module_visibility.during_quest.time_UI = imgui.checkbox("Time UI", @@ -172,36 +200,45 @@ function customization_menu.draw() end if imgui.tree_node("Quest Summary Screen") then - changed, config.current_config.global_settings.module_visibility.quest_summary_screen.small_monster_UI = imgui.checkbox( - "Small Monster UI", config.current_config.global_settings.module_visibility.quest_summary_screen.small_monster_UI); + changed, config.current_config.global_settings.module_visibility.quest_summary_screen.small_monster_UI = + imgui.checkbox("Small Monster UI", + config.current_config.global_settings.module_visibility.quest_summary_screen.small_monster_UI); config_changed = config_changed or changed; - changed, config.current_config.global_settings.module_visibility.quest_summary_screen.large_monster_dynamic_UI = imgui.checkbox( - "Large Monster Dynamic UI", config.current_config.global_settings.module_visibility.quest_summary_screen.large_monster_dynamic_UI); + changed, config.current_config.global_settings.module_visibility.quest_summary_screen.large_monster_dynamic_UI = + imgui.checkbox("Large Monster Dynamic UI", config.current_config.global_settings.module_visibility + .quest_summary_screen.large_monster_dynamic_UI); config_changed = config_changed or changed; imgui.same_line(); - changed, config.current_config.global_settings.module_visibility.quest_summary_screen.large_monster_static_UI = imgui.checkbox("Large Monster Static UI", config.current_config.global_settings.module_visibility.quest_summary_screen.large_monster_static_UI); + changed, config.current_config.global_settings.module_visibility.quest_summary_screen.large_monster_static_UI = + imgui.checkbox("Large Monster Static UI", config.current_config.global_settings.module_visibility + .quest_summary_screen.large_monster_static_UI); config_changed = config_changed or changed; - changed, config.current_config.global_settings.module_visibility.quest_summary_screen.time_UI = imgui.checkbox("Time UI", config.current_config.global_settings.module_visibility.quest_summary_screen.time_UI); + changed, config.current_config.global_settings.module_visibility.quest_summary_screen.time_UI = imgui.checkbox( + "Time UI", config.current_config.global_settings.module_visibility.quest_summary_screen.time_UI); config_changed = config_changed or changed; imgui.same_line(); - changed, config.current_config.global_settings.module_visibility.quest_summary_screen.damage_meter_UI = imgui.checkbox("Damage Meter UI", config.current_config.global_settings.module_visibility.quest_summary_screen.damage_meter_UI); + changed, config.current_config.global_settings.module_visibility.quest_summary_screen.damage_meter_UI = + imgui.checkbox("Damage Meter UI", + config.current_config.global_settings.module_visibility.quest_summary_screen.damage_meter_UI); config_changed = config_changed or changed; imgui.tree_pop(); end if imgui.tree_node("Training Area") then - changed, config.current_config.global_settings.module_visibility.training_area.large_monster_dynamic_UI = imgui.checkbox( - "Large Monster Dynamic UI", config.current_config.global_settings.module_visibility.training_area.large_monster_dynamic_UI); + changed, config.current_config.global_settings.module_visibility.training_area.large_monster_dynamic_UI = + imgui.checkbox("Large Monster Dynamic UI", + config.current_config.global_settings.module_visibility.training_area.large_monster_dynamic_UI); config_changed = config_changed or changed; imgui.same_line(); - changed, config.current_config.global_settings.module_visibility.training_area.large_monster_static_UI = imgui.checkbox( - "Large Monster Static UI", config.current_config.global_settings.module_visibility.training_area.large_monster_static_UI); + changed, config.current_config.global_settings.module_visibility.training_area.large_monster_static_UI = + imgui.checkbox("Large Monster Static UI", + config.current_config.global_settings.module_visibility.training_area.large_monster_static_UI); config_changed = config_changed or changed; changed, config.current_config.global_settings.module_visibility.training_area.damage_meter_UI = imgui.checkbox( @@ -249,8 +286,9 @@ function customization_menu.draw() config_changed = config_changed or changed; if imgui.tree_node("Settings") then - changed, customization_menu.small_monster_UI_orientation_index = imgui.combo("Static Orientation", - customization_menu.small_monster_UI_orientation_index, customization_menu.orientation_types); + changed, customization_menu.small_monster_UI_orientation_index = + imgui.combo("Static Orientation", customization_menu.small_monster_UI_orientation_index, + customization_menu.orientation_types); config_changed = config_changed or changed; if changed then config.current_config.small_monster_UI.settings.orientation = @@ -317,7 +355,7 @@ function customization_menu.draw() config_changed = config_changed or changed; changed, customization_menu.small_monster_UI_anchor_index = imgui.combo("Anchor", - customization_menu.small_monster_UI_anchor_index, customization_menu.anchor_types); + customization_menu.small_monster_UI_anchor_index, customization_menu.anchor_types); config_changed = config_changed or changed; if changed then config.current_config.small_monster_UI.static_position.anchor = @@ -422,8 +460,8 @@ function customization_menu.draw() end if imgui.tree_node("Health") then - changed, config.current_config.small_monster_UI.health.visibility = imgui.checkbox("Visible", - config.current_config.small_monster_UI.health.visibility); + changed, config.current_config.small_monster_UI.health.visibility = + imgui.checkbox("Visible", config.current_config.small_monster_UI.health.visibility); config_changed = config_changed or changed; small_monster_UI_changed = small_monster_UI_changed or changed; @@ -689,8 +727,8 @@ function customization_menu.draw() end if imgui.tree_node("Stamina (Pointless: small monsters don't get tired)") then - changed, config.current_config.small_monster_UI.stamina.visibility = imgui.checkbox("Visible", - config.current_config.small_monster_UI.stamina.visibility); + changed, config.current_config.small_monster_UI.stamina.visibility = + imgui.checkbox("Visible", config.current_config.small_monster_UI.stamina.visibility); config_changed = config_changed or changed; small_monster_UI_changed = small_monster_UI_changed or changed; @@ -980,7 +1018,8 @@ function customization_menu.draw() large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; changed, config.current_config.large_monster_UI.dynamic.settings.max_distance = - imgui.drag_float("Max Distance", config.current_config.large_monster_UI.dynamic.settings.max_distance, 1, 0, 10000, "%.0f"); + imgui.drag_float("Max Distance", config.current_config.large_monster_UI.dynamic.settings.max_distance, 1, 0, 10000, + "%.0f"); config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; @@ -1113,7 +1152,7 @@ function customization_menu.draw() if imgui.tree_node("Health") then changed, config.current_config.large_monster_UI.dynamic.health.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.dynamic.health.visibility); + config.current_config.large_monster_UI.dynamic.health.visibility); config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; @@ -1401,7 +1440,7 @@ function customization_menu.draw() if imgui.tree_node("Stamina") then changed, config.current_config.large_monster_UI.dynamic.stamina.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.dynamic.stamina.visibility); + config.current_config.large_monster_UI.dynamic.stamina.visibility); config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; @@ -1672,7 +1711,7 @@ function customization_menu.draw() if imgui.tree_node("Rage") then changed, config.current_config.large_monster_UI.dynamic.rage.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.dynamic.rage.visibility); + config.current_config.large_monster_UI.dynamic.rage.visibility); config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; @@ -1940,10 +1979,10 @@ function customization_menu.draw() end if imgui.tree_node("Body Parts") then - changed, config.current_config.large_monster_UI.dynamic.parts.visibility = imgui.checkbox( - "Visible", config.current_config.large_monster_UI.dynamic.parts.visibility); - 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.parts.visibility = imgui.checkbox("Visible", + config.current_config.large_monster_UI.dynamic.parts.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.large_monster_UI.dynamic.parts.offset.x = imgui.drag_float("X", @@ -1974,17 +2013,18 @@ function customization_menu.draw() end if imgui.tree_node("Settings") then - changed, config.current_config.large_monster_UI.dynamic.parts.settings.hide_undamaged_parts = - imgui.checkbox("Hide Undamaged Parts", config.current_config.large_monster_UI.dynamic.parts.settings.hide_undamaged_parts); + changed, config.current_config.large_monster_UI.dynamic.parts.settings.hide_undamaged_parts = imgui.checkbox( + "Hide Undamaged Parts", config.current_config.large_monster_UI.dynamic.parts.settings.hide_undamaged_parts); 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("Sorting") then changed, customization_menu.large_monster_dynamic_UI_parts_sorting_type_index = imgui.combo("Type", - customization_menu.large_monster_dynamic_UI_parts_sorting_type_index, customization_menu.large_monster_UI_parts_sorting_types); + customization_menu.large_monster_dynamic_UI_parts_sorting_type_index, + customization_menu.large_monster_UI_parts_sorting_types); config_changed = config_changed or changed; large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; if changed then @@ -1992,11 +2032,11 @@ function customization_menu.draw() customization_menu.large_monster_UI_parts_sorting_types[customization_menu.large_monster_dynamic_UI_parts_sorting_type_index]; end - changed, config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order = - imgui.checkbox("Reversed Order", config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order); - 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.parts.sorting.reversed_order = imgui.checkbox( + "Reversed Order", config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + imgui.tree_pop(); end @@ -2362,7 +2402,6 @@ 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("Settings") then changed, customization_menu.large_monster_UI_orientation_index = imgui.combo("Orientation", customization_menu.large_monster_UI_orientation_index, customization_menu.orientation_types); @@ -2388,7 +2427,7 @@ function customization_menu.draw() large_monster_static_UI_changed = large_monster_static_UI_changed or changed; changed, customization_menu.large_monster_UI_anchor_index = imgui.combo("Anchor", - customization_menu.large_monster_UI_anchor_index, customization_menu.anchor_types); + customization_menu.large_monster_UI_anchor_index, customization_menu.anchor_types); config_changed = config_changed or changed; if changed then config.current_config.large_monster_UI.static.position.anchor = @@ -2525,9 +2564,9 @@ function customization_menu.draw() if imgui.tree_node("Health") then changed, config.current_config.large_monster_UI.static.health.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.static.health.visibility); - config_changed = config_changed or changed; - large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + config.current_config.large_monster_UI.static.health.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; if imgui.tree_node("Text Label") then changed, config.current_config.large_monster_UI.static.health.text_label.visibility = imgui.checkbox("Visible", @@ -2813,9 +2852,9 @@ function customization_menu.draw() if imgui.tree_node("Stamina") then changed, config.current_config.large_monster_UI.static.stamina.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.static.stamina.visibility); - config_changed = config_changed or changed; - large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + config.current_config.large_monster_UI.static.stamina.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; if imgui.tree_node("Text Label") then changed, config.current_config.large_monster_UI.static.stamina.text_label.visibility = imgui.checkbox("Visible", @@ -3083,9 +3122,9 @@ function customization_menu.draw() if imgui.tree_node("Rage") then changed, config.current_config.large_monster_UI.static.rage.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.static.rage.visibility); - config_changed = config_changed or changed; - large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + config.current_config.large_monster_UI.static.rage.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; if imgui.tree_node("Text Label") then changed, config.current_config.large_monster_UI.static.rage.text_label.visibility = imgui.checkbox("Visible", @@ -3351,9 +3390,9 @@ function customization_menu.draw() if imgui.tree_node("Body Parts") then changed, config.current_config.large_monster_UI.static.parts.visibility = imgui.checkbox("Visible", - config.current_config.large_monster_UI.static.parts.visibility); - config_changed = config_changed or changed; - large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + config.current_config.large_monster_UI.static.parts.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.large_monster_UI.static.parts.offset.x = imgui.drag_float("X", @@ -3384,17 +3423,18 @@ function customization_menu.draw() end if imgui.tree_node("Settings") then - changed, config.current_config.large_monster_UI.static.parts.settings.hide_undamaged_parts = - imgui.checkbox("Hide Undamaged Parts", config.current_config.large_monster_UI.static.parts.settings.hide_undamaged_parts); + changed, config.current_config.large_monster_UI.static.parts.settings.hide_undamaged_parts = imgui.checkbox( + "Hide Undamaged Parts", config.current_config.large_monster_UI.static.parts.settings.hide_undamaged_parts); 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("Sorting") then changed, customization_menu.large_monster_static_UI_parts_sorting_type_index = imgui.combo("Type", - customization_menu.large_monster_static_UI_parts_sorting_type_index, customization_menu.large_monster_UI_parts_sorting_types); + customization_menu.large_monster_static_UI_parts_sorting_type_index, + customization_menu.large_monster_UI_parts_sorting_types); config_changed = config_changed or changed; large_monster_static_UI_changed = large_monster_static_UI_changed or changed; if changed then @@ -3402,11 +3442,11 @@ function customization_menu.draw() customization_menu.large_monster_UI_parts_sorting_types[customization_menu.large_monster_static_UI_parts_sorting_type_index]; end - changed, config.current_config.large_monster_UI.static.parts.sorting.reversed_order = - imgui.checkbox("Reversed Order", config.current_config.large_monster_UI.static.parts.sorting.reversed_order); - 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.parts.sorting.reversed_order = imgui.checkbox( + "Reversed Order", config.current_config.large_monster_UI.static.parts.sorting.reversed_order); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + imgui.tree_pop(); end @@ -3778,9 +3818,9 @@ function customization_menu.draw() 0.1, 0, screen.height, "%.1f"); config_changed = config_changed or changed; - changed, customization_menu.time_UI_anchor_index = imgui.combo("Anchor", - customization_menu.time_UI_anchor_index, customization_menu.anchor_types); - config_changed = config_changed or changed; + changed, customization_menu.time_UI_anchor_index = imgui.combo("Anchor", customization_menu.time_UI_anchor_index, + customization_menu.anchor_types); + config_changed = config_changed or changed; if changed then config.current_config.time_UI.position.anchor = customization_menu.anchor_types[customization_menu.time_UI_anchor_index]; @@ -3850,34 +3890,40 @@ function customization_menu.draw() end if imgui.tree_node("Damage Meter UI") then + local damage_meter_UI_changed = false; + changed, config.current_config.damage_meter_UI.enabled = imgui.checkbox("Enabled", config.current_config.damage_meter_UI.enabled); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Settings") then changed, config.current_config.damage_meter_UI.settings.hide_module_if_total_damage_is_zero = imgui.checkbox( "Hide Module if Total Damage is 0", config.current_config.damage_meter_UI.settings.hide_module_if_total_damage_is_zero); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.settings.hide_player_if_player_damage_is_zero = imgui.checkbox( "Hide Player if Player Damage is 0", config.current_config.damage_meter_UI.settings.hide_player_if_player_damage_is_zero); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; - changed, config.current_config.damage_meter_UI.settings.hide_total_if_total_damage_is_zero = imgui.checkbox( - "Hide Total if Total Damage is 0", - config.current_config.damage_meter_UI.settings.hide_total_if_total_damage_is_zero); + changed, config.current_config.damage_meter_UI.settings.hide_total_if_total_damage_is_zero = imgui.checkbox( + "Hide Total if Total Damage is 0", config.current_config.damage_meter_UI.settings.hide_total_if_total_damage_is_zero); config_changed = config_changed or changed; - + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.settings.total_damage_offset_is_relative = imgui.checkbox( "Total Damage Offset is Relative", config.current_config.damage_meter_UI.settings.total_damage_offset_is_relative); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, customization_menu.damage_meter_UI_orientation_index = imgui.combo("Orientation", customization_menu.damage_meter_UI_orientation_index, customization_menu.orientation_types); 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.orientation = customization_menu.orientation_types[customization_menu.damage_meter_UI_orientation_index]; @@ -3887,6 +3933,7 @@ function customization_menu.draw() imgui.combo("Highlighted Bar", customization_menu.damage_meter_UI_highlighted_bar_index, customization_menu.damage_meter_UI_highlighted_bar_types); 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.highlighted_bar = customization_menu.damage_meter_UI_highlighted_bar_types[customization_menu.damage_meter_UI_highlighted_bar_index]; @@ -3896,6 +3943,7 @@ function customization_menu.draw() imgui.combo("Damage Bars are Relative to", customization_menu.damage_meter_UI_damage_bar_relative_index, customization_menu.damage_meter_UI_damage_bar_relative_types); 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.damage_bar_relative_to = customization_menu.damage_meter_UI_damage_bar_relative_types[customization_menu.damage_meter_UI_damage_bar_relative_index]; @@ -3905,6 +3953,7 @@ function customization_menu.draw() imgui.combo("My Damage Bar Location", customization_menu.damage_meter_UI_my_damage_bar_location_index, customization_menu.damage_meter_UI_my_damage_bar_location_types); 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.my_damage_bar_location = customization_menu.damage_meter_UI_my_damage_bar_location_types[customization_menu.damage_meter_UI_my_damage_bar_location_index]; @@ -3918,11 +3967,13 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.tracked_monster_types.small_monsters = imgui.checkbox( "Small Monsters", config.current_config.damage_meter_UI.tracked_monster_types.small_monsters); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_monster_types_changed = tracked_monster_types_changed or changed; changed, config.current_config.damage_meter_UI.tracked_monster_types.large_monsters = imgui.checkbox( "Large Monsters", config.current_config.damage_meter_UI.tracked_monster_types.large_monsters); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_monster_types_changed = tracked_monster_types_changed or changed; if tracked_monster_types_changed then @@ -3940,31 +3991,37 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.tracked_damage_types.player_damage = imgui.checkbox("Player Damage", config.current_config.damage_meter_UI.tracked_damage_types.player_damage); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; changed, config.current_config.damage_meter_UI.tracked_damage_types.bomb_damage = imgui.checkbox("Bomb Damage", config.current_config.damage_meter_UI.tracked_damage_types.bomb_damage); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; changed, config.current_config.damage_meter_UI.tracked_damage_types.kunai_damage = imgui.checkbox("Kunai Damage", config.current_config.damage_meter_UI.tracked_damage_types.kunai_damage); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; changed, config.current_config.damage_meter_UI.tracked_damage_types.installation_damage = imgui.checkbox( "Installation Damage", config.current_config.damage_meter_UI.tracked_damage_types.installation_damage); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; changed, config.current_config.damage_meter_UI.tracked_damage_types.otomo_damage = imgui.checkbox("Otomo Damage", config.current_config.damage_meter_UI.tracked_damage_types.otomo_damage); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; changed, config.current_config.damage_meter_UI.tracked_damage_types.monster_damage = imgui.checkbox("Monster Damage", config.current_config.damage_meter_UI.tracked_damage_types.monster_damage); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; tracked_damage_types_changed = tracked_damage_types_changed or changed; if tracked_damage_types_changed then @@ -3981,10 +4038,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.spacing.x = imgui.drag_float("X", config.current_config.damage_meter_UI.spacing.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.spacing.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.spacing.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 @@ -3993,18 +4052,21 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.position.x = imgui.drag_float("X", config.current_config.damage_meter_UI.position.x, 0.1, 0, 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.position.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.position.y, 0.1, 0, screen.height, "%.1f"); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, customization_menu.damage_meter_UI_anchor_index = imgui.combo("Anchor", - customization_menu.damage_meter_UI_anchor_index, customization_menu.anchor_types); + customization_menu.damage_meter_UI_anchor_index, customization_menu.anchor_types); config_changed = config_changed or changed; - if changed then - config.current_config.damage_meter_UI.position.anchor = - customization_menu.anchor_types[customization_menu.damage_meter_UI_anchor_index]; - end + damage_meter_UI_changed = damage_meter_UI_changed or changed; + if changed then + config.current_config.damage_meter_UI.position.anchor = + customization_menu.anchor_types[customization_menu.damage_meter_UI_anchor_index]; + end imgui.tree_pop(); end @@ -4013,6 +4075,7 @@ function customization_menu.draw() changed, customization_menu.damage_meter_UI_sort_type_index = imgui.combo("Type", customization_menu.damage_meter_UI_sort_type_index, customization_menu.damage_meter_UI_sorting_types); 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.sorting.type = customization_menu.damage_meter_UI_sorting_types[customization_menu.damage_meter_UI_sort_type_index]; @@ -4021,6 +4084,7 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.sorting.reversed_order = imgui.checkbox("Reversed Order", config.current_config.damage_meter_UI.sorting.reversed_order); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4029,24 +4093,29 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.player_name_label.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.player_name_label.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Include") then if imgui.tree_node("Me") then changed, config.current_config.damage_meter_UI.player_name_label.include.myself.hunter_rank = imgui.checkbox( "Hunter Rank", config.current_config.damage_meter_UI.player_name_label.include.myself.hunter_rank); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.player_name_label.include.myself.word_player = imgui.checkbox( "Word \"Player\"", config.current_config.damage_meter_UI.player_name_label.include.myself.word_player); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.player_name_label.include.myself.player_id = imgui.checkbox( "Player ID", config.current_config.damage_meter_UI.player_name_label.include.myself.player_id); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.player_name_label.include.myself.player_name = imgui.checkbox( "Player Name", config.current_config.damage_meter_UI.player_name_label.include.myself.player_name); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4055,18 +4124,22 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.player_name_label.include.others.hunter_rank = imgui.checkbox( "Hunter Rank", config.current_config.damage_meter_UI.player_name_label.include.others.hunter_rank); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.player_name_label.include.others.word_player = imgui.checkbox( "Word \"Player\"", config.current_config.damage_meter_UI.player_name_label.include.others.word_player); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.player_name_label.include.others.player_id = imgui.checkbox( "Player ID", config.current_config.damage_meter_UI.player_name_label.include.others.player_id); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; changed, config.current_config.damage_meter_UI.player_name_label.include.others.player_name = imgui.checkbox( "Player Name", config.current_config.damage_meter_UI.player_name_label.include.others.player_name); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4078,10 +4151,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.player_name_label.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.player_name_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.player_name_label.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.player_name_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 @@ -4089,6 +4164,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.player_name_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.player_name_label.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4097,16 +4173,19 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.player_name_label.shadow.visibility = imgui.checkbox("Enable", config.current_config.damage_meter_UI.player_name_label.shadow.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.player_name_label.shadow.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.player_name_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.player_name_label.shadow.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.player_name_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 @@ -4114,6 +4193,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.player_name_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.player_name_label.shadow.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4128,6 +4208,7 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_value_label.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.damage_value_label.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; -- add text format @@ -4135,10 +4216,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_value_label.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.damage_value_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.damage_value_label.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.damage_value_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 @@ -4146,6 +4229,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.damage_value_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.damage_value_label.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4154,16 +4238,19 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_value_label.shadow.visibility = imgui.checkbox("Enable", config.current_config.damage_meter_UI.damage_value_label.shadow.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.damage_value_label.shadow.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.damage_value_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.damage_value_label.shadow.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.damage_value_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 @@ -4171,6 +4258,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.damage_value_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.damage_value_label.shadow.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4185,6 +4273,7 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_percentage_label.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.damage_percentage_label.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; -- add text format @@ -4192,10 +4281,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_percentage_label.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.damage_percentage_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.damage_percentage_label.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.damage_percentage_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 @@ -4203,6 +4294,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.damage_percentage_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.damage_percentage_label.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4211,17 +4303,20 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_percentage_label.shadow.visibility = imgui.checkbox("Enable", config.current_config.damage_meter_UI.damage_percentage_label.shadow.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.damage_percentage_label.shadow.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.damage_percentage_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.damage_percentage_label.shadow.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.damage_percentage_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 @@ -4229,6 +4324,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.damage_percentage_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.damage_percentage_label.shadow.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4243,6 +4339,7 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.total_damage_label.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.total_damage_label.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; -- add text format @@ -4250,10 +4347,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.total_damage_label.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.total_damage_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_damage_label.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.total_damage_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 @@ -4261,6 +4360,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.total_damage_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.total_damage_label.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4269,16 +4369,19 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.total_damage_label.shadow.visibility = imgui.checkbox("Enable", config.current_config.damage_meter_UI.total_damage_label.shadow.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.total_damage_label.shadow.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.total_damage_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_damage_label.shadow.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.total_damage_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 @@ -4286,6 +4389,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.total_damage_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.total_damage_label.shadow.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4300,6 +4404,7 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.total_damage_value_label.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.total_damage_value_label.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; -- add text format @@ -4307,10 +4412,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.total_damage_value_label.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.total_damage_value_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_damage_value_label.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.total_damage_value_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 @@ -4318,6 +4425,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.total_damage_value_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.total_damage_value_label.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4326,17 +4434,20 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.visibility = imgui.checkbox("Enable", config.current_config.damage_meter_UI.total_damage_value_label.shadow.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.total_damage_value_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_damage_value_label.shadow.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.total_damage_value_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 @@ -4344,6 +4455,7 @@ function customization_menu.draw() if imgui.tree_node("Color") then -- changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.total_damage_value_label.shadow.color, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4358,17 +4470,20 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_bar.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.damage_bar.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.damage_bar.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.damage_bar.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.damage_bar.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.damage_bar.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 @@ -4377,10 +4492,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.damage_bar.size.width = imgui.drag_float("Width", config.current_config.damage_meter_UI.damage_bar.size.width, 0.1, 0, 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.damage_bar.size.height = imgui.drag_float("Height", config.current_config.damage_meter_UI.damage_bar.size.height, 0.1, 0, screen.height, "%.1f"); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4389,6 +4506,7 @@ function customization_menu.draw() if imgui.tree_node("Foreground") then -- changed, config.current_config.damage_meter_UI.damage_bar.colors.foreground = imgui.color_picker_argb("", config.current_config.damage_meter_UI.damage_bar.colors.foreground, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4396,6 +4514,7 @@ function customization_menu.draw() if imgui.tree_node("Background") then -- changed, config.current_config.damage_meter_UI.damage_bar.colors.background = imgui.color_picker_argb("", config.current_config.damage_meter_UI.damage_bar.colors.background, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4410,15 +4529,18 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.highlighted_damage_bar.visibility = imgui.checkbox("Visible", config.current_config.damage_meter_UI.highlighted_damage_bar.visibility); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; if imgui.tree_node("Offset") then changed, config.current_config.damage_meter_UI.highlighted_damage_bar.offset.x = imgui.drag_float("X", config.current_config.damage_meter_UI.highlighted_damage_bar.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.highlighted_damage_bar.offset.y = imgui.drag_float("Y", config.current_config.damage_meter_UI.highlighted_damage_bar.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 @@ -4427,10 +4549,12 @@ function customization_menu.draw() changed, config.current_config.damage_meter_UI.highlighted_damage_bar.size.width = imgui.drag_float("Width", config.current_config.damage_meter_UI.highlighted_damage_bar.size.width, 0.1, 0, 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.highlighted_damage_bar.size.height = imgui.drag_float("Height", config.current_config.damage_meter_UI.highlighted_damage_bar.size.height, 0.1, 0, screen.height, "%.1f"); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4439,6 +4563,7 @@ function customization_menu.draw() if imgui.tree_node("Foreground") then -- changed, config.current_config.damage_meter_UI.highlighted_damage_bar.colors.foreground = imgui.color_picker_argb("", config.current_config.damage_meter_UI.highlighted_damage_bar.colors.foreground, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4446,6 +4571,7 @@ function customization_menu.draw() if imgui.tree_node("Background") then -- changed, config.current_config.damage_meter_UI.highlighted_damage_bar.colors.background = imgui.color_picker_argb("", config.current_config.damage_meter_UI.highlighted_damage_bar.colors.background, color_picker_flags); config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; imgui.tree_pop(); end @@ -4456,6 +4582,12 @@ function customization_menu.draw() imgui.tree_pop(); end + if damage_meter_UI_changed then + for _, _player in pairs(player.list) do + player.init_UI(_player); + end + end + imgui.tree_pop(); end @@ -4468,6 +4600,7 @@ end function customization_menu.init_module() table_helpers = require("MHR_Overlay.Misc.table_helpers"); + language = require("MHR_Overlay.Misc.language"); config = require("MHR_Overlay.Misc.config"); screen = require("MHR_Overlay.Game_Handler.screen"); player = require("MHR_Overlay.Damage_Meter.player"); @@ -4477,4 +4610,4 @@ function customization_menu.init_module() customization_menu.init(); end -return customization_menu; \ No newline at end of file +return customization_menu;