Added Support for multiple configs

1) Implemented ailment damage for buddies;
2) Bugfixes;
This commit is contained in:
GreenComfyTea
2023-01-14 13:30:09 +02:00
parent 9a3cb399e2
commit 3513d77714
12 changed files with 1431 additions and 1109 deletions

View File

@@ -159,41 +159,40 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
monster = small_monster.get_monster(enemy);
end
local attacking_player = nil;
local attacking_otomo = nil;
local player = nil;
local otomo = nil;
if not is_otomo_attack then
attacking_player = players.get_player(attacker_id);
player = players.get_player(attacker_id);
if attacking_player == nil then
attacking_player = non_players.get_servant(attacker_id);
end
local stun_damage = stun_damage_field:get_data(enemy_calc_damage_info);
if attacking_player ~= nil then
ailments.apply_ailment_buildup(monster, attacker_id, ailments.stun_id, stun_damage);
ailments.apply_ailment_buildup(monster, attacker_id, condition_type, condition_damage);
ailments.apply_ailment_buildup(monster, attacker_id, condition_type2, condition_damage2);
ailments.apply_ailment_buildup(monster, attacker_id, condition_type3, condition_damage3);
if player == nil then
player = non_players.get_servant(attacker_id);
end
else
if attacker_id < 4 then
attacking_player = players.get_player(attacker_id);
attacking_otomo = non_players.get_otomo(attacker_id);
player = players.get_player(attacker_id);
otomo = non_players.get_otomo(attacker_id);
elseif attacker_id == 4 then
attacking_player = players.myself
attacking_otomo = non_players.get_otomo(non_players.my_second_otomo_id);
player = players.myself
otomo = non_players.get_otomo(non_players.my_second_otomo_id);
else
attacking_player = non_players.get_servant(attacker_id - 1);
attacking_otomo = non_players.get_otomo(attacker_id - 1);
player = non_players.get_servant(attacker_id - 1);
otomo = non_players.get_otomo(attacker_id - 1);
end
players.update_damage(attacking_otomo, damage_source_type, is_large_monster, damage_object);
players.update_damage(otomo, damage_source_type, is_large_monster, damage_object);
end
local stun_damage = stun_damage_field:get_data(enemy_calc_damage_info);
ailments.apply_ailment_buildup(monster, player, otomo, ailments.stun_id, stun_damage);
ailments.apply_ailment_buildup(monster, player, otomo, condition_type, condition_damage);
ailments.apply_ailment_buildup(monster, player, otomo, condition_type2, condition_damage2);
ailments.apply_ailment_buildup(monster, player, otomo, condition_type3, condition_damage3);
players.update_damage(players.total, damage_source_type, is_large_monster, damage_object);
players.update_damage(attacking_player, damage_source_type, is_large_monster, damage_object);
players.update_damage(player, damage_source_type, is_large_monster, damage_object);
--xy = xy .. "\nPlayer: " .. tostring(attacker_id) ..
--" " .. tostring(attacking_player.name) ..
@@ -204,15 +203,15 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info)
--" Condition Type: (" .. tostring(attacker_type) ..
--") " .. tostring(condition_type);
--if is_otomo_attack then
--xy = xy .. "\nOtomo Master: " .. tostring(attacking_player.id) ..
--" " .. tostring(attacking_player.name) ..
--" Damage: " .. tostring(damage_object.total_damage);
--[[if is_otomo_attack then
xy = xy .. "\nOtomo Master: " .. tostring(player.id) ..
" " .. tostring(player.name) ..
" Damage: " .. tostring(damage_object.total_damage);
--xy = xy .. "\nOtomo: " .. tostring(attacking_otomo.id) ..
--" " .. tostring(attacking_otomo.name) ..
--" Damage: " .. tostring(damage_object.total_damage);
--end
xy = xy .. "\nOtomo: " .. tostring(otomo.id) ..
" " .. tostring(otomo.name) ..
" Damage: " .. tostring(damage_object.total_damage);
end]]
--if string.len(xy) > 2700 then
-- xy = "";

View File

