6 Commits

Author SHA1 Message Date
GreenComfyTea
8bcd5e0c4a Update ru-ru.json 2023-05-28 17:40:27 +03:00
GreenComfyTea
c56976b97f Add Right Shift Alignment 2023-05-28 17:40:10 +03:00
GreenComfyTea
5af7f53962 Bump version to v2.5 2023-05-28 13:54:08 +03:00
GreenComfyTea
8e77df6fed More caching 2023-05-28 13:53:34 +03:00
GreenComfyTea
d68aacc5bf Cache methods and fields 2023-05-28 13:26:13 +03:00
GreenComfyTea
4f34f76ad7 Add Anomaly Core Health Bars to Parts UI 2023-05-28 12:48:46 +03:00
19 changed files with 2822 additions and 627 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -202,6 +202,7 @@ this.default_language = {
total_buildup = "Total Buildup", total_buildup = "Total Buildup",
part_break = "Break", part_break = "Break",
part_sever = "Sever", part_sever = "Sever",
part_anomaly_core = "Anomaly Core",
otomo = "Buddy", otomo = "Buddy",
servant = "Follower", servant = "Follower",
@@ -319,6 +320,7 @@ this.default_language = {
rage = "Rage", rage = "Rage",
body_parts = "Body Parts", body_parts = "Body Parts",
hide_undamaged_parts = "Hide Undamaged Parts", hide_undamaged_parts = "Hide Undamaged Parts",
render_inactive_anomaly_cores = "Render Inactive Anomaly Cores",
part_name = "Part Name", part_name = "Part Name",
flinch_count = "Flinch Count", flinch_count = "Flinch Count",
break_count = "Break Count", break_count = "Break Count",
@@ -453,6 +455,8 @@ this.default_language = {
break_health_percentage = "Break Health Percentage", break_health_percentage = "Break Health Percentage",
loss_health = "Sever Health", loss_health = "Sever Health",
loss_health_percentage = "Sever Health Percentage", loss_health_percentage = "Sever Health Percentage",
anomaly_health = "Anomaly Core Health",
anomaly_health_percentage = "Anomaly Core Health Percentage",
monster_id = "Monster ID", monster_id = "Monster ID",
@@ -482,14 +486,24 @@ this.default_language = {
freeze_dps_on_quest_end = "Freeze DPS on Quest End", freeze_dps_on_quest_end = "Freeze DPS on Quest End",
health_break_sever_anomaly_filter = "Health + Break + Sever + Anomaly Core",
health_break_sever_filter = "Health + Break + Sever",
health_break_anomaly_filter = "Health + Break + Anomaly Core",
health_sever_anomaly_filter = "Health + Sever + Anomaly Core",
break_sever_anomaly_filter = "Break + Sever + Anomaly Core",
health_break_severe_filter = "Health + Break + Severe",
health_break_filter = "Health + Break", health_break_filter = "Health + Break",
health_severe_filter = "Health + Severe", health_sever_filter = "Health + Sever",
health_anomaly_filter = "Health + Anomaly Core",
break_sever_filter = "Break + Sever",
break_anomaly_filter = "Break + Anomaly Core",
sever_anomaly_filter = "Sever + Anomaly Core",
health_filter = "Health", health_filter = "Health",
break_severe_filter = "Break + Severe",
break_filter = "Break", break_filter = "Break",
severe_filter = "Severe", sever_filter = "Sever",
anomaly_filter = "Anomaly Core",
outline = "Outline", outline = "Outline",
thickness = "Thickness", thickness = "Thickness",
@@ -548,6 +562,8 @@ this.default_language = {
right_to_left = "Right to Left", right_to_left = "Right to Left",
top_to_bottom = "Top to Bottom", top_to_bottom = "Top to Bottom",
bottom_to_top = "Bottom to Top", bottom_to_top = "Bottom to Top",
right_alignment_shift = "Right Alignment Shift"
} }
}; };

View File

@@ -47,7 +47,7 @@ local enemy_condition_damage_param_base_type_def = sdk.find_type_definition("sno
local get_enemy_method = enemy_condition_damage_param_base_type_def:get_method("get_Em"); local get_enemy_method = enemy_condition_damage_param_base_type_def:get_method("get_Em");
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
local damage_param_field = enemy_character_base_type_def:get_field("<DamageParam>k__BackingField"); local get_damage_param_method = enemy_character_base_type_def:get_method("get_DamageParam");
local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy"); local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBossEnemy");
local enemy_damage_param_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageParam"); local enemy_damage_param_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageParam");
@@ -120,7 +120,7 @@ end
function this.stock_damage() function this.stock_damage()
for enemy, monster in pairs(large_monster.list) do for enemy, monster in pairs(large_monster.list) do
local damage_param = damage_param_field:get_data(enemy); local damage_param = get_damage_param_method:call(enemy);
if damage_param == nil then if damage_param == nil then
goto continue goto continue
end end
@@ -132,7 +132,7 @@ function this.stock_damage()
end end
for enemy, monster in pairs(small_monster.list) do for enemy, monster in pairs(small_monster.list) do
local damage_param = damage_param_field:get_data(enemy); local damage_param = get_damage_param_method:call(enemy);
if damage_param == nil then if damage_param == nil then
goto continue goto continue
end end

View File

