mirror of
https://github.com/GreenComfyTea/MHR-Overlay.git
synced 2026-01-24 12:28:03 -08:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd1d90b66b | ||
|
|
788152aecd | ||
|
|
e51185892a | ||
|
|
6862331ca9 | ||
|
|
59f11c4933 | ||
|
|
8bcd5e0c4a | ||
|
|
c56976b97f | ||
|
|
5af7f53962 | ||
|
|
8e77df6fed | ||
|
|
d68aacc5bf | ||
|
|
4f34f76ad7 | ||
|
|
4da0e1f0c8 | ||
|
|
7ad40bbb89 | ||
|
|
e2354eedcc | ||
|
|
20dfde17d4 | ||
|
|
72ca959581 | ||
|
|
cd2aa12d3c | ||
|
|
865512f8d6 | ||
|
|
ecd150eb4d | ||
|
|
585860666f | ||
|
|
e6556e8d9b |
11
README.md
11
README.md
@@ -15,13 +15,18 @@ Exposes in-game data about monsters, creatures, players and damage. Draws a high
|
||||
* **[Troubleshooting](https://github.com/GreenComfyTea/MHR-Overlay/wiki/Troubleshooting)**
|
||||
|
||||
# Requirements
|
||||
1. [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26) (v1.3.8 or above);
|
||||
1. [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26) (v1.503 or above);
|
||||
2. [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134) (v0.4.0 or above).
|
||||
|
||||
# How to install:
|
||||
1. Install [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26);
|
||||
2. (Windows only) Install [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134);
|
||||
>**:pushpin: NOTE:** Skip this step if you are using Steam Deck/Proton/Wine/Linux. REFramework Direct2D **must not** be installed for the mod to work.
|
||||
2. Install [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134);
|
||||
>**:pushpin: Windows:** Works normally.
|
||||
|
||||
>**:pushpin: Linux:** Latest Experimental Proton seems to have it working normally as well (https://github.com/cursey/reframework-d2d/issues/5).
|
||||
|
||||
>**:pushpin: Steam Deck:** I've seen people getting it working but I don't have the exact instructions. You will have to figure it out yourself and/or search the nexus pages for information ([REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26?tab=description), [REFramework Direct2D](https://www.nexusmods.com/monsterhunterrise/mods/134), [MHR Overlay](https://www.nexusmods.com/monsterhunterrise/mods/50)).
|
||||
|
||||
3. Download the mod:
|
||||
* Official release can be downloaded from [Nexus Mods](https://www.nexusmods.com/monsterhunterrise/mods/50);
|
||||
* Nightly builds are available in [this repo](https://github.com/GreenComfyTea/MHR-Overlay) and can contain broken functionality, debugging info on screen, bugs and might require the latest [nightly build](https://github.com/praydog/REFramework-nightly/releases) of [REFramework](https://www.nexusmods.com/monsterhunterrise/mods/26). Use with caution!
|
||||
|
||||
@@ -30,8 +30,6 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local debug = require("MHR_Overlay.Misc.debug");
|
||||
|
||||
local keyboard = require("MHR_Overlay.Game_Handler.keyboard");
|
||||
local quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
local screen = require("MHR_Overlay.Game_Handler.screen");
|
||||
@@ -88,15 +86,10 @@ local body_parts_customization = require("MHR_Overlay.UI.Customizations.body_par
|
||||
local ailments_customization = require("MHR_Overlay.UI.Customizations.ailments_customization");
|
||||
local ailment_buildups_customization = require("MHR_Overlay.UI.Customizations.ailment_buildups_customization");
|
||||
local module_visibility_customization = require("MHR_Overlay.UI.Customizations.module_visibility_customization");
|
||||
|
||||
local large_monster_UI_customization = require("MHR_Overlay.UI.Customizations.large_monster_UI_customization");
|
||||
|
||||
local drawing = require("MHR_Overlay.UI.drawing");
|
||||
|
||||
if debug ~= nil and debug.enabled then
|
||||
xy = "";
|
||||
end
|
||||
|
||||
------------------------INIT MODULES-------------------------
|
||||
-- #region
|
||||
screen.init_module();
|
||||
@@ -135,7 +128,6 @@ small_monster.init_module();
|
||||
ailment_hook.init_module();
|
||||
ailment_buildup.init_module();
|
||||
|
||||
customization_menu.init_module();
|
||||
label_customization.init_module();
|
||||
bar_customization.init_module();
|
||||
line_customization.init_module();
|
||||
@@ -150,6 +142,7 @@ body_parts_customization.init_module();
|
||||
ailments_customization.init_module();
|
||||
ailment_buildups_customization.init_module();
|
||||
module_visibility_customization.init_module();
|
||||
customization_menu.init_module();
|
||||
|
||||
drawing.init_module();
|
||||
|
||||
@@ -289,7 +282,7 @@ local function main_loop()
|
||||
draw_modules(config.current_config.global_settings.module_visibility.reward_screen, "Reward Screen");
|
||||
elseif quest_status.flow_state == quest_status.flow_states.SUMMARY_SCREEN then
|
||||
draw_modules(config.current_config.global_settings.module_visibility.summary_screen, "Summary Screen");
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- #endregion
|
||||
@@ -337,33 +330,6 @@ end);
|
||||
-- #endregion
|
||||
----------------------------D2D------------------------------
|
||||
|
||||
if debug ~= nil and debug.enabled then
|
||||
if d2d ~= nil then
|
||||
d2d.register(function()
|
||||
end, function()
|
||||
if not config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
return;
|
||||
end
|
||||
|
||||
if xy ~= "" then
|
||||
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 256, 71, 0xFF000000);
|
||||
d2d.text(drawing.font, "xy:\n" .. tostring(xy), 255, 70, 0xFFFFFFFF);
|
||||
end
|
||||
end);
|
||||
end
|
||||
|
||||
re.on_frame(function()
|
||||
if d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available then
|
||||
return;
|
||||
end
|
||||
|
||||
if xy ~= "" then
|
||||
draw.text("xy:\n" .. tostring(xy), 256, 31, 0xFF000000);
|
||||
draw.text("xy:\n" .. tostring(xy), 255, 30, 0xFFFFFFFF);
|
||||
end
|
||||
end);
|
||||
end
|
||||
|
||||
if imgui.begin_table == nil then
|
||||
re.msg(language.current_language.customization_menu.reframework_outdated);
|
||||
end
|
||||
@@ -50,6 +50,7 @@ local is_boss_enemy_method = enemy_character_base_type_def:get_method("get_isBos
|
||||
local check_die_method = enemy_character_base_type_def:get_method("checkDie");
|
||||
|
||||
local stock_direct_marionette_finish_shoot_hit_parts_damage_method = enemy_character_base_type_def:get_method("stockDirectMarionetteFinishShootHitPartsDamage");
|
||||
local get_mystery_core_break_damage_rate_method = enemy_character_base_type_def:get_method("getMysteryCoreBreakDamageRate");
|
||||
|
||||
local enemy_calc_damage_info_type_def = sdk.find_type_definition("snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide");
|
||||
local get_attacker_id_method = enemy_calc_damage_info_type_def:get_method("get_AttackerID");
|
||||
@@ -69,8 +70,6 @@ local get_condition_type2_method = enemy_calc_damage_info_type_def:get_method("g
|
||||
local get_condition_damage3_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamage3");
|
||||
local get_condition_type3_method = enemy_calc_damage_info_type_def:get_method("get_ConditionDamageType3");
|
||||
|
||||
local stock_mystery_core_break_damage_type_def = sdk.find_type_definition("snow.enemy.EnemyCharacterBase.stockMysteryCoreBreakDamage");
|
||||
|
||||
local quest_manager_type_def = sdk.find_type_definition("snow.QuestManager");
|
||||
|
||||
local quest_forfeit_method = quest_manager_type_def:get_method("questForfeit");
|
||||
@@ -79,24 +78,27 @@ local packet_quest_forfeit_type_def = sdk.find_type_definition("snow.QuestManage
|
||||
local dead_player_id_field = packet_quest_forfeit_type_def:get_field("_DeadPlIndex");
|
||||
local is_from_host_field = packet_quest_forfeit_type_def:get_field("_IsFromQuestHostPacket");
|
||||
|
||||
local enemy_mystery_core_parts_type_def = sdk.find_type_definition("snow.enemy.EnemyMysteryCoreParts");
|
||||
local on_break_method = enemy_mystery_core_parts_type_def:get_method("onBreak");
|
||||
|
||||
function this.get_damage_source_type(damage_source_type_id, is_marionette_attack)
|
||||
if is_marionette_attack then
|
||||
return "wyvern riding";
|
||||
return players.damage_types.wyvern_riding;
|
||||
elseif damage_source_type_id == 0 or damage_source_type_id == 7 or damage_source_type_id == 11 or damage_source_type_id == 13 then
|
||||
return "player";
|
||||
return players.damage_types.player;
|
||||
elseif damage_source_type_id == 1 or damage_source_type_id == 8 then
|
||||
return "bomb";
|
||||
return players.damage_types.bombs;
|
||||
elseif damage_source_type_id == 9 then
|
||||
return "kunai";
|
||||
return players.damage_types.kunai;
|
||||
elseif damage_source_type_id >= 14 and damage_source_type_id <= 20 then
|
||||
return "installation";
|
||||
return players.damage_types.installations;
|
||||
elseif damage_source_type_id >= 21 and damage_source_type_id <= 23 then
|
||||
return "otomo";
|
||||
return players.damage_types.otomo;
|
||||
elseif damage_source_type_id >= 25 and damage_source_type_id <= 32 then
|
||||
return "endemic life";
|
||||
return players.damage_types.endemic_life;
|
||||
end
|
||||
|
||||
return "other";
|
||||
return players.damage_types.other;
|
||||
end
|
||||
|
||||
-- snow.hit.EnemyCalcDamageInfo.AfterCalcInfo_DamageSide
|
||||
@@ -226,12 +228,35 @@ function this.update_damage(enemy, enemy_calc_damage_info)
|
||||
|
||||
players.update_damage(players.total, damage_source_type, is_large_monster, damage_object);
|
||||
players.update_damage(player, damage_source_type, is_large_monster, damage_object);
|
||||
|
||||
--[[xy = string.format(
|
||||
|
||||
PhysicalPartsVitalDamage(): %s
|
||||
PhysicalPartsBreakVitalDamage(): %s
|
||||
PhysicalPartsLossVitalDamage(): %s
|
||||
PhysicalMultiPartsVitalDamage(): %s
|
||||
|
||||
ElementPartsVitalDamage(): %s
|
||||
ElementPartsBreakVitalDamage(): %s
|
||||
ElementPartsLossVitalDamage(): %s
|
||||
ElementMultiPartsVitalDamage(): %s
|
||||
|
||||
IsBreakPartsDamage(): %s
|
||||
,
|
||||
tostring(enemy_calc_damage_info:get_PhysicalPartsVitalDamage()),
|
||||
tostring(enemy_calc_damage_info:get_PhysicalPartsBreakVitalDamage()),
|
||||
tostring(enemy_calc_damage_info:get_PhysicalPartsLossVitalDamage()),
|
||||
tostring(enemy_calc_damage_info:get_PhysicalMultiPartsVitalDamage()),
|
||||
|
||||
tostring(enemy_calc_damage_info:get_ElementPartsVitalDamage()),
|
||||
tostring(enemy_calc_damage_info:get_ElementPartsBreakVitalDamage()),
|
||||
tostring(enemy_calc_damage_info:get_ElementPartsLossVitalDamage()),
|
||||
tostring(enemy_calc_damage_info:get_ElementMultiPartsVitalDamage()),
|
||||
|
||||
tostring(enemy_calc_damage_info:get_IsBreakPartsDamage())
|
||||
);]]
|
||||
end
|
||||
|
||||
--function damage_hook.on_mystery_core_break(enemy)
|
||||
|
||||
--end
|
||||
|
||||
function this.cart(dead_player_id, flag_cat_skill_insurance)
|
||||
-- flag_cat_skill_insurance = 0
|
||||
-- flag_cat_skill_insurance = 1
|
||||
@@ -309,6 +334,45 @@ function this.on_stock_direct_marionette_finish_shoot_hit_parts_damage(enemy, da
|
||||
players.update_damage(player, damage_source_type, true, large_monster_damage_object);
|
||||
end
|
||||
|
||||
function this.on_anomaly_core_break(anomaly_core_part)
|
||||
local anomaly_monster = nil;
|
||||
for enemy, monster in pairs(large_monster.list) do
|
||||
|
||||
if monster.is_anomaly then
|
||||
for part_id, part in pairs(monster.parts) do
|
||||
|
||||
if part.anomaly_core_ref == anomaly_core_part then
|
||||
anomaly_monster = monster;
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
if anomaly_monster ~= nil then
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if anomaly_monster == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local anomaly_core_break_damage_rate = get_mystery_core_break_damage_rate_method:call(anomaly_monster.enemy);
|
||||
if anomaly_core_break_damage_rate == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
local anomaly_core_break_damage = utils.math.round(anomaly_core_break_damage_rate * anomaly_monster.max_health);
|
||||
|
||||
local damage_object = {};
|
||||
damage_object.total_damage = anomaly_core_break_damage;
|
||||
damage_object.physical_damage = 0;
|
||||
damage_object.elemental_damage = 0;
|
||||
damage_object.ailment_damage = anomaly_core_break_damage;
|
||||
|
||||
players.update_damage(players.total, players.damage_types.anomaly_core, true, damage_object);
|
||||
end
|
||||
|
||||
function this.init_module()
|
||||
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
|
||||
players = require("MHR_Overlay.Damage_Meter.players");
|
||||
@@ -344,11 +408,15 @@ function this.init_module()
|
||||
return retval;
|
||||
end);
|
||||
|
||||
--sdk.hook(stock_mystery_core_break_damage_type_def, function(args)
|
||||
-- pcall(damage_hook.on_mystery_core_break, sdk.to_managed_object(args[2]));
|
||||
--end, function(retval)
|
||||
-- return retval;
|
||||
--end);
|
||||
sdk.hook(on_break_method, function(args)
|
||||
-- break core group is same as hit group?
|
||||
-- break core group is part id which exploded
|
||||
local anomaly_core_part = sdk.to_managed_object(args[2]);
|
||||
|
||||
this.on_anomaly_core_break(anomaly_core_part);
|
||||
end, function(retval)
|
||||
return retval;
|
||||
end);
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -9,6 +9,7 @@ local quest_status;
|
||||
local drawing;
|
||||
local language;
|
||||
local non_players;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -51,6 +52,22 @@ this.display_list = {};
|
||||
|
||||
this.highlighted_damage_UI = nil;
|
||||
|
||||
this.damage_types = {
|
||||
["player"] = "player",
|
||||
["bombs"] = "bombs",
|
||||
["kunai"] = "kunai",
|
||||
["installations"] = "installations",
|
||||
["otomo"] = "otomo",
|
||||
["wyvern_riding"] = "wyvern_riding",
|
||||
["poison"] = "poison",
|
||||
["otomo_poison"] = "otomo_poison",
|
||||
["blast"] = "blast",
|
||||
["otomo_blast"] = "otomo_blast",
|
||||
["endemic_life"] = "endemic_life",
|
||||
["anomaly_core"] = "anomaly_core",
|
||||
["other"] = "other"
|
||||
};
|
||||
|
||||
this.types = {
|
||||
["myself"] = 0,
|
||||
["other_player"] = 1,
|
||||
@@ -60,8 +77,7 @@ this.types = {
|
||||
["servant_otomo"] = 16,
|
||||
["total"] = 32,
|
||||
["highlight"] = 64
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
function this.new(id, name, master_rank, hunter_rank, type)
|
||||
local player = {};
|
||||
@@ -78,7 +94,7 @@ function this.new(id, name, master_rank, hunter_rank, type)
|
||||
player.first_hit_time = -1;
|
||||
player.dps = 0;
|
||||
|
||||
player.small_monsters = this.init_damage_sources()
|
||||
player.small_monsters = this.init_damage_sources();
|
||||
player.large_monsters = this.init_damage_sources();
|
||||
|
||||
player.display = {};
|
||||
@@ -98,78 +114,15 @@ end
|
||||
|
||||
function this.init_damage_sources()
|
||||
local monster_type = {};
|
||||
|
||||
monster_type.total_damage = 0;
|
||||
monster_type.physical_damage = 0;
|
||||
monster_type.elemental_damage = 0;
|
||||
monster_type.ailment_damage = 0;
|
||||
|
||||
monster_type.bombs = {};
|
||||
monster_type.bombs.total_damage = 0;
|
||||
monster_type.bombs.physical_damage = 0;
|
||||
monster_type.bombs.elemental_damage = 0;
|
||||
monster_type.bombs.ailment_damage = 0;
|
||||
|
||||
monster_type.kunai = {};
|
||||
monster_type.kunai.total_damage = 0;
|
||||
monster_type.kunai.physical_damage = 0;
|
||||
monster_type.kunai.elemental_damage = 0;
|
||||
monster_type.kunai.ailment_damage = 0;
|
||||
|
||||
monster_type.installations = {};
|
||||
monster_type.installations.total_damage = 0;
|
||||
monster_type.installations.physical_damage = 0;
|
||||
monster_type.installations.elemental_damage = 0;
|
||||
monster_type.installations.ailment_damage = 0;
|
||||
|
||||
monster_type.otomo = {};
|
||||
monster_type.otomo.total_damage = 0;
|
||||
monster_type.otomo.physical_damage = 0;
|
||||
monster_type.otomo.elemental_damage = 0;
|
||||
monster_type.otomo.ailment_damage = 0;
|
||||
|
||||
monster_type.wyvern_riding = {};
|
||||
monster_type.wyvern_riding.total_damage = 0;
|
||||
monster_type.wyvern_riding.physical_damage = 0;
|
||||
monster_type.wyvern_riding.elemental_damage = 0;
|
||||
monster_type.wyvern_riding.ailment_damage = 0;
|
||||
|
||||
monster_type.poison = {};
|
||||
monster_type.poison.total_damage = 0;
|
||||
monster_type.poison.physical_damage = 0;
|
||||
monster_type.poison.elemental_damage = 0;
|
||||
monster_type.poison.ailment_damage = 0;
|
||||
|
||||
monster_type.otomo_poison = {};
|
||||
monster_type.otomo_poison.total_damage = 0;
|
||||
monster_type.otomo_poison.physical_damage = 0;
|
||||
monster_type.otomo_poison.elemental_damage = 0;
|
||||
monster_type.otomo_poison.ailment_damage = 0;
|
||||
|
||||
|
||||
monster_type.blast = {};
|
||||
monster_type.blast.total_damage = 0;
|
||||
monster_type.blast.physical_damage = 0;
|
||||
monster_type.blast.elemental_damage = 0;
|
||||
monster_type.blast.ailment_damage = 0;
|
||||
|
||||
monster_type.otomo_blast = {};
|
||||
monster_type.otomo_blast.total_damage = 0;
|
||||
monster_type.otomo_blast.physical_damage = 0;
|
||||
monster_type.otomo_blast.elemental_damage = 0;
|
||||
monster_type.otomo_blast.ailment_damage = 0;
|
||||
|
||||
monster_type.endemic_life = {};
|
||||
monster_type.endemic_life.total_damage = 0;
|
||||
monster_type.endemic_life.physical_damage = 0;
|
||||
monster_type.endemic_life.elemental_damage = 0;
|
||||
monster_type.endemic_life.ailment_damage = 0;
|
||||
|
||||
monster_type.other = {};
|
||||
monster_type.other.total_damage = 0;
|
||||
monster_type.other.physical_damage = 0;
|
||||
monster_type.other.elemental_damage = 0;
|
||||
monster_type.other.ailment_damage = 0;
|
||||
|
||||
for damage_type_name, _ in pairs(this.damage_types) do
|
||||
monster_type[damage_type_name] = {
|
||||
total_damage = 0,
|
||||
physical_damage = 0,
|
||||
elemental_damage = 0,
|
||||
ailment_damage = 0
|
||||
};
|
||||
end
|
||||
|
||||
return monster_type;
|
||||
end
|
||||
@@ -191,37 +144,10 @@ function this.update_damage(player, damage_source_type, is_large_monster, damage
|
||||
player.first_hit_time = time.total_elapsed_script_seconds;
|
||||
end
|
||||
|
||||
local player_monster_type = player.small_monsters;
|
||||
if is_large_monster then
|
||||
player_monster_type = player.large_monsters;
|
||||
end
|
||||
|
||||
if damage_source_type == "player" then
|
||||
this.merge_damage(player_monster_type, damage_object);
|
||||
elseif damage_source_type == "bomb" then
|
||||
this.merge_damage(player_monster_type.bombs, damage_object);
|
||||
elseif damage_source_type == "kunai" then
|
||||
this.merge_damage(player_monster_type.kunai, damage_object);
|
||||
elseif damage_source_type == "installation" then
|
||||
this.merge_damage(player_monster_type.installations, damage_object);
|
||||
elseif damage_source_type == "otomo" then
|
||||
this.merge_damage(player_monster_type.otomo, damage_object);
|
||||
elseif damage_source_type == "wyvern riding" then
|
||||
this.merge_damage(player_monster_type.wyvern_riding, damage_object);
|
||||
elseif damage_source_type == "poison" then
|
||||
this.merge_damage(player_monster_type.poison, damage_object);
|
||||
elseif damage_source_type == "blast" then
|
||||
this.merge_damage(player_monster_type.blast, damage_object);
|
||||
elseif damage_source_type == "otomo poison" then
|
||||
this.merge_damage(player_monster_type.otomo_poison, damage_object);
|
||||
elseif damage_source_type == "otomo blast" then
|
||||
this.merge_damage(player_monster_type.otomo_blast, damage_object);
|
||||
elseif damage_source_type == "endemic life" then
|
||||
this.merge_damage(player_monster_type.endemic_life, damage_object);
|
||||
elseif damage_source_type == "other" then
|
||||
this.merge_damage(player_monster_type.other, damage_object);
|
||||
this.merge_damage(player.large_monsters[damage_source_type], damage_object);
|
||||
else
|
||||
this.merge_damage(player_monster_type, damage_object);
|
||||
this.merge_damage(player.small_monsters[damage_source_type], damage_object);
|
||||
end
|
||||
|
||||
this.update_display(player);
|
||||
@@ -250,23 +176,23 @@ function this.update_display(player)
|
||||
end
|
||||
|
||||
for _, monster_type in ipairs(monster_types) do
|
||||
if cached_config.tracked_damage_types.player_damage then
|
||||
this.merge_damage(player.display, monster_type);
|
||||
if cached_config.tracked_damage_types.players then
|
||||
this.merge_damage(player.display, monster_type.player);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.bomb_damage then
|
||||
if cached_config.tracked_damage_types.bombs then
|
||||
this.merge_damage(player.display, monster_type.bombs);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.kunai_damage then
|
||||
if cached_config.tracked_damage_types.kunai then
|
||||
this.merge_damage(player.display, monster_type.kunai);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.installation_damage then
|
||||
if cached_config.tracked_damage_types.installations then
|
||||
this.merge_damage(player.display, monster_type.installations);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.otomo_damage then
|
||||
if cached_config.tracked_damage_types.otomos then
|
||||
if player.type == this.types.myself then
|
||||
|
||||
if not cached_config.settings.show_my_otomos_separately then
|
||||
@@ -303,11 +229,11 @@ function this.update_display(player)
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.wyvern_riding_damage then
|
||||
if cached_config.tracked_damage_types.wyvern_riding then
|
||||
this.merge_damage(player.display, monster_type.wyvern_riding);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.poison_damage then
|
||||
if cached_config.tracked_damage_types.poison then
|
||||
this.merge_damage(player.display, monster_type.poison);
|
||||
|
||||
if player.type == this.types.myself then
|
||||
@@ -347,7 +273,7 @@ function this.update_display(player)
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.blast_damage then
|
||||
if cached_config.tracked_damage_types.blast then
|
||||
this.merge_damage(player.display, monster_type.blast);
|
||||
|
||||
if player.type == this.types.myself then
|
||||
@@ -386,11 +312,15 @@ function this.update_display(player)
|
||||
end
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.endemic_life_damage then
|
||||
if cached_config.tracked_damage_types.endemic_life then
|
||||
this.merge_damage(player.display, monster_type.endemic_life);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.other_damage then
|
||||
if cached_config.tracked_damage_types.anomaly_cores then
|
||||
this.merge_damage(player.display, monster_type.anomaly_core);
|
||||
end
|
||||
|
||||
if cached_config.tracked_damage_types.other then
|
||||
this.merge_damage(player.display, monster_type.other);
|
||||
end
|
||||
end
|
||||
@@ -702,6 +632,7 @@ function this.init_module()
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
language = require("MHR_Overlay.Misc.language");
|
||||
non_players = require("MHR_Overlay.Damage_Meter.non_players");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
|
||||
this.init();
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
||||
local this = {};
|
||||
|
||||
this.enabled = false;
|
||||
|
||||
return this;
|
||||
@@ -36,11 +36,47 @@ local package = package;
|
||||
|
||||
this.language_folder = "MHR Overlay\\languages\\";
|
||||
|
||||
--[[
|
||||
EXAMPLE:
|
||||
unicode_glyph_ranges = {
|
||||
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
0x2000, 0x206F, -- General Punctuation
|
||||
0x3000, 0x30FF, -- CJK Symbols and Punctuations, Hiragana, Katakana
|
||||
0x31F0, 0x31FF, -- Katakana Phonetic Extensions
|
||||
0x4e00, 0x9FAF, -- CJK Ideograms
|
||||
0xFF00, 0xFFEF, -- Half-width characters
|
||||
0
|
||||
},
|
||||
]]
|
||||
|
||||
--[[
|
||||
EXAMPLE:
|
||||
unicode_glyph_ranges = {
|
||||
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
0x0400, 0x052F, -- Cyrillic
|
||||
0x2000, 0x206F, -- General Punctuation
|
||||
0xFF00, 0xFFEF, -- Half-width characters
|
||||
0
|
||||
},
|
||||
]]
|
||||
|
||||
--[[
|
||||
EXAMPLE:
|
||||
unicode_glyph_ranges = {
|
||||
0x0020, 0x00FF, -- Basic Latin + Latin Supplement
|
||||
0x1100, 0x11FF, -- Hangul Jamo
|
||||
0x2000, 0x206F, -- General Punctuation
|
||||
0x3130, 0x318F, -- Hangul Compatibility Jamo
|
||||
0xAC00, 0xD7AF, -- Hangul Syllables
|
||||
0xFF00, 0xFFEF, -- Half-width characters
|
||||
0
|
||||
},
|
||||
]]
|
||||
|
||||
this.current_language = {};
|
||||
|
||||
|
||||
this.default_language = {
|
||||
font_name = "NotoSansKR-Bold.otf",
|
||||
font_name = "",
|
||||
unicode_glyph_ranges = {0},
|
||||
parts = {
|
||||
head = "Head",
|
||||
neck = "Neck",
|
||||
@@ -166,6 +202,7 @@ this.default_language = {
|
||||
total_buildup = "Total Buildup",
|
||||
part_break = "Break",
|
||||
part_sever = "Sever",
|
||||
part_anomaly_core = "Anomaly Core",
|
||||
|
||||
otomo = "Buddy",
|
||||
servant = "Follower",
|
||||
@@ -283,6 +320,7 @@ this.default_language = {
|
||||
rage = "Rage",
|
||||
body_parts = "Body Parts",
|
||||
hide_undamaged_parts = "Hide Undamaged Parts",
|
||||
render_inactive_anomaly_cores = "Render Inactive Anomaly Cores",
|
||||
part_name = "Part Name",
|
||||
flinch_count = "Flinch Count",
|
||||
break_count = "Break Count",
|
||||
@@ -339,14 +377,18 @@ this.default_language = {
|
||||
small_monsters = "Small Monsters",
|
||||
large_monsters = "Large Monsters",
|
||||
|
||||
player_damage = "Player Damage",
|
||||
bomb_damage = "Bomb Damage",
|
||||
kunai_damage = "Kunai Damage",
|
||||
installation_damage = "Installation Damage",
|
||||
otomo_damage = "Buddy Damage",
|
||||
monster_damage = "Monster Damage",
|
||||
poison_damage = "Poison Damage",
|
||||
blast_damage = "Blast Damage",
|
||||
players = "Players",
|
||||
bombs = "Bombs",
|
||||
kunai = "Kunai",
|
||||
installations = "Installations",
|
||||
otomos = "Buddies",
|
||||
monsters = "Monsters",
|
||||
wyvern_riding = "Wyvern Riding",
|
||||
poison = "Poison",
|
||||
blast = "Blast",
|
||||
endemic_life = "Endemic Life",
|
||||
anomaly_cores = "Anomaly Cores",
|
||||
other = "Other",
|
||||
|
||||
damage = "Damage",
|
||||
|
||||
@@ -417,6 +459,8 @@ this.default_language = {
|
||||
break_health_percentage = "Break Health Percentage",
|
||||
loss_health = "Sever Health",
|
||||
loss_health_percentage = "Sever Health Percentage",
|
||||
anomaly_health = "Anomaly Core Health",
|
||||
anomaly_health_percentage = "Anomaly Core Health Percentage",
|
||||
|
||||
monster_id = "Monster ID",
|
||||
|
||||
@@ -426,10 +470,6 @@ this.default_language = {
|
||||
|
||||
master_rank = "Master Rank",
|
||||
|
||||
other_damage = "Other Damage",
|
||||
wyvern_riding_damage = "Wyvern Riding Damage",
|
||||
endemic_life_damage = "Endemic Life Damage",
|
||||
|
||||
hide_myself = "Hide Myself",
|
||||
hide_other_players = "Hide Other Players",
|
||||
hide_servants = "Hide Followers",
|
||||
@@ -446,14 +486,24 @@ this.default_language = {
|
||||
|
||||
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_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",
|
||||
break_severe_filter = "Break + Severe",
|
||||
break_filter = "Break",
|
||||
severe_filter = "Severe",
|
||||
sever_filter = "Sever",
|
||||
anomaly_filter = "Anomaly Core",
|
||||
|
||||
outline = "Outline",
|
||||
thickness = "Thickness",
|
||||
@@ -505,7 +555,15 @@ this.default_language = {
|
||||
|
||||
filter_mode = "Filter Mode",
|
||||
current_state = "Current State",
|
||||
default_state = "Default State"
|
||||
default_state = "Default State",
|
||||
|
||||
fill_direction = "Fill Direction",
|
||||
left_to_right = "Left to Right",
|
||||
right_to_left = "Right to Left",
|
||||
top_to_bottom = "Top to Bottom",
|
||||
bottom_to_top = "Bottom to Top",
|
||||
|
||||
right_alignment_shift = "Right Alignment Shift"
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -543,7 +543,7 @@ function this.init()
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.tail
|
||||
},
|
||||
[19] = -- Daimyo Hermitaur 19
|
||||
{
|
||||
@@ -826,11 +826,12 @@ function this.init()
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.wingclaws,
|
||||
language.current_language.parts.right_wingclaw,
|
||||
language.current_language.parts.forelegs,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.tail,
|
||||
language.current_language.parts.antenna
|
||||
language.current_language.parts.antenna,
|
||||
language.current_language.parts.left_wingclaw
|
||||
},
|
||||
|
||||
[2072] = -- Risen Kushala Daora 2072
|
||||
@@ -919,6 +920,27 @@ function this.init()
|
||||
language.current_language.parts.left_leg,
|
||||
language.current_language.parts.right_leg
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--SUNBREAK BONUS UPDATE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[1412] = -- Primordial Malzeno 1412
|
||||
{
|
||||
language.current_language.parts.head,
|
||||
language.current_language.parts.torso,
|
||||
language.current_language.parts.left_foreleg,
|
||||
language.current_language.parts.right_foreleg,
|
||||
language.current_language.parts.hind_legs,
|
||||
language.current_language.parts.wings,
|
||||
language.current_language.parts.tail,
|
||||
}
|
||||
};
|
||||
end
|
||||
|
||||
|
||||
@@ -215,6 +215,14 @@ function this.number.round(value)
|
||||
return math.floor(value + 0.5);
|
||||
end
|
||||
|
||||
function this.number.is_odd(value)
|
||||
return value % 2 ~= 0;
|
||||
end
|
||||
|
||||
function this.number.is_even(value)
|
||||
return value % 2 == 0;
|
||||
end
|
||||
|
||||
function this.string.trim(str)
|
||||
return str:match("^%s*(.-)%s*$");
|
||||
end
|
||||
|
||||
@@ -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 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 enemy_damage_param_type_def = sdk.find_type_definition("snow.enemy.EnemyDamageParam");
|
||||
@@ -120,7 +120,7 @@ end
|
||||
|
||||
function this.stock_damage()
|
||||
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
|
||||
goto continue
|
||||
end
|
||||
@@ -132,7 +132,7 @@ function this.stock_damage()
|
||||
end
|
||||
|
||||
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
|
||||
goto continue
|
||||
end
|
||||
|
||||
@@ -245,20 +245,20 @@ function this.init_ailment_names(_ailments)
|
||||
end
|
||||
|
||||
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 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_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");
|
||||
@@ -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_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_get_is_damage_method = poison_param_type:get_method("get_IsDamage");
|
||||
local poison_param_type_def = poison_param_field:get_type();
|
||||
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 length_method = system_array_type_def:get_method("get_Length");
|
||||
@@ -278,7 +279,7 @@ function this.update_ailments(enemy, monster)
|
||||
if enemy == nil then
|
||||
return;
|
||||
end
|
||||
local damage_param = damage_param_field:get_data(enemy);
|
||||
local damage_param = get_damage_param_method:call(enemy);
|
||||
if damage_param == nil then
|
||||
return;
|
||||
end
|
||||
@@ -754,20 +755,20 @@ function this.apply_ailment_damage(monster, ailment_type, ailment_damage)
|
||||
return;
|
||||
end
|
||||
|
||||
local damage_source_type = "";
|
||||
local otomo_damage_source_type = "";
|
||||
local damage_source_type = players.damage_types.other;
|
||||
local otomo_damage_source_type = players.damage_types.other;
|
||||
local buildup_share = monster.ailments[ailment_type].buildup_share;
|
||||
local otomo_buildup_share = monster.ailments[ailment_type].otomo_buildup_share;
|
||||
|
||||
if ailment_type == this.poison_id then
|
||||
damage_source_type = "poison";
|
||||
otomo_damage_source_type = "otomo poison";
|
||||
damage_source_type = players.damage_types.poison;
|
||||
otomo_damage_source_type = players.damage_types.otomo_poison;
|
||||
buildup_share = monster.ailments[ailment_type].cached_buildup_share;
|
||||
otomo_buildup_share = monster.ailments[ailment_type].cached_otomo_buildup_share;
|
||||
|
||||
elseif ailment_type == this.blast_id then
|
||||
damage_source_type = "blast";
|
||||
otomo_damage_source_type = "otomo blast";
|
||||
damage_source_type = players.damage_types.blast;
|
||||
otomo_damage_source_type = players.damage_types.otomo_blast;
|
||||
else
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -11,6 +11,7 @@ local screen;
|
||||
local drawing;
|
||||
local part_names;
|
||||
local time;
|
||||
local utils;
|
||||
|
||||
local sdk = sdk;
|
||||
local tostring = tostring;
|
||||
@@ -49,32 +50,45 @@ this.list = {};
|
||||
function this.new(id, name)
|
||||
local part = {};
|
||||
|
||||
part.id = id;
|
||||
|
||||
part.health = 9999;
|
||||
part.max_health = 99999;
|
||||
part.id = id;
|
||||
part.name = name;
|
||||
|
||||
part.health = -9;
|
||||
part.max_health = -10;
|
||||
part.health_percentage = 0;
|
||||
|
||||
part.break_health = 9999;
|
||||
part.break_max_health = 99999;
|
||||
part.break_health = -9;
|
||||
part.break_max_health = -10;
|
||||
part.break_health_percentage = 0;
|
||||
|
||||
part.lost_health = 9999;
|
||||
part.loss_max_health = 99999;
|
||||
part.lost_health = -9;
|
||||
part.loss_max_health = -10;
|
||||
part.loss_health_percentage = 0;
|
||||
|
||||
part.name = name;
|
||||
part.flinch_count = 0;
|
||||
part.break_count = 0;
|
||||
part.break_max_count = 0;
|
||||
|
||||
part.anomaly_ref = nil;
|
||||
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;
|
||||
|
||||
return part;
|
||||
end
|
||||
|
||||
function this.init_part_names(monster_id, parts)
|
||||
for part_id, part in pairs(parts) do
|
||||
part.name = part_names.get_part_name(monster_id, part_id);
|
||||
end
|
||||
end
|
||||
|
||||
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;
|
||||
end
|
||||
|
||||
@@ -147,6 +161,125 @@ function this.update_loss(part, part_loss_current, part_loss_max, is_severed)
|
||||
|
||||
end
|
||||
|
||||
function this.update_anomaly(part, part_anomaly_ref, 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_core_ref = part_anomaly_ref;
|
||||
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)
|
||||
local cached_config = cached_config.body_parts;
|
||||
local global_scale_modifier = config.current_config.global_settings.modifiers.global_scale_modifier;
|
||||
@@ -155,72 +288,41 @@ function this.draw(monster, part_UI, cached_config, parts_position_on_screen, op
|
||||
for REpart, part in pairs(monster.parts) do
|
||||
local health_supported = part.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 break_supported and part.break_count >= part.break_max_count then
|
||||
break_supported = false;
|
||||
end
|
||||
|
||||
if severe_supported and part.is_severed then
|
||||
severe_supported = false;
|
||||
if sever_supported and part.is_severed then
|
||||
sever_supported = false;
|
||||
end
|
||||
|
||||
if anomaly_supported and not part.anomaly_is_active then
|
||||
anomaly_supported = false;
|
||||
end
|
||||
end
|
||||
|
||||
if health_supported then
|
||||
if break_supported then
|
||||
if severe_supported then
|
||||
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
|
||||
local is_filtered_out = this.is_filtered_out(cached_config, health_supported, break_supported, sever_supported, anomaly_supported);
|
||||
if is_filtered_out then
|
||||
goto continue;
|
||||
end
|
||||
|
||||
if cached_config.settings.hide_undamaged_parts
|
||||
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.loss_health == part.loss_max_health and not part.is_severed) or not severe_supported) then
|
||||
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.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
|
||||
end
|
||||
|
||||
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.loss_visibility or not severe_supported or part.is_severed) then
|
||||
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 sever_supported or part.is_severed)
|
||||
and (not part_UI.anomaly_visibility or not anomaly_supported) then
|
||||
goto continue
|
||||
end
|
||||
|
||||
@@ -323,6 +425,26 @@ function this.draw(monster, part_UI, cached_config, parts_position_on_screen, op
|
||||
return left.loss_health_percentage < right.loss_health_percentage;
|
||||
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
|
||||
|
||||
local last_part_position_on_screen;
|
||||
@@ -352,6 +474,7 @@ function this.init_module()
|
||||
drawing = require("MHR_Overlay.UI.drawing");
|
||||
part_names = require("MHR_Overlay.Misc.part_names");
|
||||
time = require("MHR_Overlay.Game_Handler.time");
|
||||
utils = require("MHR_Overlay.Misc.utils");
|
||||
end
|
||||
|
||||
return this;
|
||||
|
||||
@@ -114,6 +114,7 @@ function this.new(enemy)
|
||||
monster.king_border = 10;
|
||||
monster.crown = "";
|
||||
|
||||
monster.is_anomaly = false;
|
||||
monster.parts = {};
|
||||
|
||||
monster.ailments = ailments.init_ailments();
|
||||
@@ -141,6 +142,7 @@ function this.new(enemy)
|
||||
|
||||
this.update(enemy, monster);
|
||||
pcall(this.update_parts, enemy, monster, physical_param);
|
||||
pcall(this.update_anomaly_parts, enemy, monster, nil);
|
||||
|
||||
if this.list[enemy] == nil then
|
||||
this.list[enemy] = monster;
|
||||
@@ -178,6 +180,82 @@ 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 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");
|
||||
local on_break_method = enemy_mystery_core_parts_type_def:get_method("onBreak");
|
||||
|
||||
function this.init(monster, enemy)
|
||||
local enemy_type = enemy_type_field:get_data(enemy);
|
||||
if enemy_type == nil then
|
||||
@@ -239,7 +317,7 @@ function this.init(monster, enemy)
|
||||
|
||||
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
|
||||
local capture_param = damage_param:get_field("_CaptureParam");
|
||||
|
||||
@@ -251,9 +329,11 @@ function this.init(monster, enemy)
|
||||
end
|
||||
end
|
||||
|
||||
local curia_param = enemy:get_field("<CuriaParam>k__BackingField");
|
||||
local is_anomaly = curia_param ~= nil;
|
||||
--local curia_param = enemy:get_field("<CuriaParam>k__BackingField");
|
||||
local mystery_param = get_mystery_param_method:call(enemy);
|
||||
local is_anomaly = mystery_param ~= nil;
|
||||
|
||||
monster.is_anomaly = is_anomaly;
|
||||
monster.is_capturable = is_capture_enable and not is_anomaly;
|
||||
end
|
||||
|
||||
@@ -312,7 +392,12 @@ function this.init_UI(monster, monster_UI, cached_config)
|
||||
cached_config.body_parts.part_loss.bar,
|
||||
cached_config.body_parts.part_loss.text_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(
|
||||
@@ -337,55 +422,12 @@ function this.init_UI(monster, monster_UI, cached_config)
|
||||
);
|
||||
|
||||
ailments.init_ailment_names(monster.ailments);
|
||||
body_part.init_part_names(monster.id, monster.parts);
|
||||
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)
|
||||
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;
|
||||
end
|
||||
|
||||
@@ -399,7 +441,7 @@ end
|
||||
function this.update_all_riders()
|
||||
for enemy, monster in pairs(this.list) do
|
||||
-- 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
|
||||
local is_marionette = get_is_marionette_method:call(mario_param);
|
||||
|
||||
@@ -426,8 +468,8 @@ function this.update(enemy, monster)
|
||||
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
|
||||
and not cached_config.static.enabled
|
||||
and not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -448,15 +490,15 @@ function this.update(enemy, monster)
|
||||
if monster.can_go_stealth then
|
||||
-- Lucent Nargacuga
|
||||
if monster.id == 549 then
|
||||
local is_stealth = enemy:call("isStealth");
|
||||
local is_stealth = is_stealth_method:call(enemy);
|
||||
if is_stealth ~= nil then
|
||||
monster.is_stealth = is_stealth;
|
||||
end
|
||||
-- Chameleos and Risen Chameleos
|
||||
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
|
||||
local status = stealth_controller:call("get_CurrentStatus");
|
||||
local status = get_current_status_method:call(stealth_controller);
|
||||
|
||||
if status >= 2 then
|
||||
monster.is_stealth = true;
|
||||
@@ -475,18 +517,18 @@ function this.update_health(enemy, monster)
|
||||
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
|
||||
and not cached_config.static.enabled
|
||||
and not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if not cached_config.dynamic.health.visibility
|
||||
and not cached_config.static.health.visibility
|
||||
and not cached_config.highlighted.health.visibility then
|
||||
and not cached_config.static.health.visibility
|
||||
and not cached_config.highlighted.health.visibility then
|
||||
return nil;
|
||||
end
|
||||
|
||||
local physical_param = physical_param_field:get_data(enemy);
|
||||
local physical_param = get_physical_param_method:call(enemy);
|
||||
if physical_param == nil then
|
||||
customization_menu.status = "No physical param";
|
||||
return nil;
|
||||
@@ -515,19 +557,19 @@ function this.update_stamina(enemy, monster, stamina_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
|
||||
and not cached_config.static.enabled
|
||||
and not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if not cached_config.dynamic.stamina.visibility
|
||||
and not cached_config.static.stamina.visibility
|
||||
and not cached_config.highlighted.stamina.visibility then
|
||||
and not cached_config.static.stamina.visibility
|
||||
and not cached_config.highlighted.stamina.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
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
|
||||
customization_menu.status = "No stamina param";
|
||||
return;
|
||||
@@ -552,19 +594,19 @@ function this.update_stamina_timer(enemy, monster, stamina_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
|
||||
and not cached_config.static.enabled
|
||||
and not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if not cached_config.dynamic.stamina.visibility
|
||||
and not cached_config.static.stamina.visibility
|
||||
and not cached_config.highlighted.stamina.visibility then
|
||||
and not cached_config.static.stamina.visibility
|
||||
and not cached_config.highlighted.stamina.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
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
|
||||
customization_menu.status = "No stamina param";
|
||||
return;
|
||||
@@ -599,19 +641,19 @@ function this.update_rage(enemy, monster, anger_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
|
||||
and not cached_config.static.enabled
|
||||
and not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if not cached_config.dynamic.rage.visibility
|
||||
and not cached_config.static.rage.visibility
|
||||
and not cached_config.highlighted.rage.visibility then
|
||||
and not cached_config.static.rage.visibility
|
||||
and not cached_config.highlighted.rage.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
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
|
||||
customization_menu.status = "No anger param";
|
||||
return;
|
||||
@@ -631,19 +673,19 @@ function this.update_rage_timer(enemy, monster, anger_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
|
||||
and not cached_config.static.enabled
|
||||
and not cached_config.highlighted.enabled then
|
||||
return;
|
||||
end
|
||||
|
||||
if not cached_config.dynamic.rage.visibility
|
||||
and not cached_config.static.rage.visibility
|
||||
and not cached_config.highlighted.rage.visibility then
|
||||
and not cached_config.static.rage.visibility
|
||||
and not cached_config.highlighted.rage.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
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
|
||||
customization_menu.status = "No anger param";
|
||||
return;
|
||||
@@ -677,65 +719,64 @@ function this.update_parts(enemy, monster, physical_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
|
||||
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
|
||||
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_health.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.static.body_parts.part_health.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.highlighted.body_parts.part_health.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.dynamic.body_parts.part_break.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_break.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_break.visibility
|
||||
and not cached_config.highlighted.body_parts.part_loss.visibility then
|
||||
return;
|
||||
end
|
||||
|
||||
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
|
||||
customization_menu.status = "No physical param";
|
||||
return nil;
|
||||
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
|
||||
customization_menu.status = "No damage param";
|
||||
return;
|
||||
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
|
||||
customization_menu.status = "No parts damage info";
|
||||
return;
|
||||
end
|
||||
|
||||
local enemy_parts_info_array = enemy_parts_damage_info:call("get_PartsInfo");
|
||||
if enemy_parts_info_array == nil then
|
||||
local core_parts_array = get_part_info_array_method:call(enemy_parts_damage_info);
|
||||
if core_parts_array == nil then
|
||||
customization_menu.status = "No parts damage info array";
|
||||
return;
|
||||
end
|
||||
|
||||
local enemy_parts_info_array_length = length_method:call(enemy_parts_info_array);
|
||||
if enemy_parts_info_array_length == nil then
|
||||
local core_parts_array_length = length_method:call(core_parts_array);
|
||||
if core_parts_array_length == nil then
|
||||
return;
|
||||
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 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
|
||||
goto continue
|
||||
end
|
||||
@@ -744,7 +785,7 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
if part == nil then
|
||||
local part_name = part_names.get_part_name(monster.id, part_id);
|
||||
if part_name == nil then
|
||||
goto continue
|
||||
goto continue;
|
||||
else
|
||||
part = body_part.new(part_id, part_name);
|
||||
monster.parts[part_id] = part;
|
||||
@@ -752,12 +793,12 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
end
|
||||
|
||||
if cached_config.dynamic.body_parts.part_health.visibility
|
||||
or cached_config.static.body_parts.part_health.visibility
|
||||
or cached_config.highlighted.body_parts.part_health.visibility then
|
||||
local part_vital = physical_param:call("getVital", 1, i);
|
||||
or cached_config.static.body_parts.part_health.visibility
|
||||
or cached_config.highlighted.body_parts.part_health.visibility then
|
||||
local part_vital = get_vital_method:call(physical_param, 1, i);
|
||||
if part_vital ~= nil then
|
||||
local part_current = part_vital:call("get_Current") or -1;
|
||||
local part_max = part_vital:call("get_Max") or -1;
|
||||
local part_current = get_current_method:call(part_vital) or -1;
|
||||
local part_max = get_max_method:call(part_vital) or -1;
|
||||
|
||||
body_part.update_flinch(part, part_current, part_max);
|
||||
|
||||
@@ -765,18 +806,18 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
end
|
||||
|
||||
if cached_config.dynamic.body_parts.part_break.visibility
|
||||
or cached_config.static.body_parts.part_break.visibility
|
||||
or cached_config.highlighted.body_parts.part_break.visibility then
|
||||
local part_break_vital = physical_param:call("getVital", 2, i);
|
||||
or cached_config.static.body_parts.part_break.visibility
|
||||
or cached_config.highlighted.body_parts.part_break.visibility then
|
||||
local part_break_vital = get_vital_method:call(physical_param, 2, i);
|
||||
if part_break_vital ~= nil then
|
||||
local part_break_current = part_break_vital:call("get_Current") or -1;
|
||||
local part_break_max = part_break_vital:call("get_Max") or -1;
|
||||
local part_break_current = get_current_method:call(part_break_vital) or -1;
|
||||
local part_break_max = get_max_method:call(part_break_vital) or -1;
|
||||
local part_break_count = -1;
|
||||
local part_break_max_count = -1;
|
||||
|
||||
if enemy_parts_info ~= nil then
|
||||
part_break_count = enemy_parts_info:call("get_PartsBreakDamageLevel") or part_break_count;
|
||||
part_break_max_count = enemy_parts_info:call("get_PartsBreakDamageMaxLevel") or part_break_max_count;
|
||||
part_break_count = get_parts_break_damage_level_method:call(enemy_parts_info) or part_break_count;
|
||||
part_break_max_count = get_parts_break_damage_max_level_method:call(enemy_parts_info) or part_break_max_count;
|
||||
end
|
||||
|
||||
body_part.update_break(part, part_break_current, part_break_max, part_break_count, part_break_max_count)
|
||||
@@ -784,16 +825,16 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
end
|
||||
|
||||
if cached_config.dynamic.body_parts.part_loss.visibility
|
||||
or cached_config.static.body_parts.part_loss.visibility
|
||||
or cached_config.highlighted.body_parts.part_loss.visibility then
|
||||
local part_loss_vital = physical_param:call("getVital", 3, i);
|
||||
or cached_config.static.body_parts.part_loss.visibility
|
||||
or cached_config.highlighted.body_parts.part_loss.visibility then
|
||||
local part_loss_vital = get_vital_method:call(physical_param, 3, i);
|
||||
if part_loss_vital ~= nil then
|
||||
local part_loss_current = part_loss_vital:call("get_Current") or -1;
|
||||
local part_loss_max = part_loss_vital:call("get_Max") or -1;
|
||||
local part_loss_current = get_current_method:call(part_loss_vital) or -1;
|
||||
local part_loss_max = get_max_method:call(part_loss_vital) or -1;
|
||||
local is_severed = false;
|
||||
|
||||
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
|
||||
is_severed = _is_severed;
|
||||
end
|
||||
@@ -807,6 +848,90 @@ function this.update_parts(enemy, monster, physical_param)
|
||||
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, core_part, part_current, part_max, part_is_active);
|
||||
|
||||
end
|
||||
|
||||
::continue::
|
||||
end
|
||||
end
|
||||
|
||||
function this.draw(monster, type, cached_config, position_on_screen, opacity_scale)
|
||||
local monster_UI;
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ function this.update_large_monster(enemy)
|
||||
if quest_status.is_online and players.myself.id ~= 0 then
|
||||
local physical_param = large_monster.update_health(enemy, monster);
|
||||
pcall(large_monster.update_parts, enemy, monster, physical_param);
|
||||
pcall(large_monster.update_anomaly_parts, enemy, monster, nil);
|
||||
end
|
||||
|
||||
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);
|
||||
pcall(large_monster.update_parts, enemy, monster, physical_param);
|
||||
pcall(large_monster.update_anomaly_parts, enemy, monster, nil);
|
||||
else
|
||||
local monster = small_monster.get_monster(enemy);
|
||||
small_monster.update_health(enemy, monster);
|
||||
|
||||
@@ -151,10 +151,10 @@ function this.init_UI(monster)
|
||||
);
|
||||
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 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 vital_param_type = get_vital_method:get_return_type();
|
||||
@@ -198,7 +198,7 @@ function this.update_health(enemy, monster)
|
||||
return;
|
||||
end
|
||||
|
||||
local physical_param = physical_param_field:get_data(enemy)
|
||||
local physical_param = get_physical_param_method:call(enemy);
|
||||
if physical_param == nil then
|
||||
customization_menu.status = "No physical param";
|
||||
return;
|
||||
|
||||
@@ -47,6 +47,61 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.ailment_buildups_sorting_types = {};
|
||||
this.displayed_ailment_buildups_sorting_types = {};
|
||||
|
||||
this.highlighted_buildup_bar_types = {};
|
||||
this.displayed_highlighted_buildup_bar_types = {};
|
||||
|
||||
this.buildup_bar_relative_types = {};
|
||||
this.displayed_buildup_bar_relative_types = {};
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
this.ailment_buildups_sorting_types =
|
||||
{
|
||||
default.normal,
|
||||
default.buildup,
|
||||
default.buildup_percentage
|
||||
};
|
||||
|
||||
this.displayed_ailment_buildups_sorting_types =
|
||||
{
|
||||
current.normal,
|
||||
current.buildup,
|
||||
current.buildup_percentage
|
||||
};
|
||||
|
||||
this.highlighted_buildup_bar_types =
|
||||
{
|
||||
default.me,
|
||||
default.top_buildup,
|
||||
default.none
|
||||
};
|
||||
|
||||
this.displayed_highlighted_buildup_bar_types =
|
||||
{
|
||||
current.me,
|
||||
current.top_buildup,
|
||||
current.none
|
||||
};
|
||||
|
||||
this.buildup_bar_relative_types =
|
||||
{
|
||||
default.total_buildup,
|
||||
default.top_buildup
|
||||
};
|
||||
|
||||
|
||||
this.displayed_buildup_bar_relative_types =
|
||||
{
|
||||
current.total_buildup,
|
||||
current.top_buildup
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
@@ -103,24 +158,24 @@ function this.draw(cached_config)
|
||||
if imgui.tree_node(language.current_language.customization_menu.settings) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.highlighted_bar,
|
||||
utils.table.find_index(customization_menu.highlighted_buildup_bar_types, cached_config.settings.highlighted_bar),
|
||||
customization_menu.displayed_highlighted_buildup_bar_types);
|
||||
utils.table.find_index(this.highlighted_buildup_bar_types, cached_config.settings.highlighted_bar),
|
||||
this.displayed_highlighted_buildup_bar_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.settings.highlighted_bar = customization_menu.highlighted_buildup_bar_types[index];
|
||||
cached_config.settings.highlighted_bar = this.highlighted_buildup_bar_types[index];
|
||||
end
|
||||
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.buildup_bars_are_relative_to,
|
||||
utils.table.find_index(customization_menu.displayed_buildup_bar_relative_types, cached_config.settings.buildup_bar_relative_to),
|
||||
customization_menu.displayed_buildup_bar_relative_types);
|
||||
utils.table.find_index(this.displayed_buildup_bar_relative_types, cached_config.settings.buildup_bar_relative_to),
|
||||
this.displayed_buildup_bar_relative_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.settings.buildup_bar_relative_to = customization_menu.displayed_buildup_bar_relative_types[index];
|
||||
cached_config.settings.buildup_bar_relative_to = this.displayed_buildup_bar_relative_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.settings.time_limit = imgui.drag_float(
|
||||
@@ -134,13 +189,13 @@ function this.draw(cached_config)
|
||||
if imgui.tree_node(language.current_language.customization_menu.sorting) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.type,
|
||||
utils.table.find_index(customization_menu.ailment_buildups_sorting_types, cached_config.sorting.type),
|
||||
customization_menu.displayed_ailment_buildups_sorting_types);
|
||||
utils.table.find_index(this.ailment_buildups_sorting_types, cached_config.sorting.type),
|
||||
this.displayed_ailment_buildups_sorting_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.sorting.type = customization_menu.ailment_buildups_sorting_types[index];
|
||||
cached_config.sorting.type = this.ailment_buildups_sorting_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.sorting.reversed_order = imgui.checkbox(
|
||||
|
||||
@@ -47,6 +47,27 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.ailments_sorting_types = {};
|
||||
this.displayed_ailments_sorting_types = {};
|
||||
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
this.ailments_sorting_types = {
|
||||
default.normal,
|
||||
default.buildup,
|
||||
default.buildup_percentage
|
||||
};
|
||||
|
||||
this.displayed_ailments_sorting_types = {
|
||||
current.normal,
|
||||
current.buildup,
|
||||
current.buildup_percentage
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(cached_config)
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
@@ -143,13 +164,13 @@ function this.draw(cached_config)
|
||||
if imgui.tree_node(language.current_language.customization_menu.sorting) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.type,
|
||||
utils.table.find_index(customization_menu.ailments_sorting_types, cached_config.sorting.type),
|
||||
customization_menu.displayed_ailments_sorting_types);
|
||||
utils.table.find_index(this.ailments_sorting_types, cached_config.sorting.type),
|
||||
this.displayed_ailments_sorting_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
if changed then
|
||||
cached_config.sorting.type = customization_menu.ailments_sorting_types[index];
|
||||
cached_config.sorting.type = this.ailments_sorting_types[index];
|
||||
end
|
||||
|
||||
changed, cached_config.sorting.reversed_order = imgui.checkbox(
|
||||
|
||||
@@ -46,72 +46,124 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
local outline_styles = {};
|
||||
local displayed_outline_styles = {};
|
||||
|
||||
local directions = {};
|
||||
local displayed_directions = {};
|
||||
|
||||
function this.init()
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
outline_styles = {
|
||||
default.inside,
|
||||
default.center,
|
||||
default.outside
|
||||
};
|
||||
|
||||
displayed_outline_styles = {
|
||||
current.inside,
|
||||
current.center,
|
||||
current.outside
|
||||
};
|
||||
|
||||
directions = {
|
||||
default.left_to_right,
|
||||
default.right_to_left,
|
||||
default.top_to_bottom,
|
||||
default.bottom_to_top
|
||||
};
|
||||
|
||||
displayed_directions = {
|
||||
current.left_to_right,
|
||||
current.right_to_left,
|
||||
current.top_to_bottom,
|
||||
current.bottom_to_top
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw(bar_name, bar)
|
||||
if bar == nil then
|
||||
return false;
|
||||
end
|
||||
|
||||
local cached_language = language.current_language.customization_menu;
|
||||
|
||||
local bar_changed = false;
|
||||
local changed = false;
|
||||
local index = 1;
|
||||
|
||||
if imgui.tree_node(bar_name) then
|
||||
changed, bar.visibility = imgui.checkbox(language.current_language.customization_menu.visible
|
||||
changed, bar.visibility = imgui.checkbox(cached_language.visible
|
||||
, bar.visibility);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, bar.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
|
||||
if imgui.tree_node(cached_language.settings) then
|
||||
local fill_direction_index = utils.table.find_index(directions, bar.settings.fill_direction);
|
||||
changed, fill_direction_index = imgui.combo(cached_language.fill_direction, fill_direction_index, displayed_directions);
|
||||
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if changed then
|
||||
bar.settings.fill_direction = directions[fill_direction_index];
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, bar.offset.x = imgui.drag_float(cached_language.x,
|
||||
bar.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.offset.y = imgui.drag_float(language.current_language.customization_menu.y,
|
||||
changed, bar.offset.y = imgui.drag_float(cached_language.y,
|
||||
bar.offset.y, 0.1, -screen.height, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.size) then
|
||||
changed, bar.size.width = imgui.drag_float(language.current_language.customization_menu.width,
|
||||
if imgui.tree_node(cached_language.size) then
|
||||
changed, bar.size.width = imgui.drag_float(cached_language.width,
|
||||
bar.size.width, 0.1, 0, screen.width, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.size.height = imgui.drag_float(language.current_language.customization_menu.height,
|
||||
changed, bar.size.height = imgui.drag_float(cached_language.height,
|
||||
bar.size.height, 0.1, 0, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.outline) then
|
||||
changed, bar.outline.visibility = imgui.checkbox(language.current_language.customization_menu.visible
|
||||
if imgui.tree_node(cached_language.outline) then
|
||||
changed, bar.outline.visibility = imgui.checkbox(cached_language.visible
|
||||
, bar.outline.visibility);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.outline.thickness = imgui.drag_float(language.current_language.customization_menu.thickness,
|
||||
changed, bar.outline.thickness = imgui.drag_float(cached_language.thickness,
|
||||
bar.outline.thickness, 0.1, 0, screen.width, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
changed, bar.outline.offset = imgui.drag_float(language.current_language.customization_menu.offset,
|
||||
changed, bar.outline.offset = imgui.drag_float(cached_language.offset,
|
||||
bar.outline.offset, 0.1, -screen.height, screen.height, "%.1f");
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
|
||||
changed, index = imgui.combo(language.current_language.customization_menu.style,
|
||||
utils.table.find_index(customization_menu.outline_styles,
|
||||
changed, index = imgui.combo(cached_language.style,
|
||||
utils.table.find_index(this.outline_styles,
|
||||
bar.outline.style),
|
||||
customization_menu.displayed_outline_styles);
|
||||
this.displayed_outline_styles);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
if changed then
|
||||
bar.outline.style = customization_menu.outline_styles[index];
|
||||
bar.outline.style = this.outline_styles[index];
|
||||
end
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.colors) then
|
||||
if imgui.tree_node(cached_language.colors) then
|
||||
local colors = nil;
|
||||
if bar.colors ~= nil then
|
||||
colors = bar.colors;
|
||||
@@ -119,7 +171,7 @@ function this.draw(bar_name, bar)
|
||||
colors = bar.normal_colors;
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.foreground) then
|
||||
if imgui.tree_node(cached_language.foreground) then
|
||||
changed, colors.foreground = imgui.color_picker_argb("", colors.foreground,
|
||||
customization_menu.color_picker_flags);
|
||||
bar_changed = bar_changed or changed;
|
||||
@@ -127,7 +179,7 @@ function this.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.background) then
|
||||
if imgui.tree_node(cached_language.background) then
|
||||
changed, colors.background = imgui.color_picker_argb("", colors.background,
|
||||
customization_menu.color_picker_flags);
|
||||
bar_changed = bar_changed or changed;
|
||||
@@ -135,7 +187,7 @@ function this.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.outline) then
|
||||
if imgui.tree_node(cached_language.outline) then
|
||||
changed, colors.outline = imgui.color_picker_argb("", colors.outline,
|
||||
customization_menu.color_picker_flags);
|
||||
bar_changed = bar_changed or changed;
|
||||
@@ -144,8 +196,8 @@ function this.draw(bar_name, bar)
|
||||
end
|
||||
|
||||
if bar.capture_colors ~= nil then
|
||||
if imgui.tree_node(language.current_language.customization_menu.monster_can_be_captured) then
|
||||
if imgui.tree_node(language.current_language.customization_menu.foreground) then
|
||||
if imgui.tree_node(cached_language.monster_can_be_captured) then
|
||||
if imgui.tree_node(cached_language.foreground) then
|
||||
changed, bar.capture_colors.foreground = imgui.color_picker_argb("",
|
||||
bar.capture_colors.foreground
|
||||
,
|
||||
@@ -155,7 +207,7 @@ function this.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.background) then
|
||||
if imgui.tree_node(cached_language.background) then
|
||||
changed, bar.capture_colors.background = imgui.color_picker_argb("",
|
||||
bar.capture_colors.background
|
||||
,
|
||||
@@ -165,7 +217,7 @@ function this.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.outline) then
|
||||
if imgui.tree_node(cached_language.outline) then
|
||||
changed, bar.capture_colors.outline = imgui.color_picker_argb("",
|
||||
bar.capture_colors.outline
|
||||
,
|
||||
@@ -182,7 +234,7 @@ function this.draw(bar_name, bar)
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
changed = line_customization.draw(language.current_language.customization_menu.capture_line, bar.capture_line);
|
||||
changed = line_customization.draw(cached_language.capture_line, bar.capture_line);
|
||||
bar_changed = bar_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
|
||||
@@ -47,171 +47,279 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
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)
|
||||
local cached_language = language.current_language.customization_menu;
|
||||
|
||||
local changed = false;
|
||||
local config_changed = false;
|
||||
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(
|
||||
language.current_language.customization_menu.visible, cached_config.visibility);
|
||||
cached_language.visible, cached_config.visibility);
|
||||
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
changed, index = imgui.combo(language.current_language.customization_menu.filter_mode,
|
||||
utils.table.find_index(customization_menu.large_monster_UI_parts_filter_types, cached_config.settings.filter_mode),
|
||||
customization_menu.displayed_large_monster_UI_parts_filter_types);
|
||||
changed, cached_config.settings.render_inactive_anomaly_cores = imgui.checkbox(
|
||||
cached_language.render_inactive_anomaly_cores, cached_config.settings.render_inactive_anomaly_cores);
|
||||
|
||||
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;
|
||||
|
||||
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
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.sorting) then
|
||||
if imgui.tree_node(cached_language.sorting) then
|
||||
changed, index = imgui.combo(
|
||||
language.current_language.customization_menu.type,
|
||||
utils.table.find_index(customization_menu.large_monster_UI_parts_sorting_types, cached_config.sorting.type),
|
||||
customization_menu.displayed_large_monster_UI_parts_sorting_types);
|
||||
cached_language.type,
|
||||
utils.table.find_index(this.large_monster_UI_parts_sorting_types, cached_config.sorting.type),
|
||||
this.displayed_large_monster_UI_parts_sorting_types);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
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
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.filter) then
|
||||
changed, cached_config.filter.health_break_severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.health_break_severe_filter, cached_config.filter.health_break_severe);
|
||||
if imgui.tree_node(cached_language.filter) then
|
||||
changed, cached_config.filter.health_break_sever_anomaly = imgui.checkbox(
|
||||
cached_language.health_break_sever_anomaly_filter, cached_config.filter.health_break_sever_anomaly);
|
||||
|
||||
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(
|
||||
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;
|
||||
|
||||
changed, cached_config.filter.health_severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.health_severe_filter, cached_config.filter.health_severe);
|
||||
changed, cached_config.filter.health_sever = imgui.checkbox(
|
||||
cached_language.health_sever_filter, cached_config.filter.health_sever);
|
||||
|
||||
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(
|
||||
language.current_language.customization_menu.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);
|
||||
cached_language.health_filter, cached_config.filter.health);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
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;
|
||||
|
||||
changed, cached_config.filter.severe = imgui.checkbox(
|
||||
language.current_language.customization_menu.severe_filter, cached_config.filter.severe);
|
||||
changed, cached_config.filter.sever = imgui.checkbox(
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
"", cached_config.part_name_label.color, customization_menu.color_picker_flags);
|
||||
|
||||
@@ -220,21 +328,21 @@ function this.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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(
|
||||
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");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
|
||||
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");
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
@@ -242,7 +350,7 @@ function this.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
"",cached_config.part_name_label.shadow.color, customization_menu.color_picker_flags);
|
||||
|
||||
@@ -257,106 +365,141 @@ function this.draw(cached_config)
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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(
|
||||
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;
|
||||
|
||||
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(
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
imgui.tree_pop();
|
||||
|
||||
@@ -45,60 +45,57 @@ local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.draw(label_name, label)
|
||||
local cached_language = language.current_language.customization_menu;
|
||||
|
||||
local label_changed = false;
|
||||
local changed = false;
|
||||
|
||||
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;
|
||||
|
||||
if label.include ~= nil then
|
||||
if imgui.tree_node(language.current_language.customization_menu.include) then
|
||||
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");
|
||||
if imgui.tree_node(cached_language.settings) then
|
||||
changed, label.settings.right_alignment_shift = imgui.slider_int(cached_language.right_alignment_shift, label.settings.right_alignment_shift, 0, 64);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
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);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
end
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.shadow) then
|
||||
changed, label.shadow.visibility = imgui.checkbox(language.current_language.customization_menu.visible, label.shadow.visibility);
|
||||
if imgui.tree_node(cached_language.shadow) then
|
||||
changed, label.shadow.visibility = imgui.checkbox(cached_language
|
||||
.visible, label.shadow.visibility);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.offset) then
|
||||
changed, label.shadow.offset.x = imgui.drag_float(language.current_language.customization_menu.x,
|
||||
if imgui.tree_node(cached_language.offset) then
|
||||
changed, label.shadow.offset.x = imgui.drag_float(cached_language.x,
|
||||
label.shadow.offset.x, 0.1, -screen.width, screen.width, "%.1f");
|
||||
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_changed = label_changed or changed;
|
||||
|
||||
imgui.tree_pop();
|
||||
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,
|
||||
customization_menu.color_picker_flags);
|
||||
label_changed = label_changed or changed;
|
||||
|
||||
@@ -36,9 +36,11 @@ local os = os;
|
||||
local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
function this.new(part_visibility, part_name_label, flinch_visibility, flinch_bar, flinch_text_label,
|
||||
flinch_value_label, flinch_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)
|
||||
function this.new(part_visibility, part_name_label,
|
||||
flinch_visibility, flinch_bar, flinch_text_label, flinch_value_label, flinch_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;
|
||||
|
||||
@@ -48,6 +50,7 @@ function this.new(part_visibility, part_name_label, flinch_visibility, flinch_ba
|
||||
entity.flinch_visibility = flinch_visibility;
|
||||
entity.break_visibility = break_visibility;
|
||||
entity.loss_visibility = loss_visibility;
|
||||
entity.anomaly_visibility = anomaly_visibility;
|
||||
|
||||
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.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;
|
||||
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_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;
|
||||
end
|
||||
|
||||
@@ -186,7 +211,7 @@ function this.draw(part, part_UI, cached_config, position_on_screen, opacity_sca
|
||||
|
||||
-- loss health value 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_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
|
||||
|
||||
-- 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 = {
|
||||
x = position_on_screen.x + cached_config.part_health.offset.x,
|
||||
y = position_on_screen.y + cached_config.part_health.offset.y,
|
||||
visibility = part_UI.flinch_visibility
|
||||
};
|
||||
|
||||
local break_position_on_screen = {
|
||||
x = position_on_screen.x + cached_config.part_break.offset.x,
|
||||
y = position_on_screen.y + cached_config.part_break.offset.y,
|
||||
visibility = part_UI.flinch_visibility
|
||||
};
|
||||
|
||||
local loss_position_on_screen = {
|
||||
x = position_on_screen.x + cached_config.part_loss.offset.x,
|
||||
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
|
||||
@@ -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);
|
||||
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);
|
||||
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);
|
||||
|
||||
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);
|
||||
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_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);
|
||||
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
|
||||
|
||||
function this.init_module()
|
||||
|
||||
@@ -62,7 +62,7 @@ local ValueType = ValueType;
|
||||
local package = package;
|
||||
|
||||
this.font = nil;
|
||||
this.font_range = {0x1, 0xFFFF, 0};
|
||||
this.full_font_range = {0x1, 0xFFFF, 0};
|
||||
this.is_opened = false;
|
||||
this.status = "OK";
|
||||
|
||||
@@ -73,51 +73,38 @@ this.window_flags = 0x10120;
|
||||
this.color_picker_flags = 327680;
|
||||
this.decimal_input_flags = 33;
|
||||
|
||||
this.displayed_orientation_types = {};
|
||||
this.displayed_anchor_types = {};
|
||||
this.displayed_outline_styles = {};
|
||||
|
||||
this.displayed_monster_UI_sorting_types = {};
|
||||
this.displayed_large_monster_UI_parts_sorting_types = {};
|
||||
this.displayed_large_monster_UI_parts_filter_types = {};
|
||||
this.displayed_ailments_sorting_types = {};
|
||||
this.displayed_ailment_buildups_sorting_types = {};
|
||||
this.displayed_highlighted_buildup_bar_types = {};
|
||||
this.displayed_buildup_bar_relative_types = {};
|
||||
this.displayed_buff_UI_sorting_types = {};
|
||||
|
||||
this.displayed_damage_meter_UI_highlighted_entity_types = {};
|
||||
this.displayed_damage_meter_UI_damage_bar_relative_types = {};
|
||||
this.displayed_damage_meter_UI_my_damage_bar_location_types = {};
|
||||
this.displayed_damage_meter_UI_total_damage_location_types = {};
|
||||
this.displayed_damage_meter_UI_sorting_types = {};
|
||||
this.displayed_damage_meter_UI_dps_modes = {};
|
||||
|
||||
this.displayed_auto_highlight_modes = {};
|
||||
|
||||
this.orientation_types = {};
|
||||
this.displayed_orientation_types = {};
|
||||
|
||||
this.anchor_types = {};
|
||||
this.outline_styles = {};
|
||||
this.displayed_anchor_types = {};
|
||||
|
||||
this.monster_UI_sorting_types = {};
|
||||
this.large_monster_UI_parts_sorting_types = {};
|
||||
this.large_monster_UI_parts_filter_types = {};
|
||||
this.ailments_sorting_types = {};
|
||||
this.ailment_buildups_sorting_types = {};
|
||||
this.highlighted_buildup_bar_types = {};
|
||||
this.buildup_bar_relative_types = {};
|
||||
this.displayed_monster_UI_sorting_types = {};
|
||||
|
||||
this.buff_UI_sorting_types = {};
|
||||
this.displayed_buff_UI_sorting_types = {};
|
||||
|
||||
this.damage_meter_UI_highlighted_entity_types = {};
|
||||
this.displayed_damage_meter_UI_highlighted_entity_types = {};
|
||||
|
||||
this.damage_meter_UI_damage_bar_relative_types = {};
|
||||
this.displayed_damage_meter_UI_damage_bar_relative_types = {};
|
||||
|
||||
this.damage_meter_UI_my_damage_bar_location_types = {};
|
||||
this.displayed_damage_meter_UI_my_damage_bar_location_types = {};
|
||||
|
||||
this.damage_meter_UI_total_damage_location_types = {};
|
||||
this.displayed_damage_meter_UI_total_damage_location_types = {};
|
||||
|
||||
this.damage_meter_UI_sorting_types = {};
|
||||
this.displayed_damage_meter_UI_sorting_types = {};
|
||||
|
||||
this.damage_meter_UI_dps_modes = {};
|
||||
this.displayed_damage_meter_UI_dps_modes = {};
|
||||
|
||||
this.auto_highlight_modes = {};
|
||||
|
||||
|
||||
this.displayed_auto_highlight_modes = {};
|
||||
|
||||
this.fonts = {"Arial", "Arial Black", "Bahnschrift", "Calibri", "Cambria", "Cambria Math", "Candara",
|
||||
"Comic Sans MS", "Consolas", "Constantia", "Corbel", "Courier New", "Ebrima",
|
||||
@@ -146,8 +133,22 @@ this.menu_font_changed = false;
|
||||
this.config_name_input = "";
|
||||
|
||||
function this.reload_font(pop_push)
|
||||
this.font = imgui.load_font(language.current_language.font_name,
|
||||
config.current_config.global_settings.menu_font.size, this.font_range);
|
||||
local cached_language = language.current_language;
|
||||
|
||||
local font_range = cached_language.unicode_glyph_ranges;
|
||||
|
||||
if cached_language.font_name == "" then
|
||||
font_range = nil;
|
||||
|
||||
elseif cached_language.unicode_glyph_ranges == nil
|
||||
or utils.table.is_empty(cached_language.unicode_glyph_ranges)
|
||||
or #cached_language.unicode_glyph_ranges == 1
|
||||
or not utils.number.is_odd(#cached_language.unicode_glyph_ranges) then
|
||||
|
||||
font_range = this.full_font_range;
|
||||
end
|
||||
|
||||
this.font = imgui.load_font(cached_language.font_name, config.current_config.global_settings.menu_font.size, font_range);
|
||||
|
||||
if pop_push then
|
||||
imgui.pop_font();
|
||||
@@ -156,182 +157,189 @@ function this.reload_font(pop_push)
|
||||
end
|
||||
|
||||
function this.init()
|
||||
local current = language.current_language.customization_menu;
|
||||
local default = language.default_language.customization_menu;
|
||||
local current = language.current_language.customization_menu;
|
||||
|
||||
this.displayed_orientation_types = { current.horizontal,
|
||||
current.vertical};
|
||||
bar_customization.init();
|
||||
ailments_customization.init();
|
||||
ailment_buildups_customization.init();
|
||||
body_parts_customization.init();
|
||||
|
||||
this.orientation_types = { default.horizontal,
|
||||
default.vertical};
|
||||
this.orientation_types =
|
||||
{
|
||||
default.horizontal,
|
||||
default.vertical
|
||||
};
|
||||
|
||||
this.displayed_anchor_types = { current.top_left,
|
||||
current.top_right,
|
||||
current.bottom_left,
|
||||
current.bottom_right};
|
||||
this.displayed_orientation_types =
|
||||
{
|
||||
current.horizontal,
|
||||
current.vertical
|
||||
};
|
||||
|
||||
|
||||
this.anchor_types = { default.top_left,
|
||||
default.top_right,
|
||||
default.bottom_left,
|
||||
default.bottom_right};
|
||||
this.anchor_types =
|
||||
{
|
||||
default.top_left,
|
||||
default.top_right,
|
||||
default.bottom_left,
|
||||
default.bottom_right
|
||||
};
|
||||
|
||||
this.displayed_outline_styles = { current.inside,
|
||||
current.center,
|
||||
current.outside};
|
||||
this.displayed_anchor_types =
|
||||
{
|
||||
current.top_left,
|
||||
current.top_right,
|
||||
current.bottom_left,
|
||||
current.bottom_right
|
||||
};
|
||||
|
||||
this.outline_styles = { default.inside,
|
||||
default.center,
|
||||
default.outside};
|
||||
this.monster_UI_sorting_types =
|
||||
{
|
||||
default.normal,
|
||||
default.health,
|
||||
default.health_percentage,
|
||||
default.distance
|
||||
};
|
||||
|
||||
this.displayed_monster_UI_sorting_types = { current.normal,
|
||||
current.health,
|
||||
current.health_percentage,
|
||||
current.distance};
|
||||
this.displayed_monster_UI_sorting_types =
|
||||
{
|
||||
current.normal,
|
||||
current.health,
|
||||
current.health_percentage,
|
||||
current.distance
|
||||
};
|
||||
|
||||
this.monster_UI_sorting_types = { default.normal,
|
||||
default.health,
|
||||
default.health_percentage,
|
||||
default.distance};
|
||||
this.buff_UI_sorting_types =
|
||||
{
|
||||
default.name,
|
||||
default.timer,
|
||||
default.duration
|
||||
};
|
||||
|
||||
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.displayed_buff_UI_sorting_types =
|
||||
{
|
||||
current.name,
|
||||
current.timer,
|
||||
current.duration
|
||||
};
|
||||
|
||||
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.damage_meter_UI_highlighted_entity_types =
|
||||
{
|
||||
default.top_damage,
|
||||
default.top_dps,
|
||||
default.none
|
||||
};
|
||||
|
||||
this.displayed_large_monster_UI_parts_filter_types = { current.current_state,
|
||||
current.default_state};
|
||||
this.displayed_damage_meter_UI_highlighted_entity_types =
|
||||
{
|
||||
current.top_damage,
|
||||
current.top_dps,
|
||||
current.none
|
||||
};
|
||||
|
||||
this.large_monster_UI_parts_filter_types = { default.current_state,
|
||||
default.default_state};
|
||||
this.damage_meter_UI_damage_bar_relative_types =
|
||||
{
|
||||
default.total_damage,
|
||||
default.top_damage
|
||||
};
|
||||
|
||||
this.displayed_ailments_sorting_types = { current.normal,
|
||||
current.buildup,
|
||||
current.buildup_percentage};
|
||||
this.displayed_damage_meter_UI_damage_bar_relative_types =
|
||||
{
|
||||
current.total_damage,
|
||||
current.top_damage
|
||||
};
|
||||
|
||||
this.ailments_sorting_types = { default.normal,
|
||||
default.buildup,
|
||||
default.buildup_percentage};
|
||||
|
||||
this.displayed_buff_UI_sorting_types = { current.name,
|
||||
current.timer,
|
||||
current.duration};
|
||||
|
||||
this.buff_UI_sorting_types = { default.name,
|
||||
default.timer,
|
||||
default.duration};
|
||||
|
||||
this.displayed_ailment_buildups_sorting_types = { current.normal,
|
||||
current.buildup,
|
||||
current.buildup_percentage};
|
||||
|
||||
this.ailment_buildups_sorting_types = { default.normal,
|
||||
default.buildup,
|
||||
default.buildup_percentage};
|
||||
|
||||
this.displayed_highlighted_buildup_bar_types = { current.me,
|
||||
current.top_buildup,
|
||||
current.none};
|
||||
|
||||
this.highlighted_buildup_bar_types = { default.me,
|
||||
default.top_buildup,
|
||||
default.none};
|
||||
|
||||
this.displayed_buildup_bar_relative_types = { current.total_buildup,
|
||||
current.top_buildup};
|
||||
|
||||
this.buildup_bar_relative_types = { default.total_buildup,
|
||||
default.top_buildup};
|
||||
|
||||
this.displayed_damage_meter_UI_highlighted_entity_types = { current.top_damage,
|
||||
current.top_dps,
|
||||
current.none};
|
||||
|
||||
this.damage_meter_UI_highlighted_entity_types = { default.top_damage,
|
||||
default.top_dps,
|
||||
default.none};
|
||||
|
||||
this.displayed_damage_meter_UI_damage_bar_relative_types = { current.total_damage,
|
||||
current.top_damage};
|
||||
|
||||
this.damage_meter_UI_damage_bar_relative_types = { default.total_damage,
|
||||
default.top_damage};
|
||||
this.damage_meter_UI_my_damage_bar_location_types =
|
||||
{
|
||||
default.normal,
|
||||
default.first,
|
||||
default.last
|
||||
};
|
||||
|
||||
this.displayed_damage_meter_UI_my_damage_bar_location_types = { current.normal,
|
||||
current.first,
|
||||
current.last};
|
||||
this.displayed_damage_meter_UI_my_damage_bar_location_types =
|
||||
{
|
||||
current.normal,
|
||||
current.first,
|
||||
current.last
|
||||
};
|
||||
|
||||
this.damage_meter_UI_my_damage_bar_location_types = { default.normal,
|
||||
default.first,
|
||||
default.last};
|
||||
this.damage_meter_UI_total_damage_location_types =
|
||||
{
|
||||
default.first,
|
||||
default.last
|
||||
};
|
||||
|
||||
this.displayed_damage_meter_UI_total_damage_location_types = { current.first,
|
||||
current.last};
|
||||
this.displayed_damage_meter_UI_total_damage_location_types =
|
||||
{
|
||||
current.first,
|
||||
current.last
|
||||
};
|
||||
|
||||
this.damage_meter_UI_total_damage_location_types = { default.first,
|
||||
default.last};
|
||||
this.damage_meter_UI_sorting_types =
|
||||
{
|
||||
default.normal,
|
||||
default.damage,
|
||||
default.dps
|
||||
};
|
||||
|
||||
this.displayed_damage_meter_UI_sorting_types = { current.normal,
|
||||
current.damage,
|
||||
current.dps};
|
||||
this.displayed_damage_meter_UI_sorting_types =
|
||||
{
|
||||
current.normal,
|
||||
current.damage,
|
||||
current.dps
|
||||
};
|
||||
|
||||
this.damage_meter_UI_sorting_types = { default.normal,
|
||||
default.damage,
|
||||
default.dps};
|
||||
this.damage_meter_UI_dps_modes =
|
||||
{
|
||||
default.first_hit,
|
||||
default.quest_time,
|
||||
default.join_time
|
||||
};
|
||||
|
||||
this.displayed_damage_meter_UI_dps_modes = { current.first_hit,
|
||||
current.quest_time,
|
||||
current.join_time};
|
||||
this.displayed_damage_meter_UI_dps_modes =
|
||||
{
|
||||
current.first_hit,
|
||||
current.quest_time,
|
||||
current.join_time
|
||||
};
|
||||
|
||||
this.damage_meter_UI_dps_modes = { default.first_hit,
|
||||
default.quest_time,
|
||||
default.join_time};
|
||||
this.auto_highlight_modes =
|
||||
{
|
||||
default.closest,
|
||||
default.farthest,
|
||||
default.lowest_health,
|
||||
default.highest_health,
|
||||
default.lowest_health_percentage,
|
||||
default.highest_health_percentage
|
||||
};
|
||||
|
||||
this.displayed_auto_highlight_modes = { current.closest,
|
||||
current.farthest,
|
||||
current.lowest_health,
|
||||
current.highest_health,
|
||||
current.lowest_health_percentage,
|
||||
current.highest_health_percentage};
|
||||
|
||||
this.auto_highlight_modes = { default.closest,
|
||||
default.farthest,
|
||||
default.lowest_health,
|
||||
default.highest_health,
|
||||
default.lowest_health_percentage,
|
||||
default.highest_health_percentage};
|
||||
this.displayed_auto_highlight_modes =
|
||||
{
|
||||
current.closest,
|
||||
current.farthest,
|
||||
current.lowest_health,
|
||||
current.highest_health,
|
||||
current.lowest_health_percentage,
|
||||
current.highest_health_percentage
|
||||
};
|
||||
end
|
||||
|
||||
function this.draw()
|
||||
imgui.set_next_window_pos(this.window_position, 1 << 3, this.window_pivot);
|
||||
imgui.set_next_window_size(this.window_size, 1 << 3);
|
||||
|
||||
imgui.push_font(this.font);
|
||||
|
||||
this.is_opened = imgui.begin_window(
|
||||
language.current_language.customization_menu.mod_name .. " v" .. config.current_config.version, this.is_opened,
|
||||
this.window_flags);
|
||||
|
||||
if not this.is_opened then
|
||||
imgui.pop_font();
|
||||
imgui.end_window();
|
||||
return;
|
||||
end
|
||||
|
||||
imgui.push_font(this.font);
|
||||
|
||||
local config_changed = false;
|
||||
local language_changed = false;
|
||||
local modifiers_changed = false;
|
||||
@@ -434,7 +442,7 @@ function this.draw()
|
||||
|
||||
if this.menu_font_changed and (apply_font_requested or config_changed) then
|
||||
this.menu_font_changed = false;
|
||||
this.reload_font(false);
|
||||
this.reload_font();
|
||||
end
|
||||
|
||||
if modules_changed or global_settings_changed or small_monster_UI_changed or large_monster_dynamic_UI_changed or
|
||||
@@ -823,6 +831,7 @@ function this.draw_global_settings(apply_font_requested, language_changed)
|
||||
if changed then
|
||||
cached_config.language = language.language_names[index];
|
||||
language.update(index);
|
||||
part_names.init();
|
||||
this.init();
|
||||
|
||||
language_changed = true;
|
||||
@@ -1731,62 +1740,68 @@ function this.draw_damage_meter_UI()
|
||||
|
||||
if imgui.tree_node(language.current_language.customization_menu.tracked_damage_types) then
|
||||
|
||||
changed, cached_config.tracked_damage_types.player_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.player_damage, cached_config.tracked_damage_types.player_damage);
|
||||
changed, cached_config.tracked_damage_types.players = imgui.checkbox(
|
||||
language.current_language.customization_menu.players, cached_config.tracked_damage_types.players);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.bomb_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.bomb_damage, cached_config.tracked_damage_types.bomb_damage);
|
||||
changed, cached_config.tracked_damage_types.bombs = imgui.checkbox(
|
||||
language.current_language.customization_menu.bombs, cached_config.tracked_damage_types.bombs);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.kunai_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.kunai_damage, cached_config.tracked_damage_types.kunai_damage);
|
||||
changed, cached_config.tracked_damage_types.kunai = imgui.checkbox(
|
||||
language.current_language.customization_menu.kunai, cached_config.tracked_damage_types.kunai);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.installation_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.installation_damage, cached_config.tracked_damage_types.installation_damage);
|
||||
changed, cached_config.tracked_damage_types.installations = imgui.checkbox(
|
||||
language.current_language.customization_menu.installations, cached_config.tracked_damage_types.installations);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.otomo_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.otomo_damage, cached_config.tracked_damage_types.otomo_damage);
|
||||
changed, cached_config.tracked_damage_types.otomos = imgui.checkbox(
|
||||
language.current_language.customization_menu.otomos, cached_config.tracked_damage_types.otomos);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.wyvern_riding_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.wyvern_riding_damage, cached_config.tracked_damage_types.wyvern_riding_damage);
|
||||
changed, cached_config.tracked_damage_types.wyvern_riding = imgui.checkbox(
|
||||
language.current_language.customization_menu.wyvern_riding, cached_config.tracked_damage_types.wyvern_riding);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.poison_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.poison_damage, cached_config.tracked_damage_types.poison_damage);
|
||||
changed, cached_config.tracked_damage_types.poison = imgui.checkbox(
|
||||
language.current_language.customization_menu.poison, cached_config.tracked_damage_types.poison);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.blast_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.blast_damage, cached_config.tracked_damage_types.blast_damage);
|
||||
changed, cached_config.tracked_damage_types.blast = imgui.checkbox(
|
||||
language.current_language.customization_menu.blast, cached_config.tracked_damage_types.blast);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.endemic_life_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.endemic_life_damage, cached_config.tracked_damage_types.endemic_life_damage);
|
||||
changed, cached_config.tracked_damage_types.endemic_life = imgui.checkbox(
|
||||
language.current_language.customization_menu.endemic_life, cached_config.tracked_damage_types.endemic_life);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.other_damage = imgui.checkbox(
|
||||
language.current_language.customization_menu.other_damage, cached_config.tracked_damage_types.other_damage);
|
||||
changed, cached_config.tracked_damage_types.anomaly_cores = imgui.checkbox(
|
||||
language.current_language.customization_menu.anomaly_cores, cached_config.tracked_damage_types.anomaly_cores);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
|
||||
changed, cached_config.tracked_damage_types.other = imgui.checkbox(
|
||||
language.current_language.customization_menu.other, cached_config.tracked_damage_types.other);
|
||||
|
||||
config_changed = config_changed or changed;
|
||||
damage_display_changed = damage_display_changed or changed;
|
||||
@@ -2278,7 +2293,7 @@ function this.init_module()
|
||||
module_visibility_customization = require("MHR_Overlay.UI.Customizations.module_visibility_customization");
|
||||
|
||||
this.init();
|
||||
this.reload_font(false);
|
||||
this.reload_font();
|
||||
end
|
||||
|
||||
return this;
|
||||
@@ -126,12 +126,19 @@ function this.draw_label(label, position, opacity_scale, ...)
|
||||
return;
|
||||
end
|
||||
|
||||
local text = string.format(label.text_format, table.unpack({...}));
|
||||
local text = string.format(label.text_formatting, table.unpack({...}));
|
||||
|
||||
if text == "" then
|
||||
return;
|
||||
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_y = position.y + label.offset.y;
|
||||
|
||||
@@ -167,7 +174,6 @@ function this.draw_label(label, position, opacity_scale, ...)
|
||||
end
|
||||
|
||||
function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
|
||||
if bar == nil or not bar.visibility then
|
||||
return;
|
||||
end
|
||||
@@ -182,6 +188,7 @@ function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
|
||||
local outline_visibility = bar.outline.visibility;
|
||||
local style = bar.outline.style; -- Inside/Center/Outside
|
||||
local fill_direction = bar.settings.fill_direction; -- Left to Right/Right to Left/Top to Bottom/Bottom to Top
|
||||
|
||||
local outline_thickness = bar.outline.thickness;
|
||||
if not outline_visibility then
|
||||
@@ -206,10 +213,21 @@ function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
local position_x = 0;
|
||||
local position_y = 0;
|
||||
|
||||
local foreground_width = 0;
|
||||
local background_width = 0;
|
||||
local width = 0;
|
||||
local height = 0;
|
||||
|
||||
local foreground_width = 0;
|
||||
local foreground_height = 0;
|
||||
|
||||
local background_width = 0;
|
||||
local background_height = 0;
|
||||
|
||||
local foreground_shift_x = 0;
|
||||
local foreground_shift_y = 0;
|
||||
|
||||
local background_shift_x = 0;
|
||||
local background_shift_y = 0;
|
||||
|
||||
if style == "Inside" then
|
||||
outline_position_x = position.x + bar.offset.x + half_outline_thickness;
|
||||
outline_position_y = position.y + bar.offset.y + half_outline_thickness;
|
||||
@@ -220,10 +238,7 @@ function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
position_x = outline_position_x + half_outline_thickness + outline_offset;
|
||||
position_y = outline_position_y + half_outline_thickness + outline_offset;
|
||||
|
||||
local width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
foreground_width = width * percentage;
|
||||
background_width = width - foreground_width;
|
||||
|
||||
width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
height = outline_height - outline_thickness - outline_offset - outline_offset;
|
||||
|
||||
elseif style == "Center" then
|
||||
@@ -236,22 +251,16 @@ function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
position_x = outline_position_x + half_outline_thickness + outline_offset;
|
||||
position_y = outline_position_y + half_outline_thickness + outline_offset;
|
||||
|
||||
local width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
foreground_width = width * percentage;
|
||||
background_width = width - foreground_width;
|
||||
|
||||
width = outline_width - outline_thickness - outline_offset - outline_offset;
|
||||
height = outline_height - outline_thickness - outline_offset - outline_offset;
|
||||
|
||||
else
|
||||
else -- Outside
|
||||
position_x = position.x + bar.offset.x;
|
||||
position_y = position.y + bar.offset.y;
|
||||
|
||||
local width = bar.size.width;
|
||||
width = bar.size.width;
|
||||
height = bar.size.height;
|
||||
|
||||
foreground_width = width * percentage;
|
||||
background_width = width - foreground_width;
|
||||
|
||||
outline_position_x = position_x - half_outline_thickness - outline_offset;
|
||||
outline_position_y = position_y - half_outline_thickness - outline_offset;
|
||||
|
||||
@@ -259,6 +268,43 @@ function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
outline_height = height + outline_thickness + outline_offset + outline_offset;
|
||||
end
|
||||
|
||||
if fill_direction == "Right to Left" then
|
||||
foreground_width = width * percentage;
|
||||
foreground_height = height;
|
||||
|
||||
background_width = width - foreground_width;
|
||||
background_height = height;
|
||||
|
||||
foreground_shift_x = background_width;
|
||||
|
||||
elseif fill_direction == "Top to Bottom" then
|
||||
foreground_width = width;
|
||||
foreground_height = height * percentage;
|
||||
|
||||
background_width = width;
|
||||
background_height = height - foreground_height;
|
||||
|
||||
background_shift_y = foreground_height;
|
||||
|
||||
elseif fill_direction == "Bottom to Top" then
|
||||
foreground_width = width;
|
||||
foreground_height = height * percentage;
|
||||
|
||||
background_width = width;
|
||||
background_height = height - foreground_height;
|
||||
|
||||
foreground_shift_y = background_height;
|
||||
|
||||
else -- Left to Right
|
||||
foreground_width = width * percentage;
|
||||
foreground_height = height;
|
||||
|
||||
background_width = width - foreground_width;
|
||||
background_height = height;
|
||||
|
||||
background_shift_x = foreground_width;
|
||||
end
|
||||
|
||||
local foreground_color = bar.colors.foreground;
|
||||
local background_color = bar.colors.background;
|
||||
local outline_color = bar.colors.outline;
|
||||
@@ -271,35 +317,33 @@ function this.draw_bar(bar, position, opacity_scale, percentage)
|
||||
|
||||
local use_d2d = d2d ~= nil and config.current_config.global_settings.renderer.use_d2d_if_available;
|
||||
|
||||
-- outline
|
||||
if outline_thickness ~= 0 then
|
||||
-- background
|
||||
if background_width ~= 0 then
|
||||
if use_d2d then
|
||||
d2d.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_thickness,
|
||||
outline_color);
|
||||
d2d.fill_rect(position_x + background_shift_x, position_y + background_shift_y, background_width, background_height, background_color);
|
||||
else
|
||||
outline_color = this.argb_color_to_abgr_color(outline_color);
|
||||
draw.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_color);
|
||||
background_color = this.argb_color_to_abgr_color(background_color);
|
||||
draw.filled_rect(position_x + background_shift_x, position_y + background_shift_y, background_width, background_height, background_color)
|
||||
end
|
||||
end
|
||||
|
||||
-- foreground
|
||||
if foreground_width ~= 0 then
|
||||
if use_d2d then
|
||||
d2d.fill_rect(position_x, position_y, foreground_width, height, foreground_color);
|
||||
|
||||
d2d.fill_rect(position_x + foreground_shift_x, position_y + foreground_shift_y, foreground_width, foreground_height, foreground_color);
|
||||
else
|
||||
foreground_color = this.argb_color_to_abgr_color(foreground_color);
|
||||
draw.filled_rect(position_x, position_y, foreground_width, height, foreground_color)
|
||||
draw.filled_rect(position_x + foreground_shift_x, position_y + foreground_shift_y, foreground_width, foreground_height, foreground_color)
|
||||
end
|
||||
end
|
||||
|
||||
-- background
|
||||
if background_width ~= 0 then
|
||||
-- outline
|
||||
if outline_thickness ~= 0 then
|
||||
if use_d2d then
|
||||
d2d.fill_rect(position_x + foreground_width, position_y, background_width, height, background_color);
|
||||
d2d.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_thickness, outline_color);
|
||||
else
|
||||
background_color = this.argb_color_to_abgr_color(background_color);
|
||||
draw.filled_rect(position_x + foreground_width, position_y, background_width, height, background_color)
|
||||
outline_color = this.argb_color_to_abgr_color(outline_color);
|
||||
draw.outline_rect(outline_position_x, outline_position_y, outline_width, outline_height, outline_color);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"gold": "Gold",
|
||||
"mini": "Mini",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "Break",
|
||||
"part_sever": "Sever",
|
||||
"player": "Player",
|
||||
@@ -48,23 +49,30 @@
|
||||
"ailments": "Ailments",
|
||||
"all_UI": "All UI",
|
||||
"anchor": "Anchor",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"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",
|
||||
"background": "Background",
|
||||
"bar": "Bar",
|
||||
"blast_damage": "Blast Damage",
|
||||
"blast": "Blast",
|
||||
"body_parts": "Body Parts",
|
||||
"bold": "Bold",
|
||||
"bomb_damage": "Bomb Damage",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "Bottom-Left",
|
||||
"bottom_right": "Bottom-Right",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "Break Count",
|
||||
"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",
|
||||
"buildup": "Buildup",
|
||||
"buildup_bar": "Buildup Bar",
|
||||
@@ -104,11 +112,12 @@
|
||||
"dynamically_positioned": "Dynamically Positioned",
|
||||
"enable_for": "Enable for",
|
||||
"enabled": "Enabled",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "Endemic Life UI",
|
||||
"endemic_life_damage": "Endemic Life Damage",
|
||||
"family": "Family",
|
||||
"farthest": "Farthest",
|
||||
"fight_time": "Fight Time",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "Filter",
|
||||
"filter_mode": "Filter Mode",
|
||||
"first": "First",
|
||||
@@ -120,11 +129,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_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_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 when Buildup is 0",
|
||||
"hide_all_active_ailments": "Hide All Active Ailments",
|
||||
@@ -159,11 +172,11 @@
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "Include",
|
||||
"inside": "Inside",
|
||||
"installation_damage": "Installation Damage",
|
||||
"installations": "Installations",
|
||||
"italic": "Italic",
|
||||
"join_time": "Join Time",
|
||||
"killcam": "Killcam",
|
||||
"kunai_damage": "Kunai Damage",
|
||||
"kunai": "Kunai",
|
||||
"language": "Language",
|
||||
"large_monster_UI": "Large Monster UI",
|
||||
"large_monster_dynamic_UI": "Large Monster Dynamic UI",
|
||||
@@ -171,6 +184,7 @@
|
||||
"large_monster_static_UI": "Large Monster Static UI",
|
||||
"large_monsters": "Large Monsters",
|
||||
"last": "Last",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
@@ -191,10 +205,10 @@
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "Modules",
|
||||
"monster_can_be_captured": "Monster can be captured",
|
||||
"monster_damage": "Monster Damage",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_name": "Monster Name",
|
||||
"monster_name_label": "Monster Name Label",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "My Damage Bar Location",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
@@ -207,10 +221,10 @@
|
||||
"offset_is_relative_to_parts": "Offset is Relative to Parts",
|
||||
"opacity_falloff": "Opacity Falloff",
|
||||
"orientation": "Orientation",
|
||||
"other_damage": "Other Damage",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "Other Players",
|
||||
"otomo_damage": "Buddy Damage",
|
||||
"otomos": "Buddies",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "Part Health",
|
||||
@@ -218,12 +232,12 @@
|
||||
"part_name_label": "Part Name Label",
|
||||
"percentage_label": "Percentage Label",
|
||||
"performance": "Performance",
|
||||
"player_damage": "Player Damage",
|
||||
"player_name_label": "Player Name Label",
|
||||
"player_name_size_limit": "Player Name Size Limit",
|
||||
"player_spacing": "Player Spacing",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison_damage": "Poison Damage",
|
||||
"poison": "Poison",
|
||||
"position": "Position",
|
||||
"press_any_key": "Press any key...",
|
||||
"prioritize_large_monsters": "Large Monsters on High Priority",
|
||||
@@ -237,15 +251,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",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"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_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
@@ -276,6 +294,7 @@
|
||||
"top_dps": "Top DPS",
|
||||
"top_left": "Top-Left",
|
||||
"top_right": "Top-Right",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "Total Buildup",
|
||||
"total_buildup_label": "Total Buildup Label",
|
||||
@@ -298,12 +317,12 @@
|
||||
"visible": "Visible",
|
||||
"width": "Width",
|
||||
"world_offset": "World Offset",
|
||||
"wyvern_riding_damage": "Wyvern Riding Damage",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
},
|
||||
"font_name": "NotoSansKR-Bold.otf",
|
||||
"font_name": "",
|
||||
"parts": {
|
||||
"abdomen": "Abdomen",
|
||||
"amatsu_unknown": "?",
|
||||
@@ -372,5 +391,8 @@
|
||||
"wingclaw": "Wingclaw",
|
||||
"wingclaws": "Wingclaws",
|
||||
"wings": "Wings"
|
||||
}
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
0
|
||||
]
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
"gold": "金冠",
|
||||
"mini": "小型",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "部位破壊",
|
||||
"part_sever": "尻尾切断",
|
||||
"player": "Player",
|
||||
@@ -48,23 +49,30 @@
|
||||
"ailments": "状態異常表示",
|
||||
"all_UI": "全てのUI",
|
||||
"anchor": "固定",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "適用",
|
||||
"assign_new_key": "新規に割り当てるキーを入力",
|
||||
"auto_highlight": "Auto-highlight",
|
||||
"background": "背景色",
|
||||
"bar": "バー",
|
||||
"blast_damage": "爆破ダメージ",
|
||||
"blast": "爆破",
|
||||
"body_parts": "部位",
|
||||
"bold": "ボールド",
|
||||
"bomb_damage": "爆弾ダメージ",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "破壊時間",
|
||||
"break_filter": "Break",
|
||||
"break_health": "部位破壊までのダメージ状況",
|
||||
"break_health_percentage": "部位破壊までのダメージ状況(%)",
|
||||
"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",
|
||||
"buildup": "蓄積値",
|
||||
"buildup_bar": "蓄積値バー",
|
||||
@@ -104,11 +112,12 @@
|
||||
"dynamically_positioned": "モンスターに追随して表示",
|
||||
"enable_for": "有効にする",
|
||||
"enabled": "有効",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "環境生物UI",
|
||||
"endemic_life_damage": "環境生物のダメージ",
|
||||
"family": "Family",
|
||||
"farthest": "Farthest",
|
||||
"fight_time": "戦闘時間",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "フィルター",
|
||||
"filter_mode": "Filter Mode",
|
||||
"first": "最初",
|
||||
@@ -120,11 +129,15 @@
|
||||
"global_scale_modifier": "全体的なスケールの調整",
|
||||
"global_settings": "全体設定",
|
||||
"health": "体力",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"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_percentage": "ダメージ割合(%)",
|
||||
"health_severe_filter": "Health + Severe",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
"height": "ヘイト",
|
||||
"hide_ailments_with_zero_buildup": "蓄積値がゼロの時に状態異常の表示を隠す",
|
||||
"hide_all_active_ailments": "全ての有効な状態異常を隠す",
|
||||
@@ -159,11 +172,11 @@
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "含める情報",
|
||||
"inside": "Inside",
|
||||
"installation_damage": "設備のダメージ",
|
||||
"installations": "Installations",
|
||||
"italic": "イタリック",
|
||||
"join_time": "参加時間",
|
||||
"killcam": "Killcam",
|
||||
"kunai_damage": "クナイダメージ",
|
||||
"kunai": "Kunai",
|
||||
"language": "表示言語",
|
||||
"large_monster_UI": "大型モンスターUI",
|
||||
"large_monster_dynamic_UI": "大型モンスターのダイナミック表示UI",
|
||||
@@ -171,6 +184,7 @@
|
||||
"large_monster_static_UI": "大型モンスターのスタティック表示UI",
|
||||
"large_monsters": "大型モンスター",
|
||||
"last": "最後",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
@@ -191,10 +205,10 @@
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "モジュール",
|
||||
"monster_can_be_captured": "捕獲可能なモンスター",
|
||||
"monster_damage": "モンスターダメージ",
|
||||
"monster_id": "モンスターID",
|
||||
"monster_name": "モンスター名",
|
||||
"monster_name_label": "モンスター名ラベル",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "自身のダメージバーの場所",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
@@ -207,10 +221,10 @@
|
||||
"offset_is_relative_to_parts": "部位表示に対する相対的な位置",
|
||||
"opacity_falloff": "透明度を上げる",
|
||||
"orientation": "並べ方",
|
||||
"other_damage": "その他のダメージ",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "他のプレイヤー",
|
||||
"otomo_damage": "オトモのダメージ",
|
||||
"otomos": "Buddies",
|
||||
"outline": "Outline",
|
||||
"outside": "Outside",
|
||||
"part_health": "部位体力",
|
||||
@@ -218,12 +232,12 @@
|
||||
"part_name_label": "部位名ラベル",
|
||||
"percentage_label": "パーセンテージラベル",
|
||||
"performance": "パフォーマンス",
|
||||
"player_damage": "プレイヤーダメージ",
|
||||
"player_name_label": "プレイヤー名ラベル",
|
||||
"player_name_size_limit": "プレイヤー名のサイズ上限",
|
||||
"player_spacing": "プレイヤー表示の間隔",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison_damage": "毒ダメージ",
|
||||
"poison": "毒",
|
||||
"position": "位置",
|
||||
"press_any_key": "何かボタンを押してください。",
|
||||
"prioritize_large_monsters": "大型モンスターを優先する",
|
||||
@@ -237,15 +251,19 @@
|
||||
"relative_offset": "相対的な表示位置",
|
||||
"rename": "Rename",
|
||||
"render_highlighted_monster": "ハイライトされたモンスターをレンダリング(表示)する",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "ハイライトされていないモンスターをレンダリング(表示)する",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Reset",
|
||||
"reversed_order": "逆順",
|
||||
"reward_screen": "Reward Screen",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"servants": "Followers",
|
||||
"settings": "設定",
|
||||
"severe_filter": "Severe",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "Sever",
|
||||
"shadow": "影",
|
||||
"show_my_otomos_separately": "Show my Buddies separately",
|
||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
@@ -276,6 +294,7 @@
|
||||
"top_dps": "最高DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "蓄積合計",
|
||||
"total_buildup_label": "合計蓄積ラベル",
|
||||
@@ -298,7 +317,7 @@
|
||||
"visible": "表示する",
|
||||
"width": "幅",
|
||||
"world_offset": "表示位置",
|
||||
"wyvern_riding_damage": "操竜ダメージ",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
@@ -372,5 +391,20 @@
|
||||
"wingclaw": "翼爪",
|
||||
"wingclaws": "Wingclaws",
|
||||
"wings": "翼"
|
||||
}
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
8192,
|
||||
8303,
|
||||
12288,
|
||||
12543,
|
||||
12784,
|
||||
12799,
|
||||
19968,
|
||||
40879,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
"gold": "금관",
|
||||
"mini": "최소",
|
||||
"otomo": "동반자",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "파괴",
|
||||
"part_sever": "절단",
|
||||
"player": "헌터",
|
||||
@@ -48,23 +49,30 @@
|
||||
"ailments": "상태이상",
|
||||
"all_UI": "모든 UI",
|
||||
"anchor": "기준",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "적용",
|
||||
"assign_new_key": "새 키를 할당",
|
||||
"auto_highlight": "자동 타겟 설정",
|
||||
"background": "배경색",
|
||||
"bar": "막대",
|
||||
"blast_damage": "폭파 대미지",
|
||||
"blast": "폭파",
|
||||
"body_parts": "부위",
|
||||
"bold": "굵게",
|
||||
"bomb_damage": "폭탄 대미지",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "좌하단",
|
||||
"bottom_right": "우하단",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "파괴 횟수",
|
||||
"break_filter": "파괴",
|
||||
"break_health": "파괴 수치",
|
||||
"break_health_percentage": "파괴 수치 비율",
|
||||
"break_max_count": "최대 파괴 횟수",
|
||||
"break_severe_filter": "파괴 + 절단",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "파괴 + 절단",
|
||||
"buff_UI": "버프 UI",
|
||||
"buildup": "누적치",
|
||||
"buildup_bar": "누적치 막대",
|
||||
@@ -104,11 +112,12 @@
|
||||
"dynamically_positioned": "유동 위치 UI",
|
||||
"enable_for": "표시 대상",
|
||||
"enabled": "사용함",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "환경생물 UI",
|
||||
"endemic_life_damage": "환경생물 대미지",
|
||||
"family": "글꼴",
|
||||
"farthest": "가장 멀리있는",
|
||||
"fight_time": "전투 시간",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "필터",
|
||||
"filter_mode": "Filter Mode",
|
||||
"first": "맨 앞",
|
||||
@@ -120,11 +129,15 @@
|
||||
"global_scale_modifier": "전역 크기 배율",
|
||||
"global_settings": "전역 설정",
|
||||
"health": "체력",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "체력 + 파괴",
|
||||
"health_break_severe_filter": "체력 + 파괴 + 절단",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "체력 + 파괴 + 절단",
|
||||
"health_filter": "체력",
|
||||
"health_percentage": "체력 비율",
|
||||
"health_severe_filter": "체력 + 절단",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "체력 + 절단",
|
||||
"height": "높이",
|
||||
"hide_ailments_with_zero_buildup": "누적치가 0이면 상태이상 표시 안 함",
|
||||
"hide_all_active_ailments": "걸린 상태이상 모두 표시 안 함",
|
||||
@@ -159,11 +172,11 @@
|
||||
"in_training_area": "훈련구역 내",
|
||||
"include": "포함",
|
||||
"inside": "내부",
|
||||
"installation_damage": "설비 대미지",
|
||||
"installations": "Installations",
|
||||
"italic": "기울임",
|
||||
"join_time": "참가 시간",
|
||||
"killcam": "처치 영상",
|
||||
"kunai_damage": "쿠나이 대미지",
|
||||
"kunai": "Kunai",
|
||||
"language": "언어",
|
||||
"large_monster_UI": "대형 몬스터 UI",
|
||||
"large_monster_dynamic_UI": "대형 몬스터 유동 UI",
|
||||
@@ -171,6 +184,7 @@
|
||||
"large_monster_static_UI": "대형 몬스터 고정 UI",
|
||||
"large_monsters": "대형 몬스터",
|
||||
"last": "맨 뒤",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "레벨",
|
||||
"level_label": "레벨 정보",
|
||||
"loading_quest": "퀘스트 로딩 중",
|
||||
@@ -191,10 +205,10 @@
|
||||
"module_visibility_based_on_game_state": "게임 상태에 따라 모듈 표시",
|
||||
"modules": "UI",
|
||||
"monster_can_be_captured": "몬스터 포획 가능",
|
||||
"monster_damage": "몬스터 대미지",
|
||||
"monster_id": "몬스터 ID",
|
||||
"monster_name": "몬스터명",
|
||||
"monster_name_label": "몬스터명 정보",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "내 대미지 막대 위치",
|
||||
"my_otomos": "내 동반자",
|
||||
"myself": "나",
|
||||
@@ -207,10 +221,10 @@
|
||||
"offset_is_relative_to_parts": "오프셋을 부위 기준으로",
|
||||
"opacity_falloff": "투명도 감소",
|
||||
"orientation": "방향",
|
||||
"other_damage": "기타 대미지",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "다른 플레이어 동반자",
|
||||
"other_players": "다른 헌터",
|
||||
"otomo_damage": "동반자 대미지",
|
||||
"otomos": "Buddies",
|
||||
"outline": "외곽선",
|
||||
"outside": "외부",
|
||||
"part_health": "부위 수치",
|
||||
@@ -218,12 +232,12 @@
|
||||
"part_name_label": "부위 정보",
|
||||
"percentage_label": "비율 정보",
|
||||
"performance": "성능",
|
||||
"player_damage": "헌터 대미지",
|
||||
"player_name_label": "헌터명 정보",
|
||||
"player_name_size_limit": "헌터명 크기 제한",
|
||||
"player_spacing": "플레이어 간격",
|
||||
"players": "Players",
|
||||
"playing_quest": "퀘스트 중",
|
||||
"poison_damage": "독 대미지",
|
||||
"poison": "독",
|
||||
"position": "위치",
|
||||
"press_any_key": "설정할 키를 누르세요...",
|
||||
"prioritize_large_monsters": "대형 몬스터를 우선적으로",
|
||||
@@ -237,15 +251,19 @@
|
||||
"relative_offset": "상대적 위치 오프셋",
|
||||
"rename": "이름 변경",
|
||||
"render_highlighted_monster": "주시대상 몬스터 표시",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "주시대상이 아닌 아닌 몬스터 표시",
|
||||
"renderer": "렌더링",
|
||||
"reset": "리셋",
|
||||
"reversed_order": "역순",
|
||||
"reward_screen": "보상 화면",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "맹우 동반자",
|
||||
"servants": "맹우",
|
||||
"settings": "설정",
|
||||
"severe_filter": "절단",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "절단",
|
||||
"shadow": "그림자",
|
||||
"show_my_otomos_separately": "내 동반자를 따로",
|
||||
"show_other_player_otomos_separately": "다른 플레이어의 동반자를 따로",
|
||||
@@ -276,6 +294,7 @@
|
||||
"top_dps": "최고 DPS",
|
||||
"top_left": "좌상단",
|
||||
"top_right": "우상단",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "전체",
|
||||
"total_buildup": "총 누적치",
|
||||
"total_buildup_label": "총 누적치 정보",
|
||||
@@ -298,7 +317,7 @@
|
||||
"visible": "표시함",
|
||||
"width": "너비",
|
||||
"world_offset": "전역 오프셋",
|
||||
"wyvern_riding_damage": "용조종 대미지",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
@@ -372,5 +391,20 @@
|
||||
"wingclaw": "날개발톱",
|
||||
"wingclaws": "날개발톱",
|
||||
"wings": "날개"
|
||||
}
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
4352,
|
||||
4607,
|
||||
8192,
|
||||
8303,
|
||||
12592,
|
||||
12687,
|
||||
44032,
|
||||
55215,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
"gold": "Золото",
|
||||
"mini": "Мини",
|
||||
"otomo": "Cпутник",
|
||||
"part_anomaly_core": "Ядро аномалии",
|
||||
"part_break": "Повреждение",
|
||||
"part_sever": "Отсечение",
|
||||
"player": "Игрок",
|
||||
@@ -48,23 +49,30 @@
|
||||
"ailments": "Аномальные статусы",
|
||||
"all_UI": "Весь интерфейс",
|
||||
"anchor": "Привязка",
|
||||
"anomaly_cores": "Ядра аномалии",
|
||||
"anomaly_filter": "Ядро аномалии",
|
||||
"anomaly_health": "Здоровье ядра аномалии",
|
||||
"anomaly_health_percentage": "Здоровье ядра аномалии в процентах",
|
||||
"apply": "Применить",
|
||||
"assign_new_key": "Привязать клавишу",
|
||||
"auto_highlight": "Автофокус",
|
||||
"background": "Фон",
|
||||
"bar": "Шкала",
|
||||
"blast_damage": "Урон от взрыва",
|
||||
"blast": "Взрыв",
|
||||
"body_parts": "Части тела",
|
||||
"bold": "Жирный",
|
||||
"bomb_damage": "Урон от бомб",
|
||||
"bombs": "Бомбы",
|
||||
"bottom_left": "Левый нижний угол",
|
||||
"bottom_right": "Правй нижний угол",
|
||||
"bottom_to_top": "Снизу вверх",
|
||||
"break_anomaly_filter": "Повреждение + Ядро аномалии",
|
||||
"break_count": "Счётчик повреждений",
|
||||
"break_filter": "Повреждение",
|
||||
"break_health": "Повреждение части",
|
||||
"break_health_percentage": "Повреждение части в процентах",
|
||||
"break_max_count": "Максимальное кол-во повреждений",
|
||||
"break_severe_filter": "Повреждение + Отсечение",
|
||||
"break_sever_anomaly_filter": "Повреждение + Отсечение + Ядро аномалии",
|
||||
"break_sever_filter": "Повреждение + Отсечение",
|
||||
"buff_UI": "Интерфейс баффов",
|
||||
"buildup": "Накопление",
|
||||
"buildup_bar": "Шкала накопления",
|
||||
@@ -104,11 +112,12 @@
|
||||
"dynamically_positioned": "Рассположенный динамично",
|
||||
"enable_for": "Показывать для",
|
||||
"enabled": "Включить",
|
||||
"endemic_life": "Местная живность",
|
||||
"endemic_life_UI": "Интерфейс местной живности",
|
||||
"endemic_life_damage": "Урон от окружения",
|
||||
"family": "Семейство",
|
||||
"farthest": "Самый дальний",
|
||||
"fight_time": "Время в бою",
|
||||
"fill_direction": "Направление заполнения",
|
||||
"filter": "Фильтр",
|
||||
"filter_mode": "Режим Фильтра",
|
||||
"first": "Первый",
|
||||
@@ -120,11 +129,15 @@
|
||||
"global_scale_modifier": "Глобальный модификатор размера",
|
||||
"global_settings": "Общие настройки",
|
||||
"health": "Здоровье",
|
||||
"health_anomaly_filter": "Здоровье + Ядро аномалии",
|
||||
"health_break_anomaly_filter": "Здоровье + Повреждение + Ядро аномалии",
|
||||
"health_break_filter": "Здоровье + Повреждение",
|
||||
"health_break_severe_filter": "Здоровье + Повреждение + Отсечение",
|
||||
"health_break_sever_anomaly_filter": "Здоровье + Повреждение + Отсечение + Ядро аномалии",
|
||||
"health_break_sever_filter": "Здоровье + Повреждение + Отсечение",
|
||||
"health_filter": "Здоровье",
|
||||
"health_percentage": "Здоровье в процентах",
|
||||
"health_severe_filter": "Здоровье + Отсечение",
|
||||
"health_sever_anomaly_filter": "Здоровье + Отсечение + Ядро аномалии",
|
||||
"health_sever_filter": "Здоровье + Отсечение",
|
||||
"height": "Высота",
|
||||
"hide_ailments_with_zero_buildup": "Скрыть аномальный статус, если накопление равно 0",
|
||||
"hide_all_active_ailments": "Скрыть все активные аномальные статусы",
|
||||
@@ -159,11 +172,11 @@
|
||||
"in_training_area": "В тренировочной зоне",
|
||||
"include": "Элементы",
|
||||
"inside": "Внутри",
|
||||
"installation_damage": "Урон от установок",
|
||||
"installations": "Установки",
|
||||
"italic": "Курсив",
|
||||
"join_time": "Время присоединения",
|
||||
"killcam": "Камера смерти",
|
||||
"kunai_damage": "Урон от кунаев",
|
||||
"kunai": "Кунаи",
|
||||
"language": "Язык",
|
||||
"large_monster_UI": "Интерфейс больший монстров",
|
||||
"large_monster_dynamic_UI": "Динамический интерфейс больших монстров",
|
||||
@@ -171,6 +184,7 @@
|
||||
"large_monster_static_UI": "Статический интерфейс больших монстров",
|
||||
"large_monsters": "Большие монстры",
|
||||
"last": "Последний",
|
||||
"left_to_right": "Слева направо",
|
||||
"level": "Уровень",
|
||||
"level_label": "Метка уровня",
|
||||
"loading_quest": "Загрузка квеста",
|
||||
@@ -191,10 +205,10 @@
|
||||
"module_visibility_based_on_game_state": "Видимость модулей в зависимости от состояния игры",
|
||||
"modules": "Модули",
|
||||
"monster_can_be_captured": "Монстр может быть схвачен",
|
||||
"monster_damage": "Урон от монстров",
|
||||
"monster_id": "ИД монстра",
|
||||
"monster_name": "Имя монстра",
|
||||
"monster_name_label": "Метка имени монстра",
|
||||
"monsters": "Монстры",
|
||||
"my_damage_bar_location": "Позиция моей шкалы урона",
|
||||
"my_otomos": "Мои спутники",
|
||||
"myself": "Я",
|
||||
@@ -207,10 +221,10 @@
|
||||
"offset_is_relative_to_parts": "Сдвиг относителен к частям тела",
|
||||
"opacity_falloff": "Увеличение прозрачности от расстояния",
|
||||
"orientation": "Ориентация",
|
||||
"other_damage": "Другой урон",
|
||||
"other": "Другое",
|
||||
"other_player_otomos": "Спутники других игроков",
|
||||
"other_players": "Другие игроки",
|
||||
"otomo_damage": "Урон от спутников",
|
||||
"otomos": "Спутники",
|
||||
"outline": "Обводка",
|
||||
"outside": "Снаружи",
|
||||
"part_health": "Здоровье части",
|
||||
@@ -218,12 +232,12 @@
|
||||
"part_name_label": "Метка имени части тела",
|
||||
"percentage_label": "Метка процентов",
|
||||
"performance": "Производительность",
|
||||
"player_damage": "Урон игрока",
|
||||
"player_name_label": "Метка имени игрока",
|
||||
"player_name_size_limit": "Ограничить ширину имени игрока",
|
||||
"player_spacing": "Расстояние между игроками",
|
||||
"players": "Игроки",
|
||||
"playing_quest": "Во время квеста",
|
||||
"poison_damage": "Урон от отравления",
|
||||
"poison": "Отравление",
|
||||
"position": "Расположение",
|
||||
"press_any_key": "Нажмите любую клавишу...",
|
||||
"prioritize_large_monsters": "Большие монстры в приоритете",
|
||||
@@ -237,15 +251,19 @@
|
||||
"relative_offset": "Относительный сдвиг",
|
||||
"rename": "Переименовать",
|
||||
"render_highlighted_monster": "Показывать помеченного монстра",
|
||||
"render_inactive_anomaly_cores": "Показывать неактивные ядра аномалии",
|
||||
"render_not_highlighted_monsters": "Показывать непомеченных монстров",
|
||||
"renderer": "Рендерер",
|
||||
"reset": "Сбросить",
|
||||
"reversed_order": "Обратный порядок",
|
||||
"reward_screen": "Экран наград",
|
||||
"right_alignment_shift": "Сдвиг для выравнивания по правому краю",
|
||||
"right_to_left": "Справа налево",
|
||||
"servant_otomos": "Спутники последователей",
|
||||
"servants": "Последователи",
|
||||
"settings": "Настройки",
|
||||
"severe_filter": "Отсечение",
|
||||
"sever_anomaly_filter": "Отсечение + Ядро аномалии",
|
||||
"sever_filter": "Отсечение",
|
||||
"shadow": "Тень",
|
||||
"show_my_otomos_separately": "Показывать моих спутников отдельно",
|
||||
"show_other_player_otomos_separately": "Показывать спутников других игроков отдельно",
|
||||
@@ -276,6 +294,7 @@
|
||||
"top_dps": "Наибольший урон в секунду",
|
||||
"top_left": "Левый верхний угол",
|
||||
"top_right": "Правый верхний угол",
|
||||
"top_to_bottom": "Сверху вниз",
|
||||
"total": "Всего",
|
||||
"total_buildup": "Общее накопление",
|
||||
"total_buildup_label": "Метка общего накопления",
|
||||
@@ -298,7 +317,7 @@
|
||||
"visible": "Включить",
|
||||
"width": "Ширина",
|
||||
"world_offset": "Сдвиг в игровом пространстве",
|
||||
"wyvern_riding_damage": "Урон от езды на виверне",
|
||||
"wyvern_riding": "Езда на виверне",
|
||||
"x": "X",
|
||||
"y": "Y",
|
||||
"z": "Z"
|
||||
@@ -372,5 +391,16 @@
|
||||
"wingclaw": "Крыло-коготь",
|
||||
"wingclaws": "Крыло-коготь",
|
||||
"wings": "Крылья"
|
||||
}
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
1024,
|
||||
1241,
|
||||
8192,
|
||||
8303,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
"gold": "金冠",
|
||||
"mini": "小型",
|
||||
"otomo": "随从",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "部位破坏",
|
||||
"part_sever": "部位切断",
|
||||
"player": "玩家",
|
||||
@@ -48,23 +49,30 @@
|
||||
"ailments": "状态异常",
|
||||
"all_UI": "所有UI",
|
||||
"anchor": "锚点",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "应用",
|
||||
"assign_new_key": "指定新按键",
|
||||
"auto_highlight": "自动高亮",
|
||||
"background": "背景",
|
||||
"bar": "状态条",
|
||||
"blast_damage": "爆破伤害",
|
||||
"blast": "爆破",
|
||||
"body_parts": "身体部位",
|
||||
"bold": "粗体",
|
||||
"bomb_damage": "爆弹桶伤害",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "破坏次数",
|
||||
"break_filter": "破坏",
|
||||
"break_health": "破坏值",
|
||||
"break_health_percentage": "破坏值百分比",
|
||||
"break_max_count": "最大破坏次数",
|
||||
"break_severe_filter": "破坏+切断",
|
||||
"break_sever_anomaly_filter": "Break + Sever + Anomaly Core",
|
||||
"break_sever_filter": "破坏+切断",
|
||||
"buff_UI": "Buff UI",
|
||||
"buildup": "积累值",
|
||||
"buildup_bar": "积累值条",
|
||||
@@ -104,11 +112,12 @@
|
||||
"dynamically_positioned": "动态位置",
|
||||
"enable_for": "开启",
|
||||
"enabled": "开启",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "环境生物UI",
|
||||
"endemic_life_damage": "环境生物伤害",
|
||||
"family": "字体",
|
||||
"farthest": "最远",
|
||||
"fight_time": "战斗时间",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "筛选器",
|
||||
"filter_mode": "筛选方式",
|
||||
"first": "第一",
|
||||
@@ -120,11 +129,15 @@
|
||||
"global_scale_modifier": "全局比例更改",
|
||||
"global_settings": "全局设定",
|
||||
"health": "生命",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"health_break_filter": "生命+破坏",
|
||||
"health_break_severe_filter": "生命+破坏+切断",
|
||||
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
|
||||
"health_break_sever_filter": "生命+破坏+切断",
|
||||
"health_filter": "生命",
|
||||
"health_percentage": "生命百分比",
|
||||
"health_severe_filter": "生命+切断",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "生命+切断",
|
||||
"height": "高度",
|
||||
"hide_ailments_with_zero_buildup": "当积累值为0时隐藏该状态异常",
|
||||
"hide_all_active_ailments": "隐藏所有激活的状态异常",
|
||||
@@ -159,11 +172,11 @@
|
||||
"in_training_area": "在修炼场",
|
||||
"include": "包含",
|
||||
"inside": "里面",
|
||||
"installation_damage": "设施伤害",
|
||||
"installations": "Installations",
|
||||
"italic": "斜体",
|
||||
"join_time": "加入时间",
|
||||
"killcam": "击杀镜头",
|
||||
"kunai_damage": "苦无伤害",
|
||||
"kunai": "Kunai",
|
||||
"language": "语言",
|
||||
"large_monster_UI": "大型怪物UI",
|
||||
"large_monster_dynamic_UI": "大型怪物浮动UI",
|
||||
@@ -171,6 +184,7 @@
|
||||
"large_monster_static_UI": "大型怪物固定UI",
|
||||
"large_monsters": "大型怪物群",
|
||||
"last": "最后",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "等级",
|
||||
"level_label": "等级标签",
|
||||
"loading_quest": "任务加载中",
|
||||
@@ -191,10 +205,10 @@
|
||||
"module_visibility_based_on_game_state": "基于游戏状态的模组可视化设置",
|
||||
"modules": "模块",
|
||||
"monster_can_be_captured": "可捕获的怪物",
|
||||
"monster_damage": "怪物伤害",
|
||||
"monster_id": "怪物ID",
|
||||
"monster_name": "怪物名",
|
||||
"monster_name_label": "怪物名标签",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "我的伤害条位置",
|
||||
"my_otomos": "我的随从",
|
||||
"myself": "我自己",
|
||||
@@ -207,10 +221,10 @@
|
||||
"offset_is_relative_to_parts": "根据部位偏移",
|
||||
"opacity_falloff": "透明度增加",
|
||||
"orientation": "方向",
|
||||
"other_damage": "其他伤害",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "其他玩家的随从",
|
||||
"other_players": "其他玩家",
|
||||
"otomo_damage": "随从伤害",
|
||||
"otomos": "Buddies",
|
||||
"outline": "轮廓",
|
||||
"outside": "外面",
|
||||
"part_health": "部位生命值",
|
||||
@@ -218,12 +232,12 @@
|
||||
"part_name_label": "部位名标签",
|
||||
"percentage_label": "百分比标签",
|
||||
"performance": "性能",
|
||||
"player_damage": "玩家伤害",
|
||||
"player_name_label": "玩家名标签",
|
||||
"player_name_size_limit": "玩家名长度限制",
|
||||
"player_spacing": "玩家间距",
|
||||
"players": "Players",
|
||||
"playing_quest": "操作界面/正常游玩时",
|
||||
"poison_damage": "中毒伤害",
|
||||
"poison": "中毒",
|
||||
"position": "位置",
|
||||
"press_any_key": "按任意键...",
|
||||
"prioritize_large_monsters": "大型怪物优先",
|
||||
@@ -237,15 +251,19 @@
|
||||
"relative_offset": "相对偏移",
|
||||
"rename": "重命名",
|
||||
"render_highlighted_monster": "渲染高亮怪物",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "渲染非高亮怪物",
|
||||
"renderer": "渲染器",
|
||||
"reset": "重置",
|
||||
"reversed_order": "逆向排序",
|
||||
"reward_screen": "奖励界面",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "盟友随从",
|
||||
"servants": "盟友",
|
||||
"settings": "设定",
|
||||
"severe_filter": "切断",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "切断",
|
||||
"shadow": "阴影",
|
||||
"show_my_otomos_separately": "分开显示我的随从",
|
||||
"show_other_player_otomos_separately": "分开显示其他玩家的随从",
|
||||
@@ -272,10 +290,11 @@
|
||||
"timer": "计时器",
|
||||
"timer_label": "计时器标签",
|
||||
"top_buildup": "最高积累值",
|
||||
"top_damage": "最高伤害",
|
||||
"top_damage": "Top Damage",
|
||||
"top_dps": "最高DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "总计",
|
||||
"total_buildup": "总积累值",
|
||||
"total_buildup_label": "总积累值标签",
|
||||
@@ -298,7 +317,7 @@
|
||||
"visible": "可见",
|
||||
"width": "宽度",
|
||||
"world_offset": "整体偏移",
|
||||
"wyvern_riding_damage": "御龙伤害",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X轴",
|
||||
"y": "Y轴",
|
||||
"z": "Z轴"
|
||||
@@ -372,5 +391,20 @@
|
||||
"wingclaw": "翼爪",
|
||||
"wingclaws": "翼爪",
|
||||
"wings": "翼"
|
||||
}
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
8192,
|
||||
8303,
|
||||
12288,
|
||||
12543,
|
||||
12784,
|
||||
12799,
|
||||
19968,
|
||||
40879,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
"gold": "金冠",
|
||||
"mini": "小型",
|
||||
"otomo": "Buddy",
|
||||
"part_anomaly_core": "Anomaly Core",
|
||||
"part_break": "Break",
|
||||
"part_sever": "Sever",
|
||||
"player": "玩家",
|
||||
@@ -48,23 +49,30 @@
|
||||
"ailments": "異常狀態",
|
||||
"all_UI": "全部UI",
|
||||
"anchor": "錨點",
|
||||
"anomaly_cores": "Anomaly Cores",
|
||||
"anomaly_filter": "Anomaly Core",
|
||||
"anomaly_health": "Anomaly Core Health",
|
||||
"anomaly_health_percentage": "Anomaly Core Health Percentage",
|
||||
"apply": "套用",
|
||||
"assign_new_key": "指定新按鍵",
|
||||
"auto_highlight": "自動高亮",
|
||||
"background": "圖形化顯示條的背景底色",
|
||||
"bar": "圖形化顯示條",
|
||||
"blast_damage": "爆破傷害",
|
||||
"blast": "爆破",
|
||||
"body_parts": "身體部位",
|
||||
"bold": "粗體",
|
||||
"bomb_damage": "爆炸傷害",
|
||||
"bombs": "Bombs",
|
||||
"bottom_left": "左下",
|
||||
"bottom_right": "右下",
|
||||
"bottom_to_top": "Bottom to Top",
|
||||
"break_anomaly_filter": "Break + Anomaly Core",
|
||||
"break_count": "破壞次數",
|
||||
"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",
|
||||
"buildup": "累積值",
|
||||
"buildup_bar": "累積值條",
|
||||
@@ -104,11 +112,12 @@
|
||||
"dynamically_positioned": "浮動的魔物資訊",
|
||||
"enable_for": "啟用對象",
|
||||
"enabled": "啟用",
|
||||
"endemic_life": "Endemic Life",
|
||||
"endemic_life_UI": "環境生物 UI",
|
||||
"endemic_life_damage": "環境生物傷害",
|
||||
"family": "字體",
|
||||
"farthest": "最遠的",
|
||||
"fight_time": "戰鬥時間",
|
||||
"fill_direction": "Fill Direction",
|
||||
"filter": "篩選器",
|
||||
"filter_mode": "Filter Mode",
|
||||
"first": "第一",
|
||||
@@ -120,11 +129,15 @@
|
||||
"global_scale_modifier": "全域比例更改",
|
||||
"global_settings": "全域設定",
|
||||
"health": "血量",
|
||||
"health_anomaly_filter": "Health + Anomaly Core",
|
||||
"health_break_anomaly_filter": "Health + Break + Anomaly Core",
|
||||
"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_percentage": "血量百分比",
|
||||
"health_severe_filter": "Health + Severe",
|
||||
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
|
||||
"health_sever_filter": "Health + Sever",
|
||||
"height": "高度",
|
||||
"hide_ailments_with_zero_buildup": "當累積值為0時,隱藏該異常狀態",
|
||||
"hide_all_active_ailments": "隱藏觸發中的異常狀態",
|
||||
@@ -159,11 +172,11 @@
|
||||
"in_training_area": "In Training Area",
|
||||
"include": "細部資訊調整",
|
||||
"inside": "內部",
|
||||
"installation_damage": "設備傷害",
|
||||
"installations": "Installations",
|
||||
"italic": "斜體",
|
||||
"join_time": "加入時間",
|
||||
"killcam": "Killcam",
|
||||
"kunai_damage": "苦無傷害",
|
||||
"kunai": "Kunai",
|
||||
"language": "語言",
|
||||
"large_monster_UI": "大型魔物 UI",
|
||||
"large_monster_dynamic_UI": "大型魔物浮動 UI",
|
||||
@@ -171,6 +184,7 @@
|
||||
"large_monster_static_UI": "大型魔物固定 UI",
|
||||
"large_monsters": "大型魔物群",
|
||||
"last": "最後",
|
||||
"left_to_right": "Left to Right",
|
||||
"level": "Level",
|
||||
"level_label": "Level Label",
|
||||
"loading_quest": "Loading Quest",
|
||||
@@ -191,10 +205,10 @@
|
||||
"module_visibility_based_on_game_state": "Module Visibility based on Game State",
|
||||
"modules": "模組",
|
||||
"monster_can_be_captured": "可捕獲的魔物",
|
||||
"monster_damage": "魔物傷害",
|
||||
"monster_id": "Monster ID",
|
||||
"monster_name": "魔物名稱",
|
||||
"monster_name_label": "魔物名稱",
|
||||
"monsters": "Monsters",
|
||||
"my_damage_bar_location": "我的傷害條",
|
||||
"my_otomos": "My Buddies",
|
||||
"myself": "Myself",
|
||||
@@ -207,10 +221,10 @@
|
||||
"offset_is_relative_to_parts": "與部位顯示相對偏移",
|
||||
"opacity_falloff": "透明度提高",
|
||||
"orientation": "對齊方式",
|
||||
"other_damage": "其他傷害",
|
||||
"other": "Other",
|
||||
"other_player_otomos": "Other Player Buddies",
|
||||
"other_players": "其他玩家",
|
||||
"otomo_damage": "隨從傷害",
|
||||
"otomos": "Buddies",
|
||||
"outline": "描邊",
|
||||
"outside": "外部",
|
||||
"part_health": "部位血量",
|
||||
@@ -218,12 +232,12 @@
|
||||
"part_name_label": "部位名稱",
|
||||
"percentage_label": "百分比",
|
||||
"performance": "效能",
|
||||
"player_damage": "玩家傷害量",
|
||||
"player_name_label": "玩家名稱",
|
||||
"player_name_size_limit": "玩家名稱大小限制",
|
||||
"player_spacing": "玩家間格",
|
||||
"players": "Players",
|
||||
"playing_quest": "Playing Quest",
|
||||
"poison_damage": "毒傷害",
|
||||
"poison": "毒",
|
||||
"position": "位置",
|
||||
"press_any_key": "輸入任意鍵...",
|
||||
"prioritize_large_monsters": "大型魔物優先",
|
||||
@@ -237,15 +251,19 @@
|
||||
"relative_offset": "相對偏移",
|
||||
"rename": "Rename",
|
||||
"render_highlighted_monster": "渲染目標魔物",
|
||||
"render_inactive_anomaly_cores": "Render Inactive Anomaly Cores",
|
||||
"render_not_highlighted_monsters": "渲染非目標魔物",
|
||||
"renderer": "Renderer",
|
||||
"reset": "Reset",
|
||||
"reversed_order": "反向排序",
|
||||
"reward_screen": "Reward Screen",
|
||||
"right_alignment_shift": "Right Alignment Shift",
|
||||
"right_to_left": "Right to Left",
|
||||
"servant_otomos": "Servant Buddies",
|
||||
"servants": "Followers",
|
||||
"settings": "設定",
|
||||
"severe_filter": "Severe",
|
||||
"sever_anomaly_filter": "Sever + Anomaly Core",
|
||||
"sever_filter": "Sever",
|
||||
"shadow": "陰影",
|
||||
"show_my_otomos_separately": "Show my Buddies separately",
|
||||
"show_other_player_otomos_separately": "Show Other Player Buddies separately",
|
||||
@@ -276,6 +294,7 @@
|
||||
"top_dps": "最高 DPS",
|
||||
"top_left": "左上",
|
||||
"top_right": "右上",
|
||||
"top_to_bottom": "Top to Bottom",
|
||||
"total": "Total",
|
||||
"total_buildup": "總累積值",
|
||||
"total_buildup_label": "總累積值文字",
|
||||
@@ -298,7 +317,7 @@
|
||||
"visible": "可見",
|
||||
"width": "寬度",
|
||||
"world_offset": "地圖中的位置",
|
||||
"wyvern_riding_damage": "操龍傷害",
|
||||
"wyvern_riding": "Wyvern Riding",
|
||||
"x": "X軸",
|
||||
"y": "Y軸",
|
||||
"z": "Z軸"
|
||||
@@ -372,5 +391,20 @@
|
||||
"wingclaw": "翼爪",
|
||||
"wingclaws": "翼爪",
|
||||
"wings": "翅膀"
|
||||
}
|
||||
},
|
||||
"unicode_glyph_ranges": [
|
||||
32,
|
||||
255,
|
||||
8192,
|
||||
8303,
|
||||
12288,
|
||||
12543,
|
||||
12784,
|
||||
12799,
|
||||
19968,
|
||||
40879,
|
||||
65280,
|
||||
65519,
|
||||
0
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user