@@ -139,6 +139,10 @@ function players.init_damage_sources()
end
function players.get_player(player_id)
if player_id == non_players.my_second_otomo_id then
return players.myself;
end
return players.list[player_id];
end
@@ -172,6 +176,10 @@ function players.update_damage(player, damage_source_type, is_large_monster, dam
players.merge_damage(player_monster_type.poison, damage_object);
elseif damage_source_type == "blast" then
players.merge_damage(player_monster_type.blast, damage_object);
elseif damage_source_type == "otomo poison" then
players.merge_damage(player_monster_type.otomo_poison, damage_object);
elseif damage_source_type == "otomo blast" then
players.merge_damage(player_monster_type.otomo_blast, damage_object);
elseif damage_source_type == "endemic life" then
players.merge_damage(player_monster_type.endemic_life, damage_object);
elseif damage_source_type == "other" then
@@ -188,154 +196,166 @@ function players.update_display(player)
return;
end
local cached_config = config.current_config.damage_meter_UI;
player.display.total_damage = 0;
player.display.physical_damage = 0;
player.display.elemental_damage = 0;
player.display.ailment_damage = 0;
local cached_config = config.current_config.damage_meter_UI;
local monster_types = {};
if cached_config.tracked_monster_types.small_monsters then
if cached_config.tracked_damage_types.player_damage then
players.merge_damage(player.display, player.small_monsters);
end
if cached_config.tracked_damage_types.bomb_damage then
players.merge_damage(player.display, player.small_monsters.bombs);
end
if cached_config.tracked_damage_types.kunai_damage then
players.merge_damage(player.display, player.small_monsters.kunai);
end
if cached_config.tracked_damage_types.installation_damage then
players.merge_damage(player.display, player.small_monsters.installations);
end
if cached_config.tracked_damage_types.otomo_damage then
if player.type == players.types.myself then
if not cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, player.small_monsters.otomo);
end
elseif player.type == players.types.other_players then
if not cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, player.small_monsters.otomo);
end
elseif player.type == players.types.servants then
if not cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, player.small_monsters.otomo);
end
elseif player.type == players.types.my_otomo then
if cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, player.small_monsters.otomo);
end
elseif player.type == players.types.other_player_otomo then
if cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, player.small_monsters.otomo);
end
elseif player.type == players.types.servant_otomo then
if cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, player.small_monsters.otomo);
end
end
end
if cached_config.tracked_damage_types.wyvern_riding_damage then
players.merge_damage(player.display, player.small_monsters.wyvern_riding);
end
if cached_config.tracked_damage_types.poison_damage then
players.merge_damage(player.display, player.small_monsters.poison);
end
if cached_config.tracked_damage_types.blast_damage then
players.merge_damage(player.display, player.small_monsters.blast);
end
if cached_config.tracked_damage_types.endemic_life_damage then
players.merge_damage(player.display, player.small_monsters.endemic_life);
end
if cached_config.tracked_damage_types.other_damage then
players.merge_damage(player.display, player.small_monsters.other);
end
table.insert(monster_types, player.small_monsters);
end
if cached_config.tracked_monster_types.large_monsters then
table.insert(monster_types, player.large_monsters);
end
for _, monster_type in ipairs(monster_types) do
if cached_config.tracked_damage_types.player_damage then
players.merge_damage(player.display, player.large_monsters);
players.merge_damage(player.display, monster_type);
end
if cached_config.tracked_damage_types.bomb_damage then
players.merge_damage(player.display, player.large_monsters.bombs);
players.merge_damage(player.display, monster_type.bombs);
end
if cached_config.tracked_damage_types.kunai_damage then
players.merge_damage(player.display, player.large_monsters.kunai);
players.merge_damage(player.display, monster_type.kunai);
end
if cached_config.tracked_damage_types.installation_damage then
players.merge_damage(player.display, player.large_monsters.installations);
players.merge_damage(player.display, monster_type.installations);
end
if cached_config.tracked_damage_types.otomo_damage then
if player.type == players.types.myself then
if not cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, player.large_monsters.otomo);
players.merge_damage(player.display, monster_type.otomo);
end
elseif player.type == players.types.other_players then
elseif player.type == players.types.other_player then
if not cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, player.large_monsters.otomo);
players.merge_damage(player.display, monster_type.otomo);
end
elseif player.type == players.types.servants then
elseif player.type == players.types.servant then
if not cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, player.large_monsters.otomo);
players.merge_damage(player.display, monster_type.otomo);
end
elseif player.type == players.types.my_otomo then
if cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, player.large_monsters.otomo);
players.merge_damage(player.display, monster_type.otomo);
end
elseif player.type == players.types.other_player_otomo then
if cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, player.large_monsters.otomo);
players.merge_damage(player.display, monster_type.otomo);
end
elseif player.type == players.types.servant_otomo then
if cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, player.large_monsters.otomo);
players.merge_damage(player.display, monster_type.otomo);
end
elseif player.type == players.types.total then
players.merge_damage(player.display, monster_type.otomo);
end
end
if cached_config.tracked_damage_types.wyvern_riding_damage then
players.merge_damage(player.display, player.large_monsters.wyvern_riding);
players.merge_damage(player.display, monster_type.wyvern_riding);
end
if cached_config.tracked_damage_types.poison_damage then
players.merge_damage(player.display, player.large_monsters.poison);
players.merge_damage(player.display, monster_type.poison);
if player.type == players.types.myself then
if not cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_poison);
end
elseif player.type == players.types.other_player then
if not cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_poison);
end
elseif player.type == players.types.servant then
if not cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_poison);
end
elseif player.type == players.types.my_otomo then
if cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_poison);
end
elseif player.type == players.types.other_player_otomo then
if cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_poison);
end
elseif player.type == players.types.servant_otomo then
if cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_poison);
end
elseif player.type == players.types.total then
players.merge_damage(player.display, monster_type.otomo_poison);
end
end
if cached_config.tracked_damage_types.blast_damage then
players.merge_damage(player.display, player.large_monsters.blast);
players.merge_damage(player.display, monster_type.blast);
if player.type == players.types.myself then
if not cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_blast);
end
elseif player.type == players.types.other_player then
if not cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_blast);
end
elseif player.type == players.types.servant then
if not cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_blast);
end
elseif player.type == players.types.my_otomo then
if cached_config.settings.show_my_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_blast);
end
elseif player.type == players.types.other_player_otomo then
if cached_config.settings.show_other_player_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_blast);
end
elseif player.type == players.types.servant_otomo then
if cached_config.settings.show_servant_otomos_separately then
players.merge_damage(player.display, monster_type.otomo_blast);
end
elseif player.type == players.types.total then
players.merge_damage(player.display, monster_type.otomo_blast);
end
end
if cached_config.tracked_damage_types.endemic_life_damage then
players.merge_damage(player.display, player.large_monsters.endemic_life);
players.merge_damage(player.display, monster_type.endemic_life);
end
if cached_config.tracked_damage_types.other_damage then
players.merge_damage(player.display, player.large_monsters.other);
players.merge_damage(player.display, monster_type.other);
end
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,9 @@ local table_helpers;
language.language_folder = "MHR Overlay\\languages\\";
language.current_language = {};
language.default_language = {
font_name = "NotoSansKR-Bold.otf",
parts = {
@@ -445,13 +448,18 @@ language.default_language = {
myself = "Myself",
total = "Total",
level_label = "Level Label"
level_label = "Level Label",
config = "Config",
rename = "Rename",
duplicate = "Duplicate",
delete = "Delete",
new = "New",
reset = "Reset"
}
};
language.current_language = {};
language.language_names = { "default" };
language.language_names = { "default"};
language.languages = { language.default_language };
function language.load()
@@ -466,7 +474,8 @@ function language.load()
local loaded_language = json.load_file(language_file_name);
if loaded_language ~= nil then
log.info("[MHR Overlay] " .. language_name .. ".json loaded successfully");
log.info("[MHR Overlay] " .. language_file_name .. ".json loaded successfully");
table.insert(language.language_names, language_name);
local merged_language = table_helpers.merge(language.default_language, loaded_language);
@@ -474,8 +483,9 @@ function language.load()
language.save(language_file_name, merged_language);
else
log.error("[MHR Overlay] Failed to load " .. language_name .. ".json");
log.error("[MHR Overlay] Failed to load " .. language_file_name .. ".json");
end
end
end
@@ -483,25 +493,26 @@ end
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");
log.info("[MHR Overlay] " .. file_name .. " saved successfully");
else
log.error("[MHR Overlay] Failed to save en-us.json");
log.error("[MHR Overlay] Failed to save " .. file_name);
end
end
function language.save_default()
language.save(language.language_folder .. "en-us.json", language.default_language)
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]);
language.current_language = language.languages[index];
end
function language.init_module()
table_helpers = require("MHR_Overlay.Misc.table_helpers");
language.save_default();
language.load();
language.current_language = table_helpers.deep_copy(language.default_language);
language.current_language = language.default_language;
end
return language;

