From 46a76a6a10bf0b14c2156457884ba402a6eccc42 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Wed, 20 Apr 2022 18:10:26 +0300 Subject: [PATCH] Implemented Monster Ailments. --- reframework/autorun/MHR_Overlay.lua | 4 +- .../MHR_Overlay/Damage_Meter/damage_hook.lua | 2 +- .../autorun/MHR_Overlay/Misc/config.lua | 679 ++++- .../autorun/MHR_Overlay/Misc/language.lua | 43 +- .../autorun/MHR_Overlay/Monsters/ailments.lua | 691 +++++ .../MHR_Overlay/Monsters/body_part.lua | 198 +- .../MHR_Overlay/Monsters/large_monster.lua | 364 +-- .../MHR_Overlay/Monsters/monster_hook.lua | 81 +- .../MHR_Overlay/Monsters/small_monster.lua | 96 +- .../UI/UI_Entities/ailment_UI_entity.lua | 164 ++ .../MHR_Overlay/UI/customization_menu.lua | 2309 ++++++++++++++++- .../data/MHR Overlay/languages/en-us.json | 36 + .../data/MHR Overlay/languages/ko-kr.json | 40 +- .../data/MHR Overlay/languages/ru-ru.json | 60 + .../data/MHR Overlay/languages/zh-tw.json | 60 + 15 files changed, 4290 insertions(+), 537 deletions(-) create mode 100644 reframework/autorun/MHR_Overlay/Monsters/ailments.lua create mode 100644 reframework/autorun/MHR_Overlay/UI/UI_Entities/ailment_UI_entity.lua diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index 4e0e87f..aede44d 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -11,7 +11,7 @@ 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 ailments = require("MHR_Overlay.Damage_Meter.ailments"); +local ailments = require("MHR_Overlay.Monsters.ailments"); local player = require("MHR_Overlay.Damage_Meter.player"); local damage_hook = require("MHR_Overlay.Damage_Meter.damage_hook"); @@ -30,6 +30,7 @@ local damage_UI_entity = require("MHR_Overlay.UI.UI_Entities.damage_UI_entity"); local health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity"); local stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity"); local rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity"); +local ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity"); local customization_menu = require("MHR_Overlay.UI.customization_menu"); local drawing = require("MHR_Overlay.UI.drawing"); @@ -50,6 +51,7 @@ damage_UI_entity.init_module(); health_UI_entity.init_module(); stamina_UI_entity.init_module(); rage_UI_entity.init_module(); +ailment_UI_entity.init_module(); damage_hook.init_module(); player.init_module(); diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua index 204534e..5d86ab1 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua @@ -141,7 +141,7 @@ function damage_hook.init_module() player = require("MHR_Overlay.Damage_Meter.player"); small_monster = require("MHR_Overlay.Monsters.small_monster"); large_monster = require("MHR_Overlay.Monsters.large_monster"); - ailments = require("MHR_Overlay.Damage_Meter.ailments"); + ailments = require("MHR_Overlay.Monsters.ailments"); end return damage_hook; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Misc/config.lua b/reframework/autorun/MHR_Overlay/Misc/config.lua index 7d91790..e72583f 100644 --- a/reframework/autorun/MHR_Overlay/Misc/config.lua +++ b/reframework/autorun/MHR_Overlay/Misc/config.lua @@ -349,6 +349,155 @@ function config.init() background = 0x88000000 } } + }, + + ailments = { + visibility = false, + + offset = { + x = 10, + y = 75 + }, + + spacing = { + x = 0, + y = 24, + }, + + settings = { + hide_ailments_with_zero_buildup = true, + hide_inactive_ailments_with_no_buildup_support = true, + hide_all_inactive_ailments = false, + hide_all_active_ailments = false, + hide_disabled_ailments = true, + time_limit = 15 + }, + + sorting = { + type = "Normal", + reversed_order = false + }, + + ailment_name_label = { + visibility = true, + text = "%s", + + include = { + ailment_name = true, + activation_count = true + }, + + offset = { + x = 5, + y = 0 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + text_label = { + visibility = false, + text = language.current_language.UI.buildup, + offset = { + x = -60, + y = 6 + }, + color = 0xF1F4A3CC, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + value_label = { + visibility = true, + text = "%.0f/%.0f", -- current_buildup/max_buildup + offset = { + x = 60, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + percentage_label = { + visibility = false, + text = "%5.1f%%", + + offset = { + x = 0, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + timer_label = { + visibility = true, + text = "%2.0f:%02.0f", + + offset = { + x = 140, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + bar = { + visibility = true, + offset = { + x = 0, + y = 14 + }, + + size = { + width = 90, + height = 4 + }, + + colors = { + foreground = 0xA7ff80ce, + background = 0xA7000000 + } + } } }, @@ -361,7 +510,8 @@ function config.init() render_highlighted_monster = true, render_not_highlighted_monsters = true, max_distance = 300, - opacity_falloff = true + opacity_falloff = true, + time_limit = 15 }, world_offset = { @@ -712,6 +862,7 @@ function config.init() settings = { hide_undamaged_parts = true, + time_limit = 15 }, sorting = { @@ -819,6 +970,156 @@ function config.init() background = 0x88000000 } } + }, + + ailments = { + visibility = false, + + offset = { + x = 10, + y = 45 + }, + + spacing = { + x = 0, + y = 24, + }, + + settings = { + hide_ailments_with_zero_buildup = true, + hide_inactive_ailments_with_no_buildup_support = true, + hide_all_inactive_ailments = false, + hide_all_active_ailments = false, + hide_disabled_ailments = true, + offset_is_relative_to_parts = true, + time_limit = 15 + }, + + sorting = { + type = "Normal", + reversed_order = false + }, + + ailment_name_label = { + visibility = true, + text = "%s", + + include = { + ailment_name = true, + activation_count = true + }, + + offset = { + x = 5, + y = 0 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + text_label = { + visibility = false, + text = language.current_language.UI.buildup, + offset = { + x = -60, + y = 7 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + value_label = { + visibility = true, + text = "%.0f/%.0f", -- current_buildup/max_buildup + offset = { + x = 45, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + percentage_label = { + visibility = true, + text = "%5.1f%%", + + offset = { + x = 135, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + timer_label = { + visibility = true, + text = "%2.0f:%02.0f", + + offset = { + x = 140, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + bar = { + visibility = true, + offset = { + x = 0, + y = 14 + }, + + size = { + width = 185, + height = 5 + }, + + colors = { + foreground = 0xA7ff80ce, + background = 0xA7000000 + } + } } }, @@ -826,7 +1127,7 @@ function config.init() enabled = true, spacing = { - x = 220, + x = 250, y = 40, }, @@ -835,7 +1136,8 @@ function config.init() render_highlighted_monster = true, render_not_highlighted_monsters = true, highlighted_monster_location = "Normal", - orientation = "Horizontal" + orientation = "Horizontal", + time_limit = 15 }, sorting = { @@ -1176,7 +1478,7 @@ function config.init() offset = { x = 10, - y = 50 + y = 73 }, spacing = { @@ -1186,6 +1488,7 @@ function config.init() settings = { hide_undamaged_parts = true, + time_limit = 15 }, sorting = { @@ -1293,6 +1596,157 @@ function config.init() background = 0x88000000 } } + }, + + ailments = { + visibility = true, + + offset = { + x = 10, + y = 45 + }, + + spacing = { + x = 0, + y = 24, + }, + + settings = { + hide_ailments_with_zero_buildup = true, + hide_inactive_ailments_with_no_buildup_support = true, + hide_all_inactive_ailments = false, + hide_all_active_ailments = false, + hide_disabled_ailments = true, + + offset_is_relative_to_parts = true, + time_limit = 15 + }, + + sorting = { + type = "Normal", + reversed_order = false + }, + + ailment_name_label = { + visibility = true, + text = "%s", + + include = { + ailment_name = true, + activation_count = true + }, + + offset = { + x = 5, + y = 0 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + text_label = { + visibility = false, + text = language.current_language.UI.buildup, + offset = { + x = -60, + y = 7 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + value_label = { + visibility = true, + text = "%.0f/%.0f", -- current_buildup/max_buildup + offset = { + x = 45, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + percentage_label = { + visibility = true, + text = "%5.1f%%", + + offset = { + x = 135, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + timer_label = { + visibility = true, + text = "%2.0f:%02.0f", + + offset = { + x = 140, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + bar = { + visibility = true, + offset = { + x = 0, + y = 14 + }, + + size = { + width = 185, + height = 5 + }, + + colors = { + foreground = 0xA7ff80ce, + background = 0xA7000000 + } + } } }, @@ -1642,6 +2096,7 @@ function config.init() settings = { hide_undamaged_parts = true, + time_limit = 15 }, sorting = { @@ -1749,6 +2204,156 @@ function config.init() background = 0x88000000 } } + }, + + ailments = { + visibility = true, + + offset = { + x = 10, + y = 45 + }, + + spacing = { + x = 0, + y = 24, + }, + + settings = { + hide_ailments_with_zero_buildup = true, + hide_inactive_ailments_with_no_buildup_support = true, + hide_all_inactive_ailments = false, + hide_all_active_ailments = false, + hide_disabled_ailments = true, + offset_is_relative_to_parts = true, + time_limit = 0 + }, + + sorting = { + type = "Normal", + reversed_order = false + }, + + ailment_name_label = { + visibility = true, + text = "%s", + + include = { + ailment_name = true, + activation_count = true + }, + + offset = { + x = 5, + y = 0 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + text_label = { + visibility = false, + text = language.current_language.UI.buildup, + offset = { + x = -60, + y = 7 + }, + color = 0xFFffb2e2, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + value_label = { + visibility = true, + text = "%.0f/%.0f", -- current_buildup/max_buildup + offset = { + x = 45, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + percentage_label = { + visibility = true, + text = "%5.1f%%", + + offset = { + x = 135, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + timer_label = { + visibility = true, + text = "%2.0f:%02.0f", + + offset = { + x = 140, + y = 13 + }, + color = 0xFFFFFFFF, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, + + bar = { + visibility = true, + offset = { + x = 0, + y = 14 + }, + + size = { + width = 185, + height = 5 + }, + + colors = { + foreground = 0xA7ff80ce, + background = 0xA7000000 + } + } } } }, @@ -1892,12 +2497,32 @@ function config.init() color = 0xFF000000 } }, + + dps_label = { + visibility = true, + text = "%.1f", + + offset = { + x = 155, + y = 0 + }, + color = 0xFFCCF4E1, + + shadow = { + visibility = true, + offset = { + x = 1, + y = 1 + }, + color = 0xFF000000 + } + }, damage_value_label = { visibility = true, text = "%.0f", offset = { - x = 145, + x = 205, y = 0 }, color = 0xFFCCF4E1, @@ -1916,27 +2541,7 @@ function config.init() visibility = true, text = "%5.1f%%", offset = { - x = 205, - y = 0 - }, - color = 0xFFCCF4E1, - - shadow = { - visibility = true, - offset = { - x = 1, - y = 1 - }, - color = 0xFF000000 - } - }, - - dps_label = { - visibility = true, - text = "%.1f", - - offset = { - x = 265, + x = 262, y = 0 }, color = 0xFFCCF4E1, @@ -1969,12 +2574,13 @@ function config.init() color = 0xFF000000 } }, - - total_damage_value_label = { + + total_dps_label = { visibility = true, - text = "%.0f", + text = "%.1f", + offset = { - x = 145, + x = 155, y = 0 }, color = 0xFFFF7373, @@ -1988,13 +2594,12 @@ function config.init() color = 0xFF000000 } }, - - total_dps_label = { + + total_damage_value_label = { visibility = true, - text = "%.1f", - + text = "%.0f", offset = { - x = 265, + x = 205, y = 0 }, color = 0xFFFF7373, @@ -2017,7 +2622,7 @@ function config.init() }, size = { - width = 250, + width = 310, height = 5 }, @@ -2035,7 +2640,7 @@ function config.init() }, size = { - width = 250, + width = 310, height = 5 }, diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 5d7f510..713217b 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -57,6 +57,30 @@ language.default_language = { rock = "Rock" }, + ailments = { + paralysis = "Paralysis", + sleep = "Sleep", + stun = "Stun", + flash = "Flash", + poison = "Poison", + blast = "Blast", + exhaust ="Exhaust", + mount = "Mount", + waterblight = "Waterblight", + fireblight = "Fireblight", + iceblight = "Iceblight", + thunderblight = "Thunderblight", + + fall_trap = "Fall Trap", + shock_trap = "Shock Trap", + tranq_bomb = "Tranq Bomb", + dung_bomb = "Dung Bomb", + steel_fang = "Steel Fang", + quick_sand = "Quick Sand", + fall_otomo_trap = "Fall Otomo Trap", + shock_otomo_trap = "Shock Otomo Trap" + }, + UI = { HP = "HP:", stamina = "Stamina:", @@ -65,7 +89,8 @@ language.default_language = { silver = "Silver", mini = "Mini", total_damage = "Total Damage", - player = "Player" + player = "Player", + buildup = "Buildup:" }, customization_menu = { @@ -256,6 +281,22 @@ language.default_language = { all_UI = "All UI", assign_new_key = "Assign new key", press_any_key = "Press any key...", + + buildup = "Buildup", + buildup_percentage = "Buildup Percentage", + + ailments = "Ailments", + hide_ailments_with_zero_buildup = "Hide Ailments when Buildup is 0", + hide_inactive_ailments_with_no_buildup_support = "Hide Inactive Ailments with no Buildup Support", + hide_all_inactive_ailments = "Hide All Inactive Ailments", + hide_all_active_ailments = "Hide All Active Ailments", + hide_disabled_ailments = "Hide Disabled Ailments", + offset_is_relative_to_parts = "Offset is Relative to Parts", + time_limit = "Time Limit (seconds)", + ailment_name_label = "Ailment Name Label", + ailment_name = "Ailment Name", + activation_count = "Activation Count" + } }; diff --git a/reframework/autorun/MHR_Overlay/Monsters/ailments.lua b/reframework/autorun/MHR_Overlay/Monsters/ailments.lua new file mode 100644 index 0000000..728f48f --- /dev/null +++ b/reframework/autorun/MHR_Overlay/Monsters/ailments.lua @@ -0,0 +1,691 @@ +local ailments = {}; +local player; +local language; +local config; +local ailment_UI_entity; +local time; +local small_monster; +local large_monster; +local table_helpers; + +--0 Paralyze +--1 Sleep +--2 Stun +--3 Flash +--4 Poison +--5 Blast +--6 Stamina +--7 MarionetteStart +--8 Water +--9 Fire +--10 Ice +--11 Thunder +--12 FallTrap +--13 ShockTrap +--14 Capture +--15 Koyashi +--16 SteelFang + +ailments.paralyze_id = 0; +ailments.sleep_id = 1; +ailments.stun_id = 2; +ailments.flash_id = 3; +ailments.poison_id = 4; +ailments.blast_id = 5; +ailments.exhaust_id = 6; +ailments.mount_id = 7; +ailments.water_id = 8; +ailments.fire_id = 9; +ailments.ice_id = 10; +ailments.thunder_id = 11; +ailments.fall_trap_id = 12; +ailments.shock_trap_id = 13; +ailments.capture_id = 14 --tranq bomb +ailments.koyashi_id = 15; --dung bomb +ailments.steel_fang_id = 16; +ailments.fall_quick_sand_id = 17; +ailments.fall_otomo_trap_id = 18; +ailments.shock_otomo_trap_id = 19; + +function ailments.new(_ailments, ailment_id) + _ailments[ailment_id] = {}; + + _ailments[ailment_id].is_enable = true; + _ailments[ailment_id].id = ailment_id; + + _ailments[ailment_id].total_buildup = 0; + _ailments[ailment_id].buildup_limit = 0; + _ailments[ailment_id].buildup_percentage = 0; + + _ailments[ailment_id].timer = 0; + _ailments[ailment_id].duration = 100000; + _ailments[ailment_id].timer_percentage = 0; + + _ailments[ailment_id].is_active = false; + _ailments[ailment_id].activate_count = 0; + + _ailments[ailment_id].last_change_time = time.total_elapsed_seconds; + + if ailment_id == ailments.paralyze_id then + _ailments[ailment_id].name = language.current_language.ailments.paralysis; + elseif ailment_id == ailments.sleep_id then + _ailments[ailment_id].name = language.current_language.ailments.sleep; + elseif ailment_id == ailments.stun_id then + _ailments[ailment_id].name = language.current_language.ailments.stun; + elseif ailment_id == ailments.flash_id then + _ailments[ailment_id].name = language.current_language.ailments.flash; + elseif ailment_id == ailments.poison_id then + _ailments[ailment_id].name = language.current_language.ailments.poison; + elseif ailment_id == ailments.blast_id then + _ailments[ailment_id].name = language.current_language.ailments.blast; + elseif ailment_id == ailments.exhaust_id then + _ailments[ailment_id].name = language.current_language.ailments.exhaust; + elseif ailment_id == ailments.mount_id then + _ailments[ailment_id].name = language.current_language.ailments.mount; + elseif ailment_id == ailments.water_id then + _ailments[ailment_id].name = language.current_language.ailments.waterblight; + elseif ailment_id == ailments.fire_id then + _ailments[ailment_id].name = language.current_language.ailments.fireblight; + elseif ailment_id == ailments.ice_id then + _ailments[ailment_id].name = language.current_language.ailments.iceblight; + elseif ailment_id == ailments.thunder_id then + _ailments[ailment_id].name = language.current_language.ailments.thunderblight; + elseif ailment_id == ailments.fall_trap_id then + _ailments[ailment_id].name = language.current_language.ailments.fall_trap; + elseif ailment_id == ailments.shock_trap_id then + _ailments[ailment_id].name = language.current_language.ailments.shock_trap; + elseif ailment_id == ailments.capture_id then + _ailments[ailment_id].name = language.current_language.ailments.tranq_bomb; + elseif ailment_id == ailments.koyashi_id then + _ailments[ailment_id].name = language.current_language.ailments.dung_bomb; + elseif ailment_id == ailments.steel_fang_id then + _ailments[ailment_id].name = language.current_language.ailments.steel_fang; + elseif ailment_id == ailments.fall_quick_sand_id then + _ailments[ailment_id].name = language.current_language.ailments.quick_sand; + elseif ailment_id == ailments.fall_otomo_trap_id then + _ailments[ailment_id].name = language.current_language.ailments.fall_otomo_trap; + elseif ailment_id == ailments.shock_otomo_trap_id then + _ailments[ailment_id].name = language.current_language.ailments.shock_otomo_trap; + end +end + +function ailments.init_ailments() + local _ailments = {}; + + ailments.new(_ailments, ailments.paralyze_id); + ailments.new(_ailments, ailments.sleep_id); + ailments.new(_ailments, ailments.stun_id); + ailments.new(_ailments, ailments.flash_id); + ailments.new(_ailments, ailments.poison_id); + ailments.new(_ailments, ailments.blast_id); + ailments.new(_ailments, ailments.exhaust_id); + ailments.new(_ailments, ailments.mount_id); + ailments.new(_ailments, ailments.water_id); + ailments.new(_ailments, ailments.fire_id); + ailments.new(_ailments, ailments.ice_id); + ailments.new(_ailments, ailments.thunder_id); + + ailments.new(_ailments, ailments.fall_trap_id); + ailments.new(_ailments, ailments.shock_trap_id); + ailments.new(_ailments, ailments.capture_id); --tranq bomb + ailments.new(_ailments, ailments.koyashi_id); --dung bomb + ailments.new(_ailments, ailments.steel_fang_id); + ailments.new(_ailments, ailments.fall_quick_sand_id); + ailments.new(_ailments, ailments.fall_otomo_trap_id); + ailments.new(_ailments, ailments.shock_otomo_trap_id); + + _ailments[ailments.poison_id].buildup = {}; + _ailments[ailments.poison_id].buildup_share = {}; + + _ailments[ailments.blast_id].buildup = {}; + _ailments[ailments.blast_id].buildup_share = {}; + + return _ailments; +end + +local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); +local enemy_condition_damage_param_base_type_def = sdk.find_type_definition("snow.enemy.EnemyConditionDamageParamBase"); + +local damage_param_field = enemy_character_base_type_def:get_field("k__BackingField"); +local damage_param_type = damage_param_field:get_type(); +local get_condition_param_method = damage_param_type:get_method("get_ConditionParam"); + +local poison_param_field = damage_param_type:get_field("_PoisonParam"); +local blast_param_field = damage_param_type:get_field("_BlastParam"); + +local poison_param_type = poison_param_field:get_type(); +local blast_param_type = blast_param_field:get_type(); + +local get_is_enable_method = enemy_condition_damage_param_base_type_def:get_method("get_IsEnable"); +local get_is_active_method = enemy_condition_damage_param_base_type_def:get_method("get_IsActive"); +local get_activate_count_method = enemy_condition_damage_param_base_type_def:get_method("get_ActivateCount"); +local get_stock_method = enemy_condition_damage_param_base_type_def:get_method("get_Stock"); +local get_limit_method = enemy_condition_damage_param_base_type_def:get_method("get_Limit"); +local get_active_time_method = enemy_condition_damage_param_base_type_def:get_method("get_ActiveTime"); +local get_active_timer_method = enemy_condition_damage_param_base_type_def:get_method("get_ActiveTimer"); + + +local poison_damage_field = poison_param_type:get_field("k__BackingField"); +local poison_get_is_damage_method = poison_param_type:get_method("get_IsDamage"); + +local blast_damage_method = blast_param_type:get_method("get_BlastDamage"); +local blast_adjust_rate_method = blast_param_type:get_method("get_BlastDamageAdjustRateByEnemyLv"); + +function ailments.update_ailments(enemy, monster) + if enemy == nil then + return; + end + + local damage_param = damage_param_field:get_data(enemy); + if damage_param == nil then + return; + end + + local condition_param = get_condition_param_method:call(damage_param); + + if condition_param == nil then + return; + end + + local condition_param_table = condition_param:get_elements(); + + if condition_param == nil then + return; + end + + for index, ailment_param in ipairs(condition_param_table) do + local id = index - 1; + + local is_enable = get_is_enable_method:call(ailment_param); + local activate_count = get_activate_count_method:call(ailment_param):get_element(0):get_field("mValue"); + local buildup = get_stock_method:call(ailment_param):get_element(0):get_field("mValue"); + local buildup_limit = get_limit_method:call(ailment_param):get_element(0):get_field("mValue"); + local timer = get_active_timer_method:call(ailment_param); + local duration = get_active_time_method:call(ailment_param); + local is_active = get_is_active_method:call(ailment_param); + + if is_enable ~= nil then + monster.ailments[id].is_enable = is_enable; + end + + if activate_count ~= nil then + monster.ailments[id].activate_count = activate_count; + end + + if buildup ~= nil then + monster.ailments[id].total_buildup = buildup; + end + + if buildup_limit ~= nil then + monster.ailments[id].buildup_limit = buildup_limit; + end + + if buildup ~= nil and buildup_limit ~= nil and buildup_limit ~= 0 then + monster.ailments[id].buildup_percentage = buildup / buildup_limit; + end + + if timer ~= nil then + monster.ailments[id].timer = timer; + end + + if duration ~= nil then + monster.ailments[id].duration = duration; + end + + if timer ~= nil and duration ~= nil then + if duration ~= 0 then + monster.ailments[id].timer_percentage = timer / duration; + end + end + + if is_active ~= nil then + monster.ailments[id].is_active = is_active; + end + end +end + +-- Code by coavins +function ailments.update_poison_blast(enemy, is_large) + if enemy == nil then + return; + end + + local monster; + if is_large then + monster = large_monster.get_monster(enemy); + else + monster = small_monster.get_monster(enemy); + end + + local damage_param = damage_param_field:get_data(enemy); + if damage_param ~= nil then + + local poison_param = poison_param_field:get_data(damage_param); + if poison_param ~= nil then + -- if applied, then calculate share for poison + local activate_count = get_activate_count_method:call(poison_param):get_element(0):get_field("mValue"); + + if activate_count > monster.ailments[ailments.poison_id].activate_count then + monster.ailments[ailments.poison_id].activate_count = activate_count; + ailments.calculate_ailment_contribution(monster, ailments.poison_id); + end + + -- if poison tick, apply damage + local poison_damage = poison_damage_field:get_data(poison_param); + local is_damage = poison_get_is_damage_method:call(poison_param); + + if is_damage then + ailments.apply_ailment_damage(monster, ailments.poison_id, poison_damage); + end + end + + local blast_param = blast_param_field:get_data(damage_param); + if blast_param ~= nil then + -- if applied, then calculate share for blast and apply damage + local activate_count = get_activate_count_method:call(blast_param):get_element(0):get_field("mValue"); + + if activate_count > monster.ailments[ailments.blast_id].activate_count then + monster.ailments[ailments.blast_id].activate_count = activate_count; + ailments.calculate_ailment_contribution(monster, ailments.blast_id); + + local blast_damage = blast_damage_method:call(blast_param); + local blast_adjust_rate = blast_adjust_rate_method:call(blast_param); + + ailments.apply_ailment_damage(monster, ailments.blast_id, blast_damage * blast_adjust_rate); + end + end + end +end + +function ailments.draw_dynamic(monster, ailments_position_on_screen, opacity_scale) + --sort parts here + local displayed_ailments = {}; + for REpart, ailment in pairs(monster.ailments) do + if config.current_config.large_monster_UI.dynamic.ailments.settings.hide_ailments_with_zero_buildup and ailment.total_buildup == 0 and ailment.buildup_limit ~= 0 and ailment.activate_count == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.dynamic.ailments.settings.hide_inactive_ailments_with_no_buildup_support and ailment.buildup_limit == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.dynamic.ailments.settings.hide_all_inactive_ailments and not ailment.is_active then + goto continue; + end + + if config.current_config.large_monster_UI.dynamic.ailments.settings.hide_all_active_ailments and ailment.is_active then + goto continue; + end + + if config.current_config.large_monster_UI.dynamic.ailments.settings.hide_disabled_ailments and not ailment.is_enable then + goto continue; + end + + if config.current_config.large_monster_UI.dynamic.ailments.settings.time_limit ~= 0 and time.total_elapsed_seconds - ailment.last_change_time > config.current_config.large_monster_UI.dynamic.ailments.settings.time_limit then + goto continue; + end + + table.insert(displayed_ailments, ailment); + ::continue:: + end + + + if config.current_config.large_monster_UI.dynamic.ailments.sorting.type == "Normal" then + if config.current_config.large_monster_UI.dynamic.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.id > right.id; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.id < right.id; + end); + end + elseif config.current_config.large_monster_UI.dynamic.ailments.sorting.type == "Buildup" then + if config.current_config.large_monster_UI.dynamic.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.total_buildup > right.total_buildup; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.total_buildup < right.total_buildup; + end); + end + elseif config.current_config.large_monster_UI.dynamic.ailments.sorting.type == "Buildup Percentage" then + if config.current_config.large_monster_UI.dynamic.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.buildup_percentage > right.buildup_percentage; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.buildup_percentage < right.buildup_percentage; + end); + end + end + + for j, ailment in ipairs(displayed_ailments) do + local ailment_position_on_screen = { + x = ailments_position_on_screen.x + config.current_config.large_monster_UI.dynamic.ailments.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = ailments_position_on_screen.y + config.current_config.large_monster_UI.dynamic.ailments.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + } + ailment_UI_entity.draw_dynamic(ailment, monster.ailment_dynamic_UI, ailment_position_on_screen, opacity_scale); + end + + +end + +function ailments.draw_static(monster, ailments_position_on_screen, opacity_scale) + --sort parts here + local displayed_ailments = {}; + for REpart, ailment in pairs(monster.ailments) do + if config.current_config.large_monster_UI.static.ailments.settings.hide_ailments_with_zero_buildup and ailment.total_buildup == 0 and ailment.buildup_limit ~= 0 and ailment.activate_count == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.static.ailments.settings.hide_inactive_ailments_with_no_buildup_support and ailment.buildup_limit == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.static.ailments.settings.hide_all_inactive_ailments and not ailment.is_active then + goto continue; + end + + if config.current_config.large_monster_UI.static.ailments.settings.hide_all_active_ailments and ailment.is_active then + goto continue; + end + + if config.current_config.large_monster_UI.static.ailments.settings.hide_disabled_ailments and not ailment.is_enable then + goto continue; + end + + if config.current_config.large_monster_UI.static.ailments.settings.time_limit ~= 0 and time.total_elapsed_seconds - ailment.last_change_time > config.current_config.large_monster_UI.static.ailments.settings.time_limit then + goto continue; + end + + table.insert(displayed_ailments, ailment); + ::continue:: + end + + + if config.current_config.large_monster_UI.static.ailments.sorting.type == "Normal" then + if config.current_config.large_monster_UI.static.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.id > right.id; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.id < right.id; + end); + end + elseif config.current_config.large_monster_UI.static.ailments.sorting.type == "Buildup" then + if config.current_config.large_monster_UI.static.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.total_buildup > right.total_buildup; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.total_buildup < right.total_buildup; + end); + end + elseif config.current_config.large_monster_UI.static.ailments.sorting.type == "Buildup Percentage" then + if config.current_config.large_monster_UI.static.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.buildup_percentage > right.buildup_percentage; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.buildup_percentage < right.buildup_percentage; + end); + end + end + + for j, ailment in ipairs(displayed_ailments) do + local ailment_position_on_screen = { + x = ailments_position_on_screen.x + config.current_config.large_monster_UI.static.ailments.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = ailments_position_on_screen.y + config.current_config.large_monster_UI.static.ailments.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + } + + ailment_UI_entity.draw_static(ailment, monster.ailment_static_UI, ailment_position_on_screen, opacity_scale); + end +end + +function ailments.draw_highlighted(monster, ailments_position_on_screen, opacity_scale) + --sort parts here + local displayed_ailments = {}; + for id, ailment in pairs(monster.ailments) do + if config.current_config.large_monster_UI.highlighted.ailments.settings.hide_ailments_with_zero_buildup and ailment.total_buildup == 0 and ailment.buildup_limit ~= 0 and ailment.activate_count == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.highlighted.ailments.settings.hide_inactive_ailments_with_no_buildup_support and ailment.buildup_limit == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.highlighted.ailments.settings.hide_all_inactive_ailments and not ailment.is_active then + goto continue; + end + + if config.current_config.large_monster_UI.highlighted.ailments.settings.hide_all_active_ailments and ailment.is_active then + goto continue; + end + + if config.current_config.large_monster_UI.highlighted.ailments.settings.hide_disabled_ailments and not ailment.is_enable then + goto continue; + end + + if config.current_config.large_monster_UI.highlighted.ailments.settings.time_limit ~= 0 and time.total_elapsed_seconds - ailment.last_change_time > config.current_config.large_monster_UI.highlighted.ailments.settings.time_limit then + goto continue; + end + + table.insert(displayed_ailments, ailment); + ::continue:: + end + + if config.current_config.large_monster_UI.highlighted.ailments.sorting.type == "Normal" then + if config.current_config.large_monster_UI.highlighted.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.id > right.id; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.id < right.id; + end); + end + elseif config.current_config.large_monster_UI.highlighted.ailments.sorting.type == "Buildup" then + if config.current_config.large_monster_UI.highlighted.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.total_buildup > right.total_buildup; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.total_buildup < right.total_buildup; + end); + end + elseif config.current_config.large_monster_UI.highlighted.ailments.sorting.type == "Buildup Percentage" then + if config.current_config.large_monster_UI.highlighted.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + return left.buildup_percentage > right.buildup_percentage; + end); + else + table.sort(displayed_ailments, function(left, right) + return left.buildup_percentage < right.buildup_percentage; + end); + end + end + + for j, ailment in ipairs(displayed_ailments) do + local ailment_position_on_screen = { + x = ailments_position_on_screen.x + config.current_config.large_monster_UI.highlighted.ailments.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = ailments_position_on_screen.y + config.current_config.large_monster_UI.highlighted.ailments.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + } + + ailment_UI_entity.draw_highlighted(ailment, monster.ailment_highlighted_UI, ailment_position_on_screen, opacity_scale); + end +end + +function ailments.draw_small(monster, ailments_position_on_screen, opacity_scale) + --sort parts here + local displayed_ailments = {}; + for REpart, ailment in pairs(monster.ailments) do + if config.current_config.small_monster_UI.ailments.settings.hide_ailments_with_zero_buildup and ailment.total_buildup == 0 and ailment.buildup_limit ~= 0 and ailment.activate_count == 0 then + goto continue; + end + + if config.current_config.small_monster_UI.ailments.settings.hide_inactive_ailments_with_no_buildup_support and ailment.buildup_limit == 0 then + goto continue; + end + + if config.current_config.small_monster_UI.ailments.settings.hide_all_inactive_ailments and not ailment.is_active then + goto continue; + end + + if config.current_config.small_monster_UI.ailments.settings.hide_all_active_ailments and ailment.is_active then + goto continue; + end + + if config.current_config.small_monster_UI.ailments.settings.hide_disabled_ailments and not ailment.is_enable then + goto continue; + end + + if config.current_config.small_monster_UI.ailments.settings.time_limit ~= 0 and time.total_elapsed_seconds - ailment.last_change_time > config.current_config.small_monster_UI.ailments.settings.time_limit then + goto continue; + end + + table.insert(displayed_ailments, ailment); + ::continue:: + end + + + if config.current_config.small_monster_UI.ailments.sorting.type == "Normal" then + if config.current_config.small_monster_UI.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + if config.current_config.small_monster_UI.ailments.settings.prioritize_active_ailments and left.is_active then return false; end + return left.id > right.id; + end); + else + table.sort(displayed_ailments, function(left, right) + if config.current_config.small_monster_UI.ailments.settings.prioritize_active_ailments and left.is_active then return true; end + return left.id < right.id; + end); + end + elseif config.current_config.small_monster_UI.ailments.sorting.type == "Buildup" then + if config.current_config.small_monster_UI.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + if config.current_config.small_monster_UI.ailments.settings.prioritize_active_ailments and left.is_active then return false; end + return left.total_buildup > right.total_buildup; + end); + else + table.sort(displayed_ailments, function(left, right) + if config.current_config.small_monster_UI.ailments.settings.prioritize_active_ailments and left.is_active then return true; end + return left.total_buildup < right.total_buildup; + end); + end + elseif config.current_config.small_monster_UI.ailments.sorting.type == "Buildup Percentage" then + if config.current_config.small_monster_UI.ailments.sorting.reversed_order then + table.sort(displayed_ailments, function(left, right) + if config.current_config.small_monster_UI.ailments.settings.prioritize_active_ailments and left.is_active then return false; end + return left.buildup_percentage > right.buildup_percentage; + end); + else + table.sort(displayed_ailments, function(left, right) + if config.current_config.small_monster_UI.ailments.settings.prioritize_active_ailments and left.is_active then return true; end + return left.buildup_percentage < right.buildup_percentage; + end); + end + end + + for j, ailment in ipairs(displayed_ailments) do + local ailment_position_on_screen = { + x = ailments_position_on_screen.x + config.current_config.small_monster_UI.ailments.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = ailments_position_on_screen.y + config.current_config.small_monster_UI.ailments.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + } + + + + ailment_UI_entity.draw_small(ailment, monster.ailment_UI, ailment_position_on_screen, opacity_scale); + end +end + +function ailments.apply_ailment_buildup(monster, attacker_id, ailment_type, ailment_buildup) + if monster == nil or player == nil or (ailment_type ~= ailments.poison_id and ailment_type ~= ailments.blast_id) then + return; + end + + -- get the buildup accumulator for this type + if monster.ailments[ailment_type].buildup == nil then + monster.ailments[ailment_type].buildup = {}; + end + + -- accumulate this buildup for this attacker + monster.ailments[ailment_type].buildup[attacker_id] = (monster.ailments[ailment_type].buildup[attacker_id] or 0) + ailment_buildup; +end + +-- Code by coavins +function ailments.calculate_ailment_contribution(monster, ailment_type) + -- get total + local total = 0; + for attacker_id, player_buildup in pairs(monster.ailments[ailment_type].buildup) do + total = total + player_buildup; + end + + for attacker_id, player_buildup in pairs(monster.ailments[ailment_type].buildup) do + -- update ratio for this attacker + monster.ailments[ailment_type].buildup_share[attacker_id] = player_buildup / total; + -- clear accumulated buildup for this attacker + -- they have to start over to earn a share of next ailment trigger + monster.ailments[ailment_type].buildup[attacker_id] = 0; + end +end + +-- Code by coavins +function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage) + -- we only track poison and blast for now + if ailment_type == nil or ailment_damage == nil then + return; + end + + local damage_source_type = ""; + if ailment_type == ailments.poison_id then + damage_source_type = "poison"; + elseif ailment_type == ailments.blast_id then + damage_source_type = "blast"; + else + return; + end + + local damage = ailment_damage; + + + -- split up damage according to ratio of buildup on boss for this type + for attacker_id, percentage in pairs(monster.ailments[ailment_type].buildup_share) do + local damage_portion = damage * percentage; + + local damage_object = {}; + damage_object.total_damage = damage_portion; + damage_object.physical_damage = 0; + damage_object.elemental_damage = 0; + damage_object.ailment_damage = damage_portion; + + local attacking_player = player.get_player(attacker_id); + + if attacking_player ~= nil then + player.update_damage(attacking_player, damage_source_type, true, damage_object); + end + + player.update_damage(player.total, damage_source_type, true, damage_object); + end + + +end + +function ailments.init_module() + player = require("MHR_Overlay.Damage_Meter.player"); + language = require("MHR_Overlay.Misc.language"); + config = require("MHR_Overlay.Misc.config"); + ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity"); + time = require("MHR_Overlay.Game_Handler.time"); + small_monster = require("MHR_Overlay.Monsters.small_monster"); + large_monster = require("MHR_Overlay.Monsters.large_monster"); + table_helpers = require("MHR_Overlay.Misc.table_helpers"); +end + +return ailments; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Monsters/body_part.lua b/reframework/autorun/MHR_Overlay/Monsters/body_part.lua index f1aa5f1..65e5833 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/body_part.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/body_part.lua @@ -10,6 +10,7 @@ local body_part_UI_entity; local screen; local drawing; local part_names; +local time; body_part.list = {}; @@ -26,6 +27,8 @@ function body_part.new(REpart, name, id) part.name = name; part.flinch_count = 0; + part.last_change_time = time.total_elapsed_seconds; + body_part.init_dynamic_UI(part); body_part.init_static_UI(part); body_part.init_highlighted_UI(part); @@ -75,6 +78,10 @@ function body_part.update(part, new_health, new_max_health) if new_health > part.health then part.flinch_count = part.flinch_count + 1; end + + if part.health ~= new_health then + part.last_change_time = time.total_elapsed_seconds; + end part.health = new_health; part.max_health = new_max_health; @@ -84,16 +91,194 @@ function body_part.update(part, new_health, new_max_health) end end -function body_part.draw_dynamic(part, position_on_screen, opacity_scale) - body_part_UI_entity.draw_dynamic(part, position_on_screen, opacity_scale); +function body_part.draw_dynamic(monster, parts_position_on_screen, opacity_scale) + --sort parts here + local displayed_parts = {}; + for REpart, part in pairs(monster.parts) do + if config.current_config.large_monster_UI.dynamic.parts.settings.hide_undamaged_parts and part.health == part.max_health and part.flinch_count == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.dynamic.parts.settings.time_limit ~= 0 and time.total_elapsed_seconds - part.last_change_time > config.current_config.large_monster_UI.dynamic.parts.settings.time_limit then + goto continue; + end + + table.insert(displayed_parts, part); + ::continue:: + end + + if config.current_config.large_monster_UI.dynamic.parts.sorting.type == "Normal" then + if config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.id > right.id; + end); + else + table.sort(displayed_parts, function(left, right) + return left.id < right.id; + end); + end + elseif config.current_config.large_monster_UI.dynamic.parts.sorting.type == "Health" then + if config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.health > right.health; + end); + else + table.sort(displayed_parts, function(left, right) + return left.health < right.health; + end); + end + elseif config.current_config.large_monster_UI.dynamic.parts.sorting.type == "Health Percentage" then + if config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.health_percentage > right.health_percentage; + end); + else + table.sort(displayed_parts, function(left, right) + return left.health_percentage < right.health_percentage; + end); + end + end + + local last_part_position_on_screen; + + for j, part in ipairs(displayed_parts) do + local part_position_on_screen = { + x = parts_position_on_screen.x + config.current_config.large_monster_UI.dynamic.parts.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = parts_position_on_screen.y + config.current_config.large_monster_UI.dynamic.parts.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + } + + body_part_UI_entity.draw_dynamic(part, part_position_on_screen, opacity_scale); + last_part_position_on_screen = part_position_on_screen; + end + + return last_part_position_on_screen; end -function body_part.draw_static(part, position_on_screen, opacity_scale) - body_part_UI_entity.draw_static(part, position_on_screen, opacity_scale); +function body_part.draw_static(monster, parts_position_on_screen, opacity_scale) + + --sort parts here + local displayed_parts = {}; + for REpart, part in pairs(monster.parts) do + if config.current_config.large_monster_UI.static.parts.settings.hide_undamaged_parts and part.health == part.max_health and part.flinch_count == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.static.parts.settings.time_limit ~= 0 and time.total_elapsed_seconds - part.last_change_time > config.current_config.large_monster_UI.static.parts.settings.time_limit then + goto continue; + end + + table.insert(displayed_parts, part); + ::continue:: + end + + if config.current_config.large_monster_UI.static.parts.sorting.type == "Normal" then + if config.current_config.large_monster_UI.static.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.id > right.id; + end); + else + table.sort(displayed_parts, function(left, right) + return left.id < right.id; + end); + end + elseif config.current_config.large_monster_UI.static.parts.sorting.type == "Health" then + if config.current_config.large_monster_UI.static.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.health > right.health; + end); + else + table.sort(displayed_parts, function(left, right) + return left.health < right.health; + end); + end + elseif config.current_config.large_monster_UI.static.parts.sorting.type == "Health Percentage" then + if config.current_config.large_monster_UI.static.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.health_percentage > right.health_percentage; + end); + else + table.sort(displayed_parts, function(left, right) + return left.health_percentage < right.health_percentage; + end); + end + end + + local last_part_position_on_screen; + + for j, part in ipairs(displayed_parts) do + local part_position_on_screen = { + x = parts_position_on_screen.x + config.current_config.large_monster_UI.static.parts.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = parts_position_on_screen.y + config.current_config.large_monster_UI.static.parts.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + } + + body_part_UI_entity.draw_static(part, part_position_on_screen, opacity_scale); + last_part_position_on_screen = part_position_on_screen; + end + + return last_part_position_on_screen; end -function body_part.draw_highlighted(part, position_on_screen, opacity_scale) - body_part_UI_entity.draw_highlighted(part, position_on_screen, opacity_scale); +function body_part.draw_highlighted(monster, parts_position_on_screen, opacity_scale) + --sort parts here + local displayed_parts = {}; + for REpart, part in pairs(monster.parts) do + if config.current_config.large_monster_UI.highlighted.parts.settings.hide_undamaged_parts and part.health == part.max_health and part.flinch_count == 0 then + goto continue; + end + + if config.current_config.large_monster_UI.highlighted.parts.settings.time_limit ~= 0 and time.total_elapsed_seconds - part.last_change_time > config.current_config.large_monster_UI.highlighted.parts.settings.time_limit then + goto continue; + end + + table.insert(displayed_parts, part); + ::continue:: + end + + if config.current_config.large_monster_UI.highlighted.parts.sorting.type == "Normal" then + if config.current_config.large_monster_UI.highlighted.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.id > right.id; + end); + else + table.sort(displayed_parts, function(left, right) + return left.id < right.id; + end); + end + elseif config.current_config.large_monster_UI.highlighted.parts.sorting.type == "Health" then + if config.current_config.large_monster_UI.highlighted.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.health > right.health; + end); + else + table.sort(displayed_parts, function(left, right) + return left.health < right.health; + end); + end + elseif config.current_config.large_monster_UI.highlighted.parts.sorting.type == "Health Percentage" then + if config.current_config.large_monster_UI.highlighted.parts.sorting.reversed_order then + table.sort(displayed_parts, function(left, right) + return left.health_percentage > right.health_percentage; + end); + else + table.sort(displayed_parts, function(left, right) + return left.health_percentage < right.health_percentage; + end); + end + end + + local last_part_position_on_screen; + + for j, part in ipairs(displayed_parts) do + local part_position_on_screen = { + x = parts_position_on_screen.x + config.current_config.large_monster_UI.highlighted.parts.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, + y = parts_position_on_screen.y + config.current_config.large_monster_UI.highlighted.parts.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; + }; + + body_part_UI_entity.draw_highlighted(part, part_position_on_screen, opacity_scale); + last_part_position_on_screen = part_position_on_screen; + end + + return last_part_position_on_screen; end function body_part.init_module() @@ -108,6 +293,7 @@ function body_part.init_module() screen = require("MHR_Overlay.Game_Handler.screen"); drawing = require("MHR_Overlay.UI.drawing"); part_names = require("MHR_Overlay.Misc.part_names"); + time = require("MHR_Overlay.Game_Handler.time"); end return body_part; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua b/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua index b6a942b..18256a8 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/large_monster.lua @@ -7,10 +7,12 @@ local table_helpers; local health_UI_entity; local stamina_UI_entity; local rage_UI_entity; +local ailment_UI_entity; local screen; local drawing; local ailments; local player; +local time; local body_part; local part_names; @@ -66,16 +68,7 @@ function large_monster.new(enemy) monster.parts = {}; - monster.ailment = {}; - monster.ailment[ailments.poison_id] = {}; - monster.ailment[ailments.poison_id].buildup = {}; - monster.ailment[ailments.poison_id].share = {}; - monster.ailment[ailments.poison_id].activate_count = 0; - - monster.ailment[ailments.blast_id] = {}; - monster.ailment[ailments.blast_id].buildup = {}; - monster.ailment[ailments.blast_id].share = {}; - monster.ailment[ailments.blast_id].activate_count = 0; + monster.ailments = ailments.init_ailments(); monster.rider_id = -1; @@ -130,7 +123,6 @@ function large_monster.init(monster, enemy) if enemy_name ~= nil then monster.name = enemy_name; end - local set_info = get_set_info_method:call(enemy); if set_info ~= nil then local unique_id = get_unique_id_method:call(set_info); @@ -173,6 +165,56 @@ function large_monster.init(monster, enemy) end end +function large_monster.init_dynamic_UI(monster) + monster.dynamic_name_label = table_helpers.deep_copy(config.current_config.large_monster_UI.dynamic.monster_name_label); + + monster.health_dynamic_UI = health_UI_entity.new( + config.current_config.large_monster_UI.dynamic.health.visibility, + config.current_config.large_monster_UI.dynamic.health.bar, + config.current_config.large_monster_UI.dynamic.health.text_label, + config.current_config.large_monster_UI.dynamic.health.value_label, + config.current_config.large_monster_UI.dynamic.health.percentage_label + ); + + monster.health_dynamic_UI.bar.capture_line.offset.x = monster.health_dynamic_UI.bar.capture_line.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + monster.health_dynamic_UI.bar.capture_line.offset.y = monster.health_dynamic_UI.bar.capture_line.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + monster.health_dynamic_UI.bar.capture_line.size.width = monster.health_dynamic_UI.bar.capture_line.size.width * config.current_config.global_settings.modifiers.global_scale_modifier; + monster.health_dynamic_UI.bar.capture_line.size.height = monster.health_dynamic_UI.bar.capture_line.size.height * config.current_config.global_settings.modifiers.global_scale_modifier; + + monster.health_dynamic_UI.bar.colors = config.current_config.large_monster_UI.dynamic.health.bar.normal_colors; + + monster.stamina_dynamic_UI = stamina_UI_entity.new( + config.current_config.large_monster_UI.dynamic.stamina.visibility, + config.current_config.large_monster_UI.dynamic.stamina.bar, + config.current_config.large_monster_UI.dynamic.stamina.text_label, + config.current_config.large_monster_UI.dynamic.stamina.value_label, + config.current_config.large_monster_UI.dynamic.stamina.percentage_label + ); + + monster.rage_dynamic_UI = rage_UI_entity.new( + config.current_config.large_monster_UI.dynamic.rage.visibility, + config.current_config.large_monster_UI.dynamic.rage.bar, + config.current_config.large_monster_UI.dynamic.rage.text_label, + config.current_config.large_monster_UI.dynamic.rage.value_label, + config.current_config.large_monster_UI.dynamic.rage.percentage_label, + config.current_config.large_monster_UI.dynamic.rage.timer_label + ); + + for REpart, part in pairs(monster.parts) do + body_part.init_dynamic_UI(part); + end + + monster.ailment_dynamic_UI = ailment_UI_entity.new( + config.current_config.large_monster_UI.dynamic.ailments.visibility, + config.current_config.large_monster_UI.dynamic.ailments.bar, + config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label, + config.current_config.large_monster_UI.dynamic.ailments.text_label, + config.current_config.large_monster_UI.dynamic.ailments.value_label, + config.current_config.large_monster_UI.dynamic.ailments.percentage_label, + config.current_config.large_monster_UI.dynamic.ailments.timer_label + ); +end + function large_monster.init_static_UI(monster) monster.static_name_label = table_helpers.deep_copy(config.current_config.large_monster_UI.static.monster_name_label); @@ -214,46 +256,16 @@ function large_monster.init_static_UI(monster) for REpart, part in pairs(monster.parts) do body_part.init_static_UI(part); end -end -function large_monster.init_dynamic_UI(monster) - monster.dynamic_name_label = table_helpers.deep_copy(config.current_config.large_monster_UI.dynamic.monster_name_label); - - monster.health_dynamic_UI = health_UI_entity.new( - config.current_config.large_monster_UI.dynamic.health.visibility, - config.current_config.large_monster_UI.dynamic.health.bar, - config.current_config.large_monster_UI.dynamic.health.text_label, - config.current_config.large_monster_UI.dynamic.health.value_label, - config.current_config.large_monster_UI.dynamic.health.percentage_label + monster.ailment_static_UI = ailment_UI_entity.new( + config.current_config.large_monster_UI.static.ailments.visibility, + config.current_config.large_monster_UI.static.ailments.bar, + config.current_config.large_monster_UI.static.ailments.ailment_name_label, + config.current_config.large_monster_UI.static.ailments.text_label, + config.current_config.large_monster_UI.static.ailments.value_label, + config.current_config.large_monster_UI.static.ailments.percentage_label, + config.current_config.large_monster_UI.static.ailments.timer_label ); - - monster.health_dynamic_UI.bar.capture_line.offset.x = monster.health_dynamic_UI.bar.capture_line.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; - monster.health_dynamic_UI.bar.capture_line.offset.y = monster.health_dynamic_UI.bar.capture_line.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; - monster.health_dynamic_UI.bar.capture_line.size.width = monster.health_dynamic_UI.bar.capture_line.size.width * config.current_config.global_settings.modifiers.global_scale_modifier; - monster.health_dynamic_UI.bar.capture_line.size.height = monster.health_dynamic_UI.bar.capture_line.size.height * config.current_config.global_settings.modifiers.global_scale_modifier; - - monster.health_dynamic_UI.bar.colors = config.current_config.large_monster_UI.dynamic.health.bar.normal_colors; - - monster.stamina_dynamic_UI = stamina_UI_entity.new( - config.current_config.large_monster_UI.dynamic.stamina.visibility, - config.current_config.large_monster_UI.dynamic.stamina.bar, - config.current_config.large_monster_UI.dynamic.stamina.text_label, - config.current_config.large_monster_UI.dynamic.stamina.value_label, - config.current_config.large_monster_UI.dynamic.stamina.percentage_label - ); - - monster.rage_dynamic_UI = rage_UI_entity.new( - config.current_config.large_monster_UI.dynamic.rage.visibility, - config.current_config.large_monster_UI.dynamic.rage.bar, - config.current_config.large_monster_UI.dynamic.rage.text_label, - config.current_config.large_monster_UI.dynamic.rage.value_label, - config.current_config.large_monster_UI.dynamic.rage.percentage_label, - config.current_config.large_monster_UI.dynamic.rage.timer_label - ); - - for REpart, part in pairs(monster.parts) do - body_part.init_dynamic_UI(part); - end end function large_monster.init_highlighted_UI(monster) @@ -294,12 +306,21 @@ function large_monster.init_highlighted_UI(monster) for REpart, part in pairs(monster.parts) do body_part.init_highlighted_UI(part); end + + monster.ailment_highlighted_UI = ailment_UI_entity.new( + config.current_config.large_monster_UI.highlighted.ailments.visibility, + config.current_config.large_monster_UI.highlighted.ailments.bar, + config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label, + config.current_config.large_monster_UI.highlighted.ailments.text_label, + config.current_config.large_monster_UI.highlighted.ailments.value_label, + config.current_config.large_monster_UI.highlighted.ailments.percentage_label, + config.current_config.large_monster_UI.highlighted.ailments.timer_label + ); end local physical_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local stamina_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local anger_param_field = enemy_character_base_type_def:get_field("k__BackingField"); -local damage_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local check_die_method = enemy_character_base_type_def:get_method("checkDie"); local physical_param_type = physical_param_field:get_type(); @@ -323,20 +344,6 @@ 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 damage_param_type = damage_param_field:get_type(); -local poison_param_field = damage_param_type:get_field("_PoisonParam"); -local blast_param_field = damage_param_type:get_field("_BlastParam"); - -local poison_param_type = poison_param_field:get_type(); -local poison_get_activate_count_method = poison_param_type:get_method("get_ActivateCount"); -local poison_damage_field = poison_param_type:get_field("k__BackingField"); -local poison_get_is_damage_method = poison_param_type:get_method("get_IsDamage"); - -local blast_param_type = blast_param_field:get_type(); -local blast_get_activate_count_method = blast_param_type:get_method("get_ActivateCount"); -local blast_damage_method = blast_param_type:get_method("get_BlastDamage"); -local blast_adjust_rate_method = blast_param_type:get_method("get_BlastDamageAdjustRateByEnemyLv"); - local mario_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local mario_param_type = mario_param_field:get_type(); @@ -408,52 +415,6 @@ function large_monster.update_all_riders() end --- Code by coavins -function large_monster.update_ailments(enemy) - if enemy == nil then - return; - end - - local monster = large_monster.get_monster(enemy); - - local damage_param = damage_param_field:get_data(enemy); - if damage_param ~= nil then - - local poison_param = poison_param_field:get_data(damage_param); - if poison_param ~= nil then - -- if applied, then calculate share for poison - local activate_count = poison_get_activate_count_method:call(poison_param):get_element(0):get_field("mValue"); - if activate_count > monster.ailment[ailments.poison_id].activate_count then - monster.ailment[ailments.poison_id].activate_count = activate_count; - ailments.calculate_ailment_contribution(monster, ailments.poison_id); - end - -- if poison tick, apply damage - local poison_damage = poison_damage_field:get_data(poison_param); - local is_damage = poison_get_is_damage_method:call(poison_param); - - if is_damage then - ailments.apply_ailment_damage(monster, ailments.poison_id, poison_damage); - end - end - - local blast_param = blast_param_field:get_data(damage_param); - if blast_param ~= nil then - -- if applied, then calculate share for blast and apply damage - local activate_count = blast_get_activate_count_method:call(blast_param):get_element(0):get_field("mValue"); - - if activate_count > monster.ailment[ailments.blast_id].activate_count then - monster.ailment[ailments.blast_id].activate_count = activate_count; - ailments.calculate_ailment_contribution(monster, ailments.blast_id); - - local blast_damage = blast_damage_method:call(blast_param); - local blast_adjust_rate = blast_adjust_rate_method:call(blast_param); - - ailments.apply_ailment_damage(monster, ailments.blast_id, blast_damage * blast_adjust_rate); - end - end - end -end - function large_monster.update(enemy) if not config.current_config.large_monster_UI.dynamic.enabled and not config.current_config.large_monster_UI.static.enabled @@ -577,8 +538,6 @@ function large_monster.update(enemy) ::continue:: end - --large_monster.update_position(enemy); - if health ~= nil then monster.health = health; end @@ -665,6 +624,8 @@ function large_monster.update(enemy) if rage_count ~= nil then monster.rage_count = rage_count; end + + ailments.update_ailments(enemy, monster); end function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale) @@ -712,6 +673,11 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale) x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.parts.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.parts.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier }; + + local ailments_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.dynamic.ailments.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, + y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier + }; health_UI_entity.draw(monster, monster.health_dynamic_UI, health_position_on_screen, opacity_scale); drawing.draw_capture_line(monster.health_dynamic_UI.bar, health_position_on_screen, opacity_scale, monster.capture_percentage); @@ -719,57 +685,17 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale) stamina_UI_entity.draw(monster, monster.stamina_dynamic_UI, stamina_position_on_screen, opacity_scale); rage_UI_entity.draw(monster, monster.rage_dynamic_UI, rage_position_on_screen, opacity_scale); - --sort parts here - local displayed_parts = {}; - for REpart, part in pairs(monster.parts) do - if config.current_config.large_monster_UI.dynamic.parts.settings.hide_undamaged_parts and part.health == part.max_health and part.flinch_count == 0 then - goto continue; - end + local last_part_position_on_screen = body_part.draw_dynamic(monster, parts_position_on_screen, opacity_scale); - table.insert(displayed_parts, part); - ::continue:: - end - - if config.current_config.large_monster_UI.dynamic.parts.sorting.type == "Normal" then - if config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.id > right.id; - end); + if config.current_config.large_monster_UI.dynamic.ailments.settings.offset_is_relative_to_parts then + if last_part_position_on_screen == nil then + ailments_position_on_screen = parts_position_on_screen; else - table.sort(displayed_parts, function(left, right) - return left.id < right.id; - end); - end - elseif config.current_config.large_monster_UI.dynamic.parts.sorting.type == "Health" then - if config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.health > right.health; - end); - else - table.sort(displayed_parts, function(left, right) - return left.health < right.health; - end); - end - elseif config.current_config.large_monster_UI.dynamic.parts.sorting.type == "Health Percentage" then - if config.current_config.large_monster_UI.dynamic.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.health_percentage > right.health_percentage; - end); - else - table.sort(displayed_parts, function(left, right) - return left.health_percentage < right.health_percentage; - end); + ailments_position_on_screen.y = last_part_position_on_screen.y + config.current_config.large_monster_UI.dynamic.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; end end - for j, part in ipairs(displayed_parts) do - local part_position_on_screen = { - x = parts_position_on_screen.x + config.current_config.large_monster_UI.dynamic.parts.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, - y = parts_position_on_screen.y + config.current_config.large_monster_UI.dynamic.parts.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; - } - - body_part.draw_dynamic(part, part_position_on_screen, opacity_scale); - end + ailments.draw_dynamic(monster, ailments_position_on_screen, opacity_scale); end function large_monster.draw_static(monster, position_on_screen, opacity_scale) @@ -818,66 +744,32 @@ function large_monster.draw_static(monster, position_on_screen, opacity_scale) y = position_on_screen.y + config.current_config.large_monster_UI.static.parts.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier }; + local ailments_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.static.ailments.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, + y = position_on_screen.y + config.current_config.large_monster_UI.static.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier + }; + health_UI_entity.draw(monster, monster.health_static_UI, health_position_on_screen, opacity_scale); drawing.draw_capture_line(monster.health_static_UI.bar, health_position_on_screen, opacity_scale, monster.capture_percentage); stamina_UI_entity.draw(monster, monster.stamina_static_UI, stamina_position_on_screen, opacity_scale); rage_UI_entity.draw(monster, monster.rage_static_UI, rage_position_on_screen, opacity_scale); - --sort parts here - local displayed_parts = {}; - for REpart, part in pairs(monster.parts) do - if config.current_config.large_monster_UI.static.parts.settings.hide_undamaged_parts and part.health == part.max_health and part.flinch_count == 0 then - goto continue; - end + local last_part_position_on_screen = body_part.draw_static(monster, parts_position_on_screen, opacity_scale); - table.insert(displayed_parts, part); - ::continue:: - end - - if config.current_config.large_monster_UI.static.parts.sorting.type == "Normal" then - if config.current_config.large_monster_UI.static.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.id > right.id; - end); + if config.current_config.large_monster_UI.static.ailments.settings.offset_is_relative_to_parts then + if last_part_position_on_screen == nil then + ailments_position_on_screen = parts_position_on_screen; else - table.sort(displayed_parts, function(left, right) - return left.id < right.id; - end); - end - elseif config.current_config.large_monster_UI.static.parts.sorting.type == "Health" then - if config.current_config.large_monster_UI.static.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.health > right.health; - end); - else - table.sort(displayed_parts, function(left, right) - return left.health < right.health; - end); - end - elseif config.current_config.large_monster_UI.static.parts.sorting.type == "Health Percentage" then - if config.current_config.large_monster_UI.static.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.health_percentage > right.health_percentage; - end); - else - table.sort(displayed_parts, function(left, right) - return left.health_percentage < right.health_percentage; - end); + ailments_position_on_screen.y = last_part_position_on_screen.y + config.current_config.large_monster_UI.static.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; end end - for j, part in ipairs(displayed_parts) do - local part_position_on_screen = { - x = parts_position_on_screen.x + config.current_config.large_monster_UI.static.parts.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, - y = parts_position_on_screen.y + config.current_config.large_monster_UI.static.parts.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; - } - - body_part.draw_static(part, part_position_on_screen, opacity_scale); - end + ailments.draw_static(monster, ailments_position_on_screen, opacity_scale); end function large_monster.draw_highlighted(monster, position_on_screen, opacity_scale) + local monster_name_text = ""; if config.current_config.large_monster_UI.highlighted.monster_name_label.include.monster_name then monster_name_text = string.format("%s ", monster.name); @@ -923,63 +815,33 @@ function large_monster.draw_highlighted(monster, position_on_screen, opacity_sca y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.parts.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier }; + local ailments_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.ailments.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, + y = position_on_screen.y + config.current_config.large_monster_UI.highlighted.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier + }; + health_UI_entity.draw(monster, monster.health_highlighted_UI, health_position_on_screen, opacity_scale); drawing.draw_capture_line(monster.health_highlighted_UI.bar, health_position_on_screen, opacity_scale, monster.capture_percentage); stamina_UI_entity.draw(monster, monster.stamina_highlighted_UI, stamina_position_on_screen, opacity_scale); rage_UI_entity.draw(monster, monster.rage_highlighted_UI, rage_position_on_screen, opacity_scale); - --sort parts here - local displayed_parts = {}; - for REpart, part in pairs(monster.parts) do - if config.current_config.large_monster_UI.highlighted.parts.settings.hide_undamaged_parts and part.health == part.max_health and part.flinch_count == 0 then - goto continue; - end + local last_part_position_on_screen = body_part.draw_highlighted(monster, parts_position_on_screen, opacity_scale); - table.insert(displayed_parts, part); - ::continue:: - end + if config.current_config.large_monster_UI.highlighted.ailments.settings.offset_is_relative_to_parts then - if config.current_config.large_monster_UI.highlighted.parts.sorting.type == "Normal" then - if config.current_config.large_monster_UI.highlighted.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.id > right.id; - end); + + if last_part_position_on_screen == nil then + ailments_position_on_screen = { + x = position_on_screen.x + config.current_config.large_monster_UI.highlighted.ailments.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, + y = parts_position_on_screen.y + config.current_config.large_monster_UI.highlighted.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier + }; else - table.sort(displayed_parts, function(left, right) - return left.id < right.id; - end); - end - elseif config.current_config.large_monster_UI.highlighted.parts.sorting.type == "Health" then - if config.current_config.large_monster_UI.highlighted.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.health > right.health; - end); - else - table.sort(displayed_parts, function(left, right) - return left.health < right.health; - end); - end - elseif config.current_config.large_monster_UI.highlighted.parts.sorting.type == "Health Percentage" then - if config.current_config.large_monster_UI.highlighted.parts.sorting.reversed_order then - table.sort(displayed_parts, function(left, right) - return left.health_percentage > right.health_percentage; - end); - else - table.sort(displayed_parts, function(left, right) - return left.health_percentage < right.health_percentage; - end); + ailments_position_on_screen.y = last_part_position_on_screen.y + config.current_config.large_monster_UI.highlighted.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; end end - for j, part in ipairs(displayed_parts) do - local part_position_on_screen = { - x = parts_position_on_screen.x + config.current_config.large_monster_UI.highlighted.parts.spacing.x * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier, - y = parts_position_on_screen.y + config.current_config.large_monster_UI.highlighted.parts.spacing.y * (j - 1) * config.current_config.global_settings.modifiers.global_scale_modifier; - } - - body_part.draw_highlighted(part, part_position_on_screen, opacity_scale); - end + ailments.draw_highlighted(monster, ailments_position_on_screen, opacity_scale); end function large_monster.init_list() @@ -996,11 +858,13 @@ function large_monster.init_module() health_UI_entity = require("MHR_Overlay.UI.UI_Entities.health_UI_entity"); stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity"); rage_UI_entity = require("MHR_Overlay.UI.UI_Entities.rage_UI_entity"); + ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity"); screen = require("MHR_Overlay.Game_Handler.screen"); drawing = require("MHR_Overlay.UI.drawing"); part_names = require("MHR_Overlay.Misc.part_names"); - ailments = require("MHR_Overlay.Damage_Meter.ailments"); + ailments = require("MHR_Overlay.Monsters.ailments"); player = require("MHR_Overlay.Damage_Meter.player"); + time = require("MHR_Overlay.Game_Handler.time"); end return large_monster; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Monsters/monster_hook.lua b/reframework/autorun/MHR_Overlay/Monsters/monster_hook.lua index 4e6f0c4..1d883e9 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/monster_hook.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/monster_hook.lua @@ -2,6 +2,7 @@ local monster = {}; local small_monster; local large_monster; local config; +local ailments; 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"); @@ -66,26 +67,30 @@ function monster.update_monster(enemy) if is_large == nil then return; end + + ailments.update_poison_blast(enemy, is_large); + + if is_large then + monster.update_large_monster(enemy); + else + monster.update_small_monster(enemy); + end +end + +function monster.update_large_monster(enemy) + if not config.current_config.large_monster_UI.dynamic.enabled and + not config.current_config.large_monster_UI.static.enabled and + not config.current_config.large_monster_UI.highlighted.enabled then + return; + end -- this is the VERY LEAST thing we should do all the time -- so the position doesn't lag all over the place -- due to how infrequently we update the monster(s). - if is_large then - large_monster.update_position(enemy); - large_monster.update_ailments(enemy); - else - small_monster.update_position(enemy); - small_monster.update_ailments(enemy); - end + large_monster.update_position(enemy); - if updated_monsters[enemy] then - if is_large then - if not config.current_config.global_settings.performance.prioritize_large_monsters then - return; - end - else - return; - end + if not config.current_config.global_settings.performance.prioritize_large_monsters and updated_monsters[enemy] then + return; end -- is it old tick? @@ -96,29 +101,51 @@ function monster.update_monster(enemy) -- actually update the enemy now. we don't do this very often -- due to how much CPU time it takes to update each monster. - if is_large then - if not config.current_config.global_settings.performance.prioritize_large_monsters then - updates_this_tick = updates_this_tick + 1; - last_update_tick = tick_count; - num_updated_monsters = num_updated_monsters + 1; - updated_monsters[enemy] = true; - end - - large_monster.update(enemy); - else + if not config.current_config.global_settings.performance.prioritize_large_monsters then updates_this_tick = updates_this_tick + 1; last_update_tick = tick_count; num_updated_monsters = num_updated_monsters + 1; updated_monsters[enemy] = true; - - small_monster.update(enemy); end + + large_monster.update(enemy); +end + +function monster.update_small_monster(enemy) + if not config.current_config.small_monster_UI.enabled then + return; + end + + -- this is the VERY LEAST thing we should do all the time + -- so the position doesn't lag all over the place + -- due to how infrequently we update the monster(s). + small_monster.update_position(enemy); + + if updated_monsters[enemy] then + return; + end + + -- is it old tick? + -- is update limit reached? + if tick_count == last_update_tick and updates_this_tick >= config.current_config.global_settings.performance.max_monster_updates_per_tick then + return; + end + + -- actually update the enemy now. we don't do this very often + -- due to how much CPU time it takes to update each monster. + updates_this_tick = updates_this_tick + 1; + last_update_tick = tick_count; + num_updated_monsters = num_updated_monsters + 1; + updated_monsters[enemy] = true; + + small_monster.update(enemy); end function monster.init_module() small_monster = require("MHR_Overlay.Monsters.small_monster"); large_monster = require("MHR_Overlay.Monsters.large_monster"); config = require("MHR_Overlay.Misc.config"); + ailments = require("MHR_Overlay.Monsters.ailments"); end return monster; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua b/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua index 7832fdb..3a39364 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/small_monster.lua @@ -8,6 +8,7 @@ local stamina_UI_entity; local screen; local drawing; local ailments; +local ailment_UI_entity; small_monster.list = {}; @@ -33,16 +34,7 @@ function small_monster.new(enemy) monster.name = "Small Monster"; - monster.ailment = {}; - monster.ailment[ailments.poison_id] = {}; - monster.ailment[ailments.poison_id].buildup = {}; - monster.ailment[ailments.poison_id].share = {}; - monster.ailment[ailments.poison_id].activate_count = 0; - - monster.ailment[ailments.blast_id] = {}; - monster.ailment[ailments.blast_id].buildup = {}; - monster.ailment[ailments.blast_id].share = {}; - monster.ailment[ailments.blast_id].activate_count = 0; + monster.ailments = ailments.init_ailments(); small_monster.init(monster, enemy); small_monster.init_UI(monster); @@ -96,13 +88,22 @@ function small_monster.init_UI(monster) config.current_config.small_monster_UI.stamina.value_label, config.current_config.small_monster_UI.stamina.percentage_label ); + + monster.ailment_UI = ailment_UI_entity.new( + config.current_config.small_monster_UI.ailments.visibility, + config.current_config.small_monster_UI.ailments.bar, + config.current_config.small_monster_UI.ailments.ailment_name_label, + config.current_config.small_monster_UI.ailments.text_label, + config.current_config.small_monster_UI.ailments.value_label, + config.current_config.small_monster_UI.ailments.percentage_label, + config.current_config.small_monster_UI.ailments.timer_label + ); end local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); local physical_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local status_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local stamina_param_field = enemy_character_base_type_def:get_field("k__BackingField"); -local damage_param_field = enemy_character_base_type_def:get_field("k__BackingField"); local check_die_method = enemy_character_base_type_def:get_method("checkDie"); local physical_param_type = physical_param_field:get_type(); @@ -117,20 +118,6 @@ local stamina_param_type = stamina_param_field:get_type(); local get_stamina_method = stamina_param_type:get_method("getStamina"); local get_max_stamina_method = stamina_param_type:get_method("getMaxStamina"); -local damage_param_type = damage_param_field:get_type(); -local poison_param_field = damage_param_type:get_field("_PoisonParam"); -local blast_param_field = damage_param_type:get_field("_BlastParam"); - -local poison_param_type = poison_param_field:get_type(); -local poison_get_activate_count_method = poison_param_type:get_method("get_ActivateCount"); -local poison_damage_field = poison_param_type:get_field("k__BackingField"); -local poison_get_is_damage_method = poison_param_type:get_method("get_IsDamage"); - -local blast_param_type = blast_param_field:get_type(); -local blast_get_activate_count_method = blast_param_type:get_method("get_ActivateCount"); -local blast_damage_method = blast_param_type:get_method("get_BlastDamage"); -local blast_adjust_rate_method = blast_param_type:get_method("get_BlastDamageAdjustRateByEnemyLv"); - local get_gameobject_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"); @@ -173,53 +160,6 @@ function small_monster.update_position(enemy) end end --- Code by coavins -function small_monster.update_ailments(enemy) - if enemy == nil then - return; - end - - local monster = small_monster.get_monster(enemy); - - local damage_param = damage_param_field:get_data(enemy); - if damage_param ~= nil then - - local poison_param = poison_param_field:get_data(damage_param); - if poison_param ~= nil then - -- if applied, then calculate share for poison - local activate_count = poison_get_activate_count_method:call(poison_param):get_element(0):get_field("mValue"); - if activate_count > monster.ailment[ailments.poison_id].activate_count then - monster.ailment[ailments.poison_id].activate_count = activate_count; - ailments.calculate_ailment_contribution(monster, ailments.poison_id); - end - -- if poison tick, apply damage - local poison_damage = poison_damage_field:get_data(poison_param); - local is_damage = poison_get_is_damage_method:call(poison_param); - - if is_damage then - ailments.apply_ailment_damage(monster, ailments.poison_id, poison_damage); - end - end - - --xy = "test" - local blast_param = blast_param_field:get_data(damage_param); - if blast_param ~= nil then - -- if applied, then calculate share for blast and apply damage - local activate_count = blast_get_activate_count_method:call(blast_param):get_element(0):get_field("mValue"); - - if activate_count > monster.ailment[ailments.blast_id].activate_count then - monster.ailment[ailments.blast_id].activate_count = activate_count; - ailments.calculate_ailment_contribution(monster, ailments.blast_id); - - local blast_damage = blast_damage_method:call(blast_param); - local blast_adjust_rate = blast_adjust_rate_method:call(blast_param); - - ailments.apply_ailment_damage(monster, ailments.blast_id, blast_damage * blast_adjust_rate); - end - end - end -end - function small_monster.update(enemy) if enemy == nil then return; @@ -306,6 +246,8 @@ function small_monster.update(enemy) monster.stamina_percentage = stamina / max_stamina; end end + + ailments.update_ailments(enemy, monster) end function small_monster.draw(monster, position_on_screen, opacity_scale) @@ -320,9 +262,16 @@ function small_monster.draw(monster, position_on_screen, opacity_scale) x = position_on_screen.x + config.current_config.small_monster_UI.stamina.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, y = position_on_screen.y + config.current_config.small_monster_UI.stamina.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier }; + + local ailments_position_on_screen = { + x = position_on_screen.x + config.current_config.small_monster_UI.ailments.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier, + y = position_on_screen.y + config.current_config.small_monster_UI.ailments.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier + }; health_UI_entity.draw(monster, monster.health_UI, health_position_on_screen, opacity_scale); stamina_UI_entity.draw(monster, monster.stamina_UI, stamina_position_on_screen, opacity_scale); + + ailments.draw_small(monster, ailments_position_on_screen, opacity_scale); end function small_monster.init_list() @@ -338,7 +287,8 @@ function small_monster.init_module() stamina_UI_entity = require("MHR_Overlay.UI.UI_Entities.stamina_UI_entity"); screen = require("MHR_Overlay.Game_Handler.screen"); drawing = require("MHR_Overlay.UI.drawing"); - ailments = require("MHR_Overlay.Damage_Meter.ailments"); + ailments = require("MHR_Overlay.Monsters.ailments"); + ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity"); end return small_monster; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/UI/UI_Entities/ailment_UI_entity.lua b/reframework/autorun/MHR_Overlay/UI/UI_Entities/ailment_UI_entity.lua new file mode 100644 index 0000000..5da869c --- /dev/null +++ b/reframework/autorun/MHR_Overlay/UI/UI_Entities/ailment_UI_entity.lua @@ -0,0 +1,164 @@ +local ailment_UI_entity = {}; +local config; +local table_helpers; +local drawing; +local language; + +function ailment_UI_entity.new(visibility, bar, name_label, text_label, value_label, percentage_label, timer_label) + local entity = {}; + + entity.visibility = visibility; + entity.bar = table_helpers.deep_copy(bar); + entity.name_label = table_helpers.deep_copy(name_label); + entity.text_label = table_helpers.deep_copy(text_label); + entity.value_label = table_helpers.deep_copy(value_label); + entity.percentage_label = table_helpers.deep_copy(percentage_label); + entity.timer_label = table_helpers.deep_copy(timer_label); + + entity.bar.offset.x = entity.bar.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.bar.offset.y = entity.bar.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.bar.size.width = entity.bar.size.width * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.bar.size.height = entity.bar.size.height * config.current_config.global_settings.modifiers.global_scale_modifier; + + entity.name_label.offset.x = entity.name_label.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.name_label.offset.y = entity.name_label.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + + entity.text_label.offset.x = entity.text_label.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.text_label.offset.y = entity.text_label.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + + entity.value_label.offset.x = entity.value_label.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.value_label.offset.y = entity.value_label.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + + entity.percentage_label.offset.x = entity.percentage_label.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.percentage_label.offset.y = entity.percentage_label.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + + entity.timer_label.offset.x = entity.timer_label.offset.x * config.current_config.global_settings.modifiers.global_scale_modifier; + entity.timer_label.offset.y = entity.timer_label.offset.y * config.current_config.global_settings.modifiers.global_scale_modifier; + + return entity; +end + +function ailment_UI_entity.draw_dynamic(ailment, ailment_UI, position_on_screen, opacity_scale) + if not ailment_UI.visibility then + return; + end + + local ailment_name = ""; + if config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.include.ailment_name then + ailment_name = ailment.name .. " "; + end + if config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.include.activation_count and ailment.activate_count ~= 0 then + ailment_name = ailment_name .. "x" .. tostring(ailment.activate_count); + end + + if ailment.is_active then + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.timer_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.timer_label, position_on_screen, opacity_scale, 0, ailment.timer); + else + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.buildup_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.value_label, position_on_screen, opacity_scale, ailment.total_buildup, ailment.buildup_limit); + drawing.draw_label(ailment_UI.percentage_label, position_on_screen, opacity_scale, 100 * ailment.buildup_percentage); + end +end + +function ailment_UI_entity.draw_static(ailment, ailment_UI, position_on_screen, opacity_scale) + if not ailment_UI.visibility then + return; + end + + local ailment_name = ""; + if config.current_config.large_monster_UI.static.ailments.ailment_name_label.include.ailment_name then + ailment_name = ailment.name .. " "; + end + if config.current_config.large_monster_UI.static.ailments.ailment_name_label.include.activation_count and ailment.activate_count ~= 0 then + ailment_name = ailment_name .. "x" .. tostring(ailment.activate_count); + end + + if ailment.is_active then + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.timer_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.timer_label, position_on_screen, opacity_scale, 0, ailment.timer); + else + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.buildup_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.value_label, position_on_screen, opacity_scale, ailment.total_buildup, ailment.buildup_limit); + drawing.draw_label(ailment_UI.percentage_label, position_on_screen, opacity_scale, 100 * ailment.buildup_percentage); + end +end + +function ailment_UI_entity.draw_highlighted(ailment, ailment_UI, position_on_screen, opacity_scale) + if not ailment_UI.visibility then + return; + end + + local ailment_name = ""; + if config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.include.ailment_name then + ailment_name = ailment.name .. " "; + end + if config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.include.activation_count and ailment.activate_count ~= 0 then + ailment_name = ailment_name .. "x" .. tostring(ailment.activate_count); + end + + if ailment.is_active then + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.timer_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.timer_label, position_on_screen, opacity_scale, 0, ailment.timer); + else + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.buildup_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.value_label, position_on_screen, opacity_scale, ailment.total_buildup, ailment.buildup_limit); + drawing.draw_label(ailment_UI.percentage_label, position_on_screen, opacity_scale, 100 * ailment.buildup_percentage); + end +end + +function ailment_UI_entity.draw_small(ailment, ailment_UI, position_on_screen, opacity_scale) + if not ailment_UI.visibility then + return; + end + + local ailment_name = ""; + if config.current_config.small_monster_UI.ailments.ailment_name_label.include.ailment_name then + ailment_name = ailment.name .. " "; + end + if config.current_config.small_monster_UI.ailments.ailment_name_label.include.activation_count and ailment.activate_count ~= 0 then + ailment_name = ailment_name .. "x" .. tostring(ailment.activate_count); + end + + if ailment.is_active then + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.timer_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.timer_label, position_on_screen, opacity_scale, 0, ailment.timer); + else + drawing.draw_bar(ailment_UI.bar, position_on_screen, opacity_scale, ailment.buildup_percentage); + + drawing.draw_label(ailment_UI.name_label, position_on_screen, opacity_scale, ailment_name); + drawing.draw_label(ailment_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.buildup); + drawing.draw_label(ailment_UI.value_label, position_on_screen, opacity_scale, ailment.total_buildup, ailment.buildup_limit); + drawing.draw_label(ailment_UI.percentage_label, position_on_screen, opacity_scale, 100 * ailment.buildup_percentage); + end +end + +function ailment_UI_entity.init_module() + table_helpers = require("MHR_Overlay.Misc.table_helpers"); + drawing = require("MHR_Overlay.UI.drawing"); + config = require("MHR_Overlay.Misc.config"); + language = require("MHR_Overlay.Misc.language"); +end + +return ailment_UI_entity; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua index 842c80a..9b22a0d 100644 --- a/reframework/autorun/MHR_Overlay/UI/customization_menu.lua +++ b/reframework/autorun/MHR_Overlay/UI/customization_menu.lua @@ -28,6 +28,7 @@ customization_menu.selected_language_index = 1; customization_menu.displayed_orientation_types = {}; customization_menu.displayed_anchor_types = {}; +customization_menu.displayed_ailments_sorting_types = {}; customization_menu.displayed_monster_UI_sorting_types = {}; customization_menu.displayed_large_monster_UI_parts_sorting_types = {}; @@ -41,7 +42,7 @@ customization_menu.orientation_types = {}; customization_menu.anchor_types = {}; customization_menu.monster_UI_sorting_types = {}; -customization_menu.large_monster_UI_parts_sorting_types = {}; +customization_menu.ailments_sorting_types = {}; customization_menu.damage_meter_UI_highlighted_bar_types = {}; customization_menu.damage_meter_UI_damage_bar_relative_types = {}; @@ -63,6 +64,7 @@ customization_menu.fonts = {"Arial", "Arial Black", "Bahnschrift", "Calibri", "C customization_menu.small_monster_UI_orientation_index = 1; customization_menu.small_monster_UI_sorting_type_index = 1; +customization_menu.small_monster_UI_ailments_sorting_type_index = 1; customization_menu.large_monster_UI_orientation_index = 1; customization_menu.large_monster_UI_sorting_type_index = 1; @@ -72,6 +74,10 @@ customization_menu.large_monster_dynamic_UI_parts_sorting_type_index = 1; customization_menu.large_monster_static_UI_parts_sorting_type_index = 1; customization_menu.large_monster_highlighted_UI_parts_sorting_type_index = 1; +customization_menu.large_monster_dynamic_UI_ailments_sorting_type_index = 1; +customization_menu.large_monster_static_UI_ailments_sorting_type_index = 1; +customization_menu.large_monster_highlighted_UI_ailments_sorting_type_index = 1; + customization_menu.damage_meter_UI_orientation_index = 1; customization_menu.damage_meter_UI_sorting_type_index = 1; customization_menu.damage_meter_UI_highlighted_bar_index = 1; @@ -125,7 +131,9 @@ function customization_menu.init() customization_menu.displayed_monster_UI_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.health, language.current_language.customization_menu.health_percentage, language.current_language.customization_menu.distance}; customization_menu.displayed_large_monster_UI_parts_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.health, language.current_language.customization_menu.health_percentage}; - + customization_menu.displayed_ailments_sorting_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.buildup, language.current_language.customization_menu.buildup_percentage}; + + customization_menu.displayed_damage_meter_UI_highlighted_bar_types = {language.current_language.customization_menu.me, language.current_language.customization_menu.top_damage, language.current_language.customization_menu.top_dps, language.current_language.customization_menu.none}; customization_menu.displayed_damage_meter_UI_damage_bar_relative_types = {language.current_language.customization_menu.total_damage, language.current_language.customization_menu.top_damage}; customization_menu.displayed_damage_meter_UI_my_damage_bar_location_types = {language.current_language.customization_menu.normal, language.current_language.customization_menu.first, language.current_language.customization_menu.last}; @@ -140,6 +148,7 @@ function customization_menu.init() customization_menu.monster_UI_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.health, language.default_language.customization_menu.health_percentage, language.default_language.customization_menu.distance}; customization_menu.large_monster_UI_parts_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.health, language.default_language.customization_menu.health_percentage}; + customization_menu.ailments_sorting_types = {language.default_language.customization_menu.normal, language.default_language.customization_menu.buildup, language.default_language.customization_menu.buildup_percentage}; customization_menu.damage_meter_UI_highlighted_bar_types = {language.default_language.customization_menu.me, language.default_language.customization_menu.top_damage, language.default_language.customization_menu.top_dps, language.default_language.customization_menu.none}; customization_menu.damage_meter_UI_damage_bar_relative_types = {language.default_language.customization_menu.total_damage, language.default_language.customization_menu.top_damage}; @@ -157,6 +166,9 @@ function customization_menu.init() customization_menu.small_monster_UI_sorting_type_index = table_helpers.find_index(customization_menu.monster_UI_sorting_types, config.current_config.small_monster_UI.static_sorting.type, false); + customization_menu.small_monster_UI_ailments_sorting_type_index = table_helpers.find_index(customization_menu.ailments_sorting_types, + config.current_config.small_monster_UI.ailments.sorting.type, false); + customization_menu.large_monster_UI_orientation_index = table_helpers.find_index(customization_menu.orientation_types, @@ -180,6 +192,20 @@ function customization_menu.init() customization_menu.large_monster_UI_parts_sorting_types, config.current_config.large_monster_UI.highlighted.parts.sorting.type, false); + + customization_menu.large_monster_dynamic_UI_ailments_sorting_type_index = table_helpers.find_index( + customization_menu.ailments_sorting_types, + config.current_config.large_monster_UI.dynamic.ailments.sorting.type, false); + + customization_menu.large_monster_static_UI_ailments_sorting_type_index = table_helpers.find_index( + customization_menu.ailments_sorting_types, + config.current_config.large_monster_UI.static.ailments.sorting.type, false); + + customization_menu.large_monster_highlighted_UI_ailments_sorting_type_index = table_helpers.find_index( + customization_menu.ailments_sorting_types, + config.current_config.large_monster_UI.highlighted.ailments.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); @@ -278,8 +304,6 @@ function customization_menu.draw() imgui.tree_pop(); end - - if imgui.tree_node(language.current_language.customization_menu.hotkeys) then if customization_menu.all_UI_waiting_for_key then if imgui.button(language.current_language.customization_menu.press_any_key) then @@ -1431,10 +1455,502 @@ function customization_menu.draw() imgui.tree_pop(); end - if small_monster_UI_changed then - for _, monster in pairs(small_monster.list) do - small_monster.init_UI(monster); + if imgui.tree_node(language.current_language.customization_menu.ailments) then + changed, config.current_config.small_monster_UI.ailments.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.small_monster_UI.ailments.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); end + + if imgui.tree_node(language.current_language.customization_menu.spacing) then + changed, config.current_config.small_monster_UI.ailments.spacing.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.spacing.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.spacing.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.spacing.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.settings) then + changed, config.current_config.small_monster_UI.ailments.settings.hide_ailments_with_zero_buildup = imgui.checkbox( + language.current_language.customization_menu.hide_ailments_with_zero_buildup, config.current_config.small_monster_UI.ailments.settings.hide_ailments_with_zero_buildup); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.settings.hide_inactive_ailments_with_no_buildup_support = imgui.checkbox( + language.current_language.customization_menu.hide_inactive_ailments_with_no_buildup_support, config.current_config.small_monster_UI.ailments.settings.hide_inactive_ailments_with_no_buildup_support); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.settings.hide_all_inactive_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_inactive_ailments, config.current_config.small_monster_UI.ailments.settings.hide_all_inactive_ailments); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.settings.hide_all_active_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_active_ailments, config.current_config.small_monster_UI.ailments.settings.hide_all_active_ailments); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.settings.hide_disabled_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_disabled_ailments, config.current_config.small_monster_UI.ailments.settings.hide_disabled_ailments); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.settings.time_limit = imgui.drag_float(language.current_language.customization_menu.time_limit, + config.current_config.small_monster_UI.ailments.settings.time_limit, 0.1, 0, 99999, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.sorting) then + changed, customization_menu.small_monster_UI_ailments_sorting_type_index = imgui.combo(language.current_language.customization_menu.type, + customization_menu.small_monster_UI_ailments_sorting_type_index, + customization_menu.ailments_sorting_types); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + if changed then + config.current_config.small_monster_UI.ailments.sorting.type = + customization_menu.ailments_sorting_types[customization_menu.small_monster_UI_ailments_sorting_type_index]; + end + + changed, config.current_config.small_monster_UI.ailments.sorting.reversed_order = imgui.checkbox( + language.current_language.customization_menu.reversed_order, config.current_config.small_monster_UI.ailments.sorting.reversed_order); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.small_monster_UI.ailments.ailment_name_label.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.include) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.include.ailment_name = imgui.checkbox( + language.current_language.customization_menu.ailment_name, config.current_config.small_monster_UI.ailments.ailment_name_label.include.ailment_name); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.include.activation_count = imgui.checkbox( + language.current_language.customization_menu.activation_count, config.current_config.small_monster_UI.ailments.ailment_name_label.include.activation_count); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.ailment_name_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.ailment_name_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.ailment_name_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.ailment_name_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.text_label) then + changed, config.current_config.small_monster_UI.ailments.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.small_monster_UI.ailments.text_label.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.text_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.text_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.text_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.text_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.text_label.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.text_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.small_monster_UI.ailments.text_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.text_label.shadow.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.text_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.text_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.text_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.text_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.text_label.shadow.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.text_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.value_label) then + changed, config.current_config.small_monster_UI.ailments.value_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.small_monster_UI.ailments.value_label.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.value_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.value_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.value_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.value_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.value_label.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.value_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.small_monster_UI.ailments.value_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.value_label.shadow.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.value_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.value_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.value_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.value_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.value_label.shadow.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.value_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.percentage_label) then + changed, config.current_config.small_monster_UI.ailments.percentage_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.percentage_label.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.percentage_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.percentage_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.percentage_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.percentage_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.percentage_label.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.percentage_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.small_monster_UI.ailments.percentage_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.percentage_label.shadow.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.percentage_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.small_monster_UI.ailments.percentage_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.percentage_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.small_monster_UI.ailments.percentage_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.percentage_label.shadow.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.percentage_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.timer_label) then + changed, config.current_config.small_monster_UI.ailments.timer_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.timer_label.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.timer_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.timer_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.timer_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.timer_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.timer_label.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.timer_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.small_monster_UI.ailments.timer_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.small_monster_UI.ailments.timer_label.shadow.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.timer_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.small_monster_UI.ailments.timer_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.timer_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.small_monster_UI.ailments.timer_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.small_monster_UI.ailments.timer_label.shadow.color = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.timer_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.bar) then + changed, config.current_config.small_monster_UI.ailments.bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.small_monster_UI.ailments.bar.visibility); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.small_monster_UI.ailments.bar.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.small_monster_UI.ailments.bar.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.bar.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.small_monster_UI.ailments.bar.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.size) then + changed, config.current_config.small_monster_UI.ailments.bar.size.width = imgui.drag_float(language.current_language.customization_menu.width, + config.current_config.small_monster_UI.ailments.bar.size.width, 0.1, 0, screen.width, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + changed, config.current_config.small_monster_UI.ailments.bar.size.height = imgui.drag_float(language.current_language.customization_menu.height, + config.current_config.small_monster_UI.ailments.bar.size.height, 0.1, 0, screen.height, "%.1f"); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.colors) then + if imgui.tree_node(language.current_language.customization_menu.foreground) then + changed, config.current_config.small_monster_UI.ailments.bar.colors.foreground = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.bar.colors.foreground, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.background) then + changed, config.current_config.small_monster_UI.ailments.bar.colors.background = imgui.color_picker_argb("", config.current_config.small_monster_UI.ailments.bar.colors.background, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + small_monster_UI_changed = small_monster_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); end imgui.tree_pop(); @@ -2996,6 +3512,509 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.ailments) then + changed, config.current_config.large_monster_UI.dynamic.ailments.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.dynamic.ailments.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.spacing) then + changed, config.current_config.large_monster_UI.dynamic.ailments.spacing.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.spacing.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.spacing.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.spacing.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.settings) then + changed, config.current_config.large_monster_UI.dynamic.ailments.settings.hide_ailments_with_zero_buildup = imgui.checkbox( + language.current_language.customization_menu.hide_ailments_with_zero_buildup, config.current_config.large_monster_UI.dynamic.ailments.settings.hide_ailments_with_zero_buildup); + 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.ailments.settings.hide_inactive_ailments_with_no_buildup_support = imgui.checkbox( + language.current_language.customization_menu.hide_inactive_ailments_with_no_buildup_support, config.current_config.large_monster_UI.dynamic.ailments.settings.hide_inactive_ailments_with_no_buildup_support); + 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.ailments.settings.hide_all_inactive_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_inactive_ailments, config.current_config.large_monster_UI.dynamic.ailments.settings.hide_all_inactive_ailments); + 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.ailments.settings.hide_all_active_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_active_ailments, config.current_config.large_monster_UI.dynamic.ailments.settings.hide_all_active_ailments); + 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.ailments.settings.hide_disabled_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_disabled_ailments, config.current_config.large_monster_UI.dynamic.ailments.settings.hide_disabled_ailments); + 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.ailments.settings.offset_is_relative_to_parts = imgui.checkbox( + language.current_language.customization_menu.offset_is_relative_to_parts, config.current_config.large_monster_UI.dynamic.ailments.settings.offset_is_relative_to_parts); + 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.ailments.settings.time_limit = imgui.drag_float(language.current_language.customization_menu.time_limit, + config.current_config.large_monster_UI.dynamic.ailments.settings.time_limit, 0.1, 0, 99999, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.sorting) then + changed, customization_menu.small_monster_UI_ailments_sorting_type_index = imgui.combo(language.current_language.customization_menu.type, + customization_menu.small_monster_UI_ailments_sorting_type_index, + customization_menu.ailments_sorting_types); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + if changed then + config.current_config.large_monster_UI.dynamic.ailments.sorting.type = + customization_menu.ailments_sorting_types[customization_menu.small_monster_UI_ailments_sorting_type_index]; + end + + changed, config.current_config.large_monster_UI.dynamic.ailments.sorting.reversed_order = imgui.checkbox( + language.current_language.customization_menu.reversed_order, config.current_config.large_monster_UI.dynamic.ailments.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 + + if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.include) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.include.ailment_name = imgui.checkbox( + language.current_language.customization_menu.ailment_name, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.include.ailment_name); + 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.ailments.ailment_name_label.include.activation_count = imgui.checkbox( + language.current_language.customization_menu.activation_count, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.include.activation_count); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.ailment_name_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.text_label) then + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.dynamic.ailments.text_label.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.text_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.text_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.text_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.text_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.value_label) then + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.dynamic.ailments.value_label.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.value_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.value_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.value_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.value_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.percentage_label) then + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.percentage_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.percentage_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.percentage_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.percentage_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.timer_label) then + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.timer_label.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.timer_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.timer_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.timer_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.timer_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.bar) then + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.dynamic.ailments.bar.visibility); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.dynamic.ailments.bar.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.dynamic.ailments.bar.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.size) then + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.size.width = imgui.drag_float(language.current_language.customization_menu.width, + config.current_config.large_monster_UI.dynamic.ailments.bar.size.width, 0.1, 0, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.size.height = imgui.drag_float(language.current_language.customization_menu.height, + config.current_config.large_monster_UI.dynamic.ailments.bar.size.height, 0.1, 0, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.colors) then + if imgui.tree_node(language.current_language.customization_menu.foreground) then + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.bar.colors.foreground, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.background) then + changed, config.current_config.large_monster_UI.dynamic.ailments.bar.colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.ailments.bar.colors.background, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + imgui.tree_pop(); end @@ -4584,6 +5603,509 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.ailments) then + changed, config.current_config.large_monster_UI.static.ailments.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.static.ailments.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.spacing) then + changed, config.current_config.large_monster_UI.static.ailments.spacing.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.spacing.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.spacing.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.spacing.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.settings) then + changed, config.current_config.large_monster_UI.static.ailments.settings.hide_ailments_with_zero_buildup = imgui.checkbox( + language.current_language.customization_menu.hide_ailments_with_zero_buildup, config.current_config.large_monster_UI.static.ailments.settings.hide_ailments_with_zero_buildup); + 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.ailments.settings.hide_inactive_ailments_with_no_buildup_support = imgui.checkbox( + language.current_language.customization_menu.hide_inactive_ailments_with_no_buildup_support, config.current_config.large_monster_UI.static.ailments.settings.hide_inactive_ailments_with_no_buildup_support); + 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.ailments.settings.hide_all_inactive_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_inactive_ailments, config.current_config.large_monster_UI.static.ailments.settings.hide_all_inactive_ailments); + 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.ailments.settings.hide_all_active_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_active_ailments, config.current_config.large_monster_UI.static.ailments.settings.hide_all_active_ailments); + 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.ailments.settings.hide_disabled_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_disabled_ailments, config.current_config.large_monster_UI.static.ailments.settings.hide_disabled_ailments); + 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.ailments.settings.offset_is_relative_to_parts = imgui.checkbox( + language.current_language.customization_menu.offset_is_relative_to_parts, config.current_config.large_monster_UI.static.ailments.settings.offset_is_relative_to_parts); + 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.ailments.settings.time_limit = imgui.drag_float(language.current_language.customization_menu.time_limit, + config.current_config.large_monster_UI.static.ailments.settings.time_limit, 0.1, 0, 99999, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.sorting) then + changed, customization_menu.small_monster_UI_ailments_sorting_type_index = imgui.combo(language.current_language.customization_menu.type, + customization_menu.small_monster_UI_ailments_sorting_type_index, + customization_menu.ailments_sorting_types); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + if changed then + config.current_config.large_monster_UI.static.ailments.sorting.type = + customization_menu.ailments_sorting_types[customization_menu.small_monster_UI_ailments_sorting_type_index]; + end + + changed, config.current_config.large_monster_UI.static.ailments.sorting.reversed_order = imgui.checkbox( + language.current_language.customization_menu.reversed_order, config.current_config.large_monster_UI.static.ailments.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 + + if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.static.ailments.ailment_name_label.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.include) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.include.ailment_name = imgui.checkbox( + language.current_language.customization_menu.ailment_name, config.current_config.large_monster_UI.static.ailments.ailment_name_label.include.ailment_name); + 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.ailments.ailment_name_label.include.activation_count = imgui.checkbox( + language.current_language.customization_menu.activation_count, config.current_config.large_monster_UI.static.ailments.ailment_name_label.include.activation_count); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.ailment_name_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.ailment_name_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.ailment_name_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.ailment_name_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.text_label) then + changed, config.current_config.large_monster_UI.static.ailments.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.static.ailments.text_label.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.text_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.text_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.text_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.text_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.text_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.text_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.static.ailments.text_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.text_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.text_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.text_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.text_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.text_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.text_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.text_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.value_label) then + changed, config.current_config.large_monster_UI.static.ailments.value_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.static.ailments.value_label.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.value_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.value_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.value_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.value_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.value_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.value_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.static.ailments.value_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.value_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.value_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.value_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.value_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.value_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.value_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.value_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.percentage_label) then + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.percentage_label.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.percentage_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.percentage_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.percentage_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.percentage_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.timer_label) then + changed, config.current_config.large_monster_UI.static.ailments.timer_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.timer_label.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.timer_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.timer_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.timer_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.timer_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.timer_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.timer_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.static.ailments.timer_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.timer_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.bar) then + changed, config.current_config.large_monster_UI.static.ailments.bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.static.ailments.bar.visibility); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.static.ailments.bar.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.static.ailments.bar.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.bar.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.static.ailments.bar.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.size) then + changed, config.current_config.large_monster_UI.static.ailments.bar.size.width = imgui.drag_float(language.current_language.customization_menu.width, + config.current_config.large_monster_UI.static.ailments.bar.size.width, 0.1, 0, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + changed, config.current_config.large_monster_UI.static.ailments.bar.size.height = imgui.drag_float(language.current_language.customization_menu.height, + config.current_config.large_monster_UI.static.ailments.bar.size.height, 0.1, 0, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.colors) then + if imgui.tree_node(language.current_language.customization_menu.foreground) then + changed, config.current_config.large_monster_UI.static.ailments.bar.colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.bar.colors.foreground, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.background) then + changed, config.current_config.large_monster_UI.static.ailments.bar.colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.ailments.bar.colors.background, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_static_UI_changed = large_monster_static_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + imgui.tree_pop(); end @@ -6100,6 +7622,509 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.ailments) then + changed, config.current_config.large_monster_UI.highlighted.ailments.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.highlighted.ailments.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.spacing) then + changed, config.current_config.large_monster_UI.highlighted.ailments.spacing.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.spacing.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.spacing.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.spacing.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.settings) then + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_ailments_with_zero_buildup = imgui.checkbox( + language.current_language.customization_menu.hide_ailments_with_zero_buildup, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_ailments_with_zero_buildup); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_inactive_ailments_with_no_buildup_support = imgui.checkbox( + language.current_language.customization_menu.hide_inactive_ailments_with_no_buildup_support, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_inactive_ailments_with_no_buildup_support); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_all_inactive_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_inactive_ailments, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_all_inactive_ailments); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_all_active_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_all_active_ailments, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_all_active_ailments); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_disabled_ailments = imgui.checkbox( + language.current_language.customization_menu.hide_disabled_ailments, config.current_config.large_monster_UI.highlighted.ailments.settings.hide_disabled_ailments); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.offset_is_relative_to_parts = imgui.checkbox( + language.current_language.customization_menu.offset_is_relative_to_parts, config.current_config.large_monster_UI.highlighted.ailments.settings.offset_is_relative_to_parts); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.settings.time_limit = imgui.drag_float(language.current_language.customization_menu.time_limit, + config.current_config.large_monster_UI.highlighted.ailments.settings.time_limit, 0.1, 0, 99999, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.sorting) then + changed, customization_menu.small_monster_UI_ailments_sorting_type_index = imgui.combo(language.current_language.customization_menu.type, + customization_menu.small_monster_UI_ailments_sorting_type_index, + customization_menu.ailments_sorting_types); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + if changed then + config.current_config.large_monster_UI.highlighted.ailments.sorting.type = + customization_menu.ailments_sorting_types[customization_menu.small_monster_UI_ailments_sorting_type_index]; + end + + changed, config.current_config.large_monster_UI.highlighted.ailments.sorting.reversed_order = imgui.checkbox( + language.current_language.customization_menu.reversed_order, config.current_config.large_monster_UI.highlighted.ailments.sorting.reversed_order); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.include) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.include.ailment_name = imgui.checkbox( + language.current_language.customization_menu.ailment_name, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.include.ailment_name); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.include.activation_count = imgui.checkbox( + language.current_language.customization_menu.activation_count, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.include.activation_count); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.ailment_name_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.text_label) then + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.highlighted.ailments.text_label.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.text_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.text_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.text_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.text_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.value_label) then + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.highlighted.ailments.value_label.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.value_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.value_label.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.value_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.value_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.percentage_label) then + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.percentage_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.percentage_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.percentage_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.percentage_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.timer_label) then + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.timer_label.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.timer_label.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.timer_label.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.timer_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.visibility = imgui.checkbox( + language.current_language.customization_menu.visible, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.offset.x = imgui.drag_float( + language.current_language.customization_menu.x, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.offset.x, 0.1, -screen.width, + screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.offset.y = imgui.drag_float( + language.current_language.customization_menu.y, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.offset.y, 0.1, -screen.height, + screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.timer_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.bar) then + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.large_monster_UI.highlighted.ailments.bar.visibility); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.large_monster_UI.highlighted.ailments.bar.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.large_monster_UI.highlighted.ailments.bar.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.size) then + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.size.width = imgui.drag_float(language.current_language.customization_menu.width, + config.current_config.large_monster_UI.highlighted.ailments.bar.size.width, 0.1, 0, screen.width, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.size.height = imgui.drag_float(language.current_language.customization_menu.height, + config.current_config.large_monster_UI.highlighted.ailments.bar.size.height, 0.1, 0, screen.height, "%.1f"); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.colors) then + if imgui.tree_node(language.current_language.customization_menu.foreground) then + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.bar.colors.foreground, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.background) then + changed, config.current_config.large_monster_UI.highlighted.ailments.bar.colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.highlighted.ailments.bar.colors.background, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + large_monster_highlighted_UI_changed = large_monster_highlighted_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + imgui.tree_pop(); end @@ -6611,6 +8636,72 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.dps_label) then + changed, config.current_config.damage_meter_UI.dps_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.damage_meter_UI.dps_label.visibility); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + -- add text format + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.dps_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.damage_meter_UI.dps_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + changed, config.current_config.damage_meter_UI.dps_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.damage_meter_UI.dps_label.offset.y, 0.1, -screen.height, screen.height, "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.damage_meter_UI.dps_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.dps_label.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.damage_meter_UI.dps_label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + config.current_config.damage_meter_UI.dps_label.shadow.visibility); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.dps_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, + config.current_config.damage_meter_UI.dps_label.shadow.offset.x, 0.1, -screen.width, screen.width, + "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + changed, config.current_config.damage_meter_UI.dps_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, + config.current_config.damage_meter_UI.dps_label.shadow.offset.y, 0.1, -screen.height, screen.height, + "%.1f"); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.color) then + changed, config.current_config.damage_meter_UI.dps_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.dps_label.shadow.color, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.damage_value_label) then changed, config.current_config.damage_meter_UI.damage_value_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.damage_meter_UI.damage_value_label.visibility); @@ -6742,72 +8833,6 @@ function customization_menu.draw() imgui.tree_pop(); end - if imgui.tree_node(language.current_language.customization_menu.dps_label) then - changed, config.current_config.damage_meter_UI.dps_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, - config.current_config.damage_meter_UI.dps_label.visibility); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - -- add text format - - if imgui.tree_node(language.current_language.customization_menu.offset) then - changed, config.current_config.damage_meter_UI.dps_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, - config.current_config.damage_meter_UI.dps_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - changed, config.current_config.damage_meter_UI.dps_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, - config.current_config.damage_meter_UI.dps_label.offset.y, 0.1, -screen.height, screen.height, "%.1f"); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - imgui.tree_pop(); - end - - if imgui.tree_node(language.current_language.customization_menu.color) then - changed, config.current_config.damage_meter_UI.dps_label.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.dps_label.color, customization_menu.color_picker_flags); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - imgui.tree_pop(); - end - - if imgui.tree_node(language.current_language.customization_menu.shadow) then - changed, config.current_config.damage_meter_UI.dps_label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, - config.current_config.damage_meter_UI.dps_label.shadow.visibility); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - if imgui.tree_node(language.current_language.customization_menu.offset) then - changed, config.current_config.damage_meter_UI.dps_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, - config.current_config.damage_meter_UI.dps_label.shadow.offset.x, 0.1, -screen.width, screen.width, - "%.1f"); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - changed, config.current_config.damage_meter_UI.dps_label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, - config.current_config.damage_meter_UI.dps_label.shadow.offset.y, 0.1, -screen.height, screen.height, - "%.1f"); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - imgui.tree_pop(); - end - - if imgui.tree_node(language.current_language.customization_menu.color) then - changed, config.current_config.damage_meter_UI.dps_label.shadow.color = imgui.color_picker_argb("", config.current_config.damage_meter_UI.dps_label.shadow.color, customization_menu.color_picker_flags); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - imgui.tree_pop(); - end - - imgui.tree_pop(); - end - - imgui.tree_pop(); - end - if imgui.tree_node(language.current_language.customization_menu.total_damage_label) then changed, config.current_config.damage_meter_UI.total_damage_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.damage_meter_UI.total_damage_label.visibility); @@ -6873,72 +8898,6 @@ function customization_menu.draw() imgui.tree_pop(); end - if imgui.tree_node(language.current_language.customization_menu.total_damage_value_label) then - changed, config.current_config.damage_meter_UI.total_damage_value_label.visibility = imgui.checkbox(language.current_language.customization_menu.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 - - if imgui.tree_node(language.current_language.customization_menu.offset) then - changed, config.current_config.damage_meter_UI.total_damage_value_label.offset.x = imgui.drag_float(language.current_language.customization_menu.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(language.current_language.customization_menu.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 - - if imgui.tree_node(language.current_language.customization_menu.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, customization_menu.color_picker_flags); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - imgui.tree_pop(); - end - - if imgui.tree_node(language.current_language.customization_menu.shadow) then - changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, - 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(language.current_language.customization_menu.offset) then - changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.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(language.current_language.customization_menu.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 - - if imgui.tree_node(language.current_language.customization_menu.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, customization_menu.color_picker_flags); - config_changed = config_changed or changed; - damage_meter_UI_changed = damage_meter_UI_changed or changed; - - imgui.tree_pop(); - end - - imgui.tree_pop(); - end - - imgui.tree_pop(); - end - if imgui.tree_node(language.current_language.customization_menu.total_dps_label) then changed, config.current_config.damage_meter_UI.total_dps_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.damage_meter_UI.total_dps_label.visibility); @@ -7005,6 +8964,72 @@ function customization_menu.draw() imgui.tree_pop(); end + if imgui.tree_node(language.current_language.customization_menu.total_damage_value_label) then + changed, config.current_config.damage_meter_UI.total_damage_value_label.visibility = imgui.checkbox(language.current_language.customization_menu.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 + + if imgui.tree_node(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.total_damage_value_label.offset.x = imgui.drag_float(language.current_language.customization_menu.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(language.current_language.customization_menu.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 + + if imgui.tree_node(language.current_language.customization_menu.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, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + if imgui.tree_node(language.current_language.customization_menu.shadow) then + changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, + 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(language.current_language.customization_menu.offset) then + changed, config.current_config.damage_meter_UI.total_damage_value_label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.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(language.current_language.customization_menu.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 + + if imgui.tree_node(language.current_language.customization_menu.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, customization_menu.color_picker_flags); + config_changed = config_changed or changed; + damage_meter_UI_changed = damage_meter_UI_changed or changed; + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + + imgui.tree_pop(); + end + if imgui.tree_node(language.current_language.customization_menu.damage_bar) then changed, config.current_config.damage_meter_UI.damage_bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible, config.current_config.damage_meter_UI.damage_bar.visibility); @@ -7127,6 +9152,12 @@ function customization_menu.draw() imgui.end_window(); imgui.pop_font(customization_menu.font); + if small_monster_UI_changed or modifiers_changed then + for _, monster in pairs(small_monster.list) do + small_monster.init_UI(monster); + end + end + if large_monster_dynamic_UI_changed or modifiers_changed then for _, monster in pairs(large_monster.list) do large_monster.init_dynamic_UI(monster); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index 7504acc..f521b9b 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -1,6 +1,7 @@ { "UI": { "HP": "HP:", + "buildup": "Buildup:", "gold": "Gold", "mini": "Mini", "player": "Player", @@ -9,9 +10,35 @@ "stamina": "Stamina:", "total_damage": "Total Damage" }, + "ailments": { + "blast": "Blast", + "dung_bomb": "Dung Bomb", + "exhaust": "Exhaust", + "fall_otomo_trap": "Fall Otomo Trap", + "fall_trap": "Fall Trap", + "fireblight": "Fireblight", + "flash": "Flash", + "iceblight": "Iceblight", + "mount": "Mount", + "paralysis": "Paralysis", + "poison": "Poison", + "quick_sand": "Quick Sand", + "shock_otomo_trap": "Shock Otomo Trap", + "shock_trap": "Shock Trap", + "sleep": "Sleep", + "steel_fang": "Steel Fang", + "stun": "Stun", + "thunderblight": "Thunderblight", + "tranq_bomb": "Tranq Bomb", + "waterblight": "Waterblight" + }, "customization_menu": { "UI_font": "UI Font", "UI_font_notice": "Any changes to the font require script reload!", + "activation_count": "Activation Count", + "ailment_name": "Ailment Name", + "ailment_name_label": "Ailment Name Label", + "ailments": "Ailments", "all_UI": "All UI", "anchor": "Anchor", "assign_new_key": "Assign new key", @@ -23,6 +50,8 @@ "bomb_damage": "Bomb Damage", "bottom_left": "Bottom-Left", "bottom_right": "Bottom-Right", + "buildup": "Buildup", + "buildup_percentage": "Buildup Percentage", "capture_line": "Capture Line", "color": "Color", "colors": "Colors", @@ -55,7 +84,12 @@ "health": "Health", "health_percentage": "Health Percentage", "height": "Height", + "hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0", + "hide_all_active_ailments": "Hide All Active Ailments", + "hide_all_inactive_ailments": "Hide All Inactive Ailments", "hide_dead_or_captured": "Hide Dead or Captured", + "hide_disabled_ailments": "Hide Disabled Ailments", + "hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support", "hide_module_if_total_damage_is_zero": "Hide Module if Total Damage is 0", "hide_player_if_player_damage_is_zero": "Hide Player if Player Damage is 0", "hide_total_if_total_damage_is_zero": "Hide Total if Total Damage is 0", @@ -95,6 +129,7 @@ "none": "None", "normal": "Normal", "offset": "Offset", + "offset_is_relative_to_parts": "Offset is Relative to Parts", "opacity_falloff": "Opacity Falloff", "orientation": "Orientation", "other_players": "Other Players", @@ -134,6 +169,7 @@ "text_label": "Text Label", "time_UI": "Time UI", "time_label": "Time Label", + "time_limit": "Time Limit (seconds)", "timer_label": "Timer Label", "top_damage": "Top Damage", "top_dps": "Top DPS", diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 165e3f5..f14c882 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -1,6 +1,7 @@ { "UI": { "HP": "체력:", + "buildup": "Buildup:", "gold": "금관", "mini": "최소", "player": "헌터", @@ -9,21 +10,49 @@ "stamina": "스태미나:", "total_damage": "총 대미지" }, + "ailments": { + "blast": "Blast", + "dung_bomb": "Dung Bomb", + "exhaust": "Exhaust", + "fall_otomo_trap": "Fall Otomo Trap", + "fall_trap": "Fall Trap", + "fireblight": "Fireblight", + "flash": "Flash", + "iceblight": "Iceblight", + "mount": "Mount", + "paralysis": "Paralysis", + "poison": "Poison", + "quick_sand": "Quick Sand", + "shock_otomo_trap": "Shock Otomo Trap", + "shock_trap": "Shock Trap", + "sleep": "Sleep", + "steel_fang": "Steel Fang", + "stun": "Stun", + "thunderblight": "Thunderblight", + "tranq_bomb": "Tranq Bomb", + "waterblight": "Waterblight" + }, "customization_menu": { "UI_font": "UI 글꼴", "UI_font_notice": "글꼴 변경시 스크립트를 리로드 해야합니다!", + "activation_count": "Activation Count", + "ailment_name": "Ailment Name", + "ailment_name_label": "Ailment Name Label", + "ailments": "Ailments", "all_UI": "모든 UI", "anchor": "기준", "assign_new_key": "새 키를 할당", "background": "배경색", "bar": "막대", - "blast_damage": "Blast Damage", + "blast_damage": "폭파 대미지", "body_parts": "부위", "bold": "굵게", "bomb_damage": "폭탄 대미지", "bottom_left": "좌하단", "bottom_right": "우하단", "break_count": "파괴 횟수", + "buildup": "Buildup", + "buildup_percentage": "Buildup Percentage", "capture_line": "포획 표시선", "color": "색상", "colors": "색상", @@ -58,7 +87,12 @@ "health": "체력", "health_percentage": "체력 비율", "height": "높이", + "hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0", + "hide_all_active_ailments": "Hide All Active Ailments", + "hide_all_inactive_ailments": "Hide All Inactive Ailments", "hide_dead_or_captured": "토벌되거나 포획되면 숨김", + "hide_disabled_ailments": "Hide Disabled Ailments", + "hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support", "hide_module_if_total_damage_is_zero": "총 대미지가 0이면 모듈 숨김", "hide_player_if_player_damage_is_zero": "헌터 대미지가 0이면 헌터 숨김", "hide_total_if_total_damage_is_zero": "총 대미지가 0이면 모두 숨김", @@ -99,6 +133,7 @@ "none": "없음", "normal": "보통", "offset": "위치", + "offset_is_relative_to_parts": "Offset is Relative to Parts", "opacity_falloff": "투명도 감소", "orientation": "방향", "other_players": "다른 헌터", @@ -111,7 +146,7 @@ "player_id": "헌터 ID", "player_name": "헌터명", "player_name_label": "헌터명 라벨", - "poison_damage": "Poison Damage", + "poison_damage": "독 대미지", "position": "위치", "press_any_key": "설정할 키를 누르세요...", "prioritize_large_monsters": "대형 몬스터를 우선적으로", @@ -138,6 +173,7 @@ "text_label": "텍스트 라벨", "time_UI": "시간 UI", "time_label": "시간 라벨", + "time_limit": "Time Limit (seconds)", "timer_label": "타이머 라벨", "top_damage": "최고 대미지", "top_dps": "최고 DPS", diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index 1d4fe09..90dd7af 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -1,6 +1,7 @@ { "UI": { "HP": "ОЗ:", + "buildup": "Buildup", "gold": "Золото", "mini": "Мини", "player": "Игрок", @@ -9,14 +10,41 @@ "stamina": "Выносливость:", "total_damage": "Общий урон" }, + "ailments": { + "blast": "Blast", + "dung_bomb": "Dung Bomb", + "exhaust": "Exhaust", + "fall_otomo_trap": "Fall Otomo Trap", + "fall_trap": "Fall Trap", + "fireblight": "Fireblight", + "flash": "Flash", + "iceblight": "Iceblight", + "mount": "Mount", + "paralysis": "Paralysis", + "poison": "Poison", + "quick_sand": "Quick Sand", + "shock_otomo_trap": "Shock Otomo Trap", + "shock_trap": "Shock Trap", + "sleep": "Sleep", + "steel_fang": "Steel Fang", + "stun": "Stun", + "thunderblight": "Thunderblight", + "tranq_bomb": "Tranq Bomb", + "waterblight": "Waterblight" + }, "customization_menu": { "UI_font": "Шрифт интерфейса", "UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!", + "activation_count": "Activation Count", + "ailment_name": "Ailment Name", + "ailment_name_label": "Ailment Name Label", + "ailments": "Ailments", "all_UI": "Весь интерфейс", "anchor": "Привязка", "assign_new_key": "Привязать клавишу", "background": "Фон", "bar": "Шкала", + "blast": "Blast", "blast_damage": "Blast Damage", "body_parts": "Части тела", "bold": "Жирный", @@ -24,6 +52,8 @@ "bottom_left": "Левый нижний угол", "bottom_right": "Правй нижний угол", "break_count": "Счётчик повреждений", + "buildup": "Buildup", + "buildup_percentage": "Buildup Percentage", "capture_line": "Линия здоровья захвата", "color": "Цвет", "colors": "Цвета", @@ -39,15 +69,22 @@ "dps": "Урон в секунду", "dps_label": "Метка урона в секунду", "dps_mode": "Режим урона в секунду", + "dung_bomb": "Dung Bomb", "during_quest": "Во время квеста", "dynamic_positioning": "Динамическое позиционирование", "dynamically_positioned": "Рассположенный динамично", "enable_for": "Показывать для", "enabled": "Включить", + "exhaust": "Exhaust", + "fall_otomo_trap": "Fall Otomo Trap", + "fall_trap": "Fall Trap", "family": "Семейство", "fight_time": "Время в бою", + "fire": "Fire", + "fireblight": "Fireblight", "first": "Первый", "first_hit": "Первый удар", + "flash": "Flash", "flinch_count": "Кол-во повреждений", "foreground": "Передний план", "global_position_modifier": "Глобальный модификатор расположения", @@ -56,7 +93,12 @@ "health": "Здоровье", "health_percentage": "Здоровье в процентах", "height": "Высота", + "hide_ailments_with_zero_buildup": "Hide Ailments with 0 Buildup", + "hide_all_active_ailments": "Hide All Active Ailments", + "hide_all_inactive_ailments": "Hide All Inactive Ailments", "hide_dead_or_captured": "Скрыть мёртвых и захваченных монстров", + "hide_disabled_ailments": "Hide Disabled Ailments", + "hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support", "hide_module_if_total_damage_is_zero": "Скрыть модуль, если общий урон равен 0", "hide_player_if_player_damage_is_zero": "Скрыть игрока, если его урон равен 0", "hide_total_if_total_damage_is_zero": "Скрыть общий урон, если он равен 0", @@ -68,6 +110,8 @@ "hotkeys": "Горячие клавиши", "hunter_rank": "Ранг охотника", "hunter_rank_label": "Метка ранга охотника", + "ice": "Ice", + "iceblight": "Iceblight", "include": "Элементы", "installation_damage": "Урон от установок", "italic": "Курсив", @@ -92,14 +136,17 @@ "monster_damage": "Урон от монстров", "monster_name": "Имя монстра", "monster_name_label": "Метка имени монстра", + "mount": "Mount", "my_damage_bar_location": "Позиция моей шкалы урона", "none": "Нет", "normal": "Обычный", "offset": "Сдвиг", + "offset_is_relative_to_parts": "Offset is Relative to Parts", "opacity_falloff": "Увеличение прозрачности от расстояния", "orientation": "Ориентация", "other_players": "Другие игроки", "otomo_damage": "Урон от отомо", + "paralysis": "Paralysis", "part_name": "Имя части тела", "part_name_label": "Метка имени части тела", "percentage_label": "Метка процентов", @@ -108,19 +155,24 @@ "player_id": "ИД игрока", "player_name": "Имя игрока", "player_name_label": "Метка имени игрока", + "poison": "Poison", "poison_damage": "Poison Damage", "position": "Расположение", "press_any_key": "Нажмите любую клавишу...", "prioritize_large_monsters": "Большие монстры в приоритете", "quest_result_screen": "Экран результатов квеста", "quest_time": "Время квеста", + "quick_sand": "Quick Sand", "rage": "Ярость", "render_highlighted_monster": "Показывать помеченного монстра", "render_not_highlighted_monsters": "Показывать непомеченных монстров", "reversed_order": "Обратный порядок", "settings": "Настройки", "shadow": "Тень", + "shock_otomo_trap": "Shock Otomo Trap", + "shock_trap": "Shock Trap", "size": "Размер", + "sleep": "Sleep", "small_monster_UI": "Интерфейс малых монстров", "small_monsters": "Малые монстры", "sorting": "Сортировка", @@ -132,9 +184,14 @@ "static_spacing": "Статичное расстояние между элементами", "statically_positioned": "Рассположенный статично", "status": "Статус", + "steel_fang": "Steel Fang", + "stun": "Stun", "text_label": "Текстовая метка", + "thunder": "Thunder", + "thunderblight": "Thunderblight", "time_UI": "Интерфейс времени", "time_label": "Метка времени", + "time_limit": "Time Limit", "timer_label": "Метка таймера", "top_damage": "Наибольший урон", "top_dps": "Наибольший урон в секунду", @@ -149,11 +206,14 @@ "tracked_damage_types": "Отслеживаемые типы урона", "tracked_monster_types": "Отслеживаемые типы монстров", "training_area": "Тренировочная зона", + "tranq_bomb": "Tranq Bomb", "type": "Тип", "value_label": "Метка значений", "vertical": "Вертикально", "viewport_offset": "Сдвиг в экранном пространстве", "visible": "Включить", + "water": "Water", + "waterblight": "Waterblight", "width": "Ширина", "word_player": "Слово \"Игрок\"", "world_offset": "Сдвиг в игровом пространстве", diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index 0339a96..2476e23 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -1,6 +1,7 @@ { "UI": { "HP": "生命:", + "buildup": "Buildup", "gold": "金冠", "mini": "小型", "player": "玩家", @@ -9,14 +10,41 @@ "stamina": "耐力:", "total_damage": "總傷害" }, + "ailments": { + "blast": "Blast", + "dung_bomb": "Dung Bomb", + "exhaust": "Exhaust", + "fall_otomo_trap": "Fall Otomo Trap", + "fall_trap": "Fall Trap", + "fireblight": "Fireblight", + "flash": "Flash", + "iceblight": "Iceblight", + "mount": "Mount", + "paralysis": "Paralysis", + "poison": "Poison", + "quick_sand": "Quick Sand", + "shock_otomo_trap": "Shock Otomo Trap", + "shock_trap": "Shock Trap", + "sleep": "Sleep", + "steel_fang": "Steel Fang", + "stun": "Stun", + "thunderblight": "Thunderblight", + "tranq_bomb": "Tranq Bomb", + "waterblight": "Waterblight" + }, "customization_menu": { "UI_font": "UI 字體", "UI_font_notice": "當更改文字時,請重新載入", + "activation_count": "Activation Count", + "ailment_name": "Ailment Name", + "ailment_name_label": "Ailment Name Label", + "ailments": "Ailments", "all_UI": "All UI", "anchor": "錨點", "assign_new_key": "Assign new key", "background": "圖形化顯示條的背景底色", "bar": "圖形化顯示條", + "blast": "Blast", "blast_damage": "Blast Damage", "body_parts": "身體部位", "bold": "粗體", @@ -24,6 +52,8 @@ "bottom_left": "左下", "bottom_right": "右下", "break_count": "破壞次數", + "buildup": "Buildup", + "buildup_percentage": "Buildup Percentage", "capture_line": "可捕捉標記線", "color": "調色盤", "colors": "調色盤", @@ -39,16 +69,23 @@ "dps": "DPS", "dps_label": "DPS Label", "dps_mode": "DPS Mode", + "dung_bomb": "Dung Bomb", "during_quest": "任務中", "dynamic_positioning": "浮動的資訊位置", "dynamically_positioned": "浮動的魔物資訊", "enable_for": "Enable for", "enable_on": "Enable on", "enabled": "可見", + "exhaust": "Exhaust", + "fall_otomo_trap": "Fall Otomo Trap", + "fall_trap": "Fall Trap", "family": "字體", "fight_time": "Fight Time", + "fire": "Fire", + "fireblight": "Fireblight", "first": "第一", "first_hit": "First Hit", + "flash": "Flash", "flinch_count": "Flinch Count", "foreground": "圖形化顯示條的底色", "global_position_modifier": "Global Position Modifier", @@ -57,7 +94,12 @@ "health": "生命", "health_percentage": "生命百分比", "height": "高度", + "hide_ailments_with_zero_buildup": "Hide Ailments with 0 Buildup", + "hide_all_active_ailments": "Hide All Active Ailments", + "hide_all_inactive_ailments": "Hide All Inactive Ailments", "hide_dead_or_captured": "隱藏死亡或被捕獲的魔物", + "hide_disabled_ailments": "Hide Disabled Ailments", + "hide_inactive_ailments_with_no_buildup_support": "Hide Inactive Ailments with no Buildup Support", "hide_module_if_total_damage_is_zero": "當總傷害為0時,隱藏玩家輸出資訊", "hide_player_if_player_damage_is_zero": "當玩家傷害為0時,隱藏玩家傷害", "hide_total_if_total_damage_is_zero": "當總傷害為0時,隱藏總傷害", @@ -69,6 +111,8 @@ "hotkeys": "Hotkeys", "hunter_rank": "獵人等級", "hunter_rank_label": "Hunter Rank Label", + "ice": "Ice", + "iceblight": "Iceblight", "include": "細部資訊調整", "installation_damage": "設備傷害", "italic": "斜體", @@ -93,14 +137,17 @@ "monster_damage": "魔物傷害", "monster_name": "魔物名稱", "monster_name_label": "魔物名稱", + "mount": "Mount", "my_damage_bar_location": "我的傷害條", "none": "空", "normal": "正常", "offset": "位置", + "offset_is_relative_to_parts": "Offset is Relative to Parts", "opacity_falloff": "透明度提高", "orientation": "對齊方式", "other_players": "其他玩家", "otomo_damage": "隨從傷害", + "paralysis": "Paralysis", "part_name": "部位名稱", "part_name_label": "部位名稱", "percentage_label": "百分比", @@ -109,19 +156,24 @@ "player_id": "玩家ID", "player_name": "玩家名稱", "player_name_label": "玩家名稱", + "poison": "Poison", "poison_damage": "Poison Damage", "position": "位置", "press_any_key": "Press any key...", "prioritize_large_monsters": "大型魔物優先", "quest_result_screen": "Quest Result Screen", "quest_time": "Quest Time", + "quick_sand": "Quick Sand", "rage": "憤怒度", "render_highlighted_monster": "Render Highlighted Monster", "render_not_highlighted_monsters": "Render Not Highlighted Monsters", "reversed_order": "逆向排序", "settings": "設定", "shadow": "陰影", + "shock_otomo_trap": "Shock Otomo Trap", + "shock_trap": "Shock Trap", "size": "大小", + "sleep": "Sleep", "small_monster_UI": "小型魔物 UI", "small_monsters": "小型魔物群", "sorting": "排序方式", @@ -133,9 +185,14 @@ "static_spacing": "固定魔物資訊的間距", "statically_positioned": "固定的魔物資訊", "status": "狀態", + "steel_fang": "Steel Fang", + "stun": "Stun", "text_label": "文字", + "thunder": "Thunder", + "thunderblight": "Thunderblight", "time_UI": "時間 UI", "time_label": "時間", + "time_limit": "Time Limit", "timer_label": "計時器", "top_damage": "最高傷害", "top_dps": "Top DPS", @@ -150,12 +207,15 @@ "tracked_damage_types": "追蹤的傷害類型", "tracked_monster_types": "追蹤的魔物類型", "training_area": "訓練場", + "tranq_bomb": "Tranq Bomb", "type": "類型", "value_label": "數字", "vertical": "垂直", "viewport_offset": "視窗的位置", "visible": "可見", "visible_on": "Visible on", + "water": "Water", + "waterblight": "Waterblight", "width": "寬度", "word_player": "名稱 \"玩家\"", "world_offset": "地圖中的位置",