9 Commits

Author SHA1 Message Date
GreenComfyTea
f9c1d89843 Fix Endemic Life UI not showing 2023-08-20 16:15:25 +03:00
GreenComfyTea
f086ff2d5d Endemic Life Buffs: Add Ruby and Gold Wirebugs 2023-08-20 16:15:00 +03:00
GreenComfyTea
5e5df84308 Otomo Moves: Add Power Drum and Go, Fight, Win 2023-08-20 16:14:19 +03:00
GreenComfyTea
528d7f7238 Skills: Add Status Trigger 2023-08-20 16:13:49 +03:00
GreenComfyTea
1c83b282ef Update Otomo Entity when Swapping Otomos 2023-08-20 13:29:33 +03:00
GreenComfyTea
a41ec08903 Skills: +Peak Performance, Dragonheart, Resentment 2023-08-20 13:27:24 +03:00
GreenComfyTea
89571bd2f4 Buff UI: Add Otomo Moves 2023-08-20 13:26:34 +03:00
GreenComfyTea
1fcb9aea5a Dangos: Add Dango Adrenaline, Fix Dango Defender 2023-08-20 13:26:09 +03:00
GreenComfyTea
13e68d67a9 Stats UI: Add Health and Max Health 2023-08-20 10:48:25 +03:00
22 changed files with 1670 additions and 212 deletions

View File

@@ -51,6 +51,7 @@ local endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
local skills = require("MHR_Overlay.Buffs.skills");
local dangos = require("MHR_Overlay.Buffs.dangos");
local abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
local otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
local players = require("MHR_Overlay.Damage_Meter.players");
local non_players = require("MHR_Overlay.Damage_Meter.non_players");
@@ -131,6 +132,7 @@ endemic_life_buffs.init_dependencies();
skills.init_dependencies();
dangos.init_dependencies();
abnormal_statuses.init_dependencies();
otomo_moves.init_dependencies();
damage_hook.init_dependencies();
players.init_dependencies();
@@ -206,6 +208,7 @@ endemic_life_buffs.init_module();
skills.init_module();
dangos.init_module();
abnormal_statuses.init_module();
otomo_moves.init_module();
damage_hook.init_module();
players.init_module();

View File

@@ -15,6 +15,7 @@ local endemic_life_buffs;
local skills;
local dangos;
local abnormal_statuses;
local otomo_moves;
local sdk = sdk;
local tostring = tostring;
@@ -148,17 +149,17 @@ function this.update()
return;
end
local is_player_lobby_base = master_player:get_type_definition() == player_lobby_base_type_def;
local master_player_data = get_player_data_method:call(master_player);
if master_player_data ~= nil then
consumables.update(master_player_data);
endemic_life_buffs.update(master_player_data);
skills.update(master_player, master_player_data);
dangos.update(master_player_data);
otomo_moves.update(master_player_data);
if not is_player_lobby_base then
skills.update(master_player, master_player_data);
dangos.update(master_player, master_player_data);
endemic_life_buffs.update(master_player, master_player_data);
abnormal_statuses.update(master_player, master_player_data);
end
else
@@ -209,6 +210,7 @@ function this.init_dependencies()
skills = require("MHR_Overlay.Buffs.skills");
dangos = require("MHR_Overlay.Buffs.dangos");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
end
function this.init_module()

View File