@@ -245,20 +245,20 @@ function this.init_ailment_names(_ailments)
end end
local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase"); local enemy_character_base_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase");
local get_damage_param_method = enemy_character_base_type_def:get_method("get_DamageParam");
local damage_param_type_def = get_damage_param_method:get_return_type();
local get_condition_param_method = damage_param_type_def:get_method("get_ConditionParam");
local stun_param_field = damage_param_type_def:get_field("_StunParam");
local poison_param_field = damage_param_type_def:get_field("_PoisonParam");
local blast_param_field = damage_param_type_def:get_field("_BlastParam");
local blast_param_type_def = blast_param_field:get_type();
local enemy_condition_damage_param_base_type_def = sdk.find_type_definition("snow.enemy.EnemyConditionDamageParamBase"); local enemy_condition_damage_param_base_type_def = sdk.find_type_definition("snow.enemy.EnemyConditionDamageParamBase");
local damage_param_field = enemy_character_base_type_def:get_field("<DamageParam>k__BackingField");
local damage_param_type = damage_param_field:get_type();
local get_condition_param_method = damage_param_type:get_method("get_ConditionParam");
local stun_param_field = damage_param_type:get_field("_StunParam");
local poison_param_field = damage_param_type:get_field("_PoisonParam");
local blast_param_field = damage_param_type:get_field("_BlastParam");
local poison_param_type = poison_param_field:get_type();
local blast_param_type = blast_param_field:get_type();
local get_is_enable_method = enemy_condition_damage_param_base_type_def:get_method("get_IsEnable"); local get_is_enable_method = enemy_condition_damage_param_base_type_def:get_method("get_IsEnable");
local get_is_active_method = enemy_condition_damage_param_base_type_def:get_method("get_IsActive"); local get_is_active_method = enemy_condition_damage_param_base_type_def:get_method("get_IsActive");
local get_activate_count_method = enemy_condition_damage_param_base_type_def:get_method("get_ActivateCount"); local get_activate_count_method = enemy_condition_damage_param_base_type_def:get_method("get_ActivateCount");
@@ -267,8 +267,9 @@ local get_limit_method = enemy_condition_damage_param_base_type_def:get_method("
local get_active_time_method = enemy_condition_damage_param_base_type_def:get_method("get_ActiveTime"); local get_active_time_method = enemy_condition_damage_param_base_type_def:get_method("get_ActiveTime");
local get_active_timer_method = enemy_condition_damage_param_base_type_def:get_method("get_ActiveTimer"); local get_active_timer_method = enemy_condition_damage_param_base_type_def:get_method("get_ActiveTimer");
local poison_damage_field = poison_param_type:get_field("<Damage>k__BackingField"); local poison_param_type_def = poison_param_field:get_type();
local poison_get_is_damage_method = poison_param_type:get_method("get_IsDamage"); local poison_damage_field = poison_param_type_def:get_field("<Damage>k__BackingField");
local poison_get_is_damage_method = poison_param_type_def:get_method("get_IsDamage");
local system_array_type_def = sdk.find_type_definition("System.Array"); local system_array_type_def = sdk.find_type_definition("System.Array");
local length_method = system_array_type_def:get_method("get_Length"); local length_method = system_array_type_def:get_method("get_Length");
@@ -278,7 +279,7 @@ function this.update_ailments(enemy, monster)
if enemy == nil then if enemy == nil then
return; return;
end end
local damage_param = damage_param_field:get_data(enemy); local damage_param = get_damage_param_method:call(enemy);
if damage_param == nil then if damage_param == nil then
return; return;
end end

View File

@@ -50,25 +50,31 @@ this.list = {};
function this.new(id, name) function this.new(id, name)
local part = {}; local part = {};
part.id = id;
part.health = 9999; part.id = id;
part.max_health = 99999; part.name = name;
part.health = -9;
part.max_health = -10;
part.health_percentage = 0; part.health_percentage = 0;
part.break_health = 9999; part.break_health = -9;
part.break_max_health = 99999; part.break_max_health = -10;
part.break_health_percentage = 0; part.break_health_percentage = 0;
part.lost_health = 9999; part.lost_health = -9;
part.loss_max_health = 99999; part.loss_max_health = -10;
part.loss_health_percentage = 0; part.loss_health_percentage = 0;
part.name = name;
part.flinch_count = 0; part.flinch_count = 0;
part.break_count = 0; part.break_count = 0;
part.break_max_count = 0; part.break_max_count = 0;
part.anomaly_health = -9;
part.anomaly_max_health = -10;
part.anomaly_health_percentage = 0;
part.anomaly_is_active = false;
part.last_change_time = time.total_elapsed_script_seconds; part.last_change_time = time.total_elapsed_script_seconds;
return part; return part;
@@ -81,7 +87,7 @@ function this.init_part_names(monster_id, parts)
end end
function this.update_flinch(part, part_current, part_max) function this.update_flinch(part, part_current, part_max)
if part_current > part.health then if part_current > part.health and part.max_health > 0 then
part.flinch_count = part.flinch_count + 1; part.flinch_count = part.flinch_count + 1;
end end
@@ -154,6 +160,124 @@ function this.update_loss(part, part_loss_current, part_loss_max, is_severed)
end end
function this.update_anomaly(part, part_anomaly_current, part_anomaly_max, part_is_active)
if part.anomaly_health ~= part_anomaly_current then
part.last_change_time = time.total_elapsed_script_seconds;
end
if part.anomaly_max_health ~= part_anomaly_max then
part.last_change_time = time.total_elapsed_script_seconds;
end
if part.anomaly_is_active ~= part_is_active then
part.last_change_time = time.total_elapsed_script_seconds;
end
part.anomaly_health = part_anomaly_current;
part.anomaly_max_health = part_anomaly_max;
part.anomaly_is_active = part_is_active;
if part.anomaly_max_health ~= 0 then
part.anomaly_health_percentage = part.anomaly_health / part.anomaly_max_health;
end
end
function this.is_filtered_out(cached_config, health_supported, break_supported, sever_supported, anomaly_supported)
if health_supported then
if break_supported then
if sever_supported then
if anomaly_supported then
if not cached_config.filter.health_break_sever_anomaly then
return true;
end
else
if not cached_config.filter.health_break_sever then
return true;
end
end
else
if anomaly_supported then
if not cached_config.filter.health_break_anomaly then
return true;
end
else
if not cached_config.filter.health_break then
return true;
end
end
end
else
if sever_supported then
if anomaly_supported then
if not cached_config.filter.health_sever_anomaly then
return true;
end
else
if not cached_config.filter.health_sever then
return true;
end
end
else
if anomaly_supported then
if not cached_config.filter.health_anomaly then
return true;
end
else
if not cached_config.filter.health then
return true;
end
end
end
end
else
if break_supported then
if sever_supported then
if anomaly_supported then
if not cached_config.filter.break_sever_anomaly then
return true;
end
else
if not cached_config.filter.break_sever then
return true;
end
end
else
if anomaly_supported then
if not cached_config.filter.break_anomaly then
return true;
end
else
if not cached_config.filter.break_ then
return true;
end
end
end
else
if sever_supported then
if anomaly_supported then
if not cached_config.filter.sever_anomaly then
return true;
end
else
if not cached_config.filter.sever then
return true;
end
end
else
if anomaly_supported then
if not cached_config.filter.anomaly then
return true;
end
else
return true;
end
end
end
end
return false;
end
function this.draw(monster, part_UI, cached_config, parts_position_on_screen, opacity_scale) function this.draw(monster, part_UI, cached_config, parts_position_on_screen, opacity_scale)
local cached_config = cached_config.body_parts; local cached_config = cached_config.body_parts;
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier; local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
@@ -162,72 +286,41 @@ function this.draw(monster, part_UI, cached_config, parts_position_on_screen, op
for REpart, part in pairs(monster.parts) do for REpart, part in pairs(monster.parts) do
local health_supported = part.max_health > 0; local health_supported = part.max_health > 0;
local break_supported = part.break_max_health > 0; local break_supported = part.break_max_health > 0;
local severe_supported = part.loss_max_health > 0; local sever_supported = part.loss_max_health > 0;
local anomaly_supported = part.anomaly_max_health > 0;
if cached_config.settings.filter_mode == "Current State" then if cached_config.settings.filter_mode == "Current State" then
if break_supported and part.break_count >= part.break_max_count then if break_supported and part.break_count >= part.break_max_count then
break_supported = false; break_supported = false;
end end
if severe_supported and part.is_severed then if sever_supported and part.is_severed then
severe_supported = false; sever_supported = false;
end
if anomaly_supported and not part.anomaly_is_active then
anomaly_supported = false;
end end
end end
if health_supported then local is_filtered_out = this.is_filtered_out(cached_config, health_supported, break_supported, sever_supported, anomaly_supported);
if break_supported then if is_filtered_out then
if severe_supported then goto continue;
if not cached_config.filter.health_break_severe then
goto continue
end
else
if not cached_config.filter.health_break then
goto continue
end
end
else
if severe_supported then
if not cached_config.filter.health_severe then
goto continue
end
else
if not cached_config.filter.health then
goto continue
end
end
end
else
if break_supported then
if severe_supported then
if not cached_config.filter.break_severe then
goto continue
end
else
if not cached_config.filter.break_ then
goto continue
end
end
else
if severe_supported then
if not cached_config.filter.severe then
goto continue
end
else
goto continue
end
end
end end
if cached_config.settings.hide_undamaged_parts if cached_config.settings.hide_undamaged_parts
and ((part.health == part.max_health and part.flinch_count == 0) or not health_supported) and ((part.health == part.max_health and part.flinch_count == 0) or not health_supported)
and ((part.break_health == part.break_max_health and part.break_count == 0) or not break_supported) and ((part.break_health == part.break_max_health and part.break_count == 0) or not break_supported)
and ((part.loss_health == part.loss_max_health and not part.is_severed) or not severe_supported) then and ((part.loss_health == part.loss_max_health and not part.is_severed) or not sever_supported)
and ((part.anomaly_health == part.anomaly_max_health) or not anomaly_supported) then
goto continue goto continue
end end
if (not part_UI.flinch_visibility or not health_supported) if (not part_UI.flinch_visibility or not health_supported)
and (not part_UI.break_visibility or not break_supported or part.break_count >= part.break_max_count) and (not part_UI.break_visibility or not break_supported or part.break_count >= part.break_max_count)
and (not part_UI.loss_visibility or not severe_supported or part.is_severed) then and (not part_UI.loss_visibility or not sever_supported or part.is_severed)
and (not part_UI.anomaly_visibility or not anomaly_supported) then
goto continue goto continue
end end
@@ -330,6 +423,26 @@ function this.draw(monster, part_UI, cached_config, parts_position_on_screen, op
return left.loss_health_percentage < right.loss_health_percentage; return left.loss_health_percentage < right.loss_health_percentage;
end); end);
end end
elseif cached_config.sorting.type == "Anomaly Core Health" then
if cached_config.sorting.reversed_order then
table.sort(displayed_parts, function(left, right)
return left.anomaly_health > right.anomaly_health;
end);
else
table.sort(displayed_parts, function(left, right)
return left.anomaly_health < right.anomaly_health;
end);
end
elseif cached_config.sorting.type == "Anomaly Core Health Percentage" then
if cached_config.sorting.reversed_order then
table.sort(displayed_parts, function(left, right)
return left.anomaly_health_percentage > right.anomaly_health_percentage;
end);
else
table.sort(displayed_parts, function(left, right)
return left.anomaly_health_percentage < right.anomaly_health_percentage;
end);
end
end end
local last_part_position_on_screen; local last_part_position_on_screen;

View File

@@ -141,6 +141,7 @@ function this.new(enemy)
this.update(enemy, monster); this.update(enemy, monster);
pcall(this.update_parts, enemy, monster, physical_param); pcall(this.update_parts, enemy, monster, physical_param);
pcall(this.update_anomaly_parts, enemy, monster, nil);
if this.list[enemy] == nil then if this.list[enemy] == nil then
this.list[enemy] = monster; this.list[enemy] = monster;
@@ -178,6 +179,81 @@ local get_set_info_method = enemy_character_base_type_def:get_method("get_SetInf
local set_info_type = get_set_info_method:get_return_type(); local set_info_type = get_set_info_method:get_return_type();
local get_unique_id_method = set_info_type:get_method("get_UniqueId"); local get_unique_id_method = set_info_type:get_method("get_UniqueId");
local get_physical_param_method = enemy_character_base_type_def:get_method("get_PhysicalParam");
local get_stamina_param_method = enemy_character_base_type_def:get_method("get_StaminaParam");
local get_anger_param_method = enemy_character_base_type_def:get_method("get_AngerParam");
local get_damage_param_method = enemy_character_base_type_def:get_method("get_DamageParam");
local get_mystery_param_method = enemy_character_base_type_def:get_method("get_MysteryParam");
local get_mario_param_method = enemy_character_base_type_def:get_method("get_MarioParam");
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local is_disp_icon_mini_map_method = enemy_character_base_type_def:get_method("isDispIconMiniMap");
local physical_param_type = get_physical_param_method:get_return_type();
local get_vital_method = physical_param_type:get_method("getVital");
local get_capture_hp_vital_method = physical_param_type:get_method("get_CaptureHpVital");
local vital_param_type = get_vital_method:get_return_type();
local get_current_method = vital_param_type:get_method("get_Current");
local get_max_method = vital_param_type:get_method("get_Max");
local is_enable_method = vital_param_type:get_method("isEnable");
local stamina_param_type = get_stamina_param_method:get_return_type();
local is_tired_method = stamina_param_type:get_method("isTired");
local get_stamina_method = stamina_param_type:get_method("getStamina");
local get_max_stamina_method = stamina_param_type:get_method("getMaxStamina");
local get_remaining_tired_time_method = stamina_param_type:get_method("getStaminaRemainingTime");
local get_total_tired_time_method = stamina_param_type:get_method("get_TiredSec");
local anger_param_type = get_anger_param_method:get_return_type();
local is_anger_method = anger_param_type:get_method("isAnger");
local get_anger_point_method = anger_param_type:get_method("get_AngerPoint");
local get_limit_anger_method = anger_param_type:get_method("get_LimitAnger");
local get_remaining_anger_time_method = anger_param_type:get_method("getAngerRemainingTime");
local get_total_anger_time_method = anger_param_type:get_method("get_TimerAnger");
local mario_param_type = get_mario_param_method:get_return_type();
local get_is_marionette_method = mario_param_type:get_method("get_IsMarionette");
local get_mario_player_index_method = mario_param_type:get_method("get_MarioPlayerIndex");
local get_pos_field = enemy_character_base_type_def:get_method("get_Pos");
local system_array_type_def = sdk.find_type_definition("System.Array");
local length_method = system_array_type_def:get_method("get_Length");
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
-- Lucent Nargacuga
local em037_02Character_type_def = sdk.find_type_definition("snow.enemy.em037.Em037_02Character");
local is_stealth_method = em037_02Character_type_def:get_method("isStealth");
-- Risen Chameleos and CHameleos
local Em025Character_base_type_Def = sdk.find_type_definition("snow.enemy.em025.Em025CharacterBase");
local get_stealth_ctrl_method = Em025Character_base_type_Def:get_method("get_StealthCtrl");
local stealth_ctrl_type_def = get_stealth_ctrl_method:get_return_type();
local get_current_status_method = stealth_ctrl_type_def:get_method("get_CurrentStatus");
local damage_param_type_def = get_damage_param_method:get_return_type();
local enemy_parts_damage_info_field = damage_param_type_def:get_field("_EnemyPartsDamageInfo");
local enemy_parts_damage_info_type_def = enemy_parts_damage_info_field:get_type();
local get_part_info_array_method = enemy_parts_damage_info_type_def:get_method("get_PartsInfo");
local enemy_parts_info_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageParam.EnemyPartsDamageInfo.EnemyPartsInfo");
local get_parts_break_damage_level_method = enemy_parts_info_type_def:get_method("get_PartsBreakDamageLevel");
local get_parts_break_damage_max_level_method = enemy_parts_info_type_def:get_method("get_PartsBreakDamageMaxLevel");
local get_parts_loss_state_method = enemy_parts_info_type_def:get_method("get_PartsLossState");
local mystery_param_type_def = get_mystery_param_method:get_return_type();
local core_parts_array_field = mystery_param_type_def:get_field("CoreParts");
local enemy_mystery_core_parts_type_def = sdk.find_type_definition("snow.enemy.EnemyMysteryCoreParts");
local core_parts_get_vital_method = enemy_mystery_core_parts_type_def:get_method("get_Vital");
local core_parts_get_is_active_method = enemy_mystery_core_parts_type_def:get_method("get_IsActive");
local core_parts_get_dying_vital_threashold_method = enemy_mystery_core_parts_type_def:get_method("get_DyingVitalThreashold");
function this.init(monster, enemy) function this.init(monster, enemy)
local enemy_type = enemy_type_field:get_data(enemy); local enemy_type = enemy_type_field:get_data(enemy);
if enemy_type == nil then if enemy_type == nil then
@@ -239,7 +315,7 @@ function this.init(monster, enemy)
local is_capture_enable = true; local is_capture_enable = true;
local damage_param = enemy:get_field("<DamageParam>k__BackingField"); local damage_param = get_damage_param_method:call(enemy);
if damage_param ~= nil then if damage_param ~= nil then
local capture_param = damage_param:get_field("_CaptureParam"); local capture_param = damage_param:get_field("_CaptureParam");
@@ -251,8 +327,9 @@ function this.init(monster, enemy)
end end
end end
local curia_param = enemy:get_field("<CuriaParam>k__BackingField"); --local curia_param = enemy:get_field("<CuriaParam>k__BackingField");
local is_anomaly = curia_param ~= nil; local mystery_param = get_mystery_param_method:call(enemy);
local is_anomaly = mystery_param ~= nil;
monster.is_capturable = is_capture_enable and not is_anomaly; monster.is_capturable = is_capture_enable and not is_anomaly;
end end
@@ -312,7 +389,12 @@ function this.init_UI(monster, monster_UI, cached_config)
cached_config.body_parts.part_loss.bar, cached_config.body_parts.part_loss.bar,
cached_config.body_parts.part_loss.text_label, cached_config.body_parts.part_loss.text_label,
cached_config.body_parts.part_loss.value_label, cached_config.body_parts.part_loss.value_label,
cached_config.body_parts.part_loss.percentage_label cached_config.body_parts.part_loss.percentage_label,
cached_config.body_parts.part_anomaly.visibility,
cached_config.body_parts.part_anomaly.bar,
cached_config.body_parts.part_anomaly.text_label,
cached_config.body_parts.part_anomaly.value_label,
cached_config.body_parts.part_anomaly.percentage_label
); );
monster_UI.ailment_UI = ailment_UI_entity.new( monster_UI.ailment_UI = ailment_UI_entity.new(
@@ -340,53 +422,9 @@ function this.init_UI(monster, monster_UI, cached_config)
body_part.init_part_names(monster.id, monster.parts); body_part.init_part_names(monster.id, monster.parts);
end end
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>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 damage_param_field = enemy_character_base_type_def:get_field("<DamageParam>k__BackingField");
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local is_disp_icon_mini_map_method = enemy_character_base_type_def:get_method("isDispIconMiniMap");
local physical_param_type = physical_param_field:get_type();
local get_vital_method = physical_param_type:get_method("getVital");
local get_capture_hp_vital_method = physical_param_type:get_method("get_CaptureHpVital");
local vital_param_type = get_vital_method:get_return_type();
local get_current_method = vital_param_type:get_method("get_Current");
local get_max_method = vital_param_type:get_method("get_Max");
local stamina_param_type = stamina_param_field:get_type();
local is_tired_method = stamina_param_type:get_method("isTired");
local get_stamina_method = stamina_param_type:get_method("getStamina");
local get_max_stamina_method = stamina_param_type:get_method("getMaxStamina");
local get_remaining_tired_time_method = stamina_param_type:get_method("getStaminaRemainingTime");
local get_total_tired_time_method = stamina_param_type:get_method("get_TiredSec");
local anger_param_type = anger_param_field:get_type();
local is_anger_method = anger_param_type:get_method("isAnger");
local get_anger_point_method = anger_param_type:get_method("get_AngerPoint");
local get_limit_anger_method = anger_param_type:get_method("get_LimitAnger");
local get_remaining_anger_time_method = anger_param_type:get_method("getAngerRemainingTime");
local get_total_anger_time_method = anger_param_type:get_method("get_TimerAnger");
local mario_param_field = enemy_character_base_type_def:get_field("<MarioParam>k__BackingField");
local mario_param_type = mario_param_field:get_type();
local get_is_marionette_method = mario_param_type:get_method("get_IsMarionette");
local get_mario_player_index_method = mario_param_type:get_method("get_MarioPlayerIndex");
local get_pos_field = enemy_character_base_type_def:get_method("get_Pos");
local system_array_type_def = sdk.find_type_definition("System.Array");
local length_method = system_array_type_def:get_method("get_Length");
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
function this.update_position(enemy, monster) function this.update_position(enemy, monster)
if not config.current_config.large_monster_UI.dynamic.enabled and if not config.current_config.large_monster_UI.dynamic.enabled and
config.current_config.large_monster_UI.static.sorting.type ~= "Distance" then config.current_config.large_monster_UI.static.sorting.type ~= "Distance" then
return; return;
end end
@@ -400,7 +438,7 @@ end
function this.update_all_riders() function this.update_all_riders()
for enemy, monster in pairs(this.list) do for enemy, monster in pairs(this.list) do
-- get marionette rider -- get marionette rider
local mario_param = enemy:get_field("<MarioParam>k__BackingField"); local mario_param = get_mario_param_method:call(enemy);
if mario_param ~= nil then if mario_param ~= nil then
local is_marionette = get_is_marionette_method:call(mario_param); local is_marionette = get_is_marionette_method:call(mario_param);
@@ -427,8 +465,8 @@ function this.update(enemy, monster)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
@@ -449,15 +487,15 @@ function this.update(enemy, monster)
if monster.can_go_stealth then if monster.can_go_stealth then
-- Lucent Nargacuga -- Lucent Nargacuga
if monster.id == 549 then if monster.id == 549 then
local is_stealth = enemy:call("isStealth"); local is_stealth = is_stealth_method:call(enemy);
if is_stealth ~= nil then if is_stealth ~= nil then
monster.is_stealth = is_stealth; monster.is_stealth = is_stealth;
end end
-- Chameleos and Risen Chameleos -- Chameleos and Risen Chameleos
elseif monster.id == 25 or monster.id == 2073 then elseif monster.id == 25 or monster.id == 2073 then
local stealth_controller = enemy:call("get_StealthCtrl"); local stealth_controller = get_stealth_ctrl_method:call(enemy);
if stealth_controller ~= nil then if stealth_controller ~= nil then
local status = stealth_controller:call("get_CurrentStatus"); local status = get_current_status_method:call(stealth_controller);
if status >= 2 then if status >= 2 then
monster.is_stealth = true; monster.is_stealth = true;
@@ -476,18 +514,18 @@ function this.update_health(enemy, monster)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
if not cached_config.dynamic.health.visibility if not cached_config.dynamic.health.visibility
and not cached_config.static.health.visibility and not cached_config.static.health.visibility
and not cached_config.highlighted.health.visibility then and not cached_config.highlighted.health.visibility then
return nil; return nil;
end end
local physical_param = physical_param_field:get_data(enemy); local physical_param = get_physical_param_method:call(enemy);
if physical_param == nil then if physical_param == nil then
customization_menu.status = "No physical param"; customization_menu.status = "No physical param";
return nil; return nil;
@@ -516,19 +554,19 @@ function this.update_stamina(enemy, monster, stamina_param)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
if not cached_config.dynamic.stamina.visibility if not cached_config.dynamic.stamina.visibility
and not cached_config.static.stamina.visibility and not cached_config.static.stamina.visibility
and not cached_config.highlighted.stamina.visibility then and not cached_config.highlighted.stamina.visibility then
return; return;
end end
if stamina_param == nil then if stamina_param == nil then
stamina_param = stamina_param_field:get_data(enemy); stamina_param =get_stamina_param_method:call(enemy);
if stamina_param == nil then if stamina_param == nil then
customization_menu.status = "No stamina param"; customization_menu.status = "No stamina param";
return; return;
@@ -553,19 +591,19 @@ function this.update_stamina_timer(enemy, monster, stamina_param)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
if not cached_config.dynamic.stamina.visibility if not cached_config.dynamic.stamina.visibility
and not cached_config.static.stamina.visibility and not cached_config.static.stamina.visibility
and not cached_config.highlighted.stamina.visibility then and not cached_config.highlighted.stamina.visibility then
return; return;
end end
if stamina_param == nil then if stamina_param == nil then
stamina_param = stamina_param_field:get_data(enemy); stamina_param = get_stamina_param_method:call(enemy);
if stamina_param == nil then if stamina_param == nil then
customization_menu.status = "No stamina param"; customization_menu.status = "No stamina param";
return; return;
@@ -600,19 +638,19 @@ function this.update_rage(enemy, monster, anger_param)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
if not cached_config.dynamic.rage.visibility if not cached_config.dynamic.rage.visibility
and not cached_config.static.rage.visibility and not cached_config.static.rage.visibility
and not cached_config.highlighted.rage.visibility then and not cached_config.highlighted.rage.visibility then
return; return;
end end
if anger_param == nil then if anger_param == nil then
anger_param = anger_param_field:get_data(enemy); anger_param = get_anger_param_method:call(enemy);
if anger_param == nil then if anger_param == nil then
customization_menu.status = "No anger param"; customization_menu.status = "No anger param";
return; return;
@@ -632,19 +670,19 @@ function this.update_rage_timer(enemy, monster, anger_param)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
if not cached_config.dynamic.rage.visibility if not cached_config.dynamic.rage.visibility
and not cached_config.static.rage.visibility and not cached_config.static.rage.visibility
and not cached_config.highlighted.rage.visibility then and not cached_config.highlighted.rage.visibility then
return; return;
end end
if anger_param == nil then if anger_param == nil then
anger_param = anger_param_field:get_data(enemy); anger_param = get_anger_param_method:call(enemy);
if anger_param == nil then if anger_param == nil then
customization_menu.status = "No anger param"; customization_menu.status = "No anger param";
return; return;
@@ -678,64 +716,64 @@ function this.update_parts(enemy, monster, physical_param)
local cached_config = config.current_config.large_monster_UI; local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled if not cached_config.dynamic.enabled
and not cached_config.static.enabled and not cached_config.static.enabled
and not cached_config.highlighted.enabled then and not cached_config.highlighted.enabled then
return; return;
end end
if not cached_config.dynamic.body_parts.visibility if not cached_config.dynamic.body_parts.visibility
and not cached_config.static.body_parts.visibility and not cached_config.static.body_parts.visibility
and not cached_config.highlighted.body_parts.visibility then and not cached_config.highlighted.body_parts.visibility then
return; return;
end end
if not cached_config.dynamic.body_parts.part_health.visibility if not cached_config.dynamic.body_parts.part_health.visibility
and not cached_config.dynamic.body_parts.part_break.visibility and not cached_config.dynamic.body_parts.part_break.visibility
and not cached_config.dynamic.body_parts.part_loss.visibility and not cached_config.dynamic.body_parts.part_loss.visibility
and not cached_config.static.body_parts.part_health.visibility and not cached_config.static.body_parts.part_health.visibility
and not cached_config.static.body_parts.part_break.visibility and not cached_config.static.body_parts.part_break.visibility
and not cached_config.static.body_parts.part_loss.visibility and not cached_config.static.body_parts.part_loss.visibility
and not cached_config.highlighted.body_parts.part_health.visibility and not cached_config.highlighted.body_parts.part_health.visibility
and not cached_config.highlighted.body_parts.part_break.visibility and not cached_config.highlighted.body_parts.part_break.visibility
and not cached_config.highlighted.body_parts.part_loss.visibility then and not cached_config.highlighted.body_parts.part_loss.visibility then
return; return;
end end
if physical_param == nil then if physical_param == nil then
physical_param = physical_param_field:get_data(enemy) physical_param = get_physical_param_method:call(enemy);
if physical_param == nil then if physical_param == nil then
customization_menu.status = "No physical param"; customization_menu.status = "No physical param";
return nil; return;
end end
end end
local damage_param = damage_param_field:get_data(enemy); local damage_param = get_damage_param_method:call(enemy);
if damage_param == nil then if damage_param == nil then
customization_menu.status = "No damage param"; customization_menu.status = "No damage param";
return; return;
end end
local enemy_parts_damage_info = damage_param:get_field("_EnemyPartsDamageInfo"); local enemy_parts_damage_info = enemy_parts_damage_info_field:get_data(damage_param);
if enemy_parts_damage_info == nil then if enemy_parts_damage_info == nil then
customization_menu.status = "No parts damage info"; customization_menu.status = "No parts damage info";
return; return;
end end
local enemy_parts_info_array = enemy_parts_damage_info:call("get_PartsInfo"); local core_parts_array = get_part_info_array_method:call(enemy_parts_damage_info);
if enemy_parts_info_array == nil then if core_parts_array == nil then
customization_menu.status = "No parts damage info array"; customization_menu.status = "No parts damage info array";
return; return;
end end
local enemy_parts_info_array_length = length_method:call(enemy_parts_info_array); local core_parts_array_length = length_method:call(core_parts_array);
if enemy_parts_info_array_length == nil then if core_parts_array_length == nil then
return; return;
end end
for i = 0, enemy_parts_info_array_length - 1 do for i = 0, core_parts_array_length - 1 do
local part_id = i + 1; local part_id = i + 1;
local enemy_parts_info = get_value_method:call(enemy_parts_info_array, i); local enemy_parts_info = get_value_method:call(core_parts_array, i);
if enemy_parts_info == nil then if enemy_parts_info == nil then
goto continue goto continue
end end
@@ -752,12 +790,12 @@ function this.update_parts(enemy, monster, physical_param)
end end
if cached_config.dynamic.body_parts.part_health.visibility if cached_config.dynamic.body_parts.part_health.visibility
or cached_config.static.body_parts.part_health.visibility or cached_config.static.body_parts.part_health.visibility
or cached_config.highlighted.body_parts.part_health.visibility then or cached_config.highlighted.body_parts.part_health.visibility then
local part_vital = physical_param:call("getVital", 1, i); local part_vital = get_vital_method:call(physical_param, 1, i);
if part_vital ~= nil then if part_vital ~= nil then
local part_current = part_vital:call("get_Current") or -1; local part_current = get_current_method:call(part_vital) or -1;
local part_max = part_vital:call("get_Max") or -1; local part_max = get_max_method:call(part_vital) or -1;
body_part.update_flinch(part, part_current, part_max); body_part.update_flinch(part, part_current, part_max);
@@ -765,18 +803,18 @@ function this.update_parts(enemy, monster, physical_param)
end end
if cached_config.dynamic.body_parts.part_break.visibility if cached_config.dynamic.body_parts.part_break.visibility
or cached_config.static.body_parts.part_break.visibility or cached_config.static.body_parts.part_break.visibility
or cached_config.highlighted.body_parts.part_break.visibility then or cached_config.highlighted.body_parts.part_break.visibility then
local part_break_vital = physical_param:call("getVital", 2, i); local part_break_vital = get_vital_method:call(physical_param, 2, i);
if part_break_vital ~= nil then if part_break_vital ~= nil then
local part_break_current = part_break_vital:call("get_Current") or -1; local part_break_current = get_current_method:call(part_break_vital) or -1;
local part_break_max = part_break_vital:call("get_Max") or -1; local part_break_max = get_max_method:call(part_break_vital) or -1;
local part_break_count = -1; local part_break_count = -1;
local part_break_max_count = -1; local part_break_max_count = -1;
if enemy_parts_info ~= nil then if enemy_parts_info ~= nil then
part_break_count = enemy_parts_info:call("get_PartsBreakDamageLevel") or part_break_count; part_break_count = get_parts_break_damage_level_method:call(enemy_parts_info) or part_break_count;
part_break_max_count = enemy_parts_info:call("get_PartsBreakDamageMaxLevel") or part_break_max_count; part_break_max_count = get_parts_break_damage_max_level_method:call(enemy_parts_info) or part_break_max_count;
end end
body_part.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count) body_part.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count)
@@ -784,16 +822,16 @@ function this.update_parts(enemy, monster, physical_param)
end end
if cached_config.dynamic.body_parts.part_loss.visibility if cached_config.dynamic.body_parts.part_loss.visibility
or cached_config.static.body_parts.part_loss.visibility or cached_config.static.body_parts.part_loss.visibility
or cached_config.highlighted.body_parts.part_loss.visibility then or cached_config.highlighted.body_parts.part_loss.visibility then
local part_loss_vital = physical_param:call("getVital", 3, i); local part_loss_vital = get_vital_method:call(physical_param, 3, i);
if part_loss_vital ~= nil then if part_loss_vital ~= nil then
local part_loss_current = part_loss_vital:call("get_Current") or -1; local part_loss_current = get_current_method:call(part_loss_vital) or -1;
local part_loss_max = part_loss_vital:call("get_Max") or -1; local part_loss_max = get_max_method:call(part_loss_vital) or -1;
local is_severed = false; local is_severed = false;
if enemy_parts_info ~= nil then if enemy_parts_info ~= nil then
local _is_severed = enemy_parts_info:call("get_PartsLossState"); local _is_severed = get_parts_loss_state_method:call(enemy_parts_info);
if _is_severed ~= nil then if _is_severed ~= nil then
is_severed = _is_severed; is_severed = _is_severed;
end end
@@ -807,6 +845,90 @@ function this.update_parts(enemy, monster, physical_param)
end end
end end
function this.update_anomaly_parts(enemy, monster, mystery_param)
local cached_config = config.current_config.large_monster_UI;
if not cached_config.dynamic.enabled
and not cached_config.static.enabled
and not cached_config.highlighted.enabled then
return;
end
if not cached_config.dynamic.body_parts.visibility
and not cached_config.static.body_parts.visibility
and not cached_config.highlighted.body_parts.visibility then
return;
end
if not cached_config.dynamic.body_parts.part_anomaly.visibility
and not cached_config.static.body_parts.part_anomaly.visibility
and not cached_config.highlighted.body_parts.part_anomaly.visibility then
return;
end
if mystery_param == nil then
mystery_param = get_mystery_param_method:call(enemy);
if mystery_param == nil then
return;
end
end
local core_parts_array = core_parts_array_field:get_data(mystery_param);
if core_parts_array == nil then
customization_menu.status = "No core parts array";
return;
end
local core_parts_array_length = length_method:call(core_parts_array);
if core_parts_array_length == nil then
return;
end
for i = 0, core_parts_array_length - 1 do
local part_id = i + 1;
local core_part = get_value_method:call(core_parts_array, i);
if core_part == nil then
goto continue
end
local part = monster.parts[part_id];
if part == nil then
local part_name = part_names.get_part_name(monster.id, part_id);
if part_name == nil then
goto continue;
else
part = body_part.new(part_id, part_name);
monster.parts[part_id] = part;
end
end
local part_vital = core_parts_get_vital_method:call(core_part);
local part_is_active = core_parts_get_is_active_method:call(core_part);
--local part_dying_vital_threshold = core_parts_get_dying_vital_threashold_method:call(core_part);
if part_is_active == nil then
part_is_active = false;
end
if part_vital ~= nil then
local part_current = get_current_method:call(part_vital) or -1;
local part_max = get_max_method:call(part_vital) or -1;
local part_is_enabled = is_enable_method:call(part_vital);
if not part_is_enabled then
goto continue;
end
body_part.update_anomaly(part, part_current, part_max, part_is_active);
end
::continue::
end
end
function this.draw(monster, type, cached_config, position_on_screen, opacity_scale) function this.draw(monster, type, cached_config, position_on_screen, opacity_scale)
local monster_UI; local monster_UI;