View File

@@ -13,22 +13,24 @@ local drawing;
function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailment_buildups_position_on_screen, opacity_scale)
local cached_config = cached_config.ailment_buildups;
local cached_damage_meter_UI_config = config.current_config.damage_meter_UI;
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
if not cached_config.visibility then
return;
end
for id, ailment in pairs(monster.ailments) do
if id == ailments.stun_id then
if not cached_config.filter.stun then
--if not cached_config.filter.stun then
goto continue
end
--end
elseif id == ailments.poison_id then
if not cached_config.filter.poison then
--if not cached_config.filter.poison then
goto continue
end
--end
elseif id == ailments.blast_id then
if not cached_config.filter.blast then
goto continue
@@ -42,24 +44,81 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
goto continue
end
local total_buildup = 0;
local top_buildup = 0;
local displayed_players = {};
for player_id, player_buildup in pairs(ailment.buildup) do
for player, player_buildup in pairs(ailment.buildup) do
total_buildup = total_buildup + player_buildup;
if player_buildup > top_buildup then
top_buildup = player_buildup;
end
table.insert(displayed_players,
{
["buildup"] = player_buildup,
["buildup_share"] = ailment.buildup_share[player_id],
["id"] = player_id
}
);
displayed_players[player] = {
["buildup"] = player_buildup,
["buildup_share"] = ailment.buildup_share[player],
["id"] = player.id
};
end
for otomo, otomo_buildup in pairs(ailment.otomo_buildup) do
total_buildup = total_buildup + otomo_buildup;
if otomo_buildup > top_buildup then
top_buildup = otomo_buildup;
end
local player = players.get_player(otomo.id);
local displayed_player = displayed_players[player];
if otomo.type == players.types.my_otomo then
if cached_damage_meter_UI_config.settings.show_my_otomos_separately then
displayed_players[otomo] = {
["buildup"] = otomo_buildup,
["buildup_share"] = ailment.otomo_buildup_share[otomo],
["id"] = otomo.id
};
elseif player ~= nil then
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
end
elseif otomo.type == players.types.other_player_otomo then
if cached_damage_meter_UI_config.settings.show_other_player_otomos_separately then
displayed_players[otomo] = {
["buildup"] = otomo_buildup,
["buildup_share"] = ailment.otomo_buildup_share[otomo],
["id"] = otomo.id
};
elseif player ~= nil then
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
end
elseif otomo.type == players.types.servant_otomo then
if cached_damage_meter_UI_config.settings.show_servant_otomos_separately then
displayed_players[otomo] = {
["buildup"] = otomo_buildup,
["buildup_share"] = ailment.otomo_buildup_share[otomo],
["id"] = otomo.id
};
elseif player ~= nil then
displayed_players[player].buildup = displayed_players[player].buildup + otomo_buildup;
displayed_players[player].buildup_share = displayed_players[player].buildup_share + ailment.otomo_buildup_share[otomo];
end
end
end
if total_buildup == 0 then
@@ -98,6 +157,7 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
end
end
local ailment_name = "";
if cached_config.ailment_name_label.include.ailment_name then
ailment_name = ailment.name .. " ";
@@ -108,20 +168,20 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
drawing.draw_label(ailment_buildup_UI.ailment_name_label, ailment_buildups_position_on_screen, opacity_scale, ailment_name);
local last_j = 0;
for j, player in ipairs(displayed_players) do
local j = 0;
for player, displayed_player in pairs(displayed_players) do
local ailment_buildup_position_on_screen = {
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * (j - 1) * global_scale_modifier,
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * (j - 1) * global_scale_modifier;
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * j * global_scale_modifier,
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * j * global_scale_modifier;
};
ailment_buildup_UI_entity.draw(player, ailment_buildup_UI, cached_config, ailment_buildup_position_on_screen, opacity_scale, top_buildup);
last_j = j;
ailment_buildup_UI_entity.draw(player, displayed_player, ailment_buildup_UI, cached_config, ailment_buildup_position_on_screen, opacity_scale, top_buildup);
j = j + 1;
end
local total_buildup_position_on_screen = {
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * last_j * global_scale_modifier,
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * last_j * global_scale_modifier;
x = ailment_buildups_position_on_screen.x + cached_config.player_spacing.x * j * global_scale_modifier,
y = ailment_buildups_position_on_screen.y + cached_config.player_spacing.y * j * global_scale_modifier;
};
drawing.draw_label(ailment_buildup_UI.total_buildup_label, total_buildup_position_on_screen, opacity_scale, language.current_language.UI.total_buildup);
@@ -132,6 +192,7 @@ function ailment_buildup.draw(monster, ailment_buildup_UI, cached_config, ailmen
y = total_buildup_position_on_screen.y + 17 + cached_config.ailment_spacing.y * global_scale_modifier
};
::continue::
end

View File

@@ -50,8 +50,8 @@ function ailment_hook.poison_proc(poison_param)
monster = small_monster.get_monster(enemy);
end
monster.ailments[ailments.poison_id].cached_buildup_share = table_helpers.deep_copy(monster.ailments[ailments
.poison_id].buildup_share);
monster.ailments[ailments.poison_id].cached_buildup_share = table_helpers.deep_copy(monster.ailments[ailments.poison_id].buildup_share);
monster.ailments[ailments.poison_id].cached_otomo_buildup_share = table_helpers.deep_copy(monster.ailments[ailments.poison_id].otomo_buildup_share);
ailments.clear_ailment_contribution(monster, ailments.poison_id);
end

