Bugfixes, added sorting by distance, localization system improvements

This commit is contained in:
GreenComfyTea
2022-02-12 19:59:07 +02:00
parent 3f1ceec534
commit 78722262f1
24 changed files with 868 additions and 153 deletions

View File

@@ -107,6 +107,7 @@ end, function()
player.update_myself_position();
quest_status.update_is_online();
if quest_status.index < 2 then
quest_status.update_is_training_area();

View File

@@ -10,7 +10,7 @@ config.default_config = {};
function config.init()
config.default_config = {
global_settings = {
language = "en-us",
language = "default",
performance = {
max_monster_updates_per_tick = 2,
@@ -41,7 +41,11 @@ function config.init()
}
},
font = {
menu_font = {
size = 17
},
UI_font = {
family = "Consolas",
size = 13,
bold = true,
@@ -53,6 +57,7 @@ function config.init()
enabled = true,
settings = {
hide_dead_or_captured = true,
orientation = "Horizontal"
},
@@ -114,7 +119,7 @@ function config.init()
text_label = {
visibility = false,
text = language.current_language.UI.HP,
text = "%s",
offset = {
x = -25,
y = 12
@@ -195,7 +200,7 @@ function config.init()
text_label = {
visibility = true,
text = language.current_language.UI.stamina,
text = "%s",
offset = {
x = 15,
y = 37
@@ -276,6 +281,7 @@ function config.init()
enabled = true,
settings = {
hide_dead_or_captured = true,
max_distance = 300,
opacity_falloff = true
},
@@ -323,7 +329,7 @@ function config.init()
text_label = {
visibility = false,
text = language.current_language.UI.HP,
text = "%s",
offset = {
x = -25,
y = 19
@@ -391,15 +397,31 @@ function config.init()
height = 20
},
colors = {
normal_colors = {
foreground = 0xB974A653,
background = 0xB9000000,
capture ={
},
capture_colors = {
foreground = 0xB9CCCC33,
background = 0x88000000
},
capture_line = {
visibility = true,
offset = {
x = 0,
y = -3
},
size = {
width = 2,
height = 8
},
color = 0xB9000000
}
}
}
},
},
stamina = {
@@ -407,7 +429,7 @@ function config.init()
text_label = {
visibility = true,
text = language.current_language.UI.stamina,
text = "%s",
offset = {
x = 15,
y = 37
@@ -487,7 +509,7 @@ function config.init()
text_label = {
visibility = true,
text = language.current_language.UI.rage,
text = "%s",
offset = {
x = 15,
y = 61
@@ -543,6 +565,26 @@ function config.init()
}
},
timer_label = {
visibility = true,
text = "%.0f:%02.0f",
offset = {
x = 157,
y = 78
},
color = 0xFFFFFFFF,
shadow = {
visibility = true,
offset = {
x = 1,
y = 1
},
color = 0xFF000000
}
},
bar = {
visibility = true,
offset = {
@@ -696,6 +738,7 @@ function config.init()
},
settings = {
hide_dead_or_captured = true,
orientation = "Horizontal"
},
@@ -742,7 +785,7 @@ function config.init()
text_label = {
visibility = false,
text = language.current_language.UI.HP,
text = "%s",
offset = {
x = -25,
y = 19
@@ -810,13 +853,29 @@ function config.init()
height = 20
},
colors = {
normal_colors = {
foreground = 0xB974A653,
background = 0xB9000000,
capture ={
},
capture_colors = {
foreground = 0xB9CCCC33,
background = 0x88000000
}
},
capture_line = {
visibility = true,
offset = {
x = 0,
y = -3
},
size = {
width = 2,
height = 8
},
color = 0xB9000000
}
}
},
@@ -826,7 +885,7 @@ function config.init()
text_label = {
visibility = true,
text = language.current_language.UI.stamina,
text = "%s",
offset = {
x = 15,
y = 37
@@ -906,7 +965,7 @@ function config.init()
text_label = {
visibility = true,
text = language.current_language.UI.rage,
text = "%s",
offset = {
x = 15,
y = 61
@@ -962,6 +1021,26 @@ function config.init()
}
},
timer_label = {
visibility = true,
text = "%.0f:%02.0f",
offset = {
x = 157,
y = 78
},
color = 0xFFFFFFFF,
shadow = {
visibility = true,
offset = {
x = 1,
y = 1
},
color = 0xFF000000
}
},
bar = {
visibility = true,
offset = {
@@ -1259,7 +1338,7 @@ function config.init()
total_damage_label = {
visibility = true,
text = "Total Damage",
text = "%s",
offset = {
x = 5,
y = 0
@@ -1361,7 +1440,7 @@ function config.init_module()
config.init();
config.load();
config.current_config.version = "v1.7";
config.current_config.version = "v1.7.1";
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));

View File

@@ -4,6 +4,7 @@ local table_helpers;
language.language_folder = "MHR Overlay\\languages\\";
language.default_language = {
font_name = "NotoSansKR-Bold.otf",
parts = {
head = "Head",
neck = "Neck",
@@ -62,7 +63,9 @@ language.default_language = {
rage = "Rage:",
gold = "Gold",
silver = "Silver",
mini = "Mini"
mini = "Mini",
total_damage = "Total Damage",
player = "Player"
},
customization_menu = {
@@ -89,9 +92,10 @@ language.default_language = {
max_monster_updates_per_tick = "Max Monster Updates per Tick",
prioritize_large_monsters = "Large Monsters on High Priority";
font_notice = "Any changes to the font require script reload!",
UI_font_notice = "Any changes to the font require script reload!",
font = "Font",
menu_font = "Menu Font",
UI_font = "UI Font",
family = "Family",
size = "Size",
bold = "Bold",
@@ -109,6 +113,8 @@ language.default_language = {
static_orientation = "Static Orientation",
hide_dead_or_captured = "Hide dead or captured",
opacity_falloff = "Opacity Falloff",
max_distance = "Max Distance",
world_offset = "World Offset",
@@ -146,6 +152,8 @@ language.default_language = {
foreground = "Foreground",
background = "Background",
capture_line = "Capture Line",
dynamically_positioned = "Dynamically Positioned",
statically_positioned = "Statically Positioned",
@@ -168,6 +176,7 @@ language.default_language = {
spacing = "Spacing",
sorting = "Sorting",
timer_label = "Timer Label",
part_name_label = "Part Name Label",
time_label = "Time Label",
@@ -190,7 +199,7 @@ language.default_language = {
hide_total_if_total_damage_is_zero = "Hide Total if Total Damage is 0",
total_damage_offset_is_relative = "Total Damage Offset is Relative",
higlighted_bar = "Highlighted Bar",
highlighted_bar = "Highlighted Bar",
me = "Me",
top_damage = "Top Damage",
none = "None",
@@ -234,26 +243,28 @@ function language.load()
return;
end
for i, language_file in ipairs(language_files) do
local language_name = language_file:gsub(language.language_folder, ""):gsub(".json", "");
for i, language_file_name in ipairs(language_files) do
local language_name = language_file_name:gsub(language.language_folder, ""):gsub(".json", "");
-- v will be something like `my-cool-mod\config-file-1.json`;
local loaded_language = json.load_file(language_file);
-- language_file will be something like `my-cool-mod\config-file-1.json`;
local loaded_language = json.load_file(language_file_name);
if loaded_language ~= nil then
log.info("[MHR Overlay] " .. language_name .. ".json loaded successfully");
table.insert(language.language_names, language_name);
table.insert(language.languages, loaded_language);
local merged_language = table_helpers.merge(language.default_language, loaded_language);
table.insert(language.languages, merged_language);
language.save(language_file_name, merged_language);
else
log.error("[MHR Overlay] Failed to load " .. language_name .. ".json");
end
end
end
function language.save_default()
-- save current config to disk, replacing any existing file
local success = json.dump_file(language.language_folder .. "en-us.json", language.default_language);
function language.save(file_name, language_table)
local success = json.dump_file(file_name, language_table);
if success then
log.info('[MHR Overlay] en-us.json saved successfully');
else
@@ -261,6 +272,10 @@ function language.save_default()
end
end
function language.save_default();
language.save(language.language_folder .. "en-us.json", language.default_language)
end
function language.update(index)
language.current_language = table_helpers.deep_copy(language.languages[index]);
@@ -271,7 +286,6 @@ function language.init_module()
language.save_default();
language.load();
language.current_language = table_helpers.deep_copy(language.default_language);
end
return language;

View File

@@ -24,7 +24,11 @@ function large_monster.new(enemy)
monster.max_health = 999999;
monster.health_percentage = 0;
monster.missing_health = 0;
monster.capture_health = 0;
monster.capture_percentage = 0;
monster.dead_or_captured = false;
monster.stamina = 0;
monster.max_stamina = 1000;
@@ -47,6 +51,7 @@ function large_monster.new(enemy)
monster.game_object = nil
monster.transform = nil
monster.position = Vector3f.new(0, 0, 0);
monster.distance = 0;
monster.name = "Large Monster";
monster.size = 1;
@@ -150,6 +155,8 @@ function large_monster.init_static_UI(monster)
config.current_config.large_monster_UI.static.health.percentage_label
);
monster.health_static_UI.bar.colors = config.current_config.large_monster_UI.static.health.bar.normal_colors;
monster.stamina_static_UI = stamina_UI_entity.new(
config.current_config.large_monster_UI.static.stamina.visibility,
config.current_config.large_monster_UI.static.stamina.bar,
@@ -163,7 +170,8 @@ function large_monster.init_static_UI(monster)
config.current_config.large_monster_UI.static.rage.bar,
config.current_config.large_monster_UI.static.rage.text_label,
config.current_config.large_monster_UI.static.rage.value_label,
config.current_config.large_monster_UI.static.rage.percentage_label
config.current_config.large_monster_UI.static.rage.percentage_label,
config.current_config.large_monster_UI.static.rage.timer_label
);
for REpart, part in pairs(monster.parts) do
@@ -182,6 +190,9 @@ function large_monster.init_dynamic_UI(monster)
config.current_config.large_monster_UI.dynamic.health.percentage_label
);
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,
@@ -195,7 +206,8 @@ function large_monster.init_dynamic_UI(monster)
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.percentage_label,
config.current_config.large_monster_UI.static.rage.timer_label
);
for REpart, part in pairs(monster.parts) do
@@ -207,6 +219,7 @@ local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalP
local status_param_field = enemy_character_base_type_def:get_field("<StatusParam>k__BackingField")
local stamina_param_field = enemy_character_base_type_def:get_field("<StaminaParam>k__BackingField")
local anger_param_field = enemy_character_base_type_def:get_field("<AngerParam>k__BackingField")
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local physical_param_type = physical_param_field:get_type();
local get_vital_method = physical_param_type:get_method("getVital")
@@ -299,9 +312,14 @@ function large_monster.update(enemy)
return;
end
local health = get_current_method:call(vital_param)
local max_health = get_max_method:call(vital_param)
local capture_health = get_capture_hp_vital_method:call(physical_param)
local health = get_current_method:call(vital_param);
local max_health = get_max_method:call(vital_param);
local capture_health = get_capture_hp_vital_method:call(physical_param);
local dead_or_captured = check_die_method:call(enemy);
if dead_or_captured == nil then
return;
end
local stamina_param = stamina_param_field:get_data(enemy)
if stamina_param == nil then
@@ -309,23 +327,23 @@ function large_monster.update(enemy)
return;
end
local stamina = get_stamina_method:call(stamina_param)
local max_stamina = get_max_stamina_method:call(stamina_param)
local stamina = get_stamina_method:call(stamina_param);
local max_stamina = get_max_stamina_method:call(stamina_param);
local anger_param = anger_param_field:get_data(enemy)
local anger_param = anger_param_field:get_data(enemy);
if anger_param == nil then
customization_menu.status = "No anger param";
return;
end
local is_in_rage = is_anger_method:call(anger_param)
local rage_point = get_anger_point_method:call(anger_param)
local rage_limit = get_limit_anger_method:call(anger_param)
local rage_timer = anger_param_get_timer_method:call(anger_param)
local rage_duration = get_timer_anger_method:call(anger_param)
local rage_count = get_count_anger_method:call(anger_param)
local is_in_rage = is_anger_method:call(anger_param);
local rage_point = get_anger_point_method:call(anger_param);
local rage_limit = get_limit_anger_method:call(anger_param);
local rage_timer = anger_param_get_timer_method:call(anger_param);
local rage_duration = get_timer_anger_method:call(anger_param);
local rage_count = get_count_anger_method:call(anger_param);
local vital_list = vital_list_field:get_data(physical_param)
local vital_list = vital_list_field:get_data(physical_param);
if vital_list == nil then
customization_menu.status = "No vital list";
return;
@@ -349,7 +367,6 @@ function large_monster.update(enemy)
return;
end
local last_REpart = part_list:call("get_Item", part_list_count - 1);
local last_REpart_health = 9999999;
if last_REpart ~= nil then
@@ -414,6 +431,16 @@ function large_monster.update(enemy)
end
end
if max_health ~= nil and capture_health ~= nil then
if max_health ~= 0 then
monster.capture_percentage = capture_health / max_health;
end
end
if dead_or_captured ~= nil then
monster.dead_or_captured = dead_or_captured;
end
if stamina ~= nil then
monster.stamina = stamina;
end
@@ -491,9 +518,17 @@ function large_monster.draw_dynamic(monster, position_on_screen, opacity_scale)
100 * monster.big_border, 100 * monster.king_border);
end
if monster.health < monster.capture_health then
monster.health_dynamic_UI.bar.colors = config.current_config.large_monster_UI.dynamic.health.bar.capture_colors;
else
monster.health_dynamic_UI.bar.colors = config.current_config.large_monster_UI.dynamic.health.bar.normal_colors;
end
drawing.draw_label(monster.dynamic_name_label, position_on_screen, opacity_scale, monster_name_text);
health_UI_entity.draw(monster, monster.health_dynamic_UI, position_on_screen, opacity_scale);
drawing.draw_capture_line(monster.health_dynamic_UI.bar, position_on_screen, opacity_scale, monster.capture_percentage);
stamina_UI_entity.draw(monster, monster.stamina_dynamic_UI, position_on_screen, opacity_scale);
rage_UI_entity.draw(monster, monster.rage_dynamic_UI, position_on_screen, opacity_scale);
@@ -568,9 +603,18 @@ function large_monster.draw_static(monster, position_on_screen, opacity_scale)
100 * monster.big_border, 100 * monster.king_border);
end
if monster.health < monster.capture_health then
monster.health_static_UI.bar.colors = config.current_config.large_monster_UI.static.health.bar.capture_colors;
else
monster.health_static_UI.bar.colors = config.current_config.large_monster_UI.static.health.bar.normal_colors;
end
drawing.draw_label(monster.static_name_label, position_on_screen, opacity_scale, monster_name_text);
health_UI_entity.draw(monster, monster.health_static_UI, position_on_screen, opacity_scale);
drawing.draw_capture_line(monster.health_static_UI.bar, position_on_screen, opacity_scale, monster.capture_percentage);
stamina_UI_entity.draw(monster, monster.stamina_static_UI, position_on_screen, opacity_scale);
rage_UI_entity.draw(monster, monster.rage_static_UI, position_on_screen, opacity_scale);

View File

@@ -74,7 +74,7 @@ function monster.update_monster(enemy)
if is_large then
large_monster.update_position(enemy);
if not config.current_config.global_settings.performance.prioritize_large_monsters then
return
return;
end
else
small_monster.update_position(enemy);
@@ -101,16 +101,25 @@ function monster.update_monster(enemy)
end
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.
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
updates_this_tick = updates_this_tick + 1;
last_update_tick = tick_count;
num_updated_monsters = num_updated_monsters + 1;
updated_monsters[enemy] = true;
-- 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
large_monster.update(enemy);
else
small_monster.update(enemy);
end
end

View File

@@ -28,6 +28,7 @@ function small_monster.new(enemy)
monster.game_object = nil
monster.transform = nil
monster.position = Vector3f.new(0, 0, 0);
monster.distance = 0;
monster.name = "Small Monster";
@@ -82,10 +83,11 @@ function small_monster.init_UI(monster)
);
end
local enemy_character_base_type = sdk.find_type_definition("snow.enemy.EnemyCharacterBase")
local physical_param_field = enemy_character_base_type:get_field("<PhysicalParam>k__BackingField");
local status_param_field = enemy_character_base_type:get_field("<StatusParam>k__BackingField")
local stamina_param_field = enemy_character_base_type:get_field("<StaminaParam>k__BackingField")
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase")
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>k__BackingField");
local status_param_field = enemy_character_base_type_def:get_field("<StatusParam>k__BackingField")
local stamina_param_field = enemy_character_base_type_def:get_field("<StaminaParam>k__BackingField")
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local physical_param_type = physical_param_field:get_type()
local get_vital_method = physical_param_type:get_method("getVital")
@@ -181,6 +183,11 @@ function small_monster.update(enemy)
local stamina = get_stamina_method:call(stamina_param)
local max_stamina = get_max_stamina_method:call(stamina_param)
local dead_or_captured = check_die_method:call(enemy);
if dead_or_captured == nil then
return;
end
small_monster.update_position(enemy)
local monster = small_monster.get_monster(enemy);
@@ -204,6 +211,10 @@ function small_monster.update(enemy)
end
end
if dead_or_captured ~= nil then
monster.dead_or_captured = dead_or_captured;
end
if stamina ~= nil then
monster.stamina = stamina;
end

View File

@@ -6,6 +6,7 @@ local player;
local quest_status;
local screen;
local drawing;
local language;
damage_meter_UI.last_displayed_players = {};
damage_meter_UI.freeze_displayed_players = false;
@@ -207,7 +208,7 @@ function damage_meter_UI.draw()
position_on_screen = screen.calculate_absolute_coordinates(config.current_config.damage_meter_UI.position);
end
drawing.draw_label(config.current_config.damage_meter_UI.total_damage_label, position_on_screen, 1);
drawing.draw_label(config.current_config.damage_meter_UI.total_damage_label, position_on_screen, 1, language.current_language.UI.total_damage);
drawing.draw_label(config.current_config.damage_meter_UI.total_damage_value_label, position_on_screen, 1, player.total.display.total_damage);
end
@@ -220,6 +221,7 @@ function damage_meter_UI.init_module()
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
screen = require("MHR_Overlay.Game_Handler.screen");
drawing = require("MHR_Overlay.UI.drawing");
language = require("MHR_Overlay.Misc.language");
end
return damage_meter_UI;

View File

@@ -31,26 +31,36 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled)
local enemy = get_boss_enemy_method:call(singletons.enemy_manager, i);
if enemy == nil then
customization_menu.status = "No enemy";
break
goto continue;
end
local monster = large_monster.list[enemy];
if monster == nil then
customization_menu.status = "No monster hp entry";
break
goto continue;
end
table.insert(displayed_monsters, monster);
::continue::
end
if dynamic_enabled or config.current_config.large_monster_UI.static.sorting.type == "Distance" then
for _, monster in ipairs(displayed_monsters) do
monster.distance = (player.myself_position - monster.position):length();
end
end
if dynamic_enabled then
local i = 0;
for _, monster in ipairs(displayed_monsters) do
if config.current_config.large_monster_UI.dynamic.settings.max_distance == 0 then
break;
end
if monster.dead_or_captured and config.current_config.large_monster_UI.dynamic.settings.hide_dead_or_captured then
goto continue;
end
local position_on_screen = {};
local world_offset = Vector3f.new(config.current_config.large_monster_UI.dynamic.world_offset.x, config.current_config.large_monster_UI.dynamic.world_offset.y, config.current_config.large_monster_UI.dynamic.world_offset.z);
@@ -65,13 +75,12 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled)
position_on_screen.y = position_on_screen.y + config.current_config.large_monster_UI.dynamic.viewport_offset.y;
local opacity_scale = 1;
local distance = (player.myself_position - monster.position):length();
if distance > config.current_config.large_monster_UI.dynamic.settings.max_distance then
if monster.distance > config.current_config.large_monster_UI.dynamic.settings.max_distance then
goto continue;
end
if config.current_config.large_monster_UI.dynamic.settings.opacity_falloff then
opacity_scale = 1 - (distance / config.current_config.large_monster_UI.dynamic.settings.max_distance);
opacity_scale = 1 - (monster.distance / config.current_config.large_monster_UI.dynamic.settings.max_distance);
end
large_monster.draw_dynamic(monster, position_on_screen, opacity_scale);
@@ -111,12 +120,26 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled)
return left.health_percentage < right.health_percentage;
end);
end
elseif config.current_config.large_monster_UI.static.sorting.type == "Distance" then
if config.current_config.large_monster_UI.static.sorting.reversed_order then
table.sort(displayed_monsters, function(left, right)
return left.distance > right.distance;
end);
else
table.sort(displayed_monsters, function(left, right)
return left.distance < right.distance;
end);
end
end
local position_on_screen = screen.calculate_absolute_coordinates(config.current_config.large_monster_UI.static.position);
local i = 0;
for _, monster in ipairs(displayed_monsters) do
if monster.dead_or_captured and config.current_config.large_monster_UI.static.settings.hide_dead_or_captured then
goto continue;
end
local monster_position_on_screen = {
x = position_on_screen.x,
y = position_on_screen.y
@@ -131,6 +154,7 @@ function large_monster_UI.draw(dynamic_enabled, static_enabled)
large_monster.draw_static(monster, monster_position_on_screen, 1);
i = i + 1;
::continue::
end
end
end

View File

@@ -31,21 +31,32 @@ function small_monster_UI.draw()
local enemy = get_zako_enemy_method:call(singletons.enemy_manager, i);
if enemy == nil then
customization_menu.status = "No enemy";
break
goto continue;
end
local monster = small_monster.list[enemy];
if monster == nil then
customization_menu.status = "No monster hp entry";
break
goto continue;
end
if monster.dead_or_captured and config.current_config.small_monster_UI.settings.hide_dead_or_captured then
goto continue;
end
table.insert(displayed_monsters, monster);
::continue::
end
if config.current_config.small_monster_UI.dynamic_positioning.enabled
or (not config.current_config.small_monster_UI.dynamic_positioning.enabled and config.current_config.small_monster_UI.static_sorting.type == "Distance") then
for _, monster in ipairs(displayed_monsters) do
monster.distance = (player.myself_position - monster.position):length();
end
end
if not config.current_config.small_monster_UI.dynamic_positioning.enabled then
-- sort here
if config.current_config.small_monster_UI.static_sorting.type == "Normal" and config.current_config.small_monster_UI.static_sorting.reversed_order then
local reversed_monsters = {};
for i = #displayed_monsters, 1, -1 do
@@ -74,6 +85,16 @@ function small_monster_UI.draw()
return left.health_percentage < right.health_percentage;
end);
end
elseif config.current_config.small_monster_UI.static_sorting.type == "Distance" then
if config.current_config.small_monster_UI.static_sorting.reversed_order then
table.sort(displayed_monsters, function(left, right)
return left.distance > right.distance;
end);
else
table.sort(displayed_monsters, function(left, right)
return left.distance < right.distance;
end);
end
end
end
@@ -109,14 +130,12 @@ function small_monster_UI.draw()
return;
end
local distance = (player.myself_position - monster.position):length();
if distance > config.current_config.small_monster_UI.dynamic_positioning.max_distance then
if monster.distance > config.current_config.small_monster_UI.dynamic_positioning.max_distance then
goto continue;
end
if config.current_config.small_monster_UI.dynamic_positioning.opacity_falloff then
opacity_scale = 1 - (distance / config.current_config.small_monster_UI.dynamic_positioning.max_distance);
opacity_scale = 1 - (monster.distance / config.current_config.small_monster_UI.dynamic_positioning.max_distance);
end
end

View File

@@ -3,6 +3,7 @@ local table_helpers;
local drawing;
local config;
local player;
local language;
function damage_UI_entity.new(bar, highlighted_bar, player_name_label, value_label, percentage_label)
local entity = {};
@@ -30,7 +31,7 @@ function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_d
end
if player_include.word_player then
player_name_text = player_name_text .. "Player ";
player_name_text = player_name_text .. language.current_config.UI.player .. " ";
end
if player_include.player_id then
@@ -48,7 +49,7 @@ function damage_UI_entity.draw(_player, position_on_screen, opacity_scale, top_d
local player_damage_bar_percentage = 0;
if config.current_config.damage_meter_UI.settings.damage_bar_relative_to == "Total Damage" then
if _player.total.display.total_damage ~= 0 then
if player.total.display.total_damage ~= 0 then
player_damage_bar_percentage = _player.display.total_damage / player.total.display.total_damage;
end
else
@@ -75,6 +76,7 @@ function damage_UI_entity.init_module()
drawing = require("MHR_Overlay.UI.drawing");
config = require("MHR_Overlay.Misc.config");
player = require("MHR_Overlay.Damage_Meter.player");
language = require("MHR_Overlay.Misc.language");
end
return damage_UI_entity;

View File

@@ -1,6 +1,7 @@
local health_UI_entity = {};
local table_helpers;
local drawing;
local language;
function health_UI_entity.new(visibility, bar, text_label, value_label, percentage_label)
local entity = {};
@@ -21,7 +22,7 @@ function health_UI_entity.draw(monster, health_UI, position_on_screen, opacity_s
drawing.draw_bar(health_UI.bar, position_on_screen, opacity_scale, monster.health_percentage);
drawing.draw_label(health_UI.text_label, position_on_screen, opacity_scale);
drawing.draw_label(health_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.HP);
drawing.draw_label(health_UI.value_label, position_on_screen, opacity_scale, monster.health, monster.max_health);
drawing.draw_label(health_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.health_percentage);
end
@@ -29,6 +30,7 @@ end
function health_UI_entity.init_module()
table_helpers = require("MHR_Overlay.Misc.table_helpers");
drawing = require("MHR_Overlay.UI.drawing");
language = require("MHR_Overlay.Misc.language");
end
return health_UI_entity;

View File

@@ -1,8 +1,9 @@
local rage_UI_entity = {};
local table_helpers;
local drawing;
local language;
function rage_UI_entity.new(visibility, bar, text_label, value_label, percentage_label)
function rage_UI_entity.new(visibility, bar, text_label, value_label, percentage_label, timer_label)
local entity = {};
entity.visibility = visibility;
@@ -10,9 +11,8 @@ function rage_UI_entity.new(visibility, bar, text_label, value_label, percentage
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(percentage_label);
entity.timer_label = table_helpers.deep_copy(timer_label);
entity.timer_label.text = "%.0f:%02.0f";
return entity;
end
@@ -24,13 +24,12 @@ function rage_UI_entity.draw(monster, rage_UI, position_on_screen, opacity_scale
if monster.is_in_rage then
drawing.draw_bar(rage_UI.bar, position_on_screen, opacity_scale, monster.rage_timer_percentage);
drawing.draw_label(rage_UI.text_label, position_on_screen, opacity_scale);
drawing.draw_label(rage_UI.value_label, position_on_screen, opacity_scale, monster.rage_point, monster.rage_limit);
drawing.draw_label(rage_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.rage);
drawing.draw_label(rage_UI.timer_label, position_on_screen, opacity_scale, monster.rage_minutes_left, monster.rage_seconds_left);
else
drawing.draw_bar(rage_UI.bar, position_on_screen, opacity_scale, monster.rage_percentage);
drawing.draw_label(rage_UI.text_label, position_on_screen, opacity_scale);
drawing.draw_label(rage_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.rage);
drawing.draw_label(rage_UI.value_label, position_on_screen, opacity_scale, monster.rage_point, monster.rage_limit);
drawing.draw_label(rage_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.rage_percentage);
end
@@ -39,6 +38,7 @@ end
function rage_UI_entity.init_module()
table_helpers = require("MHR_Overlay.Misc.table_helpers");
drawing = require("MHR_Overlay.UI.drawing");
language = require("MHR_Overlay.Misc.language");
end
return rage_UI_entity;

View File

@@ -1,6 +1,7 @@
local stamina_UI_entity = {};
local table_helpers;
local drawing;
local language;
function stamina_UI_entity.new(visibility, bar, text_label, value_label, percentage_label)
local entity = {};
@@ -21,7 +22,7 @@ function stamina_UI_entity.draw(monster, stamina_UI, position_on_screen, opacity
drawing.draw_bar(stamina_UI.bar, position_on_screen, opacity_scale, monster.stamina_percentage);
drawing.draw_label(stamina_UI.text_label, position_on_screen, opacity_scale);
drawing.draw_label(stamina_UI.text_label, position_on_screen, opacity_scale, language.current_language.UI.stamina);
drawing.draw_label(stamina_UI.value_label, position_on_screen, opacity_scale, monster.stamina, monster.max_stamina);
drawing.draw_label(stamina_UI.percentage_label, position_on_screen, opacity_scale, 100 * monster.stamina_percentage);
end
@@ -29,6 +30,7 @@ end
function stamina_UI_entity.init_module()
table_helpers = require("MHR_Overlay.Misc.table_helpers");
drawing = require("MHR_Overlay.UI.drawing");
language = require("MHR_Overlay.Misc.language");
end
return stamina_UI_entity;

View File

@@ -7,6 +7,10 @@ local player;
local large_monster;
local small_monster;
local language;
local part_names;
customization_menu.font = nil;
customization_menu.font_range = { 0x1, 0xFFFF, 0 };
customization_menu.is_opened = false;
customization_menu.status = "OK";
@@ -18,7 +22,6 @@ customization_menu.window_flags = 0x10120;
customization_menu.color_picker_flags = 327680;
customization_menu.selected_language_index = 1;
customization_menu.displayed_orientation_types = {};
@@ -75,9 +78,13 @@ customization_menu.large_monster_UI_anchor_index = 1;
customization_menu.time_UI_anchor_index = 1;
customization_menu.damage_meter_UI_anchor_index = 1;
customization_menu.selected_font_index = 9;
customization_menu.selected_UI_font_index = 9;
function customization_menu.init()
customization_menu.font = imgui.load_font(language.current_language.font_name, config.current_config.global_settings.menu_font.size, customization_menu.font_range);
customization_menu.selected_language_index = table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false);
customization_menu.displayed_orientation_types = {language.current_language.customization_menu.horizontal, language.current_language.customization_menu.vertical};
customization_menu.displayed_anchor_types = {language.current_language.customization_menu.top_left, language.current_language.customization_menu.top_right, language.current_language.customization_menu.bottom_left, language.current_language.customization_menu.bottom_right};
@@ -138,7 +145,7 @@ function customization_menu.init()
customization_menu.damage_meter_UI_sorting_types, config.current_config.damage_meter_UI.sorting.type, false);
customization_menu.selected_font_index = table_helpers.find_index(customization_menu.fonts,
config.current_config.global_settings.font.family, false);
config.current_config.global_settings.UI_font.family, false);
customization_menu.small_monster_UI_anchor_index = table_helpers.find_index(customization_menu.anchor_types,
config.current_config.small_monster_UI.static_position.anchor, false);
@@ -157,15 +164,17 @@ function customization_menu.draw()
imgui.set_next_window_pos(customization_menu.window_position, 1 << 3, customization_menu.window_pivot);
imgui.set_next_window_size(customization_menu.window_size, 1 << 3);
customization_menu.is_opened = imgui.begin_window(language.current_language.customization_menu.mod_name .. " " .. config.current_config.version,
customization_menu.is_opened, customization_menu.window_flags);
imgui.push_font(customization_menu.font);
customization_menu.is_opened = imgui.begin_window(language.current_language.customization_menu.mod_name .. " " .. config.current_config.version, customization_menu.is_opened, customization_menu.window_flags);
if not customization_menu.is_opened then
return;
end
local config_changed = false;
local changed;
local changed = false;
local status_string = tostring(customization_menu.status);
imgui.text(language.current_language.customization_menu.status .. ": " .. status_string);
@@ -198,12 +207,16 @@ function customization_menu.draw()
changed, customization_menu.selected_language_index = imgui.combo(language.current_language.customization_menu.language, customization_menu.selected_language_index, language.language_names);
config_changed = config_changed or changed;
if changed then
config.current_config.global_settings.language = language.language_names[customization_menu.selected_font_index];
large_monster.init_list();
config.current_config.global_settings.language = language.language_names[customization_menu.selected_language_index];
language.update(customization_menu.selected_language_index);
imgui.pop_font(customization_menu.font);
customization_menu.init();
imgui.push_font(customization_menu.font);
part_names.init();
large_monster.init_list();
for _, monster in pairs(small_monster.list) do
small_monster.init_UI(monster);
end
@@ -213,6 +226,77 @@ function customization_menu.draw()
end
end
if imgui.tree_node(language.current_language.customization_menu.menu_font) then
changed, config.current_config.global_settings.menu_font.size =
imgui.slider_int(" ", config.current_config.global_settings.menu_font.size, 5, 100);
config_changed = config_changed or changed;
imgui.same_line();
if changed then
imgui.pop_font(customization_menu.font);
customization_menu.font = imgui.load_font(language.current_language.font_name, config.current_config.global_settings.menu_font.size, customization_menu.font_range);
imgui.push_font(customization_menu.font);
end
changed = imgui.button("-");
imgui.same_line();
if changed then
config.current_config.global_settings.menu_font.size = config.current_config.global_settings.menu_font.size - 1;
if config.current_config.global_settings.menu_font.size < 5 then
config.current_config.global_settings.menu_font.size = 10;
end
imgui.pop_font(customization_menu.font);
customization_menu.font = imgui.load_font(language.current_language.font_name, config.current_config.global_settings.menu_font.size, customization_menu.font_range);
imgui.push_font(customization_menu.font);
end
changed = imgui.button("+");
imgui.same_line();
if changed then
config.current_config.global_settings.menu_font.size = config.current_config.global_settings.menu_font.size + 1;
if config.current_config.global_settings.menu_font.size > 100 then
config.current_config.global_settings.menu_font.size = 100;
end
imgui.pop_font(customization_menu.font);
customization_menu.font = imgui.load_font(language.current_language.font_name, config.current_config.global_settings.menu_font.size, customization_menu.font_range);
imgui.push_font(customization_menu.font);
end
imgui.text(language.current_language.customization_menu.size);
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.UI_font) then
imgui.text(language.current_language.customization_menu.UI_font_notice);
changed, customization_menu.selected_UI_font_index = imgui.combo(language.current_language.customization_menu.family, customization_menu.selected_UI_font_index,
customization_menu.fonts);
config_changed = config_changed or changed;
if changed then
config.current_config.global_settings.uUI_font.family = customization_menu.fonts[customization_menu.selected_UI_font_index];
end
changed, config.current_config.global_settings.UI_font.size =
imgui.slider_int(language.current_language.customization_menu.size, config.current_config.global_settings.UI_font.size, 1, 100);
config_changed = config_changed or changed;
changed, config.current_config.global_settings.UI_font.bold =
imgui.checkbox(language.current_language.customization_menu.bold, config.current_config.global_settings.UI_font.bold);
config_changed = config_changed or changed;
changed, config.current_config.global_settings.UI_font.italic =
imgui.checkbox(language.current_language.customization_menu.italic, config.current_config.global_settings.UI_font.italic);
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.performance) then
changed, config.current_config.global_settings.performance.max_monster_updates_per_tick =
imgui.slider_int(language.current_language.customization_menu.max_monster_updates_per_tick, config.current_config.global_settings.performance.max_monster_updates_per_tick, 1, 150);
@@ -307,31 +391,6 @@ function customization_menu.draw()
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.font) then
imgui.text(language.current_language.customization_menu.font_notice);
changed, customization_menu.selected_font_index = imgui.combo(language.current_language.customization_menu.family, customization_menu.selected_font_index,
customization_menu.fonts);
config_changed = config_changed or changed;
if changed then
config.current_config.global_settings.font.family = customization_menu.fonts[customization_menu.selected_font_index];
end
changed, config.current_config.global_settings.font.size =
imgui.slider_int(language.current_language.customization_menu.size, config.current_config.global_settings.font.size, 1, 100);
config_changed = config_changed or changed;
changed, config.current_config.global_settings.font.bold =
imgui.checkbox(language.current_language.customization_menu.bold, config.current_config.global_settings.font.bold);
config_changed = config_changed or changed;
changed, config.current_config.global_settings.font.italic =
imgui.checkbox(language.current_language.customization_menu.italic, config.current_config.global_settings.font.italic);
config_changed = config_changed or changed;
imgui.tree_pop();
end
imgui.tree_pop();
end
@@ -342,6 +401,10 @@ function customization_menu.draw()
config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.settings) then
changed, config.current_config.small_monster_UI.settings.hide_dead_or_captured = imgui.checkbox(language.current_language.customization_menu.hide_dead_or_captured, config.current_config
.small_monster_UI.settings.hide_dead_or_captured);
config_changed = config_changed or changed;
changed, customization_menu.small_monster_UI_orientation_index =
imgui.combo(language.current_language.customization_menu.static_orientation, customization_menu.small_monster_UI_orientation_index,
customization_menu.displayed_orientation_types);
@@ -1068,6 +1131,10 @@ function customization_menu.draw()
large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.settings) then
changed, config.current_config.large_monster_UI.dynamic.settings.hide_dead_or_captured = imgui.checkbox(language.current_language.customization_menu.hide_dead_or_captured, config.current_config.
large_monster_UI.dynamic.settings.hide_dead_or_captured);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.dynamic.settings.opacity_falloff =
imgui.checkbox(language.current_language.customization_menu.opacity_falloff, config.current_config.large_monster_UI.dynamic.settings.opacity_falloff);
config_changed = config_changed or changed;
@@ -1452,7 +1519,7 @@ function customization_menu.draw()
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.health.bar.colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.colors.foreground, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.dynamic.health.bar.normal_colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.normal_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;
@@ -1460,7 +1527,7 @@ function customization_menu.draw()
end
if imgui.tree_node(language.current_language.customization_menu.background) then
changed, config.current_config.large_monster_UI.dynamic.health.bar.colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.colors.background, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.dynamic.health.bar.normal_colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.normal_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;
@@ -1469,7 +1536,7 @@ function customization_menu.draw()
if imgui.tree_node(language.current_language.customization_menu.monster_can_be_captured) then
if imgui.tree_node(language.current_language.customization_menu.foreground) then
changed, config.current_config.large_monster_UI.dynamic.health.bar.colors.capture.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.colors.capture.foreground, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.dynamic.health.bar.capture_colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.capture_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;
@@ -1477,7 +1544,7 @@ function customization_menu.draw()
end
if imgui.tree_node(language.current_language.customization_menu.background) then
changed, config.current_config.large_monster_UI.dynamic.health.bar.colors.capture.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.colors.capture.background, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.dynamic.health.bar.capture_colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.capture_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;
@@ -1488,6 +1555,51 @@ function customization_menu.draw()
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.capture_line) then
changed, config.current_config.large_monster_UI.dynamic.health.bar.capture_line.visibility = imgui.checkbox(language.current_language.customization_menu.visible,
config.current_config.large_monster_UI.dynamic.health.bar.capture_line.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.health.bar.capture_line.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
config.current_config.large_monster_UI.dynamic.health.bar.capture_line.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed;
large_monster_dynamic_UI_changed = large_monster_dynamic_UI_changed or changed;
changed, config.current_config.large_monster_UI.dynamic.health.bar.capture_line.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
config.current_config.large_monster_UI.dynamic.health.bar.capture_line.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.health.bar.capture_line.size.width = imgui.drag_float(language.current_language.customization_menu.width,
config.current_config.large_monster_UI.dynamic.health.bar.capture_line.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.health.bar.capture_line.size.height = imgui.drag_float(language.current_language.customization_menu.height,
config.current_config.large_monster_UI.dynamic.health.bar.capture_line.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.color) then
changed, config.current_config.large_monster_UI.dynamic.health.bar.capture_line.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.health.bar.capture_line.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
@@ -1974,6 +2086,74 @@ function customization_menu.draw()
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.timer_label) then
changed, config.current_config.large_monster_UI.dynamic.rage.timer_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible,
config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.shadow.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.shadow.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.shadow.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, config.current_config.large_monster_UI.dynamic.rage.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.rage.timer_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.dynamic.rage.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.rage.bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible,
config.current_config.large_monster_UI.dynamic.rage.bar.visibility);
@@ -2459,6 +2639,10 @@ function customization_menu.draw()
large_monster_static_UI_changed = large_monster_static_UI_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.settings) then
changed, config.current_config.large_monster_UI.static.settings.hide_dead_or_captured = imgui.checkbox(language.current_language.customization_menu.hide_dead_or_captured, config.current_config.
large_monster_UI.static.settings.hide_dead_or_captured);
config_changed = config_changed or changed;
changed, customization_menu.large_monster_UI_orientation_index = imgui.combo(language.current_language.customization_menu.orientation,
customization_menu.large_monster_UI_orientation_index, customization_menu.displayed_orientation_types);
config_changed = config_changed or changed;
@@ -2864,7 +3048,7 @@ function customization_menu.draw()
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.health.bar.colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.colors.foreground, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.static.health.bar.normal_colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.normal_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;
@@ -2872,7 +3056,7 @@ function customization_menu.draw()
end
if imgui.tree_node(language.current_language.customization_menu.background) then
changed, config.current_config.large_monster_UI.static.health.bar.colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.colors.background, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.static.health.bar.normal_colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.normal_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;
@@ -2881,7 +3065,7 @@ function customization_menu.draw()
if imgui.tree_node(language.current_language.customization_menu.monster_can_be_captured) then
if imgui.tree_node(language.current_language.customization_menu.foreground) then
changed, config.current_config.large_monster_UI.static.health.bar.colors.capture.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.colors.capture.foreground, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.static.health.bar.capture_colors.foreground = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.capture_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;
@@ -2889,7 +3073,7 @@ function customization_menu.draw()
end
if imgui.tree_node(language.current_language.customization_menu.background) then
changed, config.current_config.large_monster_UI.static.health.bar.colors.capture.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.colors.capture.background, customization_menu.color_picker_flags);
changed, config.current_config.large_monster_UI.static.health.bar.capture_colors.background = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.capture_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;
@@ -2900,6 +3084,51 @@ function customization_menu.draw()
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.capture_line) then
changed, config.current_config.large_monster_UI.static.health.bar.capture_line.visibility = imgui.checkbox(language.current_language.customization_menu.visible,
config.current_config.large_monster_UI.static.health.bar.capture_line.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.health.bar.capture_line.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
config.current_config.large_monster_UI.static.health.bar.capture_line.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed;
large_monster_static_UI_changed = large_monster_static_UI_changed or changed;
changed, config.current_config.large_monster_UI.static.health.bar.capture_line.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
config.current_config.large_monster_UI.static.health.bar.capture_line.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.health.bar.capture_line.size.width = imgui.drag_float(language.current_language.customization_menu.width,
config.current_config.large_monster_UI.static.health.bar.capture_line.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.health.bar.capture_line.size.height = imgui.drag_float(language.current_language.customization_menu.height,
config.current_config.large_monster_UI.static.health.bar.capture_line.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.color) then
changed, config.current_config.large_monster_UI.static.health.bar.capture_line.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.health.bar.capture_line.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
@@ -3384,6 +3613,74 @@ function customization_menu.draw()
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.timer_label) then
changed, config.current_config.large_monster_UI.static.rage.timer_label.visibility = imgui.checkbox(language.current_language.customization_menu.visible,
config.current_config.large_monster_UI.static.rage.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.rage.timer_label.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
config.current_config.large_monster_UI.static.rage.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.rage.timer_label.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
config.current_config.large_monster_UI.static.rage.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.rage.timer_label.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.rage.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.rage.timer_label.shadow.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, config.current_config.large_monster_UI.static.rage.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.rage.timer_label.shadow.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, config.current_config.large_monster_UI.static.rage.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.rage.timer_label.shadow.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, config.current_config.large_monster_UI.static.rage.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.rage.timer_label.shadow.color = imgui.color_picker_argb("", config.current_config.large_monster_UI.static.rage.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.rage.bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible,
config.current_config.large_monster_UI.static.rage.bar.visibility);
@@ -4649,6 +4946,8 @@ function customization_menu.draw()
imgui.end_window();
imgui.pop_font(customization_menu.font);
if config_changed then
config.save();
end
@@ -4662,6 +4961,7 @@ function customization_menu.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");
part_names = require("MHR_Overlay.Misc.part_names");
customization_menu.init();
end

View File

@@ -4,7 +4,7 @@ local config;
drawing.font = nil;
function drawing.init_font()
drawing.font = d2d.Font.new(config.current_config.global_settings.font.family, config.current_config.global_settings.font.size, config.current_config.global_settings.font.bold, config.current_config.global_settings.font.italic);
drawing.font = d2d.Font.new(config.current_config.global_settings.UI_font.family, config.current_config.global_settings.UI_font.size, config.current_config.global_settings.UI_font.bold, config.current_config.global_settings.UI_font.italic);
end
function drawing.color_to_argb(color)
@@ -30,11 +30,9 @@ function drawing.scale_color_opacity(color, scale)
end
function drawing.scale_bar_opacity(bar, scale)
if bar == nil or scale == nil then
return;
end
if not bar.visibility then
if bar == nil
or scale == nil
or not bar.visibility then
return;
end
@@ -43,11 +41,9 @@ function drawing.scale_bar_opacity(bar, scale)
end
function drawing.scale_label_opacity(label, scale)
if label == nil or scale == nil then
return;
end
if not label.visibility then
if label == nil
or scale == nil
or not label.visibility then
return;
end
@@ -56,7 +52,8 @@ function drawing.scale_label_opacity(label, scale)
end
function drawing.draw_label(label, position, opacity_scale, ...)
if label == nil or not label.visibility then
if label == nil
or not label.visibility then
return;
end
@@ -82,11 +79,8 @@ function drawing.draw_label(label, position, opacity_scale, ...)
end
function drawing.draw_bar(bar, position, opacity_scale, percentage)
if bar == nil then
return;
end
if not bar.visibility then
if bar == nil
or not bar.visibility then
return;
end
@@ -113,6 +107,30 @@ function drawing.draw_bar(bar, position, opacity_scale, percentage)
d2d.fill_rect(position_x + foreground_width, position_y, background_width, bar.size.height, new_background_color);
end
function drawing.draw_capture_line(bar, position, opacity_scale, percentage)
if bar == nil
or bar.capture_line == nil
or not bar.visibility
or not bar.capture_line.visibility
or percentage >= 1
or percentage <= 0 then
return;
end
local position_x = position.x + bar.offset.x + bar.capture_line.offset.x + bar.size.width * percentage;
local position_y = position.y + bar.offset.y + bar.capture_line.offset.y;
local color = bar.capture_line.color;
if opacity_scale < 1 then
color = drawing.scale_color_opacity(color, opacity_scale);
end
d2d.fill_rect(position_x, position_y, bar.capture_line.size.width, bar.capture_line.size.height, color);
end
function drawing.init_module()
config = require("MHR_Overlay.Misc.config");
end

View File

@@ -3,11 +3,15 @@
"HP": "HP:",
"gold": "Gold",
"mini": "Mini",
"player": "Player",
"rage": "Rage:",
"silver": "Silver",
"stamina": "Stamina:"
"stamina": "Stamina:",
"total_damage": "Total Damage"
},
"customization_menu": {
"UI_font": "UI Font",
"UI_font_notice": "Any changes to the font require script reload!",
"anchor": "Anchor",
"background": "Background",
"bar": "Bar",
@@ -17,6 +21,7 @@
"bottom_left": "Bottom-Left",
"bottom_right": "Bottom-Right",
"break_count": "Break Count",
"capture_line": "Capture Line",
"color": "Color",
"colors": "Colors",
"crown": "Crown",
@@ -34,19 +39,18 @@
"enabled": "Enabled",
"family": "Family",
"first": "First",
"font": "Font",
"font_notice": "Any changes to the font require script reload!",
"foreground": "Foreground",
"global_settings": "Global Settings",
"health": "Health",
"health_percentage": "Health Percentage",
"height": "Height",
"hide_dead_or_captured": "Hide dead or captured",
"hide_module_if_total_damage_is_zero": "Hide Module if Total Damage is 0",
"hide_player_if_player_damage_is_zero": "Hide Player if Player Damage is 0",
"hide_total_if_total_damage_is_zero": "Hide Total if Total Damage is 0",
"hide_undamaged_parts": "Hide Undamaged Parts",
"highlighted_bar": "Highlighted Bar",
"highlighted_damage_bar": "Highlighted Damage Bar",
"higlighted_bar": "Highlighted Bar",
"horizontal": "Horizontal",
"hunter_rank": "Hunter Rank",
"include": "Include",
@@ -62,6 +66,7 @@
"max_distance": "Max Distance",
"max_monster_updates_per_tick": "Max Monster Updates per Tick",
"me": "Me",
"menu_font": "Menu Font",
"mod_name": "MHR Overlay",
"module_visibility_on_different_screens": "Module Visibility on Different Screens",
"modules": "Modules",
@@ -107,6 +112,7 @@
"text_label": "Text Label",
"time_UI": "Time UI",
"time_label": "Time Label",
"timer_label": "Timer Label",
"top_damage": "Top Damage",
"top_left": "Top-Left",
"top_right": "Top-Right",
@@ -129,6 +135,7 @@
"y": "Y",
"z": "Z"
},
"font_name": "NotoSansKR-Bold.otf",
"parts": {
"abdomen": "Abdomen",
"arms": "Arms",

View File

@@ -0,0 +1,181 @@
{
"UI": {
"HP": "체력:",
"gold": "금관",
"mini": "미니",
"player": "Player",
"rage": "분노:",
"silver": "은관",
"stamina": "스태미나:",
"total_damage": "Total Damage"
},
"customization_menu": {
"UI_font": "글꼴",
"UI_font_notice": "Any changes to the font require script reload!",
"anchor": "앵커",
"background": "배경",
"bar": "막대",
"body_parts": "몸통 부위",
"bold": "굵게",
"bomb_damage": "폭탄 대미지",
"bottom_left": "좌하단",
"bottom_right": "우하단",
"break_count": "파괴 횟수",
"capture_line": "Capture Line",
"color": "색상",
"colors": "색상",
"crown": "금관",
"crown_thresholds": "금관 기준",
"damage": "대미지",
"damage_bar": "대미지 막대",
"damage_bars_are_relative_to": "대미지 막대의 상대적 위치",
"damage_meter_UI": "대미지 미터 UI",
"damage_percentage_label": "대미지 퍼센트 라벨",
"damage_value_label": "대미지 값 라벨",
"distance": "거리",
"during_quest": "퀘스트 중",
"dynamic_positioning": "유동 위치",
"dynamically_positioned": "유동적으로 위치함",
"enabled": "사용함",
"family": "모음",
"first": "처음",
"font_notice": "글꼴 설정은 모듈 리로딩이 필요합니다!",
"foreground": "전경색",
"global_settings": "전역 설정",
"health": "체력",
"health_percentage": "체력 퍼센트",
"height": "높이",
"hide_dead_or_captured": "Hide dead or captured",
"hide_module_if_total_damage_is_zero": "총 대미지가 0이면 모듈 숨김",
"hide_player_if_player_damage_is_zero": "헌터 대미지가 0이면 헌터 숨김",
"hide_total_if_total_damage_is_zero": "총 대미지가 0이면 모두 숨김",
"hide_undamaged_parts": "피해를 입히지 않은 부위 숨김",
"highlighted_bar": "강조 막대",
"highlighted_damage_bar": "강조된 대미지 막대",
"horizontal": "가로",
"hunter_rank": "헌터 랭크",
"include": "포함",
"installation_damage": "설치 대미지",
"italic": "기울임",
"kunai_damage": "쿠나이 대미지",
"language": "언어",
"large_monster_UI": "대형 몬스터 UI",
"large_monster_dynamic_UI": "대형 몬스터 유동 UI",
"large_monster_static_UI": "대형 몬스터 고정 UI",
"large_monsters": "대형 몬스터",
"last": "마지막",
"max_distance": "최대 거리",
"max_monster_updates_per_tick": "틱당 최대 몬스터 갱신",
"me": "나",
"menu_font": "Menu Font",
"mod_name": "MHR Overlay",
"module_visibility_on_different_screens": "다른 화면에서 모듈 표시",
"modules": "모듈",
"monster_can_be_captured": "몬스터 포획 가능",
"monster_damage": "몬스터 대미지",
"monster_name": "몬스터명",
"monster_name_label": "몬스터명 라벨",
"my_damage_bar_location": "내 대미지 막대 위치",
"none": "없음",
"normal": "보통",
"offset": "옵셋",
"opacity_falloff": "투명도 저하",
"orientation": "방향",
"other_players": "다른 헌터",
"otomo_damage": "동반자 대미지",
"part_name": "부위명",
"part_name_label": "부위 라벨",
"percentage_label": "퍼센트 라벨",
"performance": "성능",
"player_damage": "헌터 대미지",
"player_id": "헌터 ID",
"player_name": "헌터명",
"player_name_label": "헌터명 라벨",
"position": "위치",
"prioritize_large_monsters": "우선 순위의 대형 몬스터",
"quest_summary_screen": "퀘스트 요약 화면",
"rage": "분노",
"reversed_order": "역순",
"settings": "Settings",
"shadow": "Shadow",
"size": "Size",
"small_monster_UI": "소형 몬스터 UI",
"small_monsters": "소형 몬스터",
"sorting": "정렬",
"spacing": "간격",
"stamina": "스태미나",
"static_orientation": "고정 방향",
"static_position": "고정 위치",
"static_sorting": "고정 정렬",
"static_spacing": "고정 간격",
"statically_positioned": "고정적으로 위치함",
"status": "상태",
"text_label": "텍스트 라벨",
"time_UI": "시간 UI",
"time_label": "시간 라벨",
"timer_label": "Timer Label",
"top_damage": "최고 대미지",
"top_left": "좌상단",
"top_right": "우상단",
"total_damage": "총 대미지",
"total_damage_label": "총 대미지 라벨",
"total_damage_offset_is_relative": "총 대미지 옵셋은 상대적",
"total_damage_value_label": "총 대미지 값 라벨",
"tracked_damage_types": "대미지 종류별 추적",
"tracked_monster_types": "몬스터 타입별 추적",
"training_area": "훈련장",
"type": "타입",
"value_label": "값 라벨",
"vertical": "세로",
"viewport_offset": "뷰포트 옵셋",
"visible": "보임",
"width": "너비",
"word_player": "\"헌터\" 명칭",
"world_offset": "전역 옵셋",
"x": "X",
"y": "Y",
"z": "Z"
},
"font_name": "NotoSansKR-Bold.otf",
"parts": {
"abdomen": "배",
"arms": "팔",
"back": "등",
"back_windsac": "등 (바람주머니)",
"body": "몸",
"carapace": "갑각",
"chest_windsac": "가슴 (바람주머니)",
"claw": "발톱",
"dorsal_fin": "등지느러미",
"head": "머리",
"head_mud": "머리 (진흙)",
"large_mudbulb": "대형 진흙덩어리",
"left_arm": "왼팔",
"left_arm_ice": "왼팔 (얼음)",
"left_cutwing": "왼날개절단",
"left_leg": "왼다리",
"left_legs": "왼다리",
"left_wing": "왼날개",
"legs": "다리",
"lower_back": "아랫등",
"lower_body": "아랫몸",
"mane": "갈기",
"neck": "목",
"rear": "엉덩이",
"right_arm": "오른팔",
"right_arm_ice": "오른팔 (얼음)",
"right_cutwing": "오른날개절단",
"right_leg": "오른 다리",
"right_legs": "오른 다리",
"right_wing": "오른 날개",
"rock": "바위",
"spinning": "회전",
"tail": "꼬리",
"tail_mud": "꼬리 (진흙)",
"tail_windsac": "꼬리 (바람주머니)",
"torso": "몸통",
"upper_back": "윗등",
"upper_body": "윗몸",
"wings": "날개"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.