View File

@@ -156,6 +156,7 @@ function this.update_large_monster(enemy)
if quest_status.is_online and players.myself.id ~= 0 then if quest_status.is_online and players.myself.id ~= 0 then
local physical_param = large_monster.update_health(enemy, monster); local physical_param = large_monster.update_health(enemy, monster);
pcall(large_monster.update_parts, enemy, monster, physical_param); pcall(large_monster.update_parts, enemy, monster, physical_param);
pcall(large_monster.update_anomaly_parts, enemy, monster, nil);
end end
large_monster.update(enemy, monster); large_monster.update(enemy, monster);
@@ -214,6 +215,7 @@ function this.update_health(enemy_damage_check)
local physical_param = large_monster.update_health(enemy, monster); local physical_param = large_monster.update_health(enemy, monster);
pcall(large_monster.update_parts, enemy, monster, physical_param); pcall(large_monster.update_parts, enemy, monster, physical_param);
pcall(large_monster.update_anomaly_parts, enemy, monster, nil);
else else
local monster = small_monster.get_monster(enemy); local monster = small_monster.get_monster(enemy);
small_monster.update_health(enemy, monster); small_monster.update_health(enemy, monster);

View File

@@ -151,10 +151,10 @@ function this.init_UI(monster)
); );
end end
local physical_param_field = enemy_character_base_type_def:get_field("<PhysicalParam>k__BackingField"); local get_physical_param_method = enemy_character_base_type_def:get_method("get_PhysicalParam");
local check_die_method = enemy_character_base_type_def:get_method("checkDie"); local check_die_method = enemy_character_base_type_def:get_method("checkDie");
local physical_param_type = physical_param_field:get_type(); local physical_param_type = get_physical_param_method:get_return_type();
local get_vital_method = physical_param_type:get_method("getVital"); local get_vital_method = physical_param_type:get_method("getVital");
local vital_param_type = get_vital_method:get_return_type(); local vital_param_type = get_vital_method:get_return_type();
@@ -198,7 +198,7 @@ function this.update_health(enemy, monster)
return; return;
end end
local physical_param = physical_param_field:get_data(enemy) local physical_param = get_physical_param_method:call(enemy);
if physical_param == nil then if physical_param == nil then
customization_menu.status = "No physical param"; customization_menu.status = "No physical param";
return; return;