View File

@@ -8,6 +8,7 @@ local time;
local small_monster;
local large_monster;
local table_helpers;
local non_players;
--0 Paralyze
--1 Sleep
@@ -50,68 +51,71 @@ ailments.fall_otomo_trap_id = 18;
ailments.shock_otomo_trap_id = 19;
function ailments.new(_ailments, ailment_id)
_ailments[ailment_id] = {};
local new_ailment = {}
new_ailment = {};
_ailments[ailment_id].is_enable = true;
_ailments[ailment_id].id = ailment_id;
new_ailment.is_enable = true;
new_ailment.id = ailment_id;
_ailments[ailment_id].total_buildup = 0;
_ailments[ailment_id].buildup_limit = 0;
_ailments[ailment_id].buildup_percentage = 0;
new_ailment.total_buildup = 0;
new_ailment.buildup_limit = 0;
new_ailment.buildup_percentage = 0;
_ailments[ailment_id].timer = 0;
_ailments[ailment_id].duration = 100000;
_ailments[ailment_id].timer_percentage = 0;
new_ailment.timer = 0;
new_ailment.duration = 100000;
new_ailment.timer_percentage = 0;
_ailments[ailment_id].minutes_left = 0;
_ailments[ailment_id].seconds_left = 0;
new_ailment.minutes_left = 0;
new_ailment.seconds_left = 0;
_ailments[ailment_id].is_active = false;
_ailments[ailment_id].activate_count = 0;
new_ailment.is_active = false;
new_ailment.activate_count = 0;
_ailments[ailment_id].last_change_time = time.total_elapsed_script_seconds;
new_ailment.last_change_time = time.total_elapsed_script_seconds;
if ailment_id == ailments.paralyze_id then
_ailments[ailment_id].name = language.current_language.ailments.paralysis;
new_ailment.name = language.current_language.ailments.paralysis;
elseif ailment_id == ailments.sleep_id then
_ailments[ailment_id].name = language.current_language.ailments.sleep;
new_ailment.name = language.current_language.ailments.sleep;
elseif ailment_id == ailments.stun_id then
_ailments[ailment_id].name = language.current_language.ailments.stun;
new_ailment.name = language.current_language.ailments.stun;
elseif ailment_id == ailments.flash_id then
_ailments[ailment_id].name = language.current_language.ailments.flash;
new_ailment.name = language.current_language.ailments.flash;
elseif ailment_id == ailments.poison_id then
_ailments[ailment_id].name = language.current_language.ailments.poison;
new_ailment.name = language.current_language.ailments.poison;
elseif ailment_id == ailments.blast_id then
_ailments[ailment_id].name = language.current_language.ailments.blast;
new_ailment.name = language.current_language.ailments.blast;
elseif ailment_id == ailments.exhaust_id then
_ailments[ailment_id].name = language.current_language.ailments.exhaust;
new_ailment.name = language.current_language.ailments.exhaust;
elseif ailment_id == ailments.ride_id then
_ailments[ailment_id].name = language.current_language.ailments.ride;
new_ailment.name = language.current_language.ailments.ride;
elseif ailment_id == ailments.water_id then
_ailments[ailment_id].name = language.current_language.ailments.waterblight;
new_ailment.name = language.current_language.ailments.waterblight;
elseif ailment_id == ailments.fire_id then
_ailments[ailment_id].name = language.current_language.ailments.fireblight;
new_ailment.name = language.current_language.ailments.fireblight;
elseif ailment_id == ailments.ice_id then
_ailments[ailment_id].name = language.current_language.ailments.iceblight;
new_ailment.name = language.current_language.ailments.iceblight;
elseif ailment_id == ailments.thunder_id then
_ailments[ailment_id].name = language.current_language.ailments.thunderblight;
new_ailment.name = language.current_language.ailments.thunderblight;
elseif ailment_id == ailments.fall_trap_id then
_ailments[ailment_id].name = language.current_language.ailments.fall_trap;
new_ailment.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;
new_ailment.name = language.current_language.ailments.shock_trap;
elseif ailment_id == ailments.capture_id then
_ailments[ailment_id].name = language.current_language.ailments.tranq_bomb;
new_ailment.name = language.current_language.ailments.tranq_bomb;
elseif ailment_id == ailments.koyashi_id then
_ailments[ailment_id].name = language.current_language.ailments.dung_bomb;
new_ailment.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;
new_ailment.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;
new_ailment.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;
new_ailment.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;
new_ailment.name = language.current_language.ailments.shock_otomo_trap;
end
_ailments[ailment_id] = new_ailment;
end
function ailments.init_ailments()
@@ -149,9 +153,65 @@ function ailments.init_ailments()
_ailments[ailments.stun_id].buildup = {};
_ailments[ailments.stun_id].buildup_share = {};
_ailments[ailments.poison_id].otomo_buildup = {};
_ailments[ailments.poison_id].otomo_buildup_share = {};
_ailments[ailments.poison_id].cached_otomo_buildup_share = {};
_ailments[ailments.blast_id].otomo_buildup = {};
_ailments[ailments.blast_id].otomo_buildup_share = {};
_ailments[ailments.stun_id].otomo_buildup = {};
_ailments[ailments.stun_id].otomo_buildup_share = {};
return _ailments;
end
function ailments.init_ailment_names(_ailments)
for ailment_id, ailment in pairs(_ailments) do
if ailment_id == ailments.paralyze_id then
ailment.name = language.current_language.ailments.paralysis;
elseif ailment_id == ailments.sleep_id then
ailment.name = language.current_language.ailments.sleep;
elseif ailment_id == ailments.stun_id then
ailment.name = language.current_language.ailments.stun;
elseif ailment_id == ailments.flash_id then
ailment.name = language.current_language.ailments.flash;
elseif ailment_id == ailments.poison_id then
ailment.name = language.current_language.ailments.poison;
elseif ailment_id == ailments.blast_id then
ailment.name = language.current_language.ailments.blast;
elseif ailment_id == ailments.exhaust_id then
ailment.name = language.current_language.ailments.exhaust;
elseif ailment_id == ailments.ride_id then
ailment.name = language.current_language.ailments.ride;
elseif ailment_id == ailments.water_id then
ailment.name = language.current_language.ailments.waterblight;
elseif ailment_id == ailments.fire_id then
ailment.name = language.current_language.ailments.fireblight;
elseif ailment_id == ailments.ice_id then
ailment.name = language.current_language.ailments.iceblight;
elseif ailment_id == ailments.thunder_id then
ailment.name = language.current_language.ailments.thunderblight;
elseif ailment_id == ailments.fall_trap_id then
ailment.name = language.current_language.ailments.fall_trap;
elseif ailment_id == ailments.shock_trap_id then
ailment.name = language.current_language.ailments.shock_trap;
elseif ailment_id == ailments.capture_id then
ailment.name = language.current_language.ailments.tranq_bomb;
elseif ailment_id == ailments.koyashi_id then
ailment.name = language.current_language.ailments.dung_bomb;
elseif ailment_id == ailments.steel_fang_id then
ailment.name = language.current_language.ailments.steel_fang;
elseif ailment_id == ailments.fall_quick_sand_id then
ailment.name = language.current_language.ailments.quick_sand;
elseif ailment_id == ailments.fall_otomo_trap_id then
ailment.name = language.current_language.ailments.fall_otomo_trap;
elseif ailment_id == ailments.shock_otomo_trap_id then
ailment.name = language.current_language.ailments.shock_otomo_trap;
end
end
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");
@@ -593,14 +653,11 @@ function ailments.draw(monster, ailment_UI, cached_config, ailments_position_on_
end
function ailments.apply_ailment_buildup(monster, attacker_id, ailment_type, ailment_buildup)
function ailments.apply_ailment_buildup(monster, player, otomo, ailment_type, ailment_buildup)
if monster == nil or
(ailment_type ~= ailments.poison_id and ailment_type ~= ailments.blast_id and ailment_type ~= ailments.stun_id) then
return;
end
if ailment_buildup == 0 or ailment_buildup == nil then
(ailment_type ~= ailments.poison_id and ailment_type ~= ailments.blast_id and ailment_type ~= ailments.stun_id)
or (ailment_buildup == 0 or ailment_buildup == nil) then
return;
end
@@ -609,8 +666,17 @@ function ailments.apply_ailment_buildup(monster, attacker_id, ailment_type, ailm
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;
-- get the otomo buildup accumulator for this type
if monster.ailments[ailment_type].otomo_buildup == nil then
monster.ailments[ailment_type].otomo_buildup = {};
end
if otomo == nil then
monster.ailments[ailment_type].buildup[player] = (monster.ailments[ailment_type].buildup[player] or 0) + ailment_buildup;
else
monster.ailments[ailment_type].otomo_buildup[otomo] = (monster.ailments[ailment_type].otomo_buildup[otomo] or 0) + ailment_buildup;
end
ailments.calculate_ailment_contribution(monster, ailment_type);
end
@@ -619,20 +685,34 @@ end
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
for player, 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;
for otomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do
total = total + otomo_buildup;
end
for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
-- update ratio for this player
monster.ailments[ailment_type].buildup_share[player] = player_buildup / total;
end
for otomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do
-- update ratio for this otomo
monster.ailments[ailment_type].otomo_buildup_share[otomo] = otomo_buildup / total;
end
end
function ailments.clear_ailment_contribution(monster, ailment_type)
for attacker_id, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
monster.ailments[ailment_type].buildup_share[attacker_id] = 0;
monster.ailments[ailment_type].buildup[attacker_id] = 0;
for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do
monster.ailments[ailment_type].buildup_share[player] = 0;
monster.ailments[ailment_type].buildup[player] = 0;
end
for aotomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do
monster.ailments[ailment_type].otomo_buildup_share[aotomo] = 0;
monster.ailments[ailment_type].otomo_buildup[aotomo] = 0;
end
end
@@ -644,18 +724,25 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage)
end
local damage_source_type = "";
local otomo_damage_source_type = "";
local buildup_share = monster.ailments[ailment_type].buildup_share;
local otomo_buildup_share = monster.ailments[ailment_type].otomo_buildup_share;
if ailment_type == ailments.poison_id then
damage_source_type = "poison";
otomo_damage_source_type = "otomo poison";
buildup_share = monster.ailments[ailment_type].cached_buildup_share;
otomo_buildup_share = monster.ailments[ailment_type].cached_otomo_buildup_share;
elseif ailment_type == ailments.blast_id then
damage_source_type = "blast";
otomo_damage_source_type = "otomo blast";
else
return;
end
-- split up damage according to ratio of buildup on boss for this type
for attacker_id, percentage in pairs(buildup_share) do
for player, percentage in pairs(buildup_share) do
local damage_portion = ailment_damage * percentage;
local damage_object = {};
@@ -664,11 +751,26 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage)
damage_object.elemental_damage = 0;
damage_object.ailment_damage = damage_portion;
local attacking_player = players.get_player(attacker_id);
players.update_damage(player, damage_source_type, true, damage_object);
end
if attacking_player ~= nil then
players.update_damage(attacking_player, damage_source_type, true, damage_object);
-- split up damage according to ratio of buildup on boss for this type
for otomo, percentage in pairs(otomo_buildup_share) do
local damage_portion = ailment_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 player = players.get_player(otomo.id);
if player ~= nil then
players.update_damage(player, otomo_damage_source_type, true, damage_object);
end
players.update_damage(otomo, otomo_damage_source_type, true, damage_object);
end
local damage_object = {};
@@ -682,6 +784,7 @@ end
function ailments.init_module()
players = require("MHR_Overlay.Damage_Meter.players");
non_players = require("MHR_Overlay.Damage_Meter.non_players");
language = require("MHR_Overlay.Misc.language");
config = require("MHR_Overlay.Misc.config");
ailment_UI_entity = require("MHR_Overlay.UI.UI_Entities.ailment_UI_entity");

