5 Commits

Author SHA1 Message Date
GreenComfyTea
3e66b920ef Skills: Add more skills
+ Latent Power, Protective Polish, Wind Mantle, Heaven-Sent, Grinder (S), Counterstrike, Affinity Sliding, Coalescence, Adrenaline Rush, Wall Runner, Offensive Guard, Hellfire Cloak, Agitator, Furious.
2023-08-09 16:11:53 +03:00
GreenComfyTea
7f38532026 Buffs: Use default values 2023-08-09 16:09:13 +03:00
GreenComfyTea
b805d88205 Change default values 2023-08-09 16:08:27 +03:00
GreenComfyTea
a100932a02 Melody Effects: move individual melody effect update into separate function 2023-08-09 16:07:53 +03:00
GreenComfyTea
692e911617 Consumables: Refactor most individual methods into 1 universal method 2023-08-09 16:06:51 +03:00
17 changed files with 455 additions and 348 deletions

View File

@@ -69,13 +69,20 @@ local get_value_method = system_array_type_def:get_method("GetValue(System.Int32
function this.new(type, key, name, level, duration)
local is_infinite = false;
level = level or 1;
if name == nil then
name = utils.constants.uninitialized_string;
end
if duration == nil then
duration = 0;
end
if duration == 0 then
is_infinite = true;
end
level = level or 1;
local buff = {};
buff.type = type;
@@ -145,7 +152,7 @@ function this.update()
if master_player_data ~= nil then
consumables.update(master_player_data);
endemic_life_buffs.update(master_player_data);
skills.update(master_player_data);
skills.update(master_player, master_player_data);
dangos.update(master_player_data);
else
error_handler.report("buffs.update", "Failed to access Data: master_player_data");
@@ -174,10 +181,6 @@ function this.update()
end
end
function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
buff_UI_entity.draw(buff, buff_UI, position_on_screen, opacity_scale);
end
function this.update_timer(buff, timer)
if timer < 0 then
timer = 0;
@@ -194,6 +197,11 @@ function this.update_timer(buff, timer)
end
end
function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
buff_UI_entity.draw(buff, buff_UI, position_on_screen, opacity_scale);
end
function this.init_dependencies()
config = require("MHR_Overlay.Misc.config");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");

View File

@@ -48,6 +48,7 @@ this.list = {
mega_armorskin = nil,
might_seed = nil,
adamant_seed = nil,
demon_powder = nil,
hardshell_powder = nil,
immunizer = nil,
dash_juice = nil,
@@ -109,13 +110,69 @@ function this.update(player_data)
this.update_demondrug(player_data, item_parameter);
this.update_armorskin(player_data, item_parameter);
this.update_might_seed(player_data, item_parameter);
this.update_adamant_seed(player_data, item_parameter);
this.update_demon_powder(player_data, item_parameter);
this.update_hardshell_powder(player_data, item_parameter);
this.update_immunizer(player_data, item_parameter);
this.update_dash_juice(player_data, item_parameter);
this.update_gourmet_fish(player_data, item_parameter);
this.update_generic("might_seed", player_data, item_parameter,
atk_up_buff_second_field, atk_up_buff_second_timer_field, might_seed_timer_field);
this.update_generic("adamant_seed", player_data, item_parameter,
def_up_buff_second_field, def_up_buff_second_timer_field, adamant_seed_timer_field);
this.update_generic("demon_powder", player_data, item_parameter,
atk_up_item_second_field, atk_up_item_second_timer_field, demondrug_powder_timer_field);
this.update_generic("hardshell_powder", player_data, item_parameter,
def_up_item_second_field, def_up_item_second_timer_field, armorskin_powder_timer_field);
this.update_generic("immunizer", player_data, item_parameter,
nil, vitalizer_timer_field, vitalizer_timer_const_field);
this.update_generic("dash_juice", player_data, item_parameter,
nil, stamina_up_buff_second_timer_field, stamina_up_buff_second_field);
end
function this.update_generic(consumable_key, player_data, item_parameter, value_field, timer_field, timer_const_value_field)
if value_field ~= nil then
local value = value_field:get_data(player_data);
if value == nil then
error_handler.report("consumables.update_generic_with_value", string.format("Failed to access Data: %s_value", consumable_key));
return;
end
if value == 0 then
this.list[consumable_key] = nil;
return;
end
end
local timer = timer_field:get_data(player_data);
if timer == nil then
error_handler.report("consumables.update_generic_with_value", string.format("Failed to access Data: %s_timer", consumable_key));
return;
end
if value_field == nil and timer == 0 then
this.list[consumable_key] = nil;
return;
end
local consumable = this.list[consumable_key];
if consumable == nil then
local timer_const_value = timer_const_value_field:get_data(item_parameter);
if timer_const_value == nil then
error_handler.report("consumables.update_generic_with_value", string.format("Failed to access Data: %s_timer_const_value", consumable_key));
return;
end
local name = language.current_language.consumables[consumable_key];
consumable = buffs.new(buffs.types.consumable, consumable_key, name, 1, timer_const_value);
this.list[consumable_key] = consumable;
else
buffs.update_timer(consumable, timer / 60);
end
end
function this.update_demondrug(player_data, item_parameter)
@@ -215,205 +272,6 @@ function this.update_armorskin(player_data, item_parameter)
end
end
function this.update_might_seed(player_data, item_parameter)
local might_seed_value = atk_up_buff_second_field:get_data(player_data);
if might_seed_value == nil then
error_handler.report("consumables.update_might_seed", "Failed to access Data: might_seed_value");
return;
end
if might_seed_value == 0 then
this.list.might_seed = nil;
return;
end
local might_seed_timer = atk_up_buff_second_timer_field:get_data(player_data);
if might_seed_timer == nil then
error_handler.report("consumables.update_might_seed", "Failed to access Data: might_seed_timer");
return;
end
local buff = this.list.might_seed;
if buff == nil then
local might_seed_timer_const_value = might_seed_timer_field:get_data(item_parameter);
if might_seed_timer_const_value == nil then
error_handler.report("consumables.update_might_seed", "Failed to access Data: might_seed_timer_const_value");
return;
end
local name = language.current_language.consumables.might_seed;
buff = buffs.new(buffs.types.consumable, "might_seed", name, 1, might_seed_timer_const_value);
this.list.might_seed = buff;
else
buffs.update_timer(buff, might_seed_timer / 60);
end
end
function this.update_adamant_seed(player_data, item_parameter)
local adamant_seed_value = def_up_buff_second_field:get_data(player_data);
if adamant_seed_value == nil then
error_handler.report("consumables.update_adamant_seed", "Failed to access Data: adamant_seed_value");
return;
end
if adamant_seed_value == 0 then
this.list.adamant_seed = nil;
return;
end
local adamant_seed_timer = def_up_buff_second_timer_field:get_data(player_data);
if adamant_seed_timer == nil then
error_handler.report("consumables.update_adamant_seed", "Failed to access Data: adamant_seed_timer");
return;
end
local buff = this.list.adamant_seed;
if buff == nil then
local adamant_seed_timer_const_value = adamant_seed_timer_field:get_data(item_parameter);
if adamant_seed_timer_const_value == nil then
error_handler.report("consumables.update_adamant_seed", "Failed to access Data: adamant_seed_timer_const_value");
return;
end
local name = language.current_language.consumables.adamant_seed;
buff = buffs.new(buffs.types.consumable, "adamant_seed", name, 1, adamant_seed_timer_const_value);
this.list.adamant_seed = buff;
else
buffs.update_timer(buff, adamant_seed_timer / 60);
end
end
function this.update_demon_powder(player_data, item_parameter)
local demon_powder_value = atk_up_item_second_field:get_data(player_data);
if demon_powder_value == nil then
error_handler.report("consumables.update_demon_powder", "Failed to access Data: demon_powder_value");
return;
end
if demon_powder_value == 0 then
this.list.demon_powder = nil;
return;
end
local demon_powder_timer = atk_up_item_second_timer_field:get_data(player_data);
if demon_powder_timer == nil then
error_handler.report("consumables.update_demon_powder", "Failed to access Data: demon_powder_timer");
return;
end
local buff = this.list.demon_powder;
if buff == nil then
local demon_powder_timer_const_value = demondrug_powder_timer_field:get_data(item_parameter);
if demon_powder_timer_const_value == nil then
error_handler.report("consumables.update_demon_powder", "Failed to access Data: demon_powder_timer_const_value");
return;
end
local name = language.current_language.consumables.demon_powder;
buff = buffs.new(buffs.types.consumable, "demon_powder", name, demon_powder_timer_const_value);
this.list.demon_powder = buff;
else
buffs.update_timer(buff, demon_powder_timer / 60);
end
end
function this.update_hardshell_powder(player_data, item_parameter)
local hardshell_powder_value = def_up_item_second_field:get_data(player_data);
if hardshell_powder_value == nil then
error_handler.report("consumables.update_hardshell_powder", "Failed to access Data: hardshell_powder_value");
return;
end
if hardshell_powder_value == 0 then
this.list.hardshell_powder = nil;
return;
end
local hardshell_powder_timer = def_up_item_second_timer_field:get_data(player_data);
if hardshell_powder_timer == nil then
error_handler.report("consumables.update_hardshell_powder", "Failed to access Data: hardshell_powder_timer");
return;
end
local buff = this.list.hardshell_powder;
if buff == nil then
local demon_powder_timer_const_value = armorskin_powder_timer_field:get_data(item_parameter);
if demon_powder_timer_const_value == nil then
error_handler.report("consumables.update_hardshell_powder", "Failed to access Data: demon_powder_timer_const_value");
return;
end
local name = language.current_language.consumables.hardshell_powder;
buff = buffs.new(buffs.types.consumable, "hardshell_powder", name, 1, demon_powder_timer_const_value);
this.list.hardshell_powder = buff;
else
buffs.update_timer(buff, hardshell_powder_timer / 60);
end
end
function this.update_immunizer(player_data, item_parameter)
local immunizer_timer = vitalizer_timer_field:get_data(player_data);
if immunizer_timer == nil then
error_handler.report("consumables.update_immunizer", "Failed to access Data: immunizer_timer");
return;
end
if immunizer_timer == 0 then
this.list.immunizer = nil;
return;
end
local buff = this.list.immunizer;
if buff == nil then
local immunizer_timer_const_value = vitalizer_timer_const_field:get_data(item_parameter);
if immunizer_timer_const_value == nil then
error_handler.report("consumables.update_immunizer", "Failed to access Data: immunizer_timer_const_value");
return;
end
local name = language.current_language.consumables.immunizer;
buff = buffs.new(buffs.types.consumable, "immunizer", name, 1, immunizer_timer_const_value);
this.list.immunizer = buff;
else
buffs.update_timer(buff, immunizer_timer / 60);
end
end
function this.update_dash_juice(player_data, item_parameter)
local dash_juice_timer = stamina_up_buff_second_timer_field:get_data(player_data);
if dash_juice_timer == nil then
error_handler.report("consumables.update_dash_juice", "Failed to access Data: dash_juice_timer");
return;
end
if dash_juice_timer == 0 then
this.list.dash_juice = nil;
return;
end
local buff = this.list.dash_juice;
if buff == nil then
local dash_juice_timer_const_value = stamina_up_buff_second_field:get_data(item_parameter);
if dash_juice_timer_const_value == nil then
error_handler.report("consumables.update_dash_juice", "Failed to access Data: dash_juice_timer_const_value");
return;
end
local name = language.current_language.consumables.dash_juice;
buff = buffs.new(buffs.types.consumable, "dash_juice", name, 1, dash_juice_timer_const_value);
this.list.dash_juice = buff;
else
buffs.update_timer(buff, dash_juice_timer / 60);
end
end
function this.update_gourmet_fish(player_data, item_parameter)
local gourmet_fish_timer = fish_regene_enable_field:get_data(player_data);
if gourmet_fish_timer == nil then

View File

@@ -110,33 +110,34 @@ local time_field = music_data_type_def:get_field("_Time");
function this.update(melody_data_table)
for lua_index, melody_data in ipairs(melody_data_table) do
if melody_data == "" then
goto continue;
if melody_data ~= "" then
this.update_melody_effect(lua_index, melody_data);
end
end
end
function this.update_melody_effect(lua_index, melody_data)
local melody_timer = time_field:get_data(melody_data);
if melody_timer == nil then
error_handler.report("melody_effects.update", "Failed to access Data: melody_timer No. " .. tostring(lua_index - 1));
goto continue;
return;
end
if melody_timer == 0 then
this.list[lua_index] = nil;
goto continue;
return;
end
local buff = this.list[lua_index];
if buff == nil then
local key = melody_effect_keys[lua_index];
local name = language.current_language.melody_effects[key];
local melody_effect = this.list[lua_index];
if melody_effect == nil then
local melody_effect_key = melody_effect_keys[lua_index];
local name = language.current_language.melody_effects[melody_effect_key];
buff = buffs.new(buffs.types.melody_effect, key, name, 1, melody_timer / 60);
this.list[lua_index] = buff;
melody_effect = buffs.new(buffs.types.melody_effect, melody_effect_key, name, 1, melody_timer / 60);
this.list[lua_index] = melody_effect;
else
buffs.update_timer(buff, melody_timer / 60);
end
::continue::
buffs.update_timer(melody_effect, melody_timer / 60);
end
end

View File

@@ -47,8 +47,37 @@ this.list = {
kushala_daora_soul = nil,
intrepid_heart = nil,
dereliction = nil,
latent_power = nil,
wind_mantle = nil,
grinder_s = nil,
counterstrike = nil,
affinity_sliding = nil,
coalescence = nil,
adrenaline_rush = nil,
wall_runner = nil,
offensive_guard = nil,
hellfire_cloak = nil,
agitator = nil,
furious = nil
};
local burst_breakpoint = 5;
local kushara_daora_soul_breakpoint = 5;
local intrepid_heart_minimal_value = 400;
local dereliction_breakpoints = {100, 50};
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 = {
[0] = { 10, 5 }, -- Great Sword
[3] = { 60, 30 }, -- Light Bowgun
[4] = { 60, 30 }, -- Heavy Bowgun
[6] = { 30, 15 }, -- Gunlance
[9] = { 40, 20 }, -- Dual Blades
[11] = { 30, 15 }, -- Charge Blade
[13] = { 60, 30 }, -- Bow
}
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");
@@ -67,115 +96,135 @@ local hyakuryu_dragon_power_up_timer_field = player_data_type_def:get_field("_Hy
local equip_skill_223_accumulator_field = player_data_type_def:get_field("_EquipSkill223Accumulator");
-- Derelection
local symbiosis_skill_lost_vital_field = player_data_type_def:get_field("_SymbiosisSkillLostVital");
-- Grinder (S)
local brand_new_sharpness_adjust_up_timer_field = player_data_type_def:get_field("_BrandNewSharpnessAdjustUpTimer");
-- Counterstrike
local counterattack_powerup_timer_field = player_data_type_def:get_field("_CounterattackPowerupTimer");
-- Affinity Sliding
local sliding_powerup_timer_field = player_data_type_def:get_field("_SlidingPowerupTimer");
-- Coalescence
local disaster_turn_powerup_timer_field = player_data_type_def:get_field("_DisasterTurnPowerUpTimer");
-- Adrenaline Rush
local equip_skill_208_atk_up_field = player_data_type_def:get_field("_EquipSkill208_AtkUpTimer");
-- Wall Runner
local wall_run_powerup_timer_field = player_data_type_def:get_field("_WallRunPowerupTimer");
-- Offensive Guard
local equip_skill_036_timer_field = player_data_type_def:get_field("_EquipSkill_036_Timer");
-- Hellfire Cloak
local onibi_powerup_timer_field = player_data_type_def:get_field("_OnibiPowerUpTiemr");
-- Agitator
local challenge_timer_field = player_data_type_def:get_field("_ChallengeTimer");
-- Furious
local furious_skill_stamina_buff_second_timer_field = player_data_type_def:get_field("_FuriousSkillStaminaBuffSecondTimer");
local player_base_type_def = sdk.find_type_definition("snow.player.PlayerBase");
local player_weapon_type_field = player_base_type_def:get_field("_playerWeaponType");
-- Latent Power
local power_freedom_timer_field = player_base_type_def:get_field("_PowerFreedomTimer");
-- Protective Polish
local sharpness_gauge_boost_timer_field = player_base_type_def:get_field("_SharpnessGaugeBoostTimer");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Wind Mantle
local equip_skill_226_attack_count_field = player_quest_base_type_def:get_field("_EquipSkill226AttackCount");
local equip_skill_226_attack_off_timer_field = player_quest_base_type_def:get_field("_EquipSkill226AttackOffTimer");
-- Heaven-Sent
local is_active_equip_skill_230_method = player_quest_base_type_def:get_method("isActiveEquipSkill230");
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(player_data)
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("skills.update", "Failed to access Data: item_parameter");
return;
end
this.update_burst(player_data);
this.update_kushala_daora_soul(player_data);
this.update_intrepid_heart(player_data);
this.update_dereliction(player_data);
this.update_wind_mantle(player);
this.update_heaven_sent(player);
--xy = string.format("%s\n%s", player_data._Attack, player_data._SymbiosisSkillLostVital);
this.update_generic("burst", player_data, rengeki_power_up_count_field, rengeki_power_up_timer_field, nil, burst_breakpoint);
this.update_generic("kushala_daora_soul", player_data,
hyakuryu_dragon_power_up_count_field, hyakuryu_dragon_power_up_timer_field, nil, kushara_daora_soul_breakpoint);
this.update_generic("intrepid_heart", player_data, equip_skill_223_accumulator_field, nil, intrepid_heart_minimal_value, nil, true);
this.update_generic("latent_power", player, nil, power_freedom_timer_field);
this.update_generic("protective_polish", player, nil, sharpness_gauge_boost_timer_field);
this.update_generic("grinder_s", player_data, nil, brand_new_sharpness_adjust_up_timer_field);
this.update_generic("counterstrike", player_data, nil, counterattack_powerup_timer_field);
this.update_generic("affinity_sliding", player_data, nil, sliding_powerup_timer_field);
this.update_generic("coalescence", player_data, nil, disaster_turn_powerup_timer_field);
this.update_generic("adrenaline_rush", player_data, nil, equip_skill_208_atk_up_field);
this.update_generic("wall_runner", player_data, nil, wall_run_powerup_timer_field);
this.update_generic("offensive_guard", player_data, nil, equip_skill_036_timer_field);
this.update_generic("hellfire_cloak", player_data, nil, onibi_powerup_timer_field);
this.update_generic("agitator", player_data, nil, challenge_timer_field, nil, nil, true);
this.update_generic("furious", player_data, nil, furious_skill_stamina_buff_second_timer_field);
end
function this.update_burst(player_data)
local burst_value = rengeki_power_up_count_field:get_data(player_data);
if burst_value == nil then
error_handler.report("skills.update_burst", "Failed to access Data: burst_value");
function this.update_generic(skill_key, timer_owner, value_field, timer_field, minimal_value, breakpoint, is_infinite)
minimal_value = minimal_value or 1;
breakpoint = breakpoint or 1000000;
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("skills.update_generic", string.format("Failed to access Data: %s_value", skill_key));
return;
end
if burst_value == 0 then
this.list.burst = nil;
if value < minimal_value then
this.list[skill_key] = nil;
return;
end
local burst_timer = rengeki_power_up_timer_field:get_data(player_data);
if burst_timer == nil then
error_handler.report("skills.update_burst", "Failed to access Data: burst_timer");
if value >= breakpoint then
level = 2;
end
end
local timer;
if timer_field ~= nil then
timer = timer_field:get_data(timer_owner);
if timer == nil then
error_handler.report("skills.update_generic", string.format("Failed to access Data: %s_timer", skill_key));
return;
end
local skill_level = 1;
if burst_value >= 5 then
skill_level = 2;
if value_field == nil and timer == 0 then
this.list[skill_key] = nil;
return;
end
local buff = this.list.burst;
if buff == nil then
local name = language.current_language.skills.burst;
timer = timer / 60;
end
buff = buffs.new(buffs.types.skill, "burst", name, skill_level, burst_timer / 60);
this.list.burst = buff;
local skill = this.list[skill_key];
if skill == nil then
local name = language.current_language.skills[skill_key];
if is_infinite then
timer = nil;
end
skill = buffs.new(buffs.types.skill, skill_key, name, level, timer);
this.list[skill_key] = skill;
else
buff.level = skill_level;
buffs.update_timer(buff, burst_timer / 60);
end
end
skill.level = level;
function this.update_kushala_daora_soul(player_data)
local kushala_daora_soul_value = hyakuryu_dragon_power_up_count_field:get_data(player_data);
if kushala_daora_soul_value == nil then
error_handler.report("skills.update_kushala_daora_soul", "Failed to access Data: kushala_daora_soul_value");
return;
if not is_infinite then
buffs.update_timer(skill, timer);
end
if kushala_daora_soul_value == 0 then
this.list.kushala_daora_soul = nil;
this.list.kushala_daora_soul_2 = nil;
return;
end
local kushala_daora_soul_timer = hyakuryu_dragon_power_up_timer_field:get_data(player_data);
if kushala_daora_soul_timer == nil then
error_handler.report("skills.update_kushala_daora_soul", "Failed to access Data: kushala_daora_soul_timer");
return;
end
local skill_level = 1;
if kushala_daora_soul_value >= 5 then
skill_level = 2;
end
local buff = this.list.kushala_daora_soul;
if buff == nil then
local name = language.current_language.skills.kushala_daora_soul;
buff = buffs.new(buffs.types.skill, "kushala_daora_soul", name, skill_level, kushala_daora_soul_timer / 60);
this.list.kushala_daora_soul = buff;
else
buff.level = skill_level;
buffs.update_timer(buff, kushala_daora_soul_timer / 60);
end
end
function this.update_intrepid_heart(player_data)
local intrepid_heart_value = equip_skill_223_accumulator_field:get_data(player_data);
if intrepid_heart_value == nil then
error_handler.report("skills.update_intrepid_heart", "Failed to access Data: intrepid_heart_value");
return;
end
if intrepid_heart_value < 400 then
this.list.intrepid_heart = nil;
return;
end
local buff = this.list.intrepid_heart;
if buff == nil then
local name = language.current_language.skills.intrepid_heart;
buff = buffs.new(buffs.types.skill, "intrepid_heart", name, 1);
this.list.intrepid_heart = buff;
end
end
@@ -191,21 +240,95 @@ function this.update_dereliction(player_data)
return;
end
local skill_level = 1;
if dereliction_value >= 100 then
skill_level = 3;
elseif dereliction_value >= 50 then
skill_level = 2;
local level = 1;
for index, breakpoint in ipairs(dereliction_breakpoints) do
if dereliction_value >= breakpoint then
level = 4 - index;
break;
end
end
local buff = this.list.dereliction;
if buff == nil then
local skill = this.list.dereliction;
if skill == nil then
local name = language.current_language.skills.dereliction;
buff = buffs.new(buffs.types.skill, "dereliction", name, skill_level);
this.list.dereliction = buff;
skill = buffs.new(buffs.types.skill, "dereliction", name, level);
this.list.dereliction = skill;
else
buff.level = skill_level;
skill.level = level;
end
end
function this.update_wind_mantle(player)
local wind_mantle_timer = equip_skill_226_attack_off_timer_field:get_data(player);
if wind_mantle_timer == nil then
error_handler.report("skills.update_wind_mantle", "Failed to access Data: wind_mantle_timer");
return;
end
if wind_mantle_timer == 0 then
this.list.wind_mantle = nil;
return;
end
local wind_mantle_value = equip_skill_226_attack_count_field:get_data(player);
if wind_mantle_value == nil then
error_handler.report("skills.update_wind_mantle", "Failed to access Data: wind_mantle_value");
return;
end
local weapon_type = player_weapon_type_field:get_data(player);
if player == nil then
error_handler.report("skills.update_wind_mantle", "Failed to access Data: weapon_type");
return;
end
local breakpoints = wind_mantle_breakpoints;
for weapon_type_index, special_breakpoints in pairs(wind_mantle_special_breakpoints) do
if weapon_type == weapon_type_index then
breakpoints = special_breakpoints;
break;
end
end
local level = 1;
for index, breakpoint in ipairs(breakpoints) do
if wind_mantle_value >= breakpoint then
level = 4 - index;
break;
end
end
local buff = this.list.wind_mantle;
if buff == nil then
local name = language.current_language.skills.wind_mantle;
buff = buffs.new(buffs.types.skill, "wind_mantle", name, level, wind_mantle_duration);
this.list.wind_mantle = buff;
else
buff.level = level;
buffs.update_timer(buff, wind_mantle_duration - (wind_mantle_timer / 60));
end
end
function this.update_heaven_sent(player)
local is_heaven_sent_active = is_active_equip_skill_230_method:call(player);
if is_heaven_sent_active == nil then
error_handler.report("skills.update_heaven_sent", "Failed to access Data: is_heaven_sent_active");
return;
end
if not is_heaven_sent_active then
this.list.heaven_sent = nil;
return;
end
local buff = this.list.heaven_sent;
if buff == nil then
local name = language.current_language.skills.heaven_sent;
buff = buffs.new(buffs.types.skill, "heaven_sent", name, 1);
this.list.heaven_sent = buff;
end
end

View File

@@ -10,6 +10,7 @@ local drawing;
local language;
local players;
local error_handler;
local utils;
local sdk = sdk;
local tostring = tostring;
@@ -56,8 +57,8 @@ function this.new(id, name, level, type)
non_player.type = type;
non_player.join_time = -1;
non_player.first_hit_time = -1;
non_player.join_time = utils.constants.uninitialized_int;
non_player.first_hit_time = utils.constants.uninitialized_int;
non_player.dps = 0;
non_player.small_monsters = players.init_damage_sources()
@@ -409,6 +410,7 @@ function this.init_dependencies()
language = require("MHR_Overlay.Misc.language");
players = require("MHR_Overlay.Damage_Meter.players");
error_handler = require("MHR_Overlay.Misc.error_handler");
utils = require("MHR_Overlay.Misc.utils");
end
function this.init_module()

View File

@@ -91,8 +91,8 @@ function this.new(id, name, master_rank, hunter_rank, type)
player.cart_count = 0;
player.join_time = -1;
player.first_hit_time = -1;
player.join_time = utils.constants.uninitialized_int;
player.first_hit_time = utils.constants.uninitialized_int;
player.dps = 0;
player.small_monsters = this.init_damage_sources();
@@ -141,7 +141,7 @@ function this.update_damage(player, damage_source_type, is_large_monster, damage
return;
end
if player.first_hit_time == -1 then
if player.first_hit_time == utils.constants.uninitialized_int then
player.first_hit_time = time.total_elapsed_script_seconds;
end
@@ -375,7 +375,7 @@ end
function this.update_player_dps(player)
local cached_config = config.current_config.damage_meter_UI.settings;
if player.join_time == -1 then
if player.join_time == utils.constants.uninitialized_int then
player.join_time = time.total_elapsed_script_seconds;
end

View File

@@ -239,7 +239,21 @@ this.default_language = {
burst = "Burst",
kushala_daora_soul = "Kushala Daora Soul",
intrepid_heart = "Intrepid Heart",
dereliction = "Dereliction"
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",
agitator = "Agitator",
furious = "Furious"
},
dangos = {

View File

@@ -41,6 +41,7 @@ local is_empty;
local unicode_map;
local unicode_relative_position;
local unicode_chars;
local epsilon = 0.000001;
this.table = {};
this.number = {};
@@ -51,6 +52,11 @@ this.vec4 = {};
this.math = {};
this.unicode = {};
this.constants = {};
this.constants.uninitialized_int = -420;
this.constants.uninitialized_string = "Uninitialized";
this.constants.epsilon = epsilon;
function this.table.tostring(table_)
if type(table_) == "number" or type(table_) == "boolean" or type(table_) == "string" then
return tostring(table_);
@@ -225,6 +231,14 @@ function this.number.is_even(value)
return value % 2 == 0;
end
function this.number.is_equal(value1, value2)
if math.abs(value1 - value2) < epsilon then
return true;
end
return false;
end
function this.string.trim(str)
return str:match("^%s*(.-)%s*$");
end

View File

@@ -10,6 +10,7 @@ local small_monster;
local large_monster;
local non_players;
local error_handler;
local utils;
local sdk = sdk;
local tostring = tostring;
@@ -95,7 +96,7 @@ function this.new(_ailments, ailment_id)
new_ailment.buildup_percentage = 0;
new_ailment.timer = 0;
new_ailment.duration = 100000;
new_ailment.duration = 0;
new_ailment.timer_percentage = 0;
new_ailment.minutes_left = 0;
@@ -874,6 +875,7 @@ function this.init_dependencies()
small_monster = require("MHR_Overlay.Monsters.small_monster");
large_monster = require("MHR_Overlay.Monsters.large_monster");
error_handler = require("MHR_Overlay.Misc.error_handler");
utils = require("MHR_Overlay.Misc.utils");
end
function this.init_module()

View File

@@ -73,8 +73,8 @@ function this.new(enemy)
monster.id = 0;
monster.unique_id = 0;
monster.health = 100000;
monster.max_health = 100000;
monster.health = 0;
monster.max_health = 0;
monster.health_percentage = 0;
monster.missing_health = 0;
monster.is_health_initialized = false;
@@ -90,12 +90,12 @@ function this.new(enemy)
monster.is_tired = false;
monster.stamina = 0;
monster.max_stamina = 1000;
monster.max_stamina = 0;
monster.stamina_percentage = 0;
monster.missing_stamina = 0;
monster.tired_timer = 0;
monster.tired_duration = 600;
monster.tired_duration = 0;
monster.tired_total_seconds_left = 0;
monster.tired_minutes_left = 0;
@@ -104,12 +104,12 @@ function this.new(enemy)
monster.is_in_rage = false;
monster.rage_point = 0;
monster.rage_limit = 3000;
monster.rage_limit = 0;
monster.rage_count = 0;
monster.rage_percentage = 0;
monster.rage_timer = 0;
monster.rage_duration = 600;
monster.rage_duration = 0;
monster.rage_total_seconds_left = 0;
monster.rage_minutes_left = 0;
@@ -120,10 +120,10 @@ function this.new(enemy)
monster.distance = 0;
monster.name = "Large Monster";
monster.size = -1;
monster.small_border = -1;
monster.big_border = -1;
monster.king_border = -1;
monster.size = 0;
monster.small_border = 0;
monster.big_border = 0;
monster.king_border = 0;
monster.crown = "";
monster.is_anomaly = false;
@@ -771,6 +771,7 @@ function this.update_rage(enemy, monster, anger_param)
local is_in_rage = is_anger_method:call(anger_param);
if is_in_rage ~= nil then
--xy = xy .. tostring(is_in_rage) .. "\n";
monster.is_in_rage = is_in_rage;
else
error_handler.report("large_monster.update_rage", "Failed to access Data: is_in_rage");

View File

@@ -53,7 +53,7 @@ function this.new(enemy)
monster.is_large = false;
monster.health = 0;
monster.max_health = 999999;
monster.max_health = 0;
monster.health_percentage = 0;
monster.missing_health = 0;
monster.capture_health = 0;

View File

@@ -444,10 +444,24 @@
"wings": "Wings"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul"
"kushala_daora_soul": "Kushala Daora Soul",
"latent_power": "Latent Power",
"offensive_guard": "Offensive Guard",
"protective_polish": "Protective Polish",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"unicode_glyph_ranges": [
0

View File

@@ -444,10 +444,24 @@
"wings": "翼"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul"
"kushala_daora_soul": "Kushala Daora Soul",
"latent_power": "Latent Power",
"offensive_guard": "Offensive Guard",
"protective_polish": "Protective Polish",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"unicode_glyph_ranges": [
32,

View File

@@ -445,10 +445,24 @@
"wings": "날개"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul"
"kushala_daora_soul": "Kushala Daora Soul",
"latent_power": "Latent Power",
"offensive_guard": "Offensive Guard",
"protective_polish": "Protective Polish",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"unicode_glyph_ranges": [
32,

View File

@@ -445,10 +445,24 @@
"wings": "Крылья"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul"
"kushala_daora_soul": "Kushala Daora Soul",
"latent_power": "Latent Power",
"offensive_guard": "Offensive Guard",
"protective_polish": "Protective Polish",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"unicode_glyph_ranges": [
32,

View File

@@ -445,10 +445,24 @@
"wings": "翼"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul"
"kushala_daora_soul": "Kushala Daora Soul",
"latent_power": "Latent Power",
"offensive_guard": "Offensive Guard",
"protective_polish": "Protective Polish",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"unicode_glyph_ranges": [
32,

View File

@@ -445,10 +445,24 @@
"wings": "翅膀"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul"
"kushala_daora_soul": "Kushala Daora Soul",
"latent_power": "Latent Power",
"offensive_guard": "Offensive Guard",
"protective_polish": "Protective Polish",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
},
"unicode_glyph_ranges": [
32,