View File

@@ -47,171 +47,279 @@ local os = os;
local ValueType = ValueType; local ValueType = ValueType;
local package = package; local package = package;
this.large_monster_UI_parts_sorting_types = {};
this.displayed_large_monster_UI_parts_sorting_types = {};
this.large_monster_UI_parts_filter_types = {};
this.displayed_large_monster_UI_parts_filter_types = {};
function this.init()
local default = language.default_language.customization_menu;
local current = language.current_language.customization_menu;
this.large_monster_UI_parts_sorting_types =
{
default.normal,
default.health,
default.health_percentage,
default.flinch_count,
default.break_health,
default.break_health_percentage,
default.break_count,
default.loss_health,
default.loss_health_percentage,
default.anomaly_health,
default.anomaly_health_percentage
};
this.displayed_large_monster_UI_parts_sorting_types =
{
current.normal,
current.health,
current.health_percentage,
current.flinch_count,
current.break_health,
current.break_health_percentage,
current.break_count,
current.loss_health,
current.loss_health_percentage,
current.anomaly_health,
current.anomaly_health_percentage
};
this.large_monster_UI_parts_filter_types =
{
default.current_state,
default.default_state
};
this.displayed_large_monster_UI_parts_filter_types =
{
current.current_state,
current.default_state
};
end
function this.draw(cached_config) function this.draw(cached_config)
local cached_language = language.current_language.customization_menu;
local changed = false; local changed = false;
local config_changed = false; local config_changed = false;
local index = 0; local index = 0;
if imgui.tree_node(language.current_language.customization_menu.body_parts) then if imgui.tree_node(cached_language.body_parts) then
changed, cached_config.visibility = imgui.checkbox( changed, cached_config.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.visibility); cached_language.visible, cached_config.visibility);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, cached_config.offset.x = imgui.drag_float( changed, cached_config.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.offset.x, 0.1, -screen.width, screen.width, "%.1f"); cached_language.x, cached_config.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.offset.y = imgui.drag_float( changed, cached_config.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.offset.y, 0.1, -screen.height, screen.height, "%.1f"); cached_language.y, cached_config.offset.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.spacing) then if imgui.tree_node(cached_language.spacing) then
changed, cached_config.spacing.x = imgui.drag_float( changed, cached_config.spacing.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.spacing.x, 0.1, -screen.width, screen.width, "%.1f"); cached_language.x, cached_config.spacing.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.spacing.y = imgui.drag_float( changed, cached_config.spacing.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.spacing.y, 0.1, -screen.height, screen.height, "%.1f"); cached_language.y, cached_config.spacing.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.settings) then if imgui.tree_node(cached_language.settings) then
changed, cached_config.settings.hide_undamaged_parts = imgui.checkbox( changed, cached_config.settings.hide_undamaged_parts = imgui.checkbox(
language.current_language.customization_menu.hide_undamaged_parts, cached_config.settings.hide_undamaged_parts); cached_language.hide_undamaged_parts, cached_config.settings.hide_undamaged_parts);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, index = imgui.combo(language.current_language.customization_menu.filter_mode, changed, cached_config.settings.render_inactive_anomaly_cores = imgui.checkbox(
utils.table.find_index(customization_menu.large_monster_UI_parts_filter_types, cached_config.settings.filter_mode), cached_language.render_inactive_anomaly_cores, cached_config.settings.render_inactive_anomaly_cores);
customization_menu.displayed_large_monster_UI_parts_filter_types);
config_changed = config_changed or changed;
changed, index = imgui.combo(cached_language.filter_mode,
utils.table.find_index(this.large_monster_UI_parts_filter_types, cached_config.settings.filter_mode),
this.displayed_large_monster_UI_parts_filter_types);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if changed then if changed then
cached_config.settings.filter_mode = customization_menu.large_monster_UI_parts_filter_types[index]; cached_config.settings.filter_mode = this.large_monster_UI_parts_filter_types[index];
end end
changed, cached_config.settings.time_limit = imgui.drag_float( changed, cached_config.settings.time_limit = imgui.drag_float(
language.current_language.customization_menu.time_limit, cached_config.settings.time_limit, 0.1, 0, 99999, "%.1f"); cached_language.time_limit, cached_config.settings.time_limit, 0.1, 0, 99999, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.sorting) then if imgui.tree_node(cached_language.sorting) then
changed, index = imgui.combo( changed, index = imgui.combo(
language.current_language.customization_menu.type, cached_language.type,
utils.table.find_index(customization_menu.large_monster_UI_parts_sorting_types, cached_config.sorting.type), utils.table.find_index(this.large_monster_UI_parts_sorting_types, cached_config.sorting.type),
customization_menu.displayed_large_monster_UI_parts_sorting_types); this.displayed_large_monster_UI_parts_sorting_types);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if changed then if changed then
cached_config.sorting.type = customization_menu.large_monster_UI_parts_sorting_types[index]; cached_config.sorting.type = this.large_monster_UI_parts_sorting_types[index];
end end
changed, cached_config.sorting.reversed_order = imgui.checkbox( changed, cached_config.sorting.reversed_order = imgui.checkbox(
language.current_language.customization_menu.reversed_order, cached_config.sorting.reversed_order); cached_language.reversed_order, cached_config.sorting.reversed_order);
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.filter) then if imgui.tree_node(cached_language.filter) then
changed, cached_config.filter.health_break_severe = imgui.checkbox( changed, cached_config.filter.health_break_sever_anomaly = imgui.checkbox(
language.current_language.customization_menu.health_break_severe_filter, cached_config.filter.health_break_severe); cached_language.health_break_sever_anomaly_filter, cached_config.filter.health_break_sever_anomaly);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.filter.health_break_sever = imgui.checkbox(
cached_language.health_break_sever_filter, cached_config.filter.health_break_sever);
config_changed = config_changed or changed;
changed, cached_config.filter.health_break_anomaly = imgui.checkbox(
cached_language.health_break_anomaly_filter, cached_config.filter.health_break_anomaly);
config_changed = config_changed or changed;
changed, cached_config.filter.health_sever_anomaly = imgui.checkbox(
cached_language.health_sever_anomaly_filter, cached_config.filter.health_sever_anomaly);
config_changed = config_changed or changed;
changed, cached_config.filter.break_sever_anomaly = imgui.checkbox(
cached_language.break_sever_anomaly_filter, cached_config.filter.break_sever_anomaly);
config_changed = config_changed or changed;
changed, cached_config.filter.health_break = imgui.checkbox( changed, cached_config.filter.health_break = imgui.checkbox(
language.current_language.customization_menu.health_break_filter, cached_config.filter.health_break); cached_language.health_break_filter, cached_config.filter.health_break);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.filter.health_severe = imgui.checkbox( changed, cached_config.filter.health_sever = imgui.checkbox(
language.current_language.customization_menu.health_severe_filter, cached_config.filter.health_severe); cached_language.health_sever_filter, cached_config.filter.health_sever);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.filter.health_anomaly = imgui.checkbox(
cached_language.health_anomaly_filter, cached_config.filter.health_anomaly);
config_changed = config_changed or changed;
changed, cached_config.filter.break_sever = imgui.checkbox(
cached_language.break_sever_filter, cached_config.filter.break_sever);
config_changed = config_changed or changed;
changed, cached_config.filter.break_anomaly = imgui.checkbox(
cached_language.break_anomaly_filter, cached_config.filter.break_anomaly);
config_changed = config_changed or changed;
changed, cached_config.filter.sever_anomaly = imgui.checkbox(
cached_language.sever_anomaly_filter, cached_config.filter.sever_anomaly);
config_changed = config_changed or changed;
changed, cached_config.filter.health = imgui.checkbox( changed, cached_config.filter.health = imgui.checkbox(
language.current_language.customization_menu.health_filter, cached_config.filter.health); cached_language.health_filter, cached_config.filter.health);
config_changed = config_changed or changed;
changed, cached_config.filter.break_severe = imgui.checkbox(
language.current_language.customization_menu.break_severe_filter, cached_config.filter.break_severe);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.filter.break_ = imgui.checkbox( changed, cached_config.filter.break_ = imgui.checkbox(
language.current_language.customization_menu.break_filter, cached_config.filter.break_); cached_language.break_filter, cached_config.filter.break_);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.filter.severe = imgui.checkbox( changed, cached_config.filter.sever = imgui.checkbox(
language.current_language.customization_menu.severe_filter, cached_config.filter.severe); cached_language.sever_filter, cached_config.filter.sever);
config_changed = config_changed or changed;
changed, cached_config.filter.anomaly = imgui.checkbox(
cached_language.anomaly_filter, cached_config.filter.anomaly);
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.part_name_label) then if imgui.tree_node(cached_language.part_name_label) then
changed, cached_config.part_name_label.visibility = imgui.checkbox( changed, cached_config.part_name_label.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.part_name_label.visibility); cached_language.visible, cached_config.part_name_label.visibility);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.include) then if imgui.tree_node(cached_language.include) then
changed, cached_config.part_name_label.include.part_name = imgui.checkbox( changed, cached_config.part_name_label.include.part_name = imgui.checkbox(
language.current_language.customization_menu.part_name, cached_config.part_name_label.include.part_name); cached_language.part_name, cached_config.part_name_label.include.part_name);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_name_label.include.flinch_count = imgui.checkbox( changed, cached_config.part_name_label.include.flinch_count = imgui.checkbox(
language.current_language.customization_menu.flinch_count, cached_config.part_name_label.include.flinch_count); cached_language.flinch_count, cached_config.part_name_label.include.flinch_count);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_name_label.include.break_count = imgui.checkbox( changed, cached_config.part_name_label.include.break_count = imgui.checkbox(
language.current_language.customization_menu.break_count, cached_config.part_name_label.include.break_count); cached_language.break_count, cached_config.part_name_label.include.break_count);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_name_label.include.break_max_count = imgui.checkbox( changed, cached_config.part_name_label.include.break_max_count = imgui.checkbox(
language.current_language.customization_menu.break_max_count, cached_config.part_name_label.include.break_max_count); cached_language.break_max_count, cached_config.part_name_label.include.break_max_count);
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, cached_config.part_name_label.offset.x = imgui.drag_float( changed, cached_config.part_name_label.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.part_name_label.offset.x, 0.1, -screen.width, screen.width, "%.1f"); cached_language.x, cached_config.part_name_label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_name_label.offset.y = imgui.drag_float( changed, cached_config.part_name_label.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.part_name_label.offset.y, 0.1, -screen.height, screen.height, "%.1f"); cached_language.y, cached_config.part_name_label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.color) then if imgui.tree_node(cached_language.color) then
changed, cached_config.part_name_label.color = imgui.color_picker_argb( changed, cached_config.part_name_label.color = imgui.color_picker_argb(
"", cached_config.part_name_label.color, customization_menu.color_picker_flags); "", cached_config.part_name_label.color, customization_menu.color_picker_flags);
@@ -220,21 +328,21 @@ function this.draw(cached_config)
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.shadow) then if imgui.tree_node(cached_language.shadow) then
changed, cached_config.part_name_label.shadow.visibility = imgui.checkbox( changed, cached_config.part_name_label.shadow.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.part_name_label.shadow.visibility); cached_language.visible, cached_config.part_name_label.shadow.visibility);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, cached_config.part_name_label.shadow.offset.x = imgui.drag_float( changed, cached_config.part_name_label.shadow.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.part_name_label.shadow.offset.x, cached_language.x, cached_config.part_name_label.shadow.offset.x,
0.1, -screen.width, screen.width, "%.1f"); 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_name_label.shadow.offset.y = imgui.drag_float( changed, cached_config.part_name_label.shadow.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.part_name_label.shadow.offset.y, cached_language.y, cached_config.part_name_label.shadow.offset.y,
0.1, -screen.height, screen.height, "%.1f"); 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
@@ -242,7 +350,7 @@ function this.draw(cached_config)
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.color) then if imgui.tree_node(cached_language.color) then
changed, cached_config.part_name_label.shadow.color = imgui.color_picker_argb( changed, cached_config.part_name_label.shadow.color = imgui.color_picker_argb(
"",cached_config.part_name_label.shadow.color, customization_menu.color_picker_flags); "",cached_config.part_name_label.shadow.color, customization_menu.color_picker_flags);
@@ -257,106 +365,141 @@ function this.draw(cached_config)
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.part_health) then if imgui.tree_node(cached_language.part_health) then
changed, cached_config.part_health.visibility = imgui.checkbox( changed, cached_config.part_health.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.part_health.visibility); cached_language.visible, cached_config.part_health.visibility);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, cached_config.part_health.offset.x = imgui.drag_float( changed, cached_config.part_health.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.part_health.offset.x, 0.1, -screen.width, screen.width, "%.1f"); cached_language.x, cached_config.part_health.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_health.offset.y = imgui.drag_float( changed, cached_config.part_health.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.part_health.offset.y, 0.1, -screen.height, screen.height, "%.1f"); cached_language.y, cached_config.part_health.offset.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
changed = label_customization.draw(language.current_language.customization_menu.text_label, cached_config.part_health.text_label); changed = label_customization.draw(cached_language.text_label, cached_config.part_health.text_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.value_label, cached_config.part_health.value_label); changed = label_customization.draw(cached_language.value_label, cached_config.part_health.value_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.percentage_label, cached_config.part_health.percentage_label); changed = label_customization.draw(cached_language.percentage_label, cached_config.part_health.percentage_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = bar_customization.draw(language.current_language.customization_menu.bar, cached_config.part_health.bar); changed = bar_customization.draw(cached_language.bar, cached_config.part_health.bar);
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.break_health) then if imgui.tree_node(cached_language.break_health) then
changed, cached_config.part_break.visibility = imgui.checkbox( changed, cached_config.part_break.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.part_break.visibility); cached_language.visible, cached_config.part_break.visibility);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, cached_config.part_break.offset.x = imgui.drag_float( changed, cached_config.part_break.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.part_break.offset.x, 0.1, -screen.width, screen.width, "%.1f"); cached_language.x, cached_config.part_break.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_break.offset.y = imgui.drag_float( changed, cached_config.part_break.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.part_break.offset.y, 0.1, -screen.height, screen.height, "%.1f"); cached_language.y, cached_config.part_break.offset.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
changed = label_customization.draw(language.current_language.customization_menu.text_label, cached_config.part_break.text_label); changed = label_customization.draw(cached_language.text_label, cached_config.part_break.text_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.value_label, cached_config.part_break.value_label); changed = label_customization.draw(cached_language.value_label, cached_config.part_break.value_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.percentage_label, cached_config.part_break.percentage_label); changed = label_customization.draw(cached_language.percentage_label, cached_config.part_break.percentage_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = bar_customization.draw(language.current_language.customization_menu.bar, cached_config.part_break.bar); changed = bar_customization.draw(cached_language.bar, cached_config.part_break.bar);
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.loss_health) then if imgui.tree_node(cached_language.loss_health) then
changed, cached_config.part_loss.visibility = imgui.checkbox( changed, cached_config.part_loss.visibility = imgui.checkbox(
language.current_language.customization_menu.visible, cached_config.part_loss.visibility); cached_language.visible, cached_config.part_loss.visibility);
config_changed = config_changed or changed; config_changed = config_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, cached_config.part_loss.offset.x = imgui.drag_float( changed, cached_config.part_loss.offset.x = imgui.drag_float(
language.current_language.customization_menu.x, cached_config.part_loss.offset.x, 0.1, -screen.width, screen.width, "%.1f"); cached_language.x, cached_config.part_loss.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed, cached_config.part_loss.offset.y = imgui.drag_float( changed, cached_config.part_loss.offset.y = imgui.drag_float(
language.current_language.customization_menu.y, cached_config.part_loss.offset.y, 0.1, -screen.height, screen.height, "%.1f"); cached_language.y, cached_config.part_loss.offset.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
changed = label_customization.draw(language.current_language.customization_menu.text_label, cached_config.part_loss.text_label); changed = label_customization.draw(cached_language.text_label, cached_config.part_loss.text_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.value_label, cached_config.part_loss.value_label); changed = label_customization.draw(cached_language.value_label, cached_config.part_loss.value_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.percentage_label, cached_config.part_loss.percentage_label); changed = label_customization.draw(cached_language.percentage_label, cached_config.part_loss.percentage_label);
config_changed = config_changed or changed; config_changed = config_changed or changed;
changed = bar_customization.draw(language.current_language.customization_menu.bar, cached_config.part_loss.bar); changed = bar_customization.draw(cached_language.bar, cached_config.part_loss.bar);
config_changed = config_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(cached_language.anomaly_health) then
changed, cached_config.part_anomaly.visibility = imgui.checkbox(
cached_language.visible, cached_config.part_anomaly.visibility);
config_changed = config_changed or changed;
if imgui.tree_node(cached_language.offset) then
changed, cached_config.part_anomaly.offset.x = imgui.drag_float(
cached_language.x, cached_config.part_anomaly.offset.x, 0.1, -screen.width, screen.width, "%.1f");
config_changed = config_changed or changed;
changed, cached_config.part_anomaly.offset.y = imgui.drag_float(
cached_language.y, cached_config.part_anomaly.offset.y, 0.1, -screen.height, screen.height, "%.1f");
config_changed = config_changed or changed;
imgui.tree_pop();
end
changed = label_customization.draw(cached_language.text_label, cached_config.part_anomaly.text_label);
config_changed = config_changed or changed;
changed = label_customization.draw(cached_language.value_label, cached_config.part_anomaly.value_label);
config_changed = config_changed or changed;
changed = label_customization.draw(cached_language.percentage_label, cached_config.part_anomaly.percentage_label);
config_changed = config_changed or changed;
changed = bar_customization.draw(cached_language.bar, cached_config.part_anomaly.bar);
config_changed = config_changed or changed; config_changed = config_changed or changed;
imgui.tree_pop(); imgui.tree_pop();

View File

@@ -45,60 +45,57 @@ local ValueType = ValueType;
local package = package; local package = package;
function this.draw(label_name, label) function this.draw(label_name, label)
local cached_language = language.current_language.customization_menu;
local label_changed = false; local label_changed = false;
local changed = false; local changed = false;
if imgui.tree_node(label_name) then if imgui.tree_node(label_name) then
changed, label.visibility = imgui.checkbox(language.current_language.customization_menu.visible, label.visibility); changed, label.visibility = imgui.checkbox(cached_language.visible, label.visibility);
label_changed = label_changed or changed; label_changed = label_changed or changed;
if label.include ~= nil then if imgui.tree_node(cached_language.settings) then
if imgui.tree_node(language.current_language.customization_menu.include) then changed, label.settings.right_alignment_shift = imgui.slider_int(cached_language.right_alignment_shift, label.settings.right_alignment_shift, 0, 64);
for include_name, include in pairs(label.include) do
changed, label.include[include_name] = imgui.checkbox(language.current_language.customization_menu[include_name], include);
label_changed = label_changed or changed;
end
imgui.tree_pop();
end
end
-- add text format
if imgui.tree_node(language.current_language.customization_menu.offset) then
changed, label.offset.x = imgui.drag_float(language.current_language.customization_menu.x, label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
label_changed = label_changed or changed;
changed, label.offset.y = imgui.drag_float(language.current_language.customization_menu.y, label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
label_changed = label_changed or changed; label_changed = label_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.color) then if imgui.tree_node(cached_language.offset) then
changed, label.offset.x = imgui.drag_float(cached_language.x, label.offset.x, 0.1, -screen.width, screen.width, "%.1f");
label_changed = label_changed or changed;
changed, label.offset.y = imgui.drag_float(cached_language.y, label.offset.y, 0.1, -screen.height, screen.height, "%.1f");
label_changed = label_changed or changed;
imgui.tree_pop();
end
if imgui.tree_node(cached_language.color) then
changed, label.color = imgui.color_picker_argb("", label.color, customization_menu.color_picker_flags); changed, label.color = imgui.color_picker_argb("", label.color, customization_menu.color_picker_flags);
label_changed = label_changed or changed; label_changed = label_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.shadow) then if imgui.tree_node(cached_language.shadow) then
changed, label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, label.shadow.visibility); changed, label.shadow.visibility = imgui.checkbox(cached_language
.visible, label.shadow.visibility);
label_changed = label_changed or changed; label_changed = label_changed or changed;
if imgui.tree_node(language.current_language.customization_menu.offset) then if imgui.tree_node(cached_language.offset) then
changed, label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x, changed, label.shadow.offset.x = imgui.drag_float(cached_language.x,
label.shadow.offset.x, 0.1, -screen.width, screen.width, "%.1f"); label.shadow.offset.x, 0.1, -screen.width, screen.width, "%.1f");
label_changed = label_changed or changed; label_changed = label_changed or changed;
changed, label.shadow.offset.y = imgui.drag_float(language.current_language.customization_menu.y, changed, label.shadow.offset.y = imgui.drag_float(cached_language.y,
label.shadow.offset.y, 0.1, -screen.height, screen.height, "%.1f"); label.shadow.offset.y, 0.1, -screen.height, screen.height, "%.1f");
label_changed = label_changed or changed; label_changed = label_changed or changed;
imgui.tree_pop(); imgui.tree_pop();
end end
if imgui.tree_node(language.current_language.customization_menu.color) then if imgui.tree_node(cached_language.color) then
changed, label.shadow.color = imgui.color_picker_argb("", label.shadow.color, changed, label.shadow.color = imgui.color_picker_argb("", label.shadow.color,
customization_menu.color_picker_flags); customization_menu.color_picker_flags);
label_changed = label_changed or changed; label_changed = label_changed or changed;