View File

@@ -303,6 +303,8 @@ function large_monster.init_UI(monster, monster_UI, cached_config)
cached_config.ailment_buildups.total_buildup_label,
cached_config.ailment_buildups.total_buildup_value_label
);
ailments.init_ailment_names(monster.ailments);
end
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>k__BackingField");

View File

@@ -18,6 +18,7 @@ local bar_customization;
function ailment_buildups_customization.draw(cached_config)
local changed = false;
local config_changed = false;
local index = 1;
if imgui.tree_node(language.current_language.customization_menu.ailment_buildups) then
changed, cached_config.visibility = imgui.checkbox(
@@ -137,90 +138,8 @@ function ailment_buildups_customization.draw(cached_config)
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.ailment_name_label) then
changed, cached_config.ailment_name_label.visibility =
imgui.checkbox(language.current_language.customization_menu.visible,
cached_config.ailment_name_label.visibility);
config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.include) then
changed, cached_config.ailment_name_label.include.ailment_name = imgui.checkbox(
language.current_language.customization_menu.ailment_name,
cached_config.ailment_name_label.include.ailment_name);
config_changed = config_changed or changed;
changed, cached_config.ailment_name_label.include.activation_count = imgui.checkbox(
language.current_language.customization_menu.activation_count,
cached_config.ailment_name_label.include.activation_count);
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.offset) then
changed, cached_config.ailment_name_label.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.ailment_name_label.offset.x,
0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed;
changed, cached_config.ailment_name_label.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.ailment_name_label.offset.y,
0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.color) then
changed, cached_config.ailment_name_label.color = imgui.color_picker_argb(
"", cached_config.ailment_name_label.color, customization_menu.color_picker_flags);
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.shadow) then
changed, cached_config.ailment_name_label.shadow.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.ailment_name_label.shadow.visibility);
config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then
changed, cached_config.ailment_name_label.shadow.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.ailment_name_label.shadow.offset.x,
0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed;
changed, cached_config.ailment_name_label.shadow.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.ailment_name_label.shadow.offset.y,
0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(language.current_language.customization_menu.color) then
changed, cached_config.ailment_name_label.shadow.color = imgui.color_picker_argb(
"", cached_config.ailment_name_label.shadow.color, customization_menu.color_picker_flags);
config_changed = config_changed or changed;
imgui.tree_pop();
end
imgui.tree_pop();
end
imgui.tree_pop();
end
changed = label_customization.draw(language.current_language.customization_menu.ailment_name_label, cached_config.ailment_name_label);
config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.player_name_label, cached_config.player_name_label);
config_changed = config_changed or changed;