@@ -43,61 +43,258 @@ local package = package;
this.list = {
dango_defender = nil,
dango_adrenaline = nil
};
this.is_dango_adrenaline_active = false;
local dango_defender_minimal_value = 200;
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_player_data_method = player_manager_type_def:get_method("get_PlayerData");
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:get_return_type();
local demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_DemondrugAtkUp");
local great_demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_GreatDemondrugAtkUp");
local armorskin_def_up_field = player_user_data_item_parameter_type_def:get_field("_ArmorSkinDefUp");
local great_armorskin_def_up_field = player_user_data_item_parameter_type_def:get_field("_GreatArmorSkinDefUp");
local might_seed_timer_field = player_user_data_item_parameter_type_def:get_field("_MightSeedTimer");
local adamant_seed_timer_field = player_user_data_item_parameter_type_def:get_field("_AdamantSeedTimer");
local demondrug_powder_timer_field = player_user_data_item_parameter_type_def:get_field("_DemondrugPowderTimer");
local armorskin_powder_timer_field = player_user_data_item_parameter_type_def:get_field("_ArmorSkinPowderTimer");
local vitalizer_timer_const_field = player_user_data_item_parameter_type_def:get_field("_VitalizerTimer");
local stamina_up_buff_second_field = player_user_data_item_parameter_type_def:get_field("_StaminaUpBuffSecond");
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Dango Defender
local kitchen_skill_048_field = player_data_type_def:get_field("_KitchenSkill048_Damage");
function this.update(player_data)
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
-- Dango Adrenaline
local is_kitchen_skill_predicament_powerup_method = player_base_type_def:get_method("isKitchenSkillPredicamentPowerUp");
function this.update(player, player_data)
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
if item_parameter == nil then
error_handler.report("dangos.update", "Failed to access Data: item_parameter");
return;
end
--this.update_dango_defender(player_data, item_parameter);
this.update_generic_number_value_field("dango_defender", player_data, kitchen_skill_048_field, nil, true, dango_defender_minimal_value);
this.update_dango_adrenaline();
end
-- Not working??
function this.update_dango_defender(player_data, item_parameter)
local dango_defender_value = kitchen_skill_048_field:get_data(player_data);
if dango_defender_value == nil then
error_handler.report("dangos.update_dango_defender", "Failed to access Data: dango_defender_value");
function this.update_generic_timer(dango_key, timer_owner, timer_field, is_infinite)
if is_infinite == nil then is_infinite = false; end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("dangos.update_generic_timer", string.format("Failed to access Data: %s_timer", dango_key));
return;
end
if dango_defender_value < 200 then
this.list.dango_defender = nil;
if utils.number.is_equal(timer, 0) then
this.list[dango_key] = nil;
return;
end
local buff = this.list.dango_defender;
if buff ~= nil then
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(dango_key, 1, timer);
end
function this.update_generic_number_value_field(dango_key, timer_owner, value_field, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = 1; end
if is_infinite == nil then is_infinite = false; end
local level = 1;
if value_field ~= nil then
local value = value_field:get_data(timer_owner);
if value == nil then
error_handler.report("dangos.update_generic_number_value_field", string.format("Failed to access Data: %s_value", dango_key));
return;
end
local name = language.current_language.dangos.dango_defender_hi;
if value < minimal_value then
this.list[dango_key] = nil;
return;
end
end
this.list.dango_defender = buffs.new(buffs.types.dango, "dango_defender", name, 1);
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("dangos.update_generic_number_value_field", string.format("Failed to access Data: %s_timer", dango_key));
return;
end
if value_field == nil and utils.number.is_equal(timer, 0) then
this.list[dango_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(dango_key, level, timer);
end
function this.update_generic_boolean_value_field(dango_key, timer_owner, value_field, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = true; end
if is_infinite == nil then is_infinite = false; end
if value_field ~= nil then
local value = value_field:get_data(timer_owner);
if value == nil then
error_handler.report("dangos.update_generic_boolean_value_field", string.format("Failed to access Data: %s_value", dango_key));
return;
end
if value < minimal_value then
this.list[dango_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("dangos.update_generic_boolean_value_field", string.format("Failed to access Data: %s_timer", dango_key));
return;
end
if value_field == nil and utils.number.is_equal(timer, 0) then
this.list[dango_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(dango_key, 1, timer);
end
function this.update_generic_number_value_method(dango_key, timer_owner, value_method, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = 1; end
if is_infinite == nil then is_infinite = false; end
local level = 1;
if value_method ~= nil then
local value = value_method:call(timer_owner);
if value == nil then
error_handler.report("dangos.update_generic_number_value_method", string.format("Failed to access Data: %s_value", dango_key));
return;
end
if value < minimal_value then
this.list[dango_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("dangos.update_generic_number_value_method", string.format("Failed to access Data: %s_timer", dango_key));
return;
end
if value_method == nil and utils.number.is_equal(timer, 0) then
this.list[dango_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(dango_key, level, timer);
end
function this.update_generic_boolean_value_method(dango_key, timer_owner, value_method, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = true; end
if is_infinite == nil then is_infinite = false; end
if value_method ~= nil then
local value = value_method:call(timer_owner);
if value == nil then
error_handler.report("dangos.update_generic_boolean_value_method", string.format("Failed to access Data: %s_value", dango_key));
return;
end
if value ~= minimal_value then
this.list[dango_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("dangos.update_generic_boolean_value_method", string.format("Failed to access Data: %s_timer", dango_key));
return;
end
if value_method == nil and utils.number.is_equal(timer, 0) then
this.list[dango_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(dango_key, 1, timer);
end
function this.update_generic(dango_key, level, timer, duration)
duration = duration or timer;
local dango = this.list[dango_key];
if dango == nil then
local name = language.current_language.dangos[dango_key];
dango = buffs.new(buffs.types.dango, dango_key, name, level, duration);
this.list[dango_key] = dango;
else
dango.level = level;
if timer ~= nil then
buffs.update_timer(dango, timer);
end
end
end
function this.update_dango_adrenaline()
if not this.is_dango_adrenaline_active then
this.list.dango_adrenaline = nil;
return;
end
this.update_generic("dango_adrenaline", 1);
end
function this.init_names()

View File

@@ -44,9 +44,13 @@ local package = package;
this.list = {
cutterfly = nil,
clothfly = nil
clothfly = nil,
ruby_wirebug = nil,
gold_wirebug = nil
};
local marionette_mode_types = { "ruby_wirebug", "gold_wirebug" };
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_player_data_method = player_manager_type_def:get_method("get_PlayerData");
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
@@ -59,76 +63,97 @@ local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
local crit_up_ec_second_timer_field = player_data_type_def:get_field("_CritUpEcSecondTimer");
-- Clothfly
local def_up_buff_second_rate_timer_field = player_data_type_def:get_field("_DefUpBuffSecondRateTimer");
-- Ruby/Gold Wirebugs
local wirebug_powerup_timer_field = player_data_type_def:get_field("_WireBugPowerUpTimer");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Ruby/Gold Wirebugs
local get_marionette_mode_type_method = player_quest_base_type_def:get_method("get_MarionetteModeType");
local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager");
local get_env_creature_name_message_method = message_manager_type_def:get_method("getEnvCreatureNameMessage");
function this.update(player_data)
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
if item_parameter == nil then
error_handler.report("endemic_life_buffs.update", "Failed to access Data: item_parameter");
function this.update(player, player_data)
this.update_generic_timer("cutterfly", player_data, crit_up_ec_second_timer_field);
this.update_generic_timer("clothfly", player_data, def_up_buff_second_rate_timer_field);
this.update_ruby_and_gold_wirebugs(player, player_data);
end
function this.update_generic_timer(endemic_life_buff_key, timer_owner, timer_field, is_infinite)
if is_infinite == nil then is_infinite = false; end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("endemic_life_buffs.update_generic_timer", string.format("Failed to access Data: %s_timer", endemic_life_buff_key));
return;
end
this.update_cutterfly(player_data, item_parameter);
this.update_clothfly(player_data, item_parameter);
end
function this.update_cutterfly(player_data, item_parameter)
local cutterfly_timer = crit_up_ec_second_timer_field:get_data(player_data);
if cutterfly_timer == nil then
error_handler.report("endemic_life_buffs.update_cutterfly", "Failed to access Data: cutterfly_timer");
if utils.number.is_equal(timer, 0) then
this.list[endemic_life_buff_key] = nil;
return;
end
if utils.number.is_equal(cutterfly_timer, 0) then
this.list.cutterfly = nil;
return;
end
local buff = this.list.cutterfly;
if buff == nil then
local name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids.cutterfly);
if name == nil then
error_handler.report("endemic_life_buffs.update_cutterfly", "Failed to access Data: name");
return;
end
buff = buffs.new(buffs.types.consumable, "cutterfly", name, 1, cutterfly_timer / 60);
this.list.cutterfly = buff;
if is_infinite then
timer = nil;
else
buffs.update_timer(buff, cutterfly_timer / 60);
timer = timer / 60;
end
end
function this.update_clothfly(player_data, item_parameter)
local clothfly_timer = def_up_buff_second_rate_timer_field:get_data(player_data);
if clothfly_timer == nil then
error_handler.report("endemic_life_buffs.update_clothfly", "Failed to access Data: clothfly_timer");
this.update_generic(endemic_life_buff_key, 1, timer);
end
function this.update_generic(endemic_life_buff_key, level, timer, duration)
duration = duration or timer;
if singletons.message_manager == nil then
error_handler.report("endemic_life_buffs.update_generic", "Failed to access Data: message_manager");
return;
end
if utils.number.is_equal(clothfly_timer, 0) then
this.list.clothfly = nil;
return;
end
local buff = this.list.clothfly;
if buff == nil then
local name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids.clothfly);
local endemic_life_buff = this.list[endemic_life_buff_key];
if endemic_life_buff == nil then
local name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids[endemic_life_buff_key]);
if name == nil then
error_handler.report("endemic_life_buffs.update_clothfly", "Failed to access Data: name");
error_handler.report("endemic_life_buffs.update_generic", string.format("Failed to access Data: %s -> name", endemic_life_buff_key));
return;
end
buff = buffs.new(buffs.types.consumable, "clothfly", name, 1, clothfly_timer / 60);
this.list.clothfly = buff;
endemic_life_buff = buffs.new(buffs.types.endemic_life_buff, endemic_life_buff_key, name, level, duration);
this.list[endemic_life_buff_key] = endemic_life_buff;
else
buffs.update_timer(buff, clothfly_timer / 60);
endemic_life_buff.level = level;
if timer ~= nil then
buffs.update_timer(endemic_life_buff, timer);
end
end
end
function this.update_ruby_and_gold_wirebugs(player, player_data)
local marionette_mode_type = get_marionette_mode_type_method:call(player);
if marionette_mode_type == nil then
error_handler.report("endemic_life_buffs.update_ruby_and_gold_wirebugs", "Failed to access Data: marionette_mode_type");
end
if marionette_mode_type ~= 1 and marionette_mode_type ~= 2 then
this.list.ruby_wirebug = nil;
this.list.gold_wirebug = nil;
return;
elseif marionette_mode_type ~= 1 then
this.list.ruby_wirebug = nil;
else
this.list.gold_wirebug = nil;
end
local endemic_life_buff_key = marionette_mode_types[marionette_mode_type];
this.update_generic_timer(endemic_life_buff_key, player_data, wirebug_powerup_timer_field);
end
function this.init_names()
-- Nothing to do here

View File

@@ -0,0 +1,315 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local env_creature;
local player_info;
local time;
local abnormal_statuses;
local sdk = sdk;
local tostring = tostring;
local pairs = pairs;
local ipairs = ipairs;
local tonumber = tonumber;
local require = require;
local pcall = pcall;
local table = table;
local string = string;
local Vector3f = Vector3f;
local d2d = d2d;
local math = math;
local json = json;
local log = log;
local fs = fs;
local next = next;
local type = type;
local setmetatable = setmetatable;
local getmetatable = getmetatable;
local assert = assert;
local select = select;
local coroutine = coroutine;
local utf8 = utf8;
local re = re;
local imgui = imgui;
local draw = draw;
local Vector2f = Vector2f;
local reframework = reframework;
local os = os;
local ValueType = ValueType;
local package = package;
this.list = {
rousing_roar = nil,
power_drum = nil,
go_fight_win = nil
};
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_player_data_method = player_manager_type_def:get_method("get_PlayerData");
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Palico: Rousing Roar
local beast_roar_otomo_timer_field = player_data_type_def:get_field("_BeastRoarOtomoTimer");
-- Palico: Power Drum
local kijin_otomo_timer_field = player_data_type_def:get_field("_KijinOtomoTimer");
-- Palico: Go, Fight, Win
local runhigh_otomo_timer_field = player_data_type_def:get_field("_RunhighOtomoTimer");
function this.update(player_data)
this.update_generic_timer("rousing_roar", player_data, beast_roar_otomo_timer_field);
this.update_generic_timer("power_drum", player_data, kijin_otomo_timer_field);
this.update_generic_timer("go_fight_win", player_data, runhigh_otomo_timer_field);
end
function this.update_generic_timer(otomo_move_key, timer_owner, timer_field, is_infinite)
if is_infinite == nil then is_infinite = false; end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("otomo_moves.update_generic_timer", string.format("Failed to access Data: %s_timer", otomo_move_key));
return;
end
if utils.number.is_equal(timer, 0) then
this.list[otomo_move_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(otomo_move_key, 1, timer);
end
function this.update_generic_number_value_field(otomo_move_key, timer_owner, value_field, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = 1; end
if is_infinite == nil then is_infinite = false; end
local level = 1;
if value_field ~= nil then
local value = value_field:get_data(timer_owner);
if value == nil then
error_handler.report("otomo_moves.update_generic_number_value_field", string.format("Failed to access Data: %s_value", otomo_move_key));
return;
end
if value < minimal_value then
this.list[otomo_move_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("otomo_moves.update_generic_number_value_field", string.format("Failed to access Data: %s_timer", otomo_move_key));
return;
end
if value_field == nil and utils.number.is_equal(timer, 0) then
this.list[otomo_move_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(otomo_move_key, level, timer);
end
function this.update_generic_boolean_value_field(otomo_move_key, timer_owner, value_field, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = true; end
if is_infinite == nil then is_infinite = false; end
if value_field ~= nil then
local value = value_field:get_data(timer_owner);
if value == nil then
error_handler.report("otomo_moves.update_generic_boolean_value_field", string.format("Failed to access Data: %s_value", otomo_move_key));
return;
end
if value < minimal_value then
this.list[otomo_move_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("otomo_moves.update_generic_boolean_value_field", string.format("Failed to access Data: %s_timer", otomo_move_key));
return;
end
if value_field == nil and utils.number.is_equal(timer, 0) then
this.list[otomo_move_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(otomo_move_key, 1, timer);
end
function this.update_generic_number_value_method(otomo_move_key, timer_owner, value_method, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = 1; end
if is_infinite == nil then is_infinite = false; end
local level = 1;
if value_method ~= nil then
local value = value_method:call(timer_owner);
if value == nil then
error_handler.report("otomo_moves.update_generic_number_value_method", string.format("Failed to access Data: %s_value", otomo_move_key));
return;
end
if value < minimal_value then
this.list[otomo_move_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("otomo_moves.update_generic_number_value_method", string.format("Failed to access Data: %s_timer", otomo_move_key));
return;
end
if value_method == nil and utils.number.is_equal(timer, 0) then
this.list[otomo_move_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(otomo_move_key, level, timer);
end
function this.update_generic_boolean_value_method(otomo_move_key, timer_owner, value_method, timer_field, is_infinite, minimal_value)
if minimal_value == nil then minimal_value = true; end
if is_infinite == nil then is_infinite = false; end
if value_method ~= nil then
local value = value_method:call(timer_owner);
if value == nil then
error_handler.report("otomo_moves.update_generic_boolean_value_method", string.format("Failed to access Data: %s_value", otomo_move_key));
return;
end
if value ~= minimal_value then
this.list[otomo_move_key] = nil;
return;
end
end
local timer = nil;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("otomo_moves.update_generic_boolean_value_method", string.format("Failed to access Data: %s_timer", otomo_move_key));
return;
end
if value_method == nil and utils.number.is_equal(timer, 0) then
this.list[otomo_move_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
this.update_generic(otomo_move_key, 1, timer);
end
function this.update_generic(otomo_move_key, level, timer, duration)
duration = duration or timer;
local otomo_move = this.list[otomo_move_key];
if otomo_move == nil then
local name = language.current_language.otomo_moves[otomo_move_key];
otomo_move = buffs.new(buffs.types.otomo_move, otomo_move_key, name, level, duration);
this.list[otomo_move_key] = otomo_move;
else
otomo_move.level = level;
if timer ~= nil then
buffs.update_timer(otomo_move, timer);
end
end
end
function this.init_names()
for otomo_move_key, otomo_move in pairs(this.list) do
local name = language.current_language.otomo_moves[otomo_move_key];
if name == nil then
name = otomo_move_key;
end
otomo_move.name = name;
end
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
utils = require("MHR_Overlay.Misc.utils");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
player_info = require("MHR_Overlay.Misc.player_info");
time = require("MHR_Overlay.Game_Handler.time");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
end
function this.init_module()
end
return this;

View File

@@ -67,18 +67,168 @@ this.list = {
resuscitate = nil,
maximum_might = nil,
bloodlust = nil,
frenzied_bloodlust = nil
frenzied_bloodlust = nil,
peak_performance = nil,
dragonheart = nil,
resentment = nil
};
local skill_data_list = {
peak_performance = { id = 3, is_equipped = false },
resentment = { id = 4, is_equipped = false },
resuscitate = { id = 5, is_equipped = false },
maximum_might = { id = 10, is_equipped = false },
heroics = { id = 91, is_equipped = false },
dragonheart = { id = 103, is_equipped = false },
bloodlust = { id = 117, is_equipped = false },
dereliction = { id = 113, is_equipped = false }
-- 1 Pl_EquipSkill_000 Attack Boost
-- 2 Pl_EquipSkill_001 Agitator
-- 3 Pl_EquipSkill_002 Peak Performance
peak_performance = { id = 3, level = 0, is_equipped = false },
-- 4 Pl_EquipSkill_003 Resentment
resentment = { id = 4, level = 0, is_equipped = false },
-- 5 Pl_EquipSkill_004 Resuscitate
resuscitate = { id = 5, level = 0, is_equipped = false },
-- 6 Pl_EquipSkill_005 Critical Eye
-- 7 Pl_EquipSkill_006 Critical Boost
-- 8 Pl_EquipSkill_007 Weakness Exploit
-- 9 Pl_EquipSkill_008 Latent Power
-- 10 Pl_EquipSkill_009 Maximum Might
maximum_might = { id = 10, level = 0, is_equipped = false },
-- 11 Pl_EquipSkill_010 Critical Element
-- 12 Pl_EquipSkill_011 Master's Touch
-- 13 Pl_EquipSkill_012 Fire Attack
-- 14 Pl_EquipSkill_013 Water Attack
-- 15 Pl_EquipSkill_014 Ice Attack
-- 16 Pl_EquipSkill_015 Thunder Attack
-- 17 Pl_EquipSkill_016 Dragon Attack
-- 18 Pl_EquipSkill_017 Poison Attack
-- 19 Pl_EquipSkill_018 Paralysis Attack
-- 20 Pl_EquipSkill_019 Sleep Attack
-- 21 Pl_EquipSkill_020 Blast Attack
-- 22 Pl_EquipSkill_021 Handicraft
-- 23 Pl_EquipSkill_022 Razor Sharp
-- 24 Pl_EquipSkill_023 Spare Shot
-- 25 Pl_EquipSkill_024 Protective Polish
-- 26 Pl_EquipSkill_025 Mind's Eye
-- 27 Pl_EquipSkill_026 Ballistics
-- 28 Pl_EquipSkill_027 Bludgeoner
-- 29 Pl_EquipSkill_028 Bow Charge Plus
-- 30 Pl_EquipSkill_029 Focus
-- 31 Pl_EquipSkill_030 Power Prolonger
-- 32 Pl_EquipSkill_031 Marathon Runner
-- 33 Pl_EquipSkill_032 Constitution
-- 34 Pl_EquipSkill_033 Stamina Surge
-- 35 Pl_EquipSkill_034 Guard
-- 36 Pl_EquipSkill_035 Guard Up
-- 37 Pl_EquipSkill_036 Offensive Guard
-- 38 Pl_EquipSkill_037 Critical Draw
-- 39 Pl_EquipSkill_038 Punishing Draw
-- 40 Pl_EquipSkill_039 Quick Sheathe
-- 41 Pl_EquipSkill_040 Slugger
-- 42 Pl_EquipSkill_041 Stamina Thief
-- 43 Pl_EquipSkill_042 Affinity Sliding
-- 44 Pl_EquipSkill_043 Horn Maestro
-- 45 Pl_EquipSkill_044 Artillery
-- 46 Pl_EquipSkill_045 Load Shells
-- 47 Pl_EquipSkill_046 Special Ammo Boost
-- 48 Pl_EquipSkill_047 Normal/Rapid Up
-- 49 Pl_EquipSkill_048 Pierce Up
-- 50 Pl_EquipSkill_049 Spread Up
-- 51 Pl_EquipSkill_050 Ammo Up
-- 52 Pl_EquipSkill_051 Reload Speed
-- 53 Pl_EquipSkill_052 Recoil Down
-- 54 Pl_EquipSkill_053 Steadiness
-- 55 Pl_EquipSkill_054 Rapid Fire Up
-- 56 Pl_EquipSkill_055 Defense Boost
-- 57 Pl_EquipSkill_056 Divine Blessing
-- 58 Pl_EquipSkill_057 Recovery Up
-- 59 Pl_EquipSkill_058 Recovery Speed
-- 60 Pl_EquipSkill_059 Speed Eating
-- 61 Pl_EquipSkill_060 Earplugs
-- 62 Pl_EquipSkill_061 Windproof
-- 63 Pl_EquipSkill_062 Tremor Resistance
-- 64 Pl_EquipSkill_063 Bubbly Dance
-- 65 Pl_EquipSkill_064 Evade Window
-- 66 Pl_EquipSkill_065 Evade Extender
-- 67 Pl_EquipSkill_066 Fire Resistance
-- 68 Pl_EquipSkill_067 Water Resistance
-- 69 Pl_EquipSkill_068 Ice Resistance
-- 70 Pl_EquipSkill_069 Thunder Resistance
-- 71 Pl_EquipSkill_070 Dragon Resistance
-- 72 Pl_EquipSkill_071 Blight Resistance
-- 73 Pl_EquipSkill_072 Poison Resistance
-- 74 Pl_EquipSkill_073 Paralysis Resistance
-- 75 Pl_EquipSkill_074 Sleep Resistance
-- 76 Pl_EquipSkill_075 Stun Resistance
-- 77 Pl_EquipSkill_076 Muck Resistance
-- 78 Pl_EquipSkill_077 Blast Resistance
-- 79 Pl_EquipSkill_078 Botanist
-- 80 Pl_EquipSkill_079 Geologist
-- 81 Pl_EquipSkill_080 Partbreaker
-- 82 Pl_EquipSkill_081 Capture Master
-- 83 Pl_EquipSkill_082 Carving Master
-- 84 Pl_EquipSkill_083 Good Luck
-- 85 Pl_EquipSkill_084 Speed Sharpening
-- 86 Pl_EquipSkill_085 Bombardier
-- 87 Pl_EquipSkill_086 Mushroomancer
-- 88 Pl_EquipSkill_087 Item Prolonger
-- 89 Pl_EquipSkill_088 Wide-Range
-- 90 Pl_EquipSkill_089 Free Meal
-- 91 Pl_EquipSkill_090 Heroics
heroics = { id = 91, level = 0, is_equipped = false },
-- 92 Pl_EquipSkill_091 Fortify
-- 93 Pl_EquipSkill_092 Flinch Free
-- 94 Pl_EquipSkill_093 Jump Master
-- 95 Pl_EquipSkill_094 Carving Pro
-- 96 Pl_EquipSkill_095 Hunger Resistance
-- 97 Pl_EquipSkill_096 Leap of Faith
-- 98 Pl_EquipSkill_097 Diversion
-- 99 Pl_EquipSkill_098 Master Mounter
-- 100 Pl_EquipSkill_099 Chameleos Blessing
-- 101 Pl_EquipSkill_100 Kushala Blessing
-- 102 Pl_EquipSkill_101 Teostra Blessing
-- 103 Pl_EquipSkill_102 Dragonheart
dragonheart = { id = 103, level = 0, is_equipped = false },
-- 104 Pl_EquipSkill_103 Wirebug Whisperer
-- 105 Pl_EquipSkill_104 Wall Runner
-- 106 Pl_EquipSkill_105 Counterstrike
-- 107 Pl_EquipSkill_106 Rapid Morph
-- 108 Pl_EquipSkill_107 Hellfire Cloak
-- 109 Pl_EquipSkill_108 Wind Alignment
-- 110 Pl_EquipSkill_109 Thunder Alignment
-- 111 Pl_EquipSkill_110 Stormsoul
-- 112 Pl_EquipSkill_200 Blood Rite
-- 113 Pl_EquipSkill_201 Dereliction
dereliction = { id = 113, level = 0, is_equipped = false },
-- 114 Pl_EquipSkill_202 Furious
-- 115 Pl_EquipSkill_203 Mail of Hellfire
-- 116 Pl_EquipSkill_204 Coalescence
-- 117 Pl_EquipSkill_205 Bloodlust
bloodlust = { id = 117, level = 0, is_equipped = false },
-- 118 Pl_EquipSkill_206 Defiance
-- 119 Pl_EquipSkill_207 Sneak Attack
-- 120 Pl_EquipSkill_208 Adrenaline Rush
-- 122 Pl_EquipSkill_209 Redirection
-- 123 Pl_EquipSkill_210 Spiribird's Call
-- 124 Pl_EquipSkill_211 Charge Master
-- 125 Pl_EquipSkill_212 Foray
-- 126 Pl_EquipSkill_213 Tune-Up
-- 127 Pl_EquipSkill_214 Grinder (S)
-- 128 Pl_EquipSkill_215 Bladescale Hone
-- 129 Pl_EquipSkill_216 Wall Runner (Boost)
-- 133 Pl_EquipSkill_217 Quick Breath
-- 130 Pl_EquipSkill_218 Element Exploit
-- 131 Pl_EquipSkill_219 Burst
-- 132 Pl_EquipSkill_220 Guts
-- 134 Pl_EquipSkill_221 Status Trigger
-- 135 Pl_EquipSkill_222 Intrepid Heart
-- 136 Pl_EquipSkill_223 Buildup Boost
-- 121 Pl_EquipSkill_224 Embolden
-- 138 Pl_EquipSkill_225 Wind Mantle
-- 139 Pl_EquipSkill_226 Powder Mantle
-- 137 Pl_EquipSkill_227 Berserk
-- 145 Pl_EquipSkill_228 Strife
-- 140 Pl_EquipSkill_229 Frostcraft
-- 141 Pl_EquipSkill_230 Dragon Conversion
-- 142 Pl_EquipSkill_231 Heaven-Sent
-- 143 Pl_EquipSkill_232 Frenzied Bloodlust
-- 144 Pl_EquipSkill_233 Blood Awakening
-- 146 Pl_EquipSkill_234 Shock Absorber
-- 147 Pl_EquipSkill_235 Inspiration
}
local burst_breakpoint = 5;
@@ -92,6 +242,8 @@ local maximum_might_previous_timer_value = 0;
local frenzied_bloodlust_duration = 0;
local frenzied_bloodlust_sheathed_duration = 0;
local dragonheart_breakpoints = {0.5, 0.5, 0.7, 0.7, 0.8};
local wind_mantle_duration = 15;
local wind_mantle_breakpoints = { 20, 10 }; -- Sword & Shield, Lance, Hammer, Switch Axe, Insect Glaive, Long Sword, Hunting Horn
local wind_mantle_special_breakpoints = {
@@ -109,7 +261,6 @@ local get_player_data_method = player_manager_type_def:get_method("get_PlayerDat
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter");
local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:get_return_type();
local demondrug_atk_up_field = player_user_data_item_parameter_type_def:get_field("_DemondrugAtkUp");
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Burst
@@ -147,7 +298,10 @@ local whole_body_timer_field = player_data_type_def:get_field("_WholeBodyTimer")
-- Frenzied Bloodlust
local equip_skill_231_wire_num_timer_field = player_data_type_def:get_field("_EquipSkill231_WireNumTimer");
local equip_skill_231_wp_off_timer_field = player_data_type_def:get_field("_EquipSkill231_WpOffTimer");
-- Resentment
local r_vital_field = player_data_type_def:get_field("_r_Vital");
-- Status Trigger
local equip_skill_222_timer_field = player_data_type_def:get_field("_EquipSkill222_Timer");
@@ -166,7 +320,10 @@ local is_debuff_state_method = player_base_type_def:get_method("isDebuffState");
local player_skill_list_type_def = get_player_skill_list_method:get_return_type();
local has_skill_method = player_skill_list_type_def:get_method("hasSkill");
local get_skill_data_method = player_skill_list_type_def:get_method("getSkillData");
local skill_data_type_def = get_skill_data_method:get_return_type();
local skill_lv_field = skill_data_type_def:get_field("SkillLv");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Wind Mantle
@@ -188,7 +345,7 @@ function this.update(player, player_data)
-- local fields = player_quest_base_type_def:get_fields();
-- xy = ""
-- xy = "Player:\n";
-- for i = 1, 999 do
-- local field = fields[i];
-- if field == nil then
@@ -206,6 +363,26 @@ function this.update(player, player_data)
-- end
-- end
-- fields = player_data_type_def:get_fields();
-- xy = xy .. "Player Data:\n";
-- for i = 1, 999 do
-- local field = fields[i];
-- if field == nil then
-- break;
-- end
-- local value = field:get_data(player_data);
-- if qeree[field] == nil then
-- qeree[field] = value;
-- end
-- if qeree[field] ~= value then
-- xy = string.format("%s%d %s = %s\n", xy, i, field:get_name(), tostring(value));
-- end
-- end
this.update_equipped_skill_data(player);
this.update_dereliction(player_data);
@@ -213,6 +390,9 @@ function this.update(player, player_data)
this.update_maximum_might(player_data);
this.update_bloodlust();
this.update_frenzied_bloodlust(player, player_data);
this.update_peak_performance();
this.update_dragonheart();
this.update_resentment(player_data);
this.update_generic_number_value_field("burst", player_data,
rengeki_power_up_count_field, rengeki_power_up_timer_field, false, nil, burst_breakpoint);
@@ -233,6 +413,7 @@ function this.update(player, player_data)
this.update_generic_timer("hellfire_cloak", player_data, onibi_powerup_timer_field);
this.update_generic_timer("agitator", player_data, challenge_timer_field, true);
this.update_generic_timer("furious", player_data, furious_skill_stamina_buff_second_timer_field);
this.update_generic_timer("status_trigger", player_data, equip_skill_222_timer_field);
this.update_generic_boolean_value_method("heaven_sent", player, is_active_equip_skill_230_method);
this.update_generic_boolean_value_method("heroics", player, is_predicament_power_up_method);
@@ -255,13 +436,26 @@ function this.update_equipped_skill_data(player)
-- end
for skill_key, skill_data in pairs(skill_data_list) do
local has_skill = has_skill_method:call(player_skill_list, skill_data.id, 1);
if has_skill == nil then
error_handler.report("skills.update_equipped_skill_data", string.format("Failed to access Data: %s -> has_skill", skill_key));
local re_skill_data = get_skill_data_method:call(player_skill_list, skill_data.id);
if re_skill_data == nil then
goto continue;
end
skill_data.is_equipped = has_skill;
local skill_level = skill_lv_field:get_data(re_skill_data);
if skill_level == nil then
error_handler.report("skills.update_equipped_skill_data", string.format("Failed to access Data: %s -> skill_level", skill_key));
goto continue;
end
if skill_level <= 0 then
skill_data.is_equipped = false;
skill_data.level = 0;
goto continue;
end
skill_data.is_equipped = true;
skill_data.level = skill_level;
::continue::
end
@@ -299,9 +493,9 @@ function this.update_generic_timer(skill_key, timer_owner, timer_field, is_infin
this.update_generic(skill_key, 1, timer);
end
function this.update_generic_number_value_field(skill_key, timer_owner, value_field, timer_field, is_infinite, minimal_value, breakpoint)
function this.update_generic_number_value_field(skill_key, timer_owner, value_field, timer_field, is_infinite, minimal_value, level_breakpoint)
if minimal_value == nil then minimal_value = 1; end
breakpoint = breakpoint or 1000000;
level_breakpoint = level_breakpoint or 1000000;
if is_infinite == nil then is_infinite = false; end
local skill_data = skill_data_list[skill_key];
@@ -325,7 +519,7 @@ function this.update_generic_number_value_field(skill_key, timer_owner, value_fi
return;
end
if value >= breakpoint then
if value >= level_breakpoint then
level = 2;
end
end
@@ -400,9 +594,9 @@ function this.update_generic_boolean_value_field(skill_key, timer_owner, value_f
this.update_generic(skill_key, 1, timer);
end
function this.update_generic_number_value_method(skill_key, timer_owner, value_method, timer_field, is_infinite, minimal_value, breakpoint)
function this.update_generic_number_value_method(skill_key, timer_owner, value_method, timer_field, is_infinite, minimal_value, level_breakpoint)
if minimal_value == nil then minimal_value = 1; end
breakpoint = breakpoint or 1000000;
level_breakpoint = level_breakpoint or 1000000;
if is_infinite == nil then is_infinite = false; end
local skill_data = skill_data_list[skill_key];
@@ -426,7 +620,7 @@ function this.update_generic_number_value_method(skill_key, timer_owner, value_m
return;
end
if value >= breakpoint then
if value >= level_breakpoint then
level = 2;
end
end
@@ -508,7 +702,7 @@ function this.update_generic(skill_key, level, timer, duration)
if skill == nil then
local name = language.current_language.skills[skill_key];
skill = buffs.new(buffs.types.skill, skill_key, name, level, timer, duration);
skill = buffs.new(buffs.types.skill, skill_key, name, level, duration);
this.list[skill_key] = skill;
else
skill.level = level;
@@ -731,6 +925,63 @@ function this.update_frenzied_bloodlust(player, player_data)
end
end
function this.update_peak_performance()
if not skill_data_list.peak_performance.is_equipped then
this.list.peak_performance = nil;
return;
end
if player_info.list.health ~= player_info.list.max_health then
this.list.peak_performance = nil;
return;
end
this.update_generic("peak_performance", 1);
end
function this.update_dragonheart()
if not skill_data_list.dragonheart.is_equipped then
this.list.dragonheart = nil;
return;
end
local breakpoint = dragonheart_breakpoints[skill_data_list.dragonheart.level];
local health_percentage = 1;
local max_health = player_info.list.max_health;
if max_health ~= 0 then
health_percentage = player_info.list.health / max_health;
end
if health_percentage > breakpoint then
this.list.dragonheart = nil;
return;
end
this.update_generic("dragonheart", 1);
end
function this.update_resentment(player_data)
if not skill_data_list.resentment.is_equipped then
this.list.resentment = nil;
return;
end
local r_vital = r_vital_field:get_data(player_data);
if r_vital == nil then
error_handler.report("skills.update_resentment", "Failed to access Data: r_vital");
return;
end
if player_info.list.health >= r_vital then
this.list.resentment = nil;
return;
end
this.update_generic("resentment", 1);
end
function this.init_names()
for skill_key, skill in pairs(this.list) do
local name = language.current_language.skills[skill_key];

View File

@@ -232,7 +232,7 @@ function this.update_my_otomos()
local myself_id = players.myself.id;
local otomo = this.otomo_list[myself_id];
if otomo == nil then
if otomo == nil or name ~= otomo.name then
otomo = this.new(0, name, level, players.types.my_otomo);
this.otomo_list[myself_id] = otomo;
end
@@ -255,7 +255,7 @@ function this.update_my_otomos()
-- the secondary otomo is actually the 4th one!
local otomo = this.otomo_list[this.my_second_otomo_id];
if otomo == nil then
if otomo == nil or name ~= otomo.name then
otomo = this.new(this.my_second_otomo_id, name, level, players.types.my_otomo);
this.otomo_list[this.my_second_otomo_id] = otomo;
end

View File

@@ -43,7 +43,9 @@ this.list = {};
this.creature_ids = {
cutterfly = 50,
clothfly = 7
clothfly = 7,
ruby_wirebug = 62,
gold_wirebug = 63
};
function this.new(REcreature)

View File

@@ -105,7 +105,6 @@ function this.init_global_timers()
this.new_timer(players.update_myself_position, 1);
this.new_timer(buffs.update, 1/60);
this.new_timer(player_info.update, 0.5);
end
function this.update_timers()

View File

@@ -7603,6 +7603,74 @@ function this.init_default()
anchor = "Bottom-Right"
},
health_label = {
visibility = false,
settings = {
right_alignment_shift = 16
},
text_formatting = "%s",
include = {
name = true,
value = true,
max_value = true
},
offset = {
x = -514,
y = -35
},
color = 0xFFFEFF88,
shadow = {
visibility = true,
offset = {
x = 1,
y = 1
},
color = 0xFF000000
}
},
stamina_label = {
visibility = false,
settings = {
right_alignment_shift = 16
},
text_formatting = "%s",
include = {
name = true,
value = true,
max_value = true
},
offset = {
x = -382,
y = -35
},
color = 0xFFFEFF88,
shadow = {
visibility = true,
offset = {
x = 1,
y = 1
},
color = 0xFF000000
}
},
attack_label = {
visibility = true,
@@ -7867,40 +7935,6 @@ function this.init_default()
}
},
stamina_label = {
visibility = false,
settings = {
right_alignment_shift = 16
},
text_formatting = "%s",
include = {
name = true,
value = true,
max_value = true
},
offset = {
x = -382,
y = -35
},
color = 0xFFFEFF88,
shadow = {
visibility = true,
offset = {
x = 1,
y = 1
},
color = 0xFF000000
}
},
element_label = {
visibility = false,

View File

@@ -263,33 +263,210 @@ this.default_language = {
},
skills = {
burst = "Burst",
kushala_daora_soul = "Kushala Daora Soul",
intrepid_heart = "Intrepid Heart",
dereliction = "Dereliction",
latent_power = "Latent Power",
protective_polish = "Protective Polish",
wind_mantle = "Wind Mantle",
heaven_sent = "Heaven-Sent",
grinder_s = "Grinder (S)",
counterstrike = "Counterstrike",
affinity_sliding = "Affinity Sliding",
coalescence = "Coalescence",
adrenaline_rush = "Adrenaline Rush",
wall_runner = "Wall Runner",
offensive_guard = "Offensive Guard",
hellfire_cloak = "Hellfire Cloak",
-- attack_boost = "Attack Boost",
agitator = "Agitator",
furious = "Furious",
heroics = "Heroics",
peak_performance = "Peak Performance",
resentment = "Resentment",
resuscitate = "Resuscitate",
-- critical_eye = "Critical Eye",
-- critical_boost = "Critical Boost",
-- weakness_exploit = "Weakness Exploit",
latent_power = "Latent Power",
maximum_might = "Maximum Might",
-- critical_element = "Critical Element",
-- masters_touch = "Master's Touch",
-- fire_attack = "Fire Attack",
-- water_attack = "Water Attack",
-- ice_attack = "Ice Attack",
-- thunder_attack = "Thunder Attack",
-- dragon_attack = "Dragon Attack",
-- poison_attack = "Poison Attack",
-- paralysis_attack = "Paralysis Attack",
-- sleep_attack = "Sleep Attack",
-- blast_attack = "Blast Attack",
-- handicraft = "Handicraft",
-- razor_sharp = "Razor Sharp",
-- spare_shot = "Spare Shot",
protective_polish = "Protective Polish",
-- minds_eye = "Mind's Eye",
-- ballistics = "Ballistics",
-- bludgeoner = "Bludgeoner",
-- bow_charge_plus = "Bow Charge Plus",
-- focus = "Focus",
-- power_prolonger = "Power Prolonger",
-- marathon_runner = "Marathon Runner",
-- constitution= "Constitution",
-- stamina_surge = "Stamina Surge",
-- guard = "Guard",
-- guard_up = "Guard Up",
offensive_guard = "Offensive Guard",
-- critical_draw = "Critical Draw",
-- punishing_draw = "Punishing Draw",
-- quick_sheathe = "Quick Sheathe",
-- slugger = "Slugger",
-- stamina_thief = "Stamina Thief",
affinity_sliding = "Affinity Sliding",
-- horn_maestro = "Horn Maestro",
-- artillery = "Artillery",
-- load_shells = "Load Shells",
-- special_ammo_boost = "Special Ammo Boost",
-- normal_rapid_up = "Normal/Rapid Up",
-- pierce_up = "Pierce Up",
-- spread_up = "Spread Up",
-- ammo_up = "Ammo Up",
-- reload_speed = "Reload Speed",
-- recoil_down = "Recoil Down",
-- steadiness = "Steadiness",
-- rapid_fire_up = "Rapid Fire Up",
-- defense_boost = "Defense Boost",
-- divine_blessing = "Divine Blessing",
-- recovery_up = "Recovery Up",
-- recovery_speed = "Recovery Speed",
-- speed_eating = "Speed Eating",
-- earplugs = "Earplugs",
-- windproof = "Windproof",
-- tremor_resistance = "Tremor Resistance",
-- bubbly_dance = "Bubbly Dance",
-- evade_window = "Evade Window",
-- evade_extender = "Evade Extender",
-- fire_resistance = "Fire Resistance",
-- water_resistance = "Water Resistance",
-- ice_resistance = "Ice Resistance",
-- thunder_resistance = "Thunder Resistance",
-- Dragon_resistance = "Dragon Resistance",
-- blight_resistance = "Blight Resistance",
-- poison_resistance = "Poison Resistance",
-- paralysis_resistance = "Paralysis Resistance",
-- sleep_resistance = "Sleep Resistance",
-- stun_resistance = "Stun Resistance",
-- muck_resistance = "Muck Resistance",
-- blast_resistance = "Blast Resistance",
-- botanist = "Botanist",
-- geologist = "Geologist",
-- partbreaker = "Partbreaker",
-- capture_master = "Capture Master",
-- carving_master = "Carving Master",
-- good_luck = "Good Luck",
-- speed_sharpening = "Speed Sharpening",
-- bombardier = "Bombardier",
-- mushroomancer = "Mushroomancer",
-- item_prolonger = "Item Prolonger",
-- wide_range = "Wide-Range",
-- free_meal = "Free Meal",
heroics = "Heroics",
-- fortify = "Fortify",
-- flinch_free = "Flinch Free",
-- jump_master = "Jump Master",
-- carving_pro = "Carving Pro",
-- hunger_resistance = "Hunger Resistance",
-- leap_of_faith = "Leap of Faith",
-- diversion = "Diversion",
-- master_mounter = "Master Mounter",
-- chameleos_blessing = "Chameleos Blessing",
-- kushala_blessing = "Kushala Blessing",
-- teostra_blessing = "Teostra Blessing",
dragonheart = "Dragonheart",
-- wirebug_whisperer = "Wirebug Whisperer",
wall_runner = "Wall Runner",
counterstrike = "Counterstrike",
-- rapid_morph = "Rapid Morph",
hellfire_cloak = "Hellfire Cloak",
-- wind_alignment = "Wind Alignment",
-- thunder_alignment = "Thunder Alignment",
-- stormsoul = "Stormsoul",
-- blood_rite = "Blood Rite",
dereliction = "Dereliction",
furious = "Furious",
-- mail_of_hellfire = "Mail of Hellfire",
coalescence = "Coalescence",
bloodlust = "Bloodlust",
frenzied_bloodlust = "Frenzied Bloodlust"
-- defiance = "Defiance",
-- sneak_attack = "Sneak Attack",
adrenaline_rush = "Adrenaline Rush",
-- redirection = "Redirection",
-- spiribirds_call = "Spiribird's Call",
-- charge_master = "Charge Master",
-- foray = "Foray",
-- tune_up = "Tune-Up",
grinder_s = "Grinder (S)",
-- bladescale_hone = "Bladescale Hone",
-- wall_runner_boost = "Wall Runner (Boost)",
-- quick_breath = "Quick Breath",
-- element_exploit = "Element Exploit",
burst = "Burst",
-- guts = "Guts",
status_trigger = "Status Trigger",
intrepid_heart = "Intrepid Heart",
-- buildup_boost = "Buildup Boost",
-- embolden = "Embolden",
wind_mantle = "Wind Mantle",
-- powder_mantle = "Powder Mantle",
-- berserk = "Berserk",
-- strife = "Strife",
-- frostcraft = "Frostcraft",
-- dragon_conversion = "Dragon Conversion",
heaven_sent = "Heaven-Sent",
frenzied_bloodlust = "Frenzied Bloodlust",
-- blood_awakening = "Blood Awakening",
-- shock_absorber = "Shock Absorber",
-- inspiration = "Inspiration",
kushala_daora_soul = "Kushala Daora Soul",
},
dangos = {
dango_defender_hi = "Dango Defender (Hi)"
dango_hurler = "Dango Hurler",
dango_specialist = "Dango Specialist",
dango_deflector = "Dango Deflector",
dango_bulker = "Dango Bulker",
dango_booster = "Dango Booster",
dango_slugger = "Dango Slugger",
dango_bombardier = "Dango Bombardier",
dango_temper = "Dango Temper",
dango_connector = "Dango Connector",
dango_insurance = "Dango Insurance",
dango_defender_hi = "Dango Defender (Hi)",
dango_medic = "Dango Medic",
dango_medic_hi = "Dango Medic (Hi)",
dango_reviver = "Dango Reviver",
dango_immunizer = "Dango Immunizer",
dango_fire_res = "Dango Fire Res",
dango_water_res = "Dango Water Res",
dango_thunder_res = "Dango Thunder Res ",
dango_ice_res = "Dango Ice Res",
dango_dragon_res = "Dango Dragon Res",
dango_fire_res_hi = "Dango Fire Res (Hi)",
dango_water_res_hi = "Dango Water Res (Hi)",
dango_thunder_res_hi = "Dango Thunder Res (Hi)",
dango_ice_res_hi = "Dango Ice Res (Hi)",
dango_dragon_res_hi = "Dango Dragon Res (Hi)",
dango_moxie = "Dango Moxie",
dango_adrenaline = "Dango Adrenaline",
dango_defender = "Dango Defender",
dango_guard = "Dango Guard",
dango_driver = "Dango Driver",
dango_polisher = "Dango Polisher",
dango_pyro = "Dango Pyro",
dango_feet = "Dango Feet",
dango_marksman = "Dango Marksman",
dango_wall_runner = "Dango Wall Runner",
dango_fighter = "Dango Fighter",
dango_glutton = "Dango Glutton",
dango_weakener = "Dango Weakener",
dango_rider = "Dango Rider",
dango_hunter = "Dango Hunter",
dango_shifter = "Dango Shifter",
super_recovery_dango = "Super Recovery Dango",
dango_flyer = "Dango Flyer"
},
otomo_moves = {
rousing_roar = "Rousing Roar",
power_drum = "Power Drum",
go_fight_win = "Go, Fight, Win"
},
UI = {
@@ -677,6 +854,8 @@ this.default_language = {
value = "Value",
stats_UI = "Stats UI",
health_label = "Health Label",
stamina_label = "Stamina Label",
attack_label = "Attack Label",
defense_label = "Defense Label",
affinity_label = "Affinity Label",
@@ -685,7 +864,6 @@ this.default_language = {
thunder_resistance_label = "Thunder Resistance Label",
ice_resistance_label = "Ice Resistance Label",
dragon_resistance_label = "Dragon Resistance Label",
stamina_label = "Stamina Label",
element_label = "Element Label",
element_2_label = "Element 2 Label"
},

View File

@@ -8,6 +8,7 @@ local utils;
local error_handler;
local quest_status;
local time;
local dangos;
local sdk = sdk;
local tostring = tostring;
@@ -42,6 +43,9 @@ local ValueType = ValueType;
local package = package;
this.list = {
health = 0;
max_health = 0;
attack = 0;
defense = 0;
affinity = 0;
@@ -62,6 +66,8 @@ this.list = {
dragon_resistance = 0;
};
local should_health_update = true;
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
local get_player_method = player_manager_type_def:get_method("getPlayer");
local find_master_player_method = player_manager_type_def:get_method("findMasterPlayer");
@@ -71,10 +77,12 @@ local get_player_data_method = player_base_type_def:get_method("get_PlayerData")
local player_data_type_def = get_player_data_method:get_return_type();
local get_vital_method = player_data_type_def:get_method("get_vital");
local attack_field = player_data_type_def:get_field("_Attack");
local defence_field = player_data_type_def:get_field("_Defence");
local critical_rate_field = player_data_type_def:get_field("_CriticalRate");
local vital_max_field = player_data_type_def:get_field("_vitalMax");
local stamina_field = player_data_type_def:get_field("_stamina");
local stamina_max_field = player_data_type_def:get_field("_staminaMax");
@@ -91,6 +99,17 @@ local system_array_type_def = sdk.find_type_definition("System.Array");
local get_length_method = system_array_type_def:get_method("get_Length");
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
local player_quest_base_update_method = player_quest_base_type_def:get_method("update");
local is_master_player_method = player_quest_base_type_def:get_method("isMasterPlayer");
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
-- Dango Adrenaline
local is_kitchen_skill_predicament_powerup_method = player_base_type_def:get_method("isKitchenSkillPredicamentPowerUp");
local master_player_ref = nil;
local master_player_data_ref = nil;
function this.update()
if quest_status.flow_state == quest_status.flow_states.NONE then
return;
@@ -119,6 +138,12 @@ function this.update()
error_handler.report("player_info.update", "Failed to access Data: master_player_data");
end
master_player_ref = master_player;
master_player_data_ref = master_player_data;
should_health_update = true;
this.update_generic("max_health", master_player_data, vital_max_field);
this.update_generic("stamina", master_player_data, stamina_field);
this.list.stamina = math.floor(this.list.stamina / 30);
@@ -235,6 +260,41 @@ function this.update_resistances(player_data)
end
end
function this.on_pre_player_update(quest_player_base)
if not should_health_update then
return;
end
if quest_player_base ~= master_player_ref then
return;
end
this.update_health(quest_player_base);
this.update_dango_adrenaline(quest_player_base);
should_health_update = false;
end
function this.update_health(quest_player_base)
local vital = get_vital_method:call(master_player_data_ref);
if vital == nil then
error_handler.report("player_info.update_health", "Failed to access Data: vital");
return;
end
this.list.health = vital;
end
function this.update_dango_adrenaline(quest_player_base)
local is_kitchen_skill_predicament_powerup = is_kitchen_skill_predicament_powerup_method:call(master_player_ref);
if is_kitchen_skill_predicament_powerup == nil then
error_handler.report("player_info.update_dango_adrenaline", "Failed to access Data: is_kitchen_skill_predicament_powerup");
return;
end
dangos.is_dango_adrenaline_active = is_kitchen_skill_predicament_powerup;
end
function this.init_dependencies()
singletons = require("MHR_Overlay.Game_Handler.singletons");
customization_menu = require("MHR_Overlay.UI.customization_menu");
@@ -249,9 +309,16 @@ function this.init_dependencies()
error_handler = require("MHR_Overlay.Misc.error_handler");
quest_status = require("MHR_Overlay.Game_Handler.quest_status");
time = require("MHR_Overlay.Game_Handler.time");
dangos = require("MHR_Overlay.Buffs.dangos");
end
function this.init_module()
sdk.hook(player_quest_base_update_method, function(args)
local quest_player_base = sdk.to_managed_object(args[2]);
this.on_pre_player_update(quest_player_base);
end, function(retval)
return retval;
end);
end
return this;

View File

@@ -12,6 +12,7 @@ local error_handler;
local skills;
local dangos;
local abnormal_statuses;
local otomo_moves;
local sdk = sdk;
local tostring = tostring;
@@ -114,6 +115,16 @@ function this.update()
::continue6::
end
for key, otomo_move in pairs(otomo_moves.list) do
if not otomo_move.is_active then
goto continue6;
end
table.insert(_displayed_buffs, otomo_move);
::continue6::
end
displayed_buffs = this.sort_buffs(_displayed_buffs, cached_config);
end
@@ -196,6 +207,7 @@ function this.init_dependencies()
skills = require("MHR_Overlay.Buffs.skills");
dangos = require("MHR_Overlay.Buffs.dangos");
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
end
function this.init_module()

View File

@@ -71,6 +71,8 @@ function this.update()
table.insert(_displayed_creatures, creature);
::continue::
end
displayed_creatures = _displayed_creatures;
end
function this.draw()

View File

@@ -60,6 +60,7 @@ this.label_list = {
};
this.affinity_label = nil;
this.health_label = nil;
this.stamina_label = nil;
this.element_label = nil;
this.element_2_label = nil;
@@ -81,7 +82,11 @@ function this.draw()
for label_key, label in pairs(this.label_list) do
local name_text = "";
if label.include.name then
if label.include.value then
name_text = string.format("%s: ", cached_names[label_key]);
else
name_text = string.format("%s", cached_names[label_key]);
end
end
if label.include.value then
@@ -93,22 +98,38 @@ function this.draw()
::continue::
end
-- Affinity Label
local affinity_name_text = "";
if this.affinity_label.include.name then
affinity_name_text = string.format("%s: ", cached_names.affinity);
-- Health Label
local health_name_text = "";
if this.health_label.include.name then
health_name_text = string.format("%s: ", language.current_language.customization_menu.health);
if this.health_label.include.value or this.health_label.include.max_value then
health_name_text = string.format("%s: ", language.current_language.customization_menu.health);
else
health_name_text = string.format("%s", language.current_language.customization_menu.health);
end
end
if this.affinity_label.include.value then
affinity_name_text = string.format("%s%s%%", affinity_name_text, tostring(player_info.list.affinity));
if this.health_label.include.value and not this.health_label.include.max_value then
health_name_text = string.format("%s%s", health_name_text, tostring(player_info.list.health));
elseif not this.health_label.include.value and this.health_label.include.max_value then
health_name_text = string.format("%s%s", health_name_text, tostring(player_info.list.max_health));
elseif this.health_label.include.value and this.health_label.include.max_value then
health_name_text = string.format("%s%s/%s", health_name_text, tostring(player_info.list.health), tostring(player_info.list.max_health));
end
drawing.draw_label(this.affinity_label, position_on_screen, 1, affinity_name_text);
drawing.draw_label(this.health_label, position_on_screen, 1, health_name_text);
-- Stamina Label
local stamina_name_text = "";
if this.stamina_label.include.name then
if this.stamina_label.include.value or this.stamina_label.include.max_value then
stamina_name_text = string.format("%s: ", cached_names.stamina);
else
stamina_name_text = string.format("%s", cached_names.stamina);
end
end
if this.stamina_label.include.value and not this.stamina_label.include.max_value then
@@ -123,6 +144,22 @@ function this.draw()
drawing.draw_label(this.stamina_label, position_on_screen, 1, stamina_name_text);
-- Affinity Label
local affinity_name_text = "";
if this.affinity_label.include.name then
if this.affinity_label.include.value then
affinity_name_text = string.format("%s: ", cached_names.affinity);
else
affinity_name_text = string.format("%s", cached_names.affinity);
end
end
if this.affinity_label.include.value then
affinity_name_text = string.format("%s%s%%", affinity_name_text, tostring(player_info.list.affinity));
end
drawing.draw_label(this.affinity_label, position_on_screen, 1, affinity_name_text);
-- Element Label
if player_info.list.element_type ~= 0 then
@@ -131,26 +168,33 @@ function this.draw()
local ailment_names = language.current_language.ailments;
local ailment_name = "";
if player_info.list.element_type == 1 then
element_name_text = string.format("%s: ", cached_names.fire);
ailment_name = cached_names.fire;
elseif player_info.list.element_type == 2 then
element_name_text = string.format("%s: ", cached_names.water);
ailment_name = cached_names.water;
elseif player_info.list.element_type == 3 then
element_name_text = string.format("%s: ", cached_names.thunder);
ailment_name = cached_names.thunder;
elseif player_info.list.element_type == 4 then
element_name_text = string.format("%s: ", cached_names.ice);
ailment_name = cached_names.ice;
elseif player_info.list.element_type == 5 then
element_name_text = string.format("%s: ", cached_names.dragon);
ailment_name = cached_names.dragon;
elseif player_info.list.element_type == 6 then
element_name_text = string.format("%s: ", ailment_names.poison);
ailment_name = ailment_names.poison;
elseif player_info.list.element_type == 7 then
element_name_text = string.format("%s: ", ailment_names.sleep);
ailment_name = ailment_names.sleep;
elseif player_info.list.element_type == 8 then
element_name_text = string.format("%s: ", ailment_names.paralysis);
ailment_name = ailment_names.paralysis;
elseif player_info.list.element_type == 9 then
element_name_text = string.format("%s: ", ailment_names.blast);
ailment_name = ailment_names.blast;
end
if this.element_label.include.value then
element_name_text = string.format("%s: ", ailment_name);
else
element_name_text = string.format("%s", ailment_name);
end
end
if this.element_label.include.value then
@@ -169,24 +213,32 @@ function this.draw()
local ailment_names = language.current_language.ailments;
local ailment_name = "";
if player_info.list.element_type_2 == 1 then
element_2_name_text = string.format("%s: ", cached_names.fire);
ailment_name = cached_names.fire;
elseif player_info.list.element_type_2 == 2 then
element_2_name_text = string.format("%s: ", cached_names.water);
ailment_name = cached_names.water;
elseif player_info.list.element_type_2 == 3 then
element_2_name_text = string.format("%s: ", cached_names.thunder);
ailment_name = cached_names.thunder;
elseif player_info.list.element_type_2 == 4 then
element_2_name_text = string.format("%s: ", cached_names.ice);
ailment_name = cached_names.ice;
elseif player_info.list.element_type_2 == 5 then
element_2_name_text = string.format("%s: ", cached_names.dragon);
ailment_name = cached_names.dragon;
elseif player_info.list.element_type_2 == 6 then
element_2_name_text = string.format("%s: ", ailment_names.poison);
ailment_name = ailment_names.poison;
elseif player_info.list.element_type_2 == 7 then
element_2_name_text = string.format("%s: ", ailment_names.sleep);
ailment_name = ailment_names.sleep;
elseif player_info.list.element_type_2 == 8 then
element_2_name_text = string.format("%s: ", ailment_names.paralysis);
ailment_name = ailment_names.paralysis;
elseif player_info.list.element_type_2 == 9 then
element_2_name_text = string.format("%s: ", ailment_names.blast);
ailment_name = ailment_names.blast;
end
if this.element_2_label.include.value then
element_2_name_text = string.format("%s: ", ailment_name);
else
element_2_name_text = string.format("%s", ailment_name);
end
end
@@ -210,6 +262,7 @@ function this.init_UI()
this.label_list.dragon_resistance = utils.table.deep_copy(config.current_config.stats_UI.dragon_resistance_label);
this.affinity_label = utils.table.deep_copy(config.current_config.stats_UI.affinity_label);
this.health_label = utils.table.deep_copy(config.current_config.stats_UI.health_label);
this.stamina_label = utils.table.deep_copy(config.current_config.stats_UI.stamina_label);
this.element_label = utils.table.deep_copy(config.current_config.stats_UI.element_label);
this.element_2_label = utils.table.deep_copy(config.current_config.stats_UI.element_2_label);
@@ -224,6 +277,9 @@ function this.init_UI()
this.affinity_label.offset.x = this.affinity_label.offset.x * global_scale_modifier;
this.affinity_label.offset.y = this.affinity_label.offset.y * global_scale_modifier;
this.health_label.offset.x = this.health_label.offset.x * global_scale_modifier;
this.health_label.offset.y = this.health_label.offset.y * global_scale_modifier;
this.stamina_label.offset.x = this.stamina_label.offset.x * global_scale_modifier;
this.stamina_label.offset.y = this.stamina_label.offset.y * global_scale_modifier;

View File

@@ -2355,6 +2355,12 @@ function this.draw_stats_UI()
imgui.tree_pop();
end
changed = label_customization.draw(language.current_language.customization_menu.health_label, cached_config.health_label);
config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.stamina_label, cached_config.stamina_label);
config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.attack_label, cached_config.attack_label);
config_changed = config_changed or changed;
@@ -2379,9 +2385,6 @@ function this.draw_stats_UI()
changed = label_customization.draw(language.current_language.customization_menu.dragon_resistance_label, cached_config.dragon_resistance_label);
config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.stamina_label, cached_config.stamina_label);
config_changed = config_changed or changed;
changed = label_customization.draw(language.current_language.customization_menu.element_label, cached_config.element_label);
config_changed = config_changed or changed;

View File

@@ -179,6 +179,7 @@
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health",
"health_label": "Health Label",
"health_percentage": "Health Percentage",
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
@@ -375,7 +376,49 @@
"z": "Z"
},
"dangos": {
"dango_defender_hi": "Dango Defender (Hi)"
"dango_adrenaline": "Dango Adrenaline",
"dango_bombardier": "Dango Bombardier",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_defender_hi": "Dango Defender (Hi)",
"dango_deflector": "Dango Deflector",
"dango_dragon_res": "Dango Dragon Res",
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
"dango_driver": "Dango Driver",
"dango_feet": "Dango Feet",
"dango_fighter": "Dango Fighter",
"dango_fire_res": "Dango Fire Res",
"dango_fire_res_hi": "Dango Fire Res (Hi)",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_guard": "Dango Guard",
"dango_hunter": "Dango Hunter",
"dango_hurler": "Dango Hurler",
"dango_ice_res": "Dango Ice Res",
"dango_ice_res_hi": "Dango Ice Res (Hi)",
"dango_immunizer": "Dango Immunizer",
"dango_insurance": "Dango Insurance",
"dango_marksman": "Dango Marksman",
"dango_medic": "Dango Medic",
"dango_medic_hi": "Dango Medic (Hi)",
"dango_moxie": "Dango Moxie",
"dango_polisher": "Dango Polisher",
"dango_pyro": "Dango Pyro",
"dango_reviver": "Dango Reviver",
"dango_rider": "Dango Rider",
"dango_shifter": "Dango Shifter",
"dango_slugger": "Dango Slugger",
"dango_specialist": "Dango Specialist",
"dango_temper": "Dango Temper",
"dango_thunder_res": "Dango Thunder Res ",
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
"dango_wall_runner": "Dango Wall Runner",
"dango_water_res": "Dango Water Res",
"dango_water_res_hi": "Dango Water Res (Hi)",
"dango_weakener": "Dango Weakener",
"super_recovery_dango": "Super Recovery Dango"
},
"font_name": "",
"melody_effects": {
@@ -408,6 +451,11 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar"
},
"parts": {
"abdomen": "Abdomen",
"amatsu_unknown": "?",
@@ -486,6 +534,7 @@
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
@@ -497,8 +546,11 @@
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"peak_performance": "Peak Performance",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},

View File

@@ -180,6 +180,7 @@
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health",
"health_label": "Health Label",
"health_percentage": "ダメージ割合()",
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
@@ -376,7 +377,49 @@
"z": "Z"
},
"dangos": {
"dango_defender_hi": "Dango Defender (Hi)"
"dango_adrenaline": "Dango Adrenaline",
"dango_bombardier": "Dango Bombardier",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_defender_hi": "Dango Defender (Hi)",
"dango_deflector": "Dango Deflector",
"dango_dragon_res": "Dango Dragon Res",
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
"dango_driver": "Dango Driver",
"dango_feet": "Dango Feet",
"dango_fighter": "Dango Fighter",
"dango_fire_res": "Dango Fire Res",
"dango_fire_res_hi": "Dango Fire Res (Hi)",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_guard": "Dango Guard",
"dango_hunter": "Dango Hunter",
"dango_hurler": "Dango Hurler",
"dango_ice_res": "Dango Ice Res",
"dango_ice_res_hi": "Dango Ice Res (Hi)",
"dango_immunizer": "Dango Immunizer",
"dango_insurance": "Dango Insurance",
"dango_marksman": "Dango Marksman",
"dango_medic": "Dango Medic",
"dango_medic_hi": "Dango Medic (Hi)",
"dango_moxie": "Dango Moxie",
"dango_polisher": "Dango Polisher",
"dango_pyro": "Dango Pyro",
"dango_reviver": "Dango Reviver",
"dango_rider": "Dango Rider",
"dango_shifter": "Dango Shifter",
"dango_slugger": "Dango Slugger",
"dango_specialist": "Dango Specialist",
"dango_temper": "Dango Temper",
"dango_thunder_res": "Dango Thunder Res ",
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
"dango_wall_runner": "Dango Wall Runner",
"dango_water_res": "Dango Water Res",
"dango_water_res_hi": "Dango Water Res (Hi)",
"dango_weakener": "Dango Weakener",
"super_recovery_dango": "Super Recovery Dango"
},
"font_name": "NotoSansJP-Bold.otf",
"melody_effects": {
@@ -409,6 +452,11 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",
@@ -487,6 +535,7 @@
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
@@ -498,8 +547,11 @@
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"peak_performance": "Peak Performance",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},

View File

@@ -181,6 +181,7 @@
"health_break_sever_anomaly_filter": "체력 + 파괴 + 절단 + 괴이핵",
"health_break_sever_filter": "체력 + 파괴 + 절단",
"health_filter": "체력",
"health_label": "Health Label",
"health_percentage": "체력 비율",
"health_sever_anomaly_filter": "체력 + 절단 + 괴이핵",
"health_sever_filter": "체력 + 절단",
@@ -377,7 +378,49 @@
"z": "Z"
},
"dangos": {
"dango_defender_hi": "Dango Defender (Hi)"
"dango_adrenaline": "Dango Adrenaline",
"dango_bombardier": "Dango Bombardier",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_defender_hi": "Dango Defender (Hi)",
"dango_deflector": "Dango Deflector",
"dango_dragon_res": "Dango Dragon Res",
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
"dango_driver": "Dango Driver",
"dango_feet": "Dango Feet",
"dango_fighter": "Dango Fighter",
"dango_fire_res": "Dango Fire Res",
"dango_fire_res_hi": "Dango Fire Res (Hi)",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_guard": "Dango Guard",
"dango_hunter": "Dango Hunter",
"dango_hurler": "Dango Hurler",
"dango_ice_res": "Dango Ice Res",
"dango_ice_res_hi": "Dango Ice Res (Hi)",
"dango_immunizer": "Dango Immunizer",
"dango_insurance": "Dango Insurance",
"dango_marksman": "Dango Marksman",
"dango_medic": "Dango Medic",
"dango_medic_hi": "Dango Medic (Hi)",
"dango_moxie": "Dango Moxie",
"dango_polisher": "Dango Polisher",
"dango_pyro": "Dango Pyro",
"dango_reviver": "Dango Reviver",
"dango_rider": "Dango Rider",
"dango_shifter": "Dango Shifter",
"dango_slugger": "Dango Slugger",
"dango_specialist": "Dango Specialist",
"dango_temper": "Dango Temper",
"dango_thunder_res": "Dango Thunder Res ",
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
"dango_wall_runner": "Dango Wall Runner",
"dango_water_res": "Dango Water Res",
"dango_water_res_hi": "Dango Water Res (Hi)",
"dango_weakener": "Dango Weakener",
"super_recovery_dango": "Super Recovery Dango"
},
"font_name": "NotoSansKR-Bold.otf",
"melody_effects": {
@@ -410,6 +453,11 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar"
},
"parts": {
"abdomen": "배",
"amatsu_unknown": "?",
@@ -488,6 +536,7 @@
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
@@ -499,8 +548,11 @@
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"peak_performance": "Peak Performance",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},

View File

@@ -181,6 +181,7 @@
"health_break_sever_anomaly_filter": "Здоровье + Повреждение + Отсечение + Ядро аномалии",
"health_break_sever_filter": "Здоровье + Повреждение + Отсечение",
"health_filter": "Здоровье",
"health_label": "Health Label",
"health_percentage": "Здоровье в процентах",
"health_sever_anomaly_filter": "Здоровье + Отсечение + Ядро аномалии",
"health_sever_filter": "Здоровье + Отсечение",
@@ -377,7 +378,49 @@
"z": "Z"
},
"dangos": {
"dango_defender_hi": "Dango Defender (Hi)"
"dango_adrenaline": "Dango Adrenaline",
"dango_bombardier": "Dango Bombardier",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_defender_hi": "Dango Defender (Hi)",
"dango_deflector": "Dango Deflector",
"dango_dragon_res": "Dango Dragon Res",
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
"dango_driver": "Dango Driver",
"dango_feet": "Dango Feet",
"dango_fighter": "Dango Fighter",
"dango_fire_res": "Dango Fire Res",
"dango_fire_res_hi": "Dango Fire Res (Hi)",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_guard": "Dango Guard",
"dango_hunter": "Dango Hunter",
"dango_hurler": "Dango Hurler",
"dango_ice_res": "Dango Ice Res",
"dango_ice_res_hi": "Dango Ice Res (Hi)",
"dango_immunizer": "Dango Immunizer",
"dango_insurance": "Dango Insurance",
"dango_marksman": "Dango Marksman",
"dango_medic": "Dango Medic",
"dango_medic_hi": "Dango Medic (Hi)",
"dango_moxie": "Dango Moxie",
"dango_polisher": "Dango Polisher",
"dango_pyro": "Dango Pyro",
"dango_reviver": "Dango Reviver",
"dango_rider": "Dango Rider",
"dango_shifter": "Dango Shifter",
"dango_slugger": "Dango Slugger",
"dango_specialist": "Dango Specialist",
"dango_temper": "Dango Temper",
"dango_thunder_res": "Dango Thunder Res ",
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
"dango_wall_runner": "Dango Wall Runner",
"dango_water_res": "Dango Water Res",
"dango_water_res_hi": "Dango Water Res (Hi)",
"dango_weakener": "Dango Weakener",
"super_recovery_dango": "Super Recovery Dango"
},
"font_name": "NotoSansKR-Bold.otf",
"melody_effects": {
@@ -410,6 +453,11 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar"
},
"parts": {
"abdomen": "Брюхо",
"amatsu_unknown": "?",
@@ -488,6 +536,7 @@
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
@@ -499,8 +548,11 @@
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"peak_performance": "Peak Performance",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},

View File

@@ -181,6 +181,7 @@
"health_break_sever_anomaly_filter": "生命+破坏+切断+怪异核",
"health_break_sever_filter": "生命+破坏+切断",
"health_filter": "生命",
"health_label": "Health Label",
"health_percentage": "生命百分比",
"health_sever_anomaly_filter": "生命+切断+怪异核",
"health_sever_filter": "生命+切断",
@@ -377,7 +378,49 @@
"z": "Z轴"
},
"dangos": {
"dango_defender_hi": "Dango Defender (Hi)"
"dango_adrenaline": "Dango Adrenaline",
"dango_bombardier": "Dango Bombardier",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_defender_hi": "Dango Defender (Hi)",
"dango_deflector": "Dango Deflector",
"dango_dragon_res": "Dango Dragon Res",
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
"dango_driver": "Dango Driver",
"dango_feet": "Dango Feet",
"dango_fighter": "Dango Fighter",
"dango_fire_res": "Dango Fire Res",
"dango_fire_res_hi": "Dango Fire Res (Hi)",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_guard": "Dango Guard",
"dango_hunter": "Dango Hunter",
"dango_hurler": "Dango Hurler",
"dango_ice_res": "Dango Ice Res",
"dango_ice_res_hi": "Dango Ice Res (Hi)",
"dango_immunizer": "Dango Immunizer",
"dango_insurance": "Dango Insurance",
"dango_marksman": "Dango Marksman",
"dango_medic": "Dango Medic",
"dango_medic_hi": "Dango Medic (Hi)",
"dango_moxie": "Dango Moxie",
"dango_polisher": "Dango Polisher",
"dango_pyro": "Dango Pyro",
"dango_reviver": "Dango Reviver",
"dango_rider": "Dango Rider",
"dango_shifter": "Dango Shifter",
"dango_slugger": "Dango Slugger",
"dango_specialist": "Dango Specialist",
"dango_temper": "Dango Temper",
"dango_thunder_res": "Dango Thunder Res ",
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
"dango_wall_runner": "Dango Wall Runner",
"dango_water_res": "Dango Water Res",
"dango_water_res_hi": "Dango Water Res (Hi)",
"dango_weakener": "Dango Weakener",
"super_recovery_dango": "Super Recovery Dango"
},
"font_name": "NotoSansSC-Bold.otf",
"melody_effects": {
@@ -410,6 +453,11 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",
@@ -488,6 +536,7 @@
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
@@ -499,8 +548,11 @@
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"peak_performance": "Peak Performance",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},

View File

@@ -181,6 +181,7 @@
"health_break_sever_anomaly_filter": "Health + Break + Sever + Anomaly Core",
"health_break_sever_filter": "Health + Break + Sever",
"health_filter": "Health",
"health_label": "Health Label",
"health_percentage": "血量百分比",
"health_sever_anomaly_filter": "Health + Sever + Anomaly Core",
"health_sever_filter": "Health + Sever",
@@ -377,7 +378,49 @@
"z": "Z軸"
},
"dangos": {
"dango_defender_hi": "Dango Defender (Hi)"
"dango_adrenaline": "Dango Adrenaline",
"dango_bombardier": "Dango Bombardier",
"dango_booster": "Dango Booster",
"dango_bulker": "Dango Bulker",
"dango_connector": "Dango Connector",
"dango_defender": "Dango Defender",
"dango_defender_hi": "Dango Defender (Hi)",
"dango_deflector": "Dango Deflector",
"dango_dragon_res": "Dango Dragon Res",
"dango_dragon_res_hi": "Dango Dragon Res (Hi)",
"dango_driver": "Dango Driver",
"dango_feet": "Dango Feet",
"dango_fighter": "Dango Fighter",
"dango_fire_res": "Dango Fire Res",
"dango_fire_res_hi": "Dango Fire Res (Hi)",
"dango_flyer": "Dango Flyer",
"dango_glutton": "Dango Glutton",
"dango_guard": "Dango Guard",
"dango_hunter": "Dango Hunter",
"dango_hurler": "Dango Hurler",
"dango_ice_res": "Dango Ice Res",
"dango_ice_res_hi": "Dango Ice Res (Hi)",
"dango_immunizer": "Dango Immunizer",
"dango_insurance": "Dango Insurance",
"dango_marksman": "Dango Marksman",
"dango_medic": "Dango Medic",
"dango_medic_hi": "Dango Medic (Hi)",
"dango_moxie": "Dango Moxie",
"dango_polisher": "Dango Polisher",
"dango_pyro": "Dango Pyro",
"dango_reviver": "Dango Reviver",
"dango_rider": "Dango Rider",
"dango_shifter": "Dango Shifter",
"dango_slugger": "Dango Slugger",
"dango_specialist": "Dango Specialist",
"dango_temper": "Dango Temper",
"dango_thunder_res": "Dango Thunder Res ",
"dango_thunder_res_hi": "Dango Thunder Res (Hi)",
"dango_wall_runner": "Dango Wall Runner",
"dango_water_res": "Dango Water Res",
"dango_water_res_hi": "Dango Water Res (Hi)",
"dango_weakener": "Dango Weakener",
"super_recovery_dango": "Super Recovery Dango"
},
"font_name": "NotoSansTC-Bold.otf",
"melody_effects": {
@@ -410,6 +453,11 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
"rousing_roar": "Rousing Roar"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",
@@ -488,6 +536,7 @@
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
@@ -499,8 +548,11 @@
"latent_power": "Latent Power",
"maximum_might": "Maximum Might",
"offensive_guard": "Offensive Guard",
"peak_performance": "Peak Performance",
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},