View File

@@ -36,9 +36,11 @@ local os = os;
local ValueType = ValueType; local ValueType = ValueType;
local package = package; local package = package;
function this.new(part_visibility, part_name_label, flinch_visibility, flinch_bar, flinch_text_label, function this.new(part_visibility, part_name_label,
flinch_value_label, flinch_percentage_label, break_visibility, break_bar, break_text_label, break_value_label, flinch_visibility, flinch_bar, flinch_text_label, flinch_value_label, flinch_percentage_label,
break_percentage_label, loss_visibility, loss_bar, loss_text_label, loss_value_label, loss_health_percentage_label) break_visibility, break_bar, break_text_label, break_value_label, break_percentage_label,
loss_visibility, loss_bar, loss_text_label, loss_value_label, loss_health_percentage_label,
anomaly_visibility, anomaly_bar, anomaly_text_label, anomaly_value_label, anomaly_health_percentage_label)
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier; local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
@@ -48,6 +50,7 @@ function this.new(part_visibility, part_name_label, flinch_visibility, flinch_ba
entity.flinch_visibility = flinch_visibility; entity.flinch_visibility = flinch_visibility;
entity.break_visibility = break_visibility; entity.break_visibility = break_visibility;
entity.loss_visibility = loss_visibility; entity.loss_visibility = loss_visibility;
entity.anomaly_visibility = anomaly_visibility;
entity.part_name_label = utils.table.deep_copy(part_name_label); entity.part_name_label = utils.table.deep_copy(part_name_label);
@@ -117,6 +120,27 @@ function this.new(part_visibility, part_name_label, flinch_visibility, flinch_ba
entity.loss_health_percentage_label.offset.x = entity.loss_health_percentage_label.offset.x * global_scale_modifier; entity.loss_health_percentage_label.offset.x = entity.loss_health_percentage_label.offset.x * global_scale_modifier;
entity.loss_health_percentage_label.offset.y = entity.loss_health_percentage_label.offset.y * global_scale_modifier; entity.loss_health_percentage_label.offset.y = entity.loss_health_percentage_label.offset.y * global_scale_modifier;
entity.anomaly_bar = utils.table.deep_copy(anomaly_bar);
entity.anomaly_text_label = utils.table.deep_copy(anomaly_text_label);
entity.anomaly_value_label = utils.table.deep_copy(anomaly_value_label);
entity.anomaly_health_percentage_label = utils.table.deep_copy(anomaly_health_percentage_label);
entity.anomaly_bar.offset.x = entity.anomaly_bar.offset.x * global_scale_modifier;
entity.anomaly_bar.offset.y = entity.anomaly_bar.offset.y * global_scale_modifier;
entity.anomaly_bar.size.width = entity.anomaly_bar.size.width * global_scale_modifier;
entity.anomaly_bar.size.height = entity.anomaly_bar.size.height * global_scale_modifier;
entity.anomaly_bar.outline.thickness = entity.anomaly_bar.outline.thickness * global_scale_modifier;
entity.anomaly_bar.outline.offset = entity.anomaly_bar.outline.offset * global_scale_modifier;
entity.anomaly_text_label.offset.x = entity.anomaly_text_label.offset.x * global_scale_modifier;
entity.anomaly_text_label.offset.y = entity.anomaly_text_label.offset.y * global_scale_modifier;
entity.anomaly_value_label.offset.x = entity.anomaly_value_label.offset.x * global_scale_modifier;
entity.anomaly_value_label.offset.y = entity.anomaly_value_label.offset.y * global_scale_modifier;
entity.anomaly_health_percentage_label.offset.x = entity.anomaly_health_percentage_label.offset.x * global_scale_modifier;
entity.anomaly_health_percentage_label.offset.y = entity.anomaly_health_percentage_label.offset.y * global_scale_modifier;
return entity; return entity;
end end
@@ -127,9 +151,10 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
local draw_health = part_UI.flinch_visibility and part.max_health > 0; local draw_health = part_UI.flinch_visibility and part.max_health > 0;
local draw_break = part_UI.break_visibility and part.break_max_health > 0 and part.break_count < part.break_max_count; local draw_break = part_UI.break_visibility and part.break_max_health > 0 and part.break_count < part.break_max_count;
local draw_severe = part_UI.loss_visibility and part.loss_max_health > 0 and not part.is_severed; local draw_sever = part_UI.loss_visibility and part.loss_max_health > 0 and not part.is_severed;
local draw_anomaly = part_UI.anomaly_visibility and part.anomaly_max_health > 0 and (part.anomaly_is_active or cached_config.settings.render_inactive_anomaly_cores);
if not draw_health and not draw_break and not draw_severe then if not draw_health and not draw_break and not draw_sever and not draw_anomaly then
return; return;
end end
@@ -186,7 +211,7 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
-- loss health value string -- loss health value string
local loss_health_string = ""; local loss_health_string = "";
if draw_severe then if draw_sever then
local include_loss_health_current_value = part_UI.loss_value_label.include.current_value; local include_loss_health_current_value = part_UI.loss_value_label.include.current_value;
local include_loss_health_max_value = part_UI.loss_value_label.include.max_value; local include_loss_health_max_value = part_UI.loss_value_label.include.max_value;
@@ -199,22 +224,39 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
end end
end end
-- anomaly health value string
local anomaly_health_string = "";
if draw_anomaly then
local include_anomaly_health_current_value = part_UI.anomaly_value_label.include.current_value;
local include_anomaly_health_max_value = part_UI.anomaly_value_label.include.max_value;
if include_anomaly_health_current_value and include_anomaly_health_max_value then
anomaly_health_string = string.format("%.0f/%.0f", part.anomaly_health, part.anomaly_max_health);
elseif include_anomaly_health_current_value then
anomaly_health_string = string.format("%.0f", part.anomaly_health);
elseif include_anomaly_health_max_value then
anomaly_health_string = string.format("%.0f", part.anomaly_max_health);
end
end
local flinch_position_on_screen = { local flinch_position_on_screen = {
x = position_on_screen.x + cached_config.part_health.offset.x, x = position_on_screen.x + cached_config.part_health.offset.x,
y = position_on_screen.y + cached_config.part_health.offset.y, y = position_on_screen.y + cached_config.part_health.offset.y,
visibility = part_UI.flinch_visibility
}; };
local break_position_on_screen = { local break_position_on_screen = {
x = position_on_screen.x + cached_config.part_break.offset.x, x = position_on_screen.x + cached_config.part_break.offset.x,
y = position_on_screen.y + cached_config.part_break.offset.y, y = position_on_screen.y + cached_config.part_break.offset.y,
visibility = part_UI.flinch_visibility
}; };
local loss_position_on_screen = { local loss_position_on_screen = {
x = position_on_screen.x + cached_config.part_loss.offset.x, x = position_on_screen.x + cached_config.part_loss.offset.x,
y = position_on_screen.y + cached_config.part_loss.offset.y, y = position_on_screen.y + cached_config.part_loss.offset.y,
part_UI = part_UI.loss_visibility };
local anomaly_position_on_screen = {
x = position_on_screen.x + cached_config.part_anomaly.offset.x,
y = position_on_screen.y + cached_config.part_anomaly.offset.y,
}; };
if draw_health then if draw_health then
@@ -225,10 +267,14 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
drawing.draw_bar(part_UI.break_bar, break_position_on_screen, opacity_scale, part.break_health_percentage); drawing.draw_bar(part_UI.break_bar, break_position_on_screen, opacity_scale, part.break_health_percentage);
end end
if draw_severe then if draw_sever then
drawing.draw_bar(part_UI.loss_bar, loss_position_on_screen, opacity_scale, part.loss_health_percentage); drawing.draw_bar(part_UI.loss_bar, loss_position_on_screen, opacity_scale, part.loss_health_percentage);
end end
if draw_anomaly then
drawing.draw_bar(part_UI.anomaly_bar, anomaly_position_on_screen, opacity_scale, part.anomaly_health_percentage);
end
drawing.draw_label(part_UI.part_name_label, position_on_screen, opacity_scale, part_name); drawing.draw_label(part_UI.part_name_label, position_on_screen, opacity_scale, part_name);
if draw_health then if draw_health then
@@ -243,11 +289,17 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
drawing.draw_label(part_UI.break_percentage_label, break_position_on_screen, opacity_scale, 100 * part.break_health_percentage); drawing.draw_label(part_UI.break_percentage_label, break_position_on_screen, opacity_scale, 100 * part.break_health_percentage);
end end
if draw_severe then if draw_sever then
drawing.draw_label(part_UI.loss_text_label, loss_position_on_screen, opacity_scale); drawing.draw_label(part_UI.loss_text_label, loss_position_on_screen, opacity_scale);
drawing.draw_label(part_UI.loss_value_label, loss_position_on_screen, opacity_scale, loss_health_string); drawing.draw_label(part_UI.loss_value_label, loss_position_on_screen, opacity_scale, loss_health_string);
drawing.draw_label(part_UI.loss_health_percentage_label, loss_position_on_screen, opacity_scale, 100 * part.loss_health_percentage); drawing.draw_label(part_UI.loss_health_percentage_label, loss_position_on_screen, opacity_scale, 100 * part.loss_health_percentage);
end end
if draw_anomaly then
drawing.draw_label(part_UI.anomaly_text_label, anomaly_position_on_screen, opacity_scale);
drawing.draw_label(part_UI.anomaly_value_label, anomaly_position_on_screen, opacity_scale, anomaly_health_string);
drawing.draw_label(part_UI.anomaly_health_percentage_label, anomaly_position_on_screen, opacity_scale, 100 * part.anomaly_health_percentage);
end
end end
function this.init_module() function this.init_module()

View File

@@ -82,12 +82,6 @@ this.displayed_anchor_types = {};
this.monster_UI_sorting_types = {}; this.monster_UI_sorting_types = {};
this.displayed_monster_UI_sorting_types = {}; this.displayed_monster_UI_sorting_types = {};
this.large_monster_UI_parts_sorting_types = {};
this.displayed_large_monster_UI_parts_sorting_types = {};
this.large_monster_UI_parts_filter_types = {};
this.displayed_large_monster_UI_parts_filter_types = {};
this.buff_UI_sorting_types = {}; this.buff_UI_sorting_types = {};
this.displayed_buff_UI_sorting_types = {}; this.displayed_buff_UI_sorting_types = {};
@@ -169,6 +163,7 @@ function this.init()
bar_customization.init(); bar_customization.init();
ailments_customization.init(); ailments_customization.init();
ailment_buildups_customization.init(); ailment_buildups_customization.init();
body_parts_customization.init();
this.orientation_types = this.orientation_types =
{ {
@@ -214,44 +209,6 @@ function this.init()
current.distance current.distance
}; };
this.large_monster_UI_parts_sorting_types =
{
default.normal,
default.health,
default.health_percentage,
default.flinch_count,
default.break_health,
default.break_health_percentage,
default.break_count,
default.loss_health,
default.loss_health_percentage
};
this.displayed_large_monster_UI_parts_sorting_types =
{
current.normal,
current.health,
current.health_percentage,
current.flinch_count,
current.break_health,
current.break_health_percentage,
current.break_count,
current.loss_health,
current.loss_health_percentage
};
this.large_monster_UI_parts_filter_types =
{
default.current_state,
default.default_state
};
this.displayed_large_monster_UI_parts_filter_types =
{
current.current_state,
current.default_state
};
this.buff_UI_sorting_types = this.buff_UI_sorting_types =
{ {
default.name, default.name,

View File

@@ -126,12 +126,19 @@ function this.draw_label(label, position, opacity_scale, ...)
return; return;
end end
local text = string.format(label.text_format, table.unpack({...})); local text = string.format(label.text_formatting, table.unpack({...}));
if text == "" then if text == "" then
return; return;
end end
local right_alignment_shift = label.settings.right_alignment_shift;
if right_alignment_shift ~= 0 then
local right_aligment_format = string.format("%%%ds", right_alignment_shift);
text = string.format(right_aligment_format, text);
end
local position_x = position.x + label.offset.x; local position_x = position.x + label.offset.x;
local position_y = position.y + label.offset.y; local position_y = position.y + label.offset.y;

View File

@@ -5,6 +5,7 @@
"gold": "Gold", "gold": "Gold",
"mini": "Mini", "mini": "Mini",
"otomo": "Buddy", "otomo": "Buddy",
"part_anomaly_core": "Anomaly Core",
"part_break": "Break", "part_break": "Break",
"part_sever": "Sever", "part_sever": "Sever",
"player": "Player", "player": "Player",
@@ -48,6 +49,9 @@
"ailments": "Ailments", "ailments": "Ailments",
"all_UI": "All UI", "all_UI": "All UI",
"anchor": "Anchor", "anchor": "Anchor",
"anomaly_filter": "Anomaly Core",
"anomaly_health": "Anomaly Core Health",
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "Apply", "apply": "Apply",
"assign_new_key": "Assign new key", "assign_new_key": "Assign new key",
"auto_highlight": "Auto-highlight", "auto_highlight": "Auto-highlight",
@@ -60,12 +64,14 @@
"bottom_left": "Bottom-Left", "bottom_left": "Bottom-Left",
"bottom_right": "Bottom-Right", "bottom_right": "Bottom-Right",
"bottom_to_top": "Bottom to Top", "bottom_to_top": "Bottom to Top",
"break_anomaly_filter": "Break + Anomaly Core",
"break_count": "Break Count", "break_count": "Break Count",
"break_filter": "Break", "break_filter": "Break",
"break_health": "Break Health", "break_health": "Break Health",
"break_health_percentage": "Break Health Percentage", "break_health_percentage": "Break Health Percentage",
"break_max_count": "Break Max Count", "break_max_count": "Break Max Count",
"break_severe_filter": "Break + Severe", "break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
"break_sever_filter": "Break + Sever",
"buff_UI": "Buff UI", "buff_UI": "Buff UI",
"buildup": "Buildup", "buildup": "Buildup",
"buildup_bar": "Buildup Bar", "buildup_bar": "Buildup Bar",
@@ -122,11 +128,15 @@
"global_scale_modifier": "Global Scale Modifier", "global_scale_modifier": "Global Scale Modifier",
"global_settings": "Global Settings", "global_settings": "Global Settings",
"health": "Health", "health": "Health",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_break_filter": "Health + Break", "health_break_filter": "Health + Break",
"health_break_severe_filter": "Health + Break + Severe", "health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health", "health_filter": "Health",
"health_percentage": "Health Percentage", "health_percentage": "Health Percentage",
"health_severe_filter": "Health + Severe", "health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
"height": "Height", "height": "Height",
"hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0", "hide_ailments_with_zero_buildup": "Hide Ailments when Buildup is 0",
"hide_all_active_ailments": "Hide All Active Ailments", "hide_all_active_ailments": "Hide All Active Ailments",
@@ -240,16 +250,19 @@
"relative_offset": "Relative Offset", "relative_offset": "Relative Offset",
"rename": "Rename", "rename": "Rename",
"render_highlighted_monster": "Render Highlighted Monster", "render_highlighted_monster": "Render Highlighted Monster",
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
"render_not_highlighted_monsters": "Render Not Highlighted Monsters", "render_not_highlighted_monsters": "Render Not Highlighted Monsters",
"renderer": "Renderer", "renderer": "Renderer",
"reset": "Reset", "reset": "Reset",
"reversed_order": "Reversed Order", "reversed_order": "Reversed Order",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"right_alignment_shift": "Right Alignment Shift",
"right_to_left": "Right to Left", "right_to_left": "Right to Left",
"servant_otomos": "Servant Buddies", "servant_otomos": "Servant Buddies",
"servants": "Followers", "servants": "Followers",
"settings": "Settings", "settings": "Settings",
"severe_filter": "Severe", "sever_anomaly_filter": "Sever + Anomaly Core",
"sever_filter": "Sever",
"shadow": "Shadow", "shadow": "Shadow",
"show_my_otomos_separately": "Show My Buddies separately", "show_my_otomos_separately": "Show My Buddies separately",
"show_other_player_otomos_separately": "Show Other Player Buddies separately", "show_other_player_otomos_separately": "Show Other Player Buddies separately",

View File

@@ -5,6 +5,7 @@
"gold": "金冠", "gold": "金冠",
"mini": "小型", "mini": "小型",
"otomo": "Buddy", "otomo": "Buddy",
"part_anomaly_core": "Anomaly Core",
"part_break": "部位破壊", "part_break": "部位破壊",
"part_sever": "尻尾切断", "part_sever": "尻尾切断",
"player": "Player", "player": "Player",
@@ -48,6 +49,9 @@
"ailments": "状態異常表示", "ailments": "状態異常表示",
"all_UI": "全てのUI", "all_UI": "全てのUI",
"anchor": "固定", "anchor": "固定",
"anomaly_filter": "Anomaly Core",
"anomaly_health": "Anomaly Core Health",
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "適用", "apply": "適用",
"assign_new_key": "新規に割り当てるキーを入力", "assign_new_key": "新規に割り当てるキーを入力",
"auto_highlight": "Auto-highlight", "auto_highlight": "Auto-highlight",
@@ -60,12 +64,14 @@
"bottom_left": "左下", "bottom_left": "左下",
"bottom_right": "右下", "bottom_right": "右下",
"bottom_to_top": "Bottom to Top", "bottom_to_top": "Bottom to Top",
"break_anomaly_filter": "Break + Anomaly Core",
"break_count": "破壊時間", "break_count": "破壊時間",
"break_filter": "Break", "break_filter": "Break",
"break_health": "部位破壊までのダメージ状況", "break_health": "部位破壊までのダメージ状況",
"break_health_percentage": "部位破壊までのダメージ状況()", "break_health_percentage": "部位破壊までのダメージ状況()",
"break_max_count": "最大破壊数", "break_max_count": "最大破壊数",
"break_severe_filter": "Break + Severe", "break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
"break_sever_filter": "Break + Sever",
"buff_UI": "Buff UI", "buff_UI": "Buff UI",
"buildup": "蓄積値", "buildup": "蓄積値",
"buildup_bar": "蓄積値バー", "buildup_bar": "蓄積値バー",
@@ -122,11 +128,15 @@
"global_scale_modifier": "全体的なスケールの調整", "global_scale_modifier": "全体的なスケールの調整",
"global_settings": "全体設定", "global_settings": "全体設定",
"health": "体力", "health": "体力",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_break_filter": "Health + Break", "health_break_filter": "Health + Break",
"health_break_severe_filter": "Health + Break + Severe", "health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health", "health_filter": "Health",
"health_percentage": "ダメージ割合()", "health_percentage": "ダメージ割合()",
"health_severe_filter": "Health + Severe", "health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
"height": "ヘイト", "height": "ヘイト",
"hide_ailments_with_zero_buildup": "蓄積値がゼロの時に状態異常の表示を隠す", "hide_ailments_with_zero_buildup": "蓄積値がゼロの時に状態異常の表示を隠す",
"hide_all_active_ailments": "全ての有効な状態異常を隠す", "hide_all_active_ailments": "全ての有効な状態異常を隠す",
@@ -240,16 +250,19 @@
"relative_offset": "相対的な表示位置", "relative_offset": "相対的な表示位置",
"rename": "Rename", "rename": "Rename",
"render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する", "render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する",
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
"render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する", "render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する",
"renderer": "Renderer", "renderer": "Renderer",
"reset": "Reset", "reset": "Reset",
"reversed_order": "逆順", "reversed_order": "逆順",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"right_alignment_shift": "Right Alignment Shift",
"right_to_left": "Right to Left", "right_to_left": "Right to Left",
"servant_otomos": "Servant Buddies", "servant_otomos": "Servant Buddies",
"servants": "Followers", "servants": "Followers",
"settings": "設定", "settings": "設定",
"severe_filter": "Severe", "sever_anomaly_filter": "Sever + Anomaly Core",
"sever_filter": "Sever",
"shadow": "影", "shadow": "影",
"show_my_otomos_separately": "Show my Buddies separately", "show_my_otomos_separately": "Show my Buddies separately",
"show_other_player_otomos_separately": "Show Other Player Buddies separately", "show_other_player_otomos_separately": "Show Other Player Buddies separately",

View File

@@ -5,6 +5,7 @@
"gold": "금관", "gold": "금관",
"mini": "최소", "mini": "최소",
"otomo": "동반자", "otomo": "동반자",
"part_anomaly_core": "Anomaly Core",
"part_break": "파괴", "part_break": "파괴",
"part_sever": "절단", "part_sever": "절단",
"player": "헌터", "player": "헌터",
@@ -48,6 +49,9 @@
"ailments": "상태이상", "ailments": "상태이상",
"all_UI": "모든 UI", "all_UI": "모든 UI",
"anchor": "기준", "anchor": "기준",
"anomaly_filter": "Anomaly Core",
"anomaly_health": "Anomaly Core Health",
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "적용", "apply": "적용",
"assign_new_key": "새 키를 할당", "assign_new_key": "새 키를 할당",
"auto_highlight": "자동 타겟 설정", "auto_highlight": "자동 타겟 설정",
@@ -60,12 +64,14 @@
"bottom_left": "좌하단", "bottom_left": "좌하단",
"bottom_right": "우하단", "bottom_right": "우하단",
"bottom_to_top": "Bottom to Top", "bottom_to_top": "Bottom to Top",
"break_anomaly_filter": "Break + Anomaly Core",
"break_count": "파괴 횟수", "break_count": "파괴 횟수",
"break_filter": "파괴", "break_filter": "파괴",
"break_health": "파괴 수치", "break_health": "파괴 수치",
"break_health_percentage": "파괴 수치 비율", "break_health_percentage": "파괴 수치 비율",
"break_max_count": "최대 파괴 횟수", "break_max_count": "최대 파괴 횟수",
"break_severe_filter": "파괴 + 절단", "break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
"break_sever_filter": "파괴 + 절단",
"buff_UI": "버프 UI", "buff_UI": "버프 UI",
"buildup": "누적치", "buildup": "누적치",
"buildup_bar": "누적치 막대", "buildup_bar": "누적치 막대",
@@ -122,11 +128,15 @@
"global_scale_modifier": "전역 크기 배율", "global_scale_modifier": "전역 크기 배율",
"global_settings": "전역 설정", "global_settings": "전역 설정",
"health": "체력", "health": "체력",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_break_filter": "체력 + 파괴", "health_break_filter": "체력 + 파괴",
"health_break_severe_filter": "체력 + 파괴 + 절단", "health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "체력 + 파괴 + 절단",
"health_filter": "체력", "health_filter": "체력",
"health_percentage": "체력 비율", "health_percentage": "체력 비율",
"health_severe_filter": "체력 + 절단", "health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "체력 + 절단",
"height": "높이", "height": "높이",
"hide_ailments_with_zero_buildup": "누적치가 0이면 상태이상 표시 안 함", "hide_ailments_with_zero_buildup": "누적치가 0이면 상태이상 표시 안 함",
"hide_all_active_ailments": "걸린 상태이상 모두 표시 안 함", "hide_all_active_ailments": "걸린 상태이상 모두 표시 안 함",
@@ -240,16 +250,19 @@
"relative_offset": "상대적 위치 오프셋", "relative_offset": "상대적 위치 오프셋",
"rename": "이름 변경", "rename": "이름 변경",
"render_highlighted_monster": "주시대상 몬스터 표시", "render_highlighted_monster": "주시대상 몬스터 표시",
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
"render_not_highlighted_monsters": "주시대상이 아닌 아닌 몬스터 표시", "render_not_highlighted_monsters": "주시대상이 아닌 아닌 몬스터 표시",
"renderer": "렌더링", "renderer": "렌더링",
"reset": "리셋", "reset": "리셋",
"reversed_order": "역순", "reversed_order": "역순",
"reward_screen": "보상 화면", "reward_screen": "보상 화면",
"right_alignment_shift": "Right Alignment Shift",
"right_to_left": "Right to Left", "right_to_left": "Right to Left",
"servant_otomos": "맹우 동반자", "servant_otomos": "맹우 동반자",
"servants": "맹우", "servants": "맹우",
"settings": "설정", "settings": "설정",
"severe_filter": "절단", "sever_anomaly_filter": "Sever + Anomaly Core",
"sever_filter": "절단",
"shadow": "그림자", "shadow": "그림자",
"show_my_otomos_separately": "내 동반자를 따로", "show_my_otomos_separately": "내 동반자를 따로",
"show_other_player_otomos_separately": "다른 플레이어의 동반자를 따로", "show_other_player_otomos_separately": "다른 플레이어의 동반자를 따로",

View File

@@ -5,6 +5,7 @@
"gold": "Золото", "gold": "Золото",
"mini": "Мини", "mini": "Мини",
"otomo": "Cпутник", "otomo": "Cпутник",
"part_anomaly_core": "Ядро аномалии",
"part_break": "Повреждение", "part_break": "Повреждение",
"part_sever": "Отсечение", "part_sever": "Отсечение",
"player": "Игрок", "player": "Игрок",
@@ -48,6 +49,9 @@
"ailments": "Аномальные статусы", "ailments": "Аномальные статусы",
"all_UI": "Весь интерфейс", "all_UI": "Весь интерфейс",
"anchor": "Привязка", "anchor": "Привязка",
"anomaly_filter": "Ядро аномалии",
"anomaly_health": "Здоровье ядра аномалии",
"anomaly_health_percentage": "Здоровье ядра аномалии в процентах",
"apply": "Применить", "apply": "Применить",
"assign_new_key": "Привязать клавишу", "assign_new_key": "Привязать клавишу",
"auto_highlight": "Автофокус", "auto_highlight": "Автофокус",
@@ -60,12 +64,14 @@
"bottom_left": "Левый нижний угол", "bottom_left": "Левый нижний угол",
"bottom_right": "Правй нижний угол", "bottom_right": "Правй нижний угол",
"bottom_to_top": "Снизу вверх", "bottom_to_top": "Снизу вверх",
"break_anomaly_filter": "Повреждение + Ядро аномалии",
"break_count": "Счётчик повреждений", "break_count": "Счётчик повреждений",
"break_filter": "Повреждение", "break_filter": "Повреждение",
"break_health": "Повреждение части", "break_health": "Повреждение части",
"break_health_percentage": "Повреждение части в процентах", "break_health_percentage": "Повреждение части в процентах",
"break_max_count": "Максимальное кол-во повреждений", "break_max_count": "Максимальное кол-во повреждений",
"break_severe_filter": "Повреждение + Отсечение", "break_sever_anomaly_filter": "Повреждение + Отсечение + Ядро аномалии",
"break_sever_filter": "Повреждение + Отсечение",
"buff_UI": "Интерфейс баффов", "buff_UI": "Интерфейс баффов",
"buildup": "Накопление", "buildup": "Накопление",
"buildup_bar": "Шкала накопления", "buildup_bar": "Шкала накопления",
@@ -122,11 +128,15 @@
"global_scale_modifier": "Глобальный модификатор размера", "global_scale_modifier": "Глобальный модификатор размера",
"global_settings": "Общие настройки", "global_settings": "Общие настройки",
"health": "Здоровье", "health": "Здоровье",
"health_anomaly_filter": "Здоровье + Ядро аномалии",
"health_break_anomaly_filter": "Здоровье + Повреждение + Ядро аномалии",
"health_break_filter": "Здоровье + Повреждение", "health_break_filter": "Здоровье + Повреждение",
"health_break_severe_filter": "Здоровье + Повреждение + Отсечение", "health_break_sever_anomaly_filter": "Здоровье + Повреждение + Отсечение + Ядро аномалии",
"health_break_sever_filter": "Здоровье + Повреждение + Отсечение",
"health_filter": "Здоровье", "health_filter": "Здоровье",
"health_percentage": "Здоровье в процентах", "health_percentage": "Здоровье в процентах",
"health_severe_filter": "Здоровье + Отсечение", "health_sever_anomaly_filter": "Здоровье + Отсечение + Ядро аномалии",
"health_sever_filter": "Здоровье + Отсечение",
"height": "Высота", "height": "Высота",
"hide_ailments_with_zero_buildup": "Скрыть аномальный статус, если накопление равно 0", "hide_ailments_with_zero_buildup": "Скрыть аномальный статус, если накопление равно 0",
"hide_all_active_ailments": "Скрыть все активные аномальные статусы", "hide_all_active_ailments": "Скрыть все активные аномальные статусы",
@@ -240,16 +250,19 @@
"relative_offset": "Относительный сдвиг", "relative_offset": "Относительный сдвиг",
"rename": "Переименовать", "rename": "Переименовать",
"render_highlighted_monster": "Показывать помеченного монстра", "render_highlighted_monster": "Показывать помеченного монстра",
"render_inactive_anomaly_cores": "Показывать неактивные ядра аномалии",
"render_not_highlighted_monsters": "Показывать непомеченных монстров", "render_not_highlighted_monsters": "Показывать непомеченных монстров",
"renderer": "Рендерер", "renderer": "Рендерер",
"reset": "Сбросить", "reset": "Сбросить",
"reversed_order": "Обратный порядок", "reversed_order": "Обратный порядок",
"reward_screen": "Экран наград", "reward_screen": "Экран наград",
"right_alignment_shift": "Сдвиг для выравнивания по правому краю",
"right_to_left": "Справа налево", "right_to_left": "Справа налево",
"servant_otomos": "Спутники последователей", "servant_otomos": "Спутники последователей",
"servants": "Последователи", "servants": "Последователи",
"settings": "Настройки", "settings": "Настройки",
"severe_filter": "Отсечение", "sever_anomaly_filter": "Отсечение + Ядро аномалии",
"sever_filter": "Отсечение",
"shadow": "Тень", "shadow": "Тень",
"show_my_otomos_separately": "Показывать моих спутников отдельно", "show_my_otomos_separately": "Показывать моих спутников отдельно",
"show_other_player_otomos_separately": "Показывать спутников других игроков отдельно", "show_other_player_otomos_separately": "Показывать спутников других игроков отдельно",

View File

@@ -5,6 +5,7 @@
"gold": "金冠", "gold": "金冠",
"mini": "小型", "mini": "小型",
"otomo": "随从", "otomo": "随从",
"part_anomaly_core": "Anomaly Core",
"part_break": "部位破坏", "part_break": "部位破坏",
"part_sever": "部位切断", "part_sever": "部位切断",
"player": "玩家", "player": "玩家",
@@ -48,6 +49,9 @@
"ailments": "状态异常", "ailments": "状态异常",
"all_UI": "所有UI", "all_UI": "所有UI",
"anchor": "锚点", "anchor": "锚点",
"anomaly_filter": "Anomaly Core",
"anomaly_health": "Anomaly Core Health",
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "应用", "apply": "应用",
"assign_new_key": "指定新按键", "assign_new_key": "指定新按键",
"auto_highlight": "自动高亮", "auto_highlight": "自动高亮",
@@ -60,12 +64,14 @@
"bottom_left": "左下", "bottom_left": "左下",
"bottom_right": "右下", "bottom_right": "右下",
"bottom_to_top": "Bottom to Top", "bottom_to_top": "Bottom to Top",
"break_anomaly_filter": "Break + Anomaly Core",
"break_count": "破坏次数", "break_count": "破坏次数",
"break_filter": "破坏", "break_filter": "破坏",
"break_health": "破坏值", "break_health": "破坏值",
"break_health_percentage": "破坏值百分比", "break_health_percentage": "破坏值百分比",
"break_max_count": "最大破坏次数", "break_max_count": "最大破坏次数",
"break_severe_filter": "破坏+切断", "break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
"break_sever_filter": "破坏+切断",
"buff_UI": "Buff UI", "buff_UI": "Buff UI",
"buildup": "积累值", "buildup": "积累值",
"buildup_bar": "积累值条", "buildup_bar": "积累值条",
@@ -122,11 +128,15 @@
"global_scale_modifier": "全局比例更改", "global_scale_modifier": "全局比例更改",
"global_settings": "全局设定", "global_settings": "全局设定",
"health": "生命", "health": "生命",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_break_filter": "生命+破坏", "health_break_filter": "生命+破坏",
"health_break_severe_filter": "生命+破坏+切断", "health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "生命+破坏+切断",
"health_filter": "生命", "health_filter": "生命",
"health_percentage": "生命百分比", "health_percentage": "生命百分比",
"health_severe_filter": "生命+切断", "health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "生命+切断",
"height": "高度", "height": "高度",
"hide_ailments_with_zero_buildup": "当积累值为0时隐藏该状态异常", "hide_ailments_with_zero_buildup": "当积累值为0时隐藏该状态异常",
"hide_all_active_ailments": "隐藏所有激活的状态异常", "hide_all_active_ailments": "隐藏所有激活的状态异常",
@@ -240,16 +250,19 @@
"relative_offset": "相对偏移", "relative_offset": "相对偏移",
"rename": "重命名", "rename": "重命名",
"render_highlighted_monster": "渲染高亮怪物", "render_highlighted_monster": "渲染高亮怪物",
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
"render_not_highlighted_monsters": "渲染非高亮怪物", "render_not_highlighted_monsters": "渲染非高亮怪物",
"renderer": "渲染器", "renderer": "渲染器",
"reset": "重置", "reset": "重置",
"reversed_order": "逆向排序", "reversed_order": "逆向排序",
"reward_screen": "奖励界面", "reward_screen": "奖励界面",
"right_alignment_shift": "Right Alignment Shift",
"right_to_left": "Right to Left", "right_to_left": "Right to Left",
"servant_otomos": "盟友随从", "servant_otomos": "盟友随从",
"servants": "盟友", "servants": "盟友",
"settings": "设定", "settings": "设定",
"severe_filter": "切断", "sever_anomaly_filter": "Sever + Anomaly Core",
"sever_filter": "切断",
"shadow": "阴影", "shadow": "阴影",
"show_my_otomos_separately": "分开显示我的随从", "show_my_otomos_separately": "分开显示我的随从",
"show_other_player_otomos_separately": "分开显示其他玩家的随从", "show_other_player_otomos_separately": "分开显示其他玩家的随从",

View File

@@ -5,6 +5,7 @@
"gold": "金冠", "gold": "金冠",
"mini": "小型", "mini": "小型",
"otomo": "Buddy", "otomo": "Buddy",
"part_anomaly_core": "Anomaly Core",
"part_break": "Break", "part_break": "Break",
"part_sever": "Sever", "part_sever": "Sever",
"player": "玩家", "player": "玩家",
@@ -48,6 +49,9 @@
"ailments": "異常狀態", "ailments": "異常狀態",
"all_UI": "全部UI", "all_UI": "全部UI",
"anchor": "錨點", "anchor": "錨點",
"anomaly_filter": "Anomaly Core",
"anomaly_health": "Anomaly Core Health",
"anomaly_health_percentage": "Anomaly Core Health Percentage",
"apply": "套用", "apply": "套用",
"assign_new_key": "指定新按鍵", "assign_new_key": "指定新按鍵",
"auto_highlight": "自動高亮", "auto_highlight": "自動高亮",
@@ -60,12 +64,14 @@
"bottom_left": "左下", "bottom_left": "左下",
"bottom_right": "右下", "bottom_right": "右下",
"bottom_to_top": "Bottom to Top", "bottom_to_top": "Bottom to Top",
"break_anomaly_filter": "Break + Anomaly Core",
"break_count": "破壞次數", "break_count": "破壞次數",
"break_filter": "Break", "break_filter": "Break",
"break_health": "Break Health", "break_health": "Break Health",
"break_health_percentage": "Break Health Percentage", "break_health_percentage": "Break Health Percentage",
"break_max_count": "Break Max Count", "break_max_count": "Break Max Count",
"break_severe_filter": "Break + Severe", "break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
"break_sever_filter": "Break + Sever",
"buff_UI": "Buff UI", "buff_UI": "Buff UI",
"buildup": "累積值", "buildup": "累積值",
"buildup_bar": "累積值條", "buildup_bar": "累積值條",
@@ -122,11 +128,15 @@
"global_scale_modifier": "全域比例更改", "global_scale_modifier": "全域比例更改",
"global_settings": "全域設定", "global_settings": "全域設定",
"health": "血量", "health": "血量",
"health_anomaly_filter": "Health + Anomaly Core",
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
"health_break_filter": "Health + Break", "health_break_filter": "Health + Break",
"health_break_severe_filter": "Health + Break + Severe", "health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health", "health_filter": "Health",
"health_percentage": "血量百分比", "health_percentage": "血量百分比",
"health_severe_filter": "Health + Severe", "health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
"height": "高度", "height": "高度",
"hide_ailments_with_zero_buildup": "當累積值為0時,隱藏該異常狀態", "hide_ailments_with_zero_buildup": "當累積值為0時,隱藏該異常狀態",
"hide_all_active_ailments": "隱藏觸發中的異常狀態", "hide_all_active_ailments": "隱藏觸發中的異常狀態",
@@ -240,16 +250,19 @@
"relative_offset": "相對偏移", "relative_offset": "相對偏移",
"rename": "Rename", "rename": "Rename",
"render_highlighted_monster": "渲染目標魔物", "render_highlighted_monster": "渲染目標魔物",
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
"render_not_highlighted_monsters": "渲染非目標魔物", "render_not_highlighted_monsters": "渲染非目標魔物",
"renderer": "Renderer", "renderer": "Renderer",
"reset": "Reset", "reset": "Reset",
"reversed_order": "反向排序", "reversed_order": "反向排序",
"reward_screen": "Reward Screen", "reward_screen": "Reward Screen",
"right_alignment_shift": "Right Alignment Shift",
"right_to_left": "Right to Left", "right_to_left": "Right to Left",
"servant_otomos": "Servant Buddies", "servant_otomos": "Servant Buddies",
"servants": "Followers", "servants": "Followers",
"settings": "設定", "settings": "設定",
"severe_filter": "Severe", "sever_anomaly_filter": "Sever + Anomaly Core",
"sever_filter": "Sever",
"shadow": "陰影", "shadow": "陰影",
"show_my_otomos_separately": "Show my Buddies separately", "show_my_otomos_separately": "Show my Buddies separately",
"show_other_player_otomos_separately": "Show Other Player Buddies separately", "show_other_player_otomos_separately": "Show Other Player Buddies separately",