View File

@@ -55,34 +55,33 @@ function ailment_buildup_UI_entity.new(buildup_bar, highlighted_buildup_bar, ail
return entity;
end
function ailment_buildup_UI_entity.draw(_player_buildup, ailment_buildup_UI, cached_config, position_on_screen, opacity_scale, top_buildup)
function ailment_buildup_UI_entity.draw(player, player_buildup, ailment_buildup_UI, cached_config, position_on_screen, opacity_scale, top_buildup)
local player_buildup_bar_percentage = 0;
if cached_config.settings.buildup_bar_relative_to == "Total Buildup" then
player_buildup_bar_percentage = _player_buildup.buildup_share;
player_buildup_bar_percentage = player_buildup.buildup_share;
else
if top_buildup ~= 0 then
player_buildup_bar_percentage = _player_buildup.buildup / top_buildup;
player_buildup_bar_percentage = player_buildup.buildup / top_buildup;
end
end
if _player_buildup.id == players.myself.id and cached_config.settings.highlighted_bar == "Me" then
if player.type == players.types.myself and cached_config.settings.highlighted_bar == "Me" then
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
elseif cached_config.settings.highlighted_bar == "Top Buildup" and _player_buildup.buildup == top_buildup then
elseif cached_config.settings.highlighted_bar == "Top Buildup" and player_buildup.buildup == top_buildup then
drawing.draw_bar(ailment_buildup_UI.highlighted_buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
else
drawing.draw_bar(ailment_buildup_UI.buildup_bar, position_on_screen, opacity_scale, player_buildup_bar_percentage);
end
local player = players.get_player(_player_buildup.id);
local player_name = "Player " .. tostring(_player_buildup.id);
local player_name = tostring(player_buildup.id);
if player ~= nil then
player_name = player.name;
end
drawing.draw_label(ailment_buildup_UI.player_name_label, position_on_screen, opacity_scale, player_name);
drawing.draw_label(ailment_buildup_UI.buildup_value_label, position_on_screen, opacity_scale, _player_buildup.buildup);
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * _player_buildup.buildup_share);
drawing.draw_label(ailment_buildup_UI.buildup_value_label, position_on_screen, opacity_scale, player_buildup.buildup);
drawing.draw_label(ailment_buildup_UI.buildup_percentage_label, position_on_screen, opacity_scale, 100 * player_buildup.buildup_share);
end
function ailment_buildup_UI_entity.init_module()

View File

@@ -10,8 +10,6 @@ local non_players;
function damage_UI_entity.new(damage_meter_UI_elements, type)
local entity = {};
local cached_config = config.current_config.damage_meter_UI;
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
entity.bar = table_helpers.deep_copy(damage_meter_UI_elements.damage_bar);

View File

@@ -103,6 +103,8 @@ customization_menu.damage_meter_UI_waiting_for_key = false;
customization_menu.endemic_life_UI_waiting_for_key = false;
customization_menu.menu_font_changed = false;
customization_menu.config_name_input = "";
function customization_menu.reload_font(pop_push)
customization_menu.font = imgui.load_font(language.current_language.font_name,
config.current_config.global_settings.menu_font.size, customization_menu.font_range);
@@ -261,6 +263,8 @@ function customization_menu.draw()
imgui.push_font(customization_menu.font);
local config_changed = false;
local language_changed = false;
local modifiers_changed = false;
local modules_changed = false;
local global_settings_changed = false;
@@ -277,8 +281,215 @@ function customization_menu.draw()
imgui.text(language.current_language.customization_menu.status .. ": " .. status_string);
config_changed, apply_font_requested = customization_menu.draw_config();
modules_changed = customization_menu.draw_modules();
customization_menu.draw_hotkeys();
global_settings_changed, modifiers_changed, apply_font_requested, language_changed = customization_menu.draw_global_settings(apply_font_requested, config_changed);
small_monster_UI_changed = customization_menu.draw_small_monster_UI();
if imgui.tree_node(language.current_language.customization_menu.large_monster_UI) then
large_monster_dynamic_UI_changed = customization_menu.draw_large_monster_dynamic_UI()
large_monster_static_UI_changed = customization_menu.draw_large_monster_static_UI()
large_monster_highlighted_UI_changed = customization_menu.draw_large_monster_highlighted_UI()
imgui.tree_pop();
end
time_UI_changed = customization_menu.draw_time_UI();
damage_meter_UI_changed = customization_menu.draw_damage_meter_UI();
endemic_life_UI_changed = customization_menu.draw_endemic_life_UI()
imgui.pop_font();
imgui.end_window();
if small_monster_UI_changed or modifiers_changed or config_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 or config_changed then
for _, monster in pairs(large_monster.list) do
large_monster.init_UI(monster, monster.dynamic_UI, config.current_config.large_monster_UI.dynamic);
end
end
if large_monster_static_UI_changed or modifiers_changed or config_changed then
for _, monster in pairs(large_monster.list) do
large_monster.init_UI(monster, monster.static_UI, config.current_config.large_monster_UI.static);
end
end
if large_monster_highlighted_UI_changed or modifiers_changed or config_changed then
for _, monster in pairs(large_monster.list) do
large_monster.init_UI(monster, monster.highlighted_UI, config.current_config.large_monster_UI.highlighted);
end
end
if time_UI_changed or modifiers_changed or config_changed then
time_UI.init_UI();
end
if damage_meter_UI_changed or modifiers_changed or config_changed then
for _, player in pairs(players.list) do
players.init_UI(player);
end
for _, servant in pairs(non_players.servant_list) do
non_players.init_UI(servant);
end
for _, otomo in pairs(non_players.otomo_list) do
non_players.init_UI(otomo);
end
players.init_UI(players.total);
players.init_highlighted_UI();
end
if endemic_life_UI_changed or modifiers_changed or config_changed then
for _, creature in pairs(env_creature.list) do
env_creature.init_UI(creature);
end
end
if customization_menu.menu_font_changed and apply_font_requested or config_changed then
customization_menu.menu_font_changed = false;
customization_menu.reload_font(false);
end
if modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
large_monster_static_UI_changed or large_monster_highlighted_UI_changed or time_UI_changed or damage_meter_UI_changed or
endemic_life_UI_changed or modifiers_changed or config_changed then
config.save_current();
end
end
function customization_menu.draw_config()
local index = 1;
local changed = false;
local config_changed = false;
local apply_font_requested = false;
if imgui.tree_node(language.current_language.customization_menu.config) then
changed, index = imgui.combo(language.current_language.customization_menu.config,
table_helpers.find_index(config.config_names, config.current_config_name), config.config_names);
config_changed = config_changed or changed;
if changed then
config.current_config_name = config.config_names[index];
config.update(index);
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
customization_menu.init();
customization_menu.menu_font_changed = true;
apply_font_requested = true;
end
changed, customization_menu.config_name_input = imgui.input_text(language.current_language.customization_menu.config_name, customization_menu.config_name_input);
changed = imgui.button(language.current_language.customization_menu.new);
if changed then
if customization_menu.config_name_input ~= "" then
config.new(customization_menu.config_name_input);
config_changed = config_changed or changed;
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
customization_menu.init();
customization_menu.menu_font_changed = true;
apply_font_requested = true;
end
end
imgui.same_line();
changed = imgui.button(language.current_language.customization_menu.duplicate);
if changed then
if customization_menu.config_name_input ~= "" then
config.duplicate(customization_menu.config_name_input);
config_changed = config_changed or changed;
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
customization_menu.init();
customization_menu.menu_font_changed = true;
apply_font_requested = true;
end
end
imgui.same_line();
changed = imgui.button(language.current_language.customization_menu.reset);
config_changed = config_changed or changed;
if changed then
config.reset();
language.update(table_helpers.find_index(language.language_names, config.current_config.global_settings.language, false));
customization_menu.init();
customization_menu.menu_font_changed = true;
apply_font_requested = true;
end
imgui.tree_pop();
end
return config_changed, apply_font_requested;
end
function customization_menu.draw_modules()
local changed = false;
local config_changed = false;
if imgui.tree_node(language.current_language.customization_menu.modules) then
changed, config.current_config.small_monster_UI.enabled = imgui.checkbox(
language.current_language.customization_menu.small_monster_UI, config.current_config.small_monster_UI.enabled);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.dynamic.enabled =
imgui.checkbox(language.current_language.customization_menu.large_monster_dynamic_UI,
config.current_config.large_monster_UI.dynamic.enabled);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.static.enabled =
imgui.checkbox(language.current_language.customization_menu.large_monster_static_UI,
config.current_config.large_monster_UI.static.enabled);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.highlighted.enabled =
imgui.checkbox(language.current_language.customization_menu.large_monster_highlighted_UI,
config.current_config.large_monster_UI.highlighted.enabled);
config_changed = config_changed or changed;
changed, config.current_config.time_UI.enabled = imgui.checkbox(language.current_language.customization_menu.time_UI,
config.current_config.time_UI.enabled);
config_changed = config_changed or changed;
changed, config.current_config.damage_meter_UI.enabled = imgui.checkbox(
language.current_language.customization_menu.damage_meter_UI, config.current_config.damage_meter_UI.enabled);
config_changed = config_changed or changed;
changed, config.current_config.endemic_life_UI.enabled = imgui.checkbox(
language.current_language.customization_menu.endemic_life_UI, config.current_config.endemic_life_UI.enabled);
config_changed = config_changed or changed;
imgui.tree_pop();
end
return config_changed;
end
function customization_menu.draw_hotkeys()
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
@@ -509,140 +720,20 @@ function customization_menu.draw()
imgui.text(keyboard.get_hotkey_name(config.current_config.global_settings.hotkeys_with_modifiers.endemic_life_UI));
imgui.tree_pop();
end
global_settings_changed, modifiers_changed, apply_font_requested = customization_menu.draw_global_settings();
small_monster_UI_changed = customization_menu.draw_small_monster_UI();
if imgui.tree_node(language.current_language.customization_menu.large_monster_UI) then
large_monster_dynamic_UI_changed = customization_menu.draw_large_monster_dynamic_UI()
large_monster_static_UI_changed = customization_menu.draw_large_monster_static_UI()
large_monster_highlighted_UI_changed = customization_menu.draw_large_monster_highlighted_UI()
imgui.tree_pop();
end
time_UI_changed = customization_menu.draw_time_UI();
damage_meter_UI_changed = customization_menu.draw_damage_meter_UI();
endemic_life_UI_changed = customization_menu.draw_endemic_life_UI()
imgui.pop_font();
imgui.end_window();
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_UI(monster, monster.dynamic_UI, config.current_config.large_monster_UI.dynamic);
end
end
if large_monster_static_UI_changed or modifiers_changed then
for _, monster in pairs(large_monster.list) do
large_monster.init_UI(monster, monster.static_UI, config.current_config.large_monster_UI.static);
end
end
if large_monster_highlighted_UI_changed or modifiers_changed then
for _, monster in pairs(large_monster.list) do
large_monster.init_UI(monster, monster.highlighted_UI, config.current_config.large_monster_UI.highlighted);
end
end
if time_UI_changed or modifiers_changed then
time_UI.init_UI();
end
if damage_meter_UI_changed or modifiers_changed then
for _, player in pairs(players.list) do
players.init_UI(player);
end
for _, servant in pairs(non_players.servant_list) do
non_players.init_UI(servant);
end
for _, otomo in pairs(non_players.otomo_list) do
non_players.init_UI(otomo);
end
players.init_UI(players.total);
players.init_highlighted_UI();
end
if endemic_life_UI_changed or modifiers_changed then
for _, creature in pairs(env_creature.list) do
env_creature.init_UI(creature);
end
end
if customization_menu.menu_font_changed and apply_font_requested then
customization_menu.menu_font_changed = false;
customization_menu.reload_font(false);
end
if modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
large_monster_static_UI_changed or large_monster_highlighted_UI_changed or time_UI_changed or damage_meter_UI_changed or
endemic_life_UI_changed then
config.save();
end
end
function customization_menu.draw_modules()
local changed = false;
local config_changed = false;
if imgui.tree_node(language.current_language.customization_menu.modules) then
changed, config.current_config.small_monster_UI.enabled = imgui.checkbox(
language.current_language.customization_menu.small_monster_UI, config.current_config.small_monster_UI.enabled);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.dynamic.enabled =
imgui.checkbox(language.current_language.customization_menu.large_monster_dynamic_UI,
config.current_config.large_monster_UI.dynamic.enabled);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.static.enabled =
imgui.checkbox(language.current_language.customization_menu.large_monster_static_UI,
config.current_config.large_monster_UI.static.enabled);
config_changed = config_changed or changed;
changed, config.current_config.large_monster_UI.highlighted.enabled =
imgui.checkbox(language.current_language.customization_menu.large_monster_highlighted_UI,
config.current_config.large_monster_UI.highlighted.enabled);
config_changed = config_changed or changed;
changed, config.current_config.time_UI.enabled = imgui.checkbox(language.current_language.customization_menu.time_UI,
config.current_config.time_UI.enabled);
config_changed = config_changed or changed;
changed, config.current_config.damage_meter_UI.enabled = imgui.checkbox(
language.current_language.customization_menu.damage_meter_UI, config.current_config.damage_meter_UI.enabled);
config_changed = config_changed or changed;
changed, config.current_config.endemic_life_UI.enabled = imgui.checkbox(
language.current_language.customization_menu.endemic_life_UI, config.current_config.endemic_life_UI.enabled);
config_changed = config_changed or changed;
imgui.tree_pop();
end
return config_changed;
end
function customization_menu.draw_global_settings()
function customization_menu.draw_global_settings(apply_font_requested, language_changed)
local changed = false;
local config_changed = false;
local modifiers_changed = false;
local apply_font_requested = false;
local index = 1;
if imgui.tree_node(language.current_language.customization_menu.global_settings) then
local cached_config = config.current_config.global_settings;
imgui.text(language.current_language.customization_menu.menu_font_change_disclaimer);
changed, index = imgui.combo(language.current_language.customization_menu.language .. "*",
table_helpers.find_index(language.language_names, cached_config.language), language.language_names);
config_changed = config_changed or changed;
@@ -652,28 +743,10 @@ function customization_menu.draw_global_settings()
language.update(index);
customization_menu.init();
apply_font_requested = true;
language_changed = true;
customization_menu.menu_font_changed = true;
part_names.init();
small_monster.init_list();
large_monster.init_list();
env_creature.init_list();
for _, player in pairs(players.list) do
players.init_UI(player);
end
for _, servant in pairs(non_players.servant_list) do
non_players.init_UI(servant);
end
for _, otomo in pairs(non_players.otomo_list) do
non_players.init_UI(otomo);
end
players.init_UI(players.total);
players.init_highlighted_UI();
modifiers_changed = true;
apply_font_requested = true;
end
if imgui.tree_node(language.current_language.customization_menu.menu_font) then
@@ -906,7 +979,7 @@ function customization_menu.draw_global_settings()
imgui.tree_pop();
end
return config_changed, modifiers_changed, apply_font_requested;
return config_changed, modifiers_changed, apply_font_requested, language_changed;
end
function customization_menu.draw_small_monster_UI()