Pull Most Buff Name from the Game

+ Solve Consumable Buff Timer Collisions
This commit is contained in:
GreenComfyTea
2023-09-03 13:36:03 +03:00
parent bf282ca13b
commit 8ae3928fdc
21 changed files with 1082 additions and 948 deletions

View File

@@ -53,6 +53,7 @@ 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 weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
local misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
local players = require("MHR_Overlay.Damage_Meter.players");
local non_players = require("MHR_Overlay.Damage_Meter.non_players");
@@ -135,6 +136,7 @@ dangos.init_dependencies();
abnormal_statuses.init_dependencies();
otomo_moves.init_dependencies();
weapon_skills.init_dependencies();
misc_buffs.init_dependencies();
damage_hook.init_dependencies();
players.init_dependencies();
@@ -212,6 +214,7 @@ dangos.init_module();
abnormal_statuses.init_module();
otomo_moves.init_module();
weapon_skills.init_module();
misc_buffs.init_module();
damage_hook.init_module();
players.init_module();

View File

@@ -162,36 +162,34 @@ function this.update(player, player_data)
this.update_muck(player);
this.update_frenzy_infection(player);
buffs.update_generic_buff(this.list, ailments_type_name, "fireblight", nil, nil, player, fire_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "fireblight", this.get_abnormal_status_name, nil, nil, player, fire_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "fireblight", this.get_abnormal_status_name, nil, nil, player, fire_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "waterblight", this.get_abnormal_status_name, nil, nil, player, water_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "iceblight", this.get_abnormal_status_name, nil, nil, player, ice_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "thunderblight", this.get_abnormal_status_name, nil, nil, player, thunder_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "dragonblight", this.get_abnormal_status_name, nil, nil, player, dragon_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "blastblight", this.get_abnormal_status_name, nil, nil, player, bomb_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "hellfireblight", this.get_abnormal_status_name, nil, nil, player, oni_bomb_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "bloodblight", this.get_abnormal_status_name, nil, nil, player, mystery_debuff_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "fireblight", nil, nil, player, fire_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "waterblight", nil, nil, player, water_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "iceblight", nil, nil, player, ice_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "thunderblight", nil, nil, player, thunder_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "dragonblight", nil, nil, player, dragon_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "stun", this.get_abnormal_status_name, nil, nil, player, stun_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "paralysis", this.get_abnormal_status_name, nil, nil, player, paralyze_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "sleep", this.get_abnormal_status_name, nil, nil, player, sleep_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "defense_down", this.get_abnormal_status_name, nil, nil, player, defense_down_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "resistance_down", this.get_abnormal_status_name, nil, nil, player, resistance_down_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "blastblight", nil, nil, player, bomb_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "hellfireblight", nil, nil, player, oni_bomb_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "bloodblight", nil, nil, player, mystery_debuff_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "tremor", this.get_abnormal_status_name, nil, nil, player, quake_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "roar", this.get_abnormal_status_name, nil, nil, player, ear_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "webbed", this.get_abnormal_status_name, nil, nil, player, beto_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "stench", this.get_abnormal_status_name, nil, nil, player, stink_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "leeched", this.get_abnormal_status_name, nil, nil, player, blooding_enemy_timer, nil, nil, true);
buffs.update_generic_buff(this.list, ailments_type_name, "bleeding", this.get_abnormal_status_name, nil, nil, player, bleeding_debuff_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "stun", nil, nil, player, stun_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "paralysis", nil, nil, player, paralyze_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "sleep", nil, nil, player, sleep_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "frenzy", this.get_abnormal_status_name, nil, nil, player, virus_onset_timer_field);
buffs.update_generic_buff(this.list, ailments_type_name, "frenzy_overcome", this.get_abnormal_status_name, nil, nil, player_data, virus_overcome_buff_timer_field);
buffs.update_generic_buff(this.list, ailments_type_name, "defense_down", nil, nil, player, defense_down_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "resistance_down", nil, nil, player, resistance_down_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "tremor", nil, nil, player, quake_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "roar", nil, nil, player, ear_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "webbed", nil, nil, player, beto_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "stench", nil, nil, player, stink_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "leeched", nil, nil, player, blooding_enemy_timer, nil, nil, true);
buffs.update_generic_buff(this.list, ailments_type_name, "bleeding", nil, nil, player, bleeding_debuff_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "frenzy", nil, nil, player, virus_onset_timer_field);
buffs.update_generic_buff(this.list, ailments_type_name, "frenzy_overcome", nil, nil, player_data, virus_overcome_buff_timer_field);
buffs.update_generic_buff(this.list, ailments_type_name, "engulfed", player, get_is_vacuum_damage_method);
buffs.update_generic_buff(this.list, ailments_type_name, "frostblight", player, get_is_frozen_damage_method);
buffs.update_generic_buff(this.list, ailments_type_name, "engulfed", this.get_abnormal_status_name, player, get_is_vacuum_damage_method);
buffs.update_generic_buff(this.list, ailments_type_name, "frostblight", this.get_abnormal_status_name, player, get_is_frozen_damage_method);
end
function this.update_poison(player)
@@ -208,10 +206,10 @@ function this.update_poison(player)
end
if poison_level == 1 then
buffs.update_generic_buff(this.list, ailments_type_name, "poison", player, poison_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "poison", this.get_abnormal_status_name, player, poison_duration_timer);
this.list.deadly_poison = nil;
else
buffs.update_generic_buff(this.list, ailments_type_name, "deadly_poison", player, poison_duration_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "deadly_poison", this.get_abnormal_status_name, player, poison_duration_timer);
this.list.poison = nil;
end
end
@@ -230,10 +228,10 @@ function this.update_bubbleblight(player)
end
if bubble_type == 1 then
buffs.update_generic_buff(this.list, ailments_type_name, "minor_bubbleblight", player, bubble_damage_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "minor_bubbleblight", this.get_abnormal_status_name, player, bubble_damage_timer);
this.list.major_bubbleblight = nil;
else
buffs.update_generic_buff(this.list, ailments_type_name, "major_bubbleblight", player, bubble_damage_timer);
buffs.update_generic_buff(this.list, ailments_type_name, "major_bubbleblight", this.get_abnormal_status_name, player, bubble_damage_timer);
this.list.minor_bubbleblight = nil;
end
end
@@ -256,7 +254,7 @@ function this.update_muck(player)
return;
end
buffs.update_generic(ailments_type_name, "muck");
buffs.update_generic(ailments_type_name, "muck", this.get_abnormal_status_name);
end
function this.update_frenzy_infection(player)
@@ -279,21 +277,24 @@ function this.update_frenzy_infection(player)
local timer = frenzy_infected_duration - (virus_accumulator_value + virus_timer / 60);
buffs.update_generic(this.list, ailments_type_name, "frenzy_infection", 1, timer, frenzy_infected_duration);
buffs.update_generic(this.list, ailments_type_name, "frenzy_infection", this.get_abnormal_status_name, 1, timer, frenzy_infected_duration);
end
function this.init_names()
for debuff_key, debuff in pairs(this.list) do
local name = language.current_language.ailments[debuff_key];
if name == nil then
name = debuff_key;
end
debuff.name = name;
for abnormal_status_key, debuff in pairs(this.list) do
debuff.name = this.get_abnormal_status_name(abnormal_status_key);
end
end
function this.get_abnormal_status_name(abnormal_status_key)
local abnormal_status_name = language.current_language.ailments[abnormal_status_key];
if abnormal_status_name == nil then
return abnormal_status_key;
end
return abnormal_status_name;
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");

View File

@@ -17,6 +17,7 @@ local dangos;
local abnormal_statuses;
local otomo_moves;
local weapon_skills;
local misc_buffs;
local sdk = sdk;
local tostring = tostring;
@@ -50,6 +51,17 @@ local os = os;
local ValueType = ValueType;
local package = package;
--[[
TODO:
[x] DONE! Wirebug-related skills
More otomo skills
[x] DONE! More Dango skills
Part breaker, charge master
[x] DONE! Weapon buffs
More endemic life, such as Lampsquid
[x] DONE! Horn music
]]
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");
@@ -115,11 +127,7 @@ function this.init_UI(buff)
end
function this.init_names()
consumables.init_names();
melody_effects.init_names();
endemic_life_buffs.init_names();
skills.init_names();
dangos.init_names();
abnormal_statuses.init_names();
end
@@ -170,7 +178,23 @@ function this.update()
endemic_life_buffs.update(master_player, master_player_data);
abnormal_statuses.update(master_player, master_player_data);
weapon_skills.update(master_player, master_player_data, weapon_type);
misc_buffs.update(master_player, master_player_data);
end
-- local tbl = {
-- "_IsEnable_KitchenSkill048_Reduce",
-- "_KitchenSkill_Insurance_DefUp_Lv3",
-- "_KitchenSkill_Insurance_DefUp_Lv4",
-- "_KitchenSkill051_AtkUpTimer",
-- "_KitchenSkill051_AtkUp",
-- "_KitchenSkill054_Timer",
-- "_KitchenSkill054_DefUp",
-- };
-- xy = "";
-- for _, key in ipairs(tbl) do
-- xy = string.format("%s%s: %s\n", xy, key, tostring(master_player_data:get_field(key)));
-- end
end
function this.update_timer(buff, timer, duration)
@@ -199,7 +223,7 @@ function this.update_timer(buff, timer, duration)
end
end
function this.update_generic_buff(buff_list, buff_type, buff_key,
function this.update_generic_buff(buff_list, buff_type, buff_key, get_name_function,
value_owner, value_holder,
timer_owner, timer_holder,
duration_owner, duration_holder,
@@ -286,17 +310,17 @@ function this.update_generic_buff(buff_list, buff_type, buff_key,
end
end
return this.update_generic(buff_list, buff_type, buff_key, level, timer, duration);
return this.update_generic(buff_list, buff_type, buff_key, get_name_function, level, timer, duration);
end
function this.update_generic(buff_list, buff_type, buff_key, level, timer, duration)
function this.update_generic(buff_list, buff_type, buff_key, get_name_function, level, timer, duration)
duration = duration or timer;
level = level or 1;
local buff = buff_list[buff_key];
if buff == nil then
local name = language.current_language[buff_type][buff_key];
local name = get_name_function(buff_key);
buff = this.new(buff_type, buff_key, name, level, duration);
buff_list[buff_key] = buff;
else
@@ -329,6 +353,7 @@ function this.init_dependencies()
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
end
function this.init_module()

View File

@@ -8,6 +8,7 @@ local players;
local utils;
local language;
local error_handler;
local endemic_life_buffs;
local sdk = sdk;
local tostring = tostring;
@@ -55,6 +56,20 @@ this.list = {
gourmet_fish = nil,
};
local consumable_ids = {
demondrug = 68157917,
mega_demondrug = 68157918,
armorskin = 68157922,
mega_armorskin = 68157923,
might_seed = 68157919,
adamant_seed = 68157924,
demon_powder = 68157920,
hardshell_powder = 68157925,
immunizer = 68157911,
dash_juice = 68157913,
gourmet_fish = 68157909
}
local consumables_type_name = "consumables";
local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager");
@@ -65,10 +80,13 @@ local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:g
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_atk_up_field = player_user_data_item_parameter_type_def:get_field("_MightSeedAtkUp");
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");
@@ -99,6 +117,9 @@ local stamina_up_buff_second_timer_field = player_data_type_def:get_field("_Stam
-- Gourmet Fish
local fish_regene_enable_field = player_data_type_def:get_field("_FishRegeneEnableTimer");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.ContentsIdSystem.ItemId)");
function this.update(player_data)
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
if item_parameter == nil then
@@ -106,44 +127,27 @@ function this.update(player_data)
return;
end
local cached_language = language.current_language
this.update_demondrug(player_data, item_parameter);
this.update_armorskin(player_data, item_parameter);
this.update_might_seed(player_data, item_parameter);
this.update_dash_juice(player_data, item_parameter);
buffs.update_generic_buff(this.list, consumables_type_name, "adamant_seed", this.get_consumable_name,
player_data, def_up_buff_second_field, player_data, def_up_buff_second_timer_field, item_parameter, adamant_seed_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "demon_powder", this.get_consumable_name,
player_data, atk_up_item_second_field, player_data, atk_up_item_second_timer_field, item_parameter, demondrug_powder_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "hardshell_powder", this.get_consumable_name,
player_data, def_up_item_second_field, player_data, def_up_item_second_timer_field, item_parameter, armorskin_powder_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "immunizer", this.get_consumable_name,
nil, nil, player_data, vitalizer_timer_field, item_parameter, vitalizer_timer_const_field);
buffs.update_generic_buff(this.list, consumables_type_name, "might_seed",
player_data, atk_up_buff_second_field,
player_data, atk_up_buff_second_timer_field,
item_parameter, might_seed_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "adamant_seed",
player_data, def_up_buff_second_field,
player_data, def_up_buff_second_timer_field,
item_parameter, adamant_seed_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "demon_powder",
player_data, atk_up_item_second_field,
player_data, atk_up_item_second_timer_field,
item_parameter, demondrug_powder_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "hardshell_powder",
player_data, def_up_item_second_field,
player_data, def_up_item_second_timer_field,
item_parameter, armorskin_powder_timer_field);
buffs.update_generic_buff(this.list, consumables_type_name, "immunizer",
nil, nil,
player_data, vitalizer_timer_field,
item_parameter, vitalizer_timer_const_field);
buffs.update_generic_buff(this.list, consumables_type_name, "immunizer",
nil, nil,
player_data, stamina_up_buff_second_timer_field,
item_parameter, stamina_up_buff_second_field);
buffs.update_generic_buff(this.list, consumables_type_name, "gourmet_fish",
nil, nil,
player_data, fish_regene_enable_field,
nil, nil);
buffs.update_generic_buff(this.list, consumables_type_name, "gourmet_fish", this.get_consumable_name,
nil, nil, player_data, fish_regene_enable_field, nil, nil);
end
function this.update_demondrug(player_data, item_parameter)
@@ -171,14 +175,17 @@ function this.update_demondrug(player_data, item_parameter)
return;
end
local consumable_key;
if demondrug_value == demondrug_const_value then
buffs.update_generic(this.list, consumables_type_name, "demondrug");
consumable_key = "demondrug";
this.list.mega_demondrug = nil;
elseif demondrug_value == mega_demondrug_const_value then
buffs.update_generic(this.list, consumables_type_name, "mega_demondrug");
consumable_key = "mega_demondrug";
this.list.demondrug = nil;
end
buffs.update_generic(this.list, consumables_type_name, consumable_key, this.get_consumable_name);
end
function this.update_armorskin(player_data, item_parameter)
@@ -206,26 +213,81 @@ function this.update_armorskin(player_data, item_parameter)
return;
end
local consumable_key;
if armorskin_value == armorskin_const_value then
buffs.update_generic(this.list, consumables_type_name, "armorskin");
consumable_key = "armorskin";
this.list.mega_armorskin = nil;
elseif armorskin_value == mega_armorskin_const_value then
buffs.update_generic(this.list, consumables_type_name, "mega_armorskin");
consumable_key = "mega_armorskin";
this.list.armorskin = nil;
end
buffs.update_generic(this.list, consumables_type_name, consumable_key, this.get_consumable_name);
end
function this.init_names()
for consumable_key, consumable in pairs(this.list) do
local name = language.current_language.consumables[consumable_key];
if name == nil then
name = consumable_key;
end
consumable.name = name;
function this.update_might_seed(player_data, item_parameter)
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
if atk_up_buff_second == nil then
error_handler.report("consumables.update_might_seed", "Failed to access Data: atk_up_buff_second");
return;
end
local might_seed_atk_up = might_seed_atk_up_field:get_data(item_parameter);
if might_seed_atk_up == nil then
error_handler.report("consumables.update_might_seed", "Failed to access Data: might_seed_atk_up");
return;
end
if atk_up_buff_second ~= might_seed_atk_up then
this.list.might_seed = nil;
return;
end
this.update_generic_buff(this.list, consumables_type_name, "might_seed", this.get_consumable_name,
nil, nil, player_data, atk_up_buff_second_timer_field, item_parameter, might_seed_timer_field);
end
function this.update_dash_juice(player_data, item_parameter)
local stamina_up_buff_second_timer = stamina_up_buff_second_timer_field:get_data(player_data);
if stamina_up_buff_second_timer == nil then
error_handler.report("consumables.update_dash_juice", "Failed to access Data: stamina_up_buff_second_timer");
return;
end
local stamina_up_buff_second = stamina_up_buff_second_field:get_data(item_parameter);
if stamina_up_buff_second == nil then
error_handler.report("consumables.update_dash_juice", "Failed to access Data: stamina_up_buff_second");
return;
end
if utils.number.is_equal(stamina_up_buff_second_timer, 0) then
this.list.dash_juice = nil;
return;
end
local timer = stamina_up_buff_second_timer / 60;
local dash_juice_consumable = this.list.dash_juice;
if dash_juice_consumable == nil
or (dash_juice_consumable ~= nil and timer > dash_juice_consumable.timer) then
if timer <= endemic_life_buffs.peepersects_duration + 0.1 then
this.list.dash_juice = nil;
return;
end
end
buffs.update_generic(this.list, consumables_type_name, "dash_juice", this.get_consumable_name, 1, timer, stamina_up_buff_second);
end
function this.get_consumable_name(consumable_key)
local consumable_name = get_name_method:call(nil, consumable_ids[consumable_key]);
if consumable_name == nil then
error_handler.report("consumables.get_consumable_name", string.format("Failed to access Data: %s_name", consumable_key));
return consumable_key;
end
return consumable_name;
end
function this.init_dependencies()
@@ -237,6 +299,7 @@ function this.init_dependencies()
players = require("MHR_Overlay.Damage_Meter.players");
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
end
function this.init_module()

View File

@@ -43,13 +43,77 @@ local package = package;
this.list = {
dango_defender = nil,
dango_adrenaline = nil
dango_adrenaline = nil,
dango_booster = nil,
dango_glutton = nil,
dango_bulker = nil,
};
local dango_ids = {
dango_polisher = 1,
dango_rider = 2,
dango_adrenaline = 3,
dango_carver_lo = 4,
dango_carver_hi = 5,
dango_medic_lo = 6,
dango_medic_hi = 7,
dango_fighter = 8,
dango_pyro = 9,
dango_specialist = 10,
dango_defender_lo = 11,
dango_defender_hi = 12,
dango_harvester = 13,
dango_marksman = 14,
dango_fortune_caller = 15,
dango_miracle_worker = 16,
dango_deflector = 17,
dango_weakener = 18,
dango_calculator = 19,
dango_temper = 20,
dango_wall_runner = 21,
dango_slugger = 22,
dango_money_maker = 23,
dango_bombardier = 24,
dango_moxie = 25,
dango_immunizer = 26,
dango_trainer = 27,
dango_booster = 28,
dango_feet = 29,
dango_bulker = 30,
dango_insurance = 31,
dango_reviver = 32,
dango_summoner = 33,
dango_hurler = 34,
dango_fire_res_lo = 35,
dango_fire_res_hi = 36,
dango_water_res_lo = 37,
dango_water_res_hi = 38,
dango_thunder_res_lo = 39,
dango_thunder_res_hi = 40,
dango_ice_res_lo = 41,
dango_ice_res_hi = 42,
dango_dragon_res_lo = 43,
dango_dragon_res_hi = 44,
dango_gatherer = 45,
dango_glutton = 46,
dango_bird_caller = 47,
dango_flyer = 48,
dango_defender = 49,
enhanced_dango_fighter = 50,
dango_driver = 51,
dango_hunter = 52,
dango_guard = 53,
dango_shifter = 54,
dango_connector = 55,
super_recovery_dango = 56
};
this.is_dango_adrenaline_active = false;
local dangos_type_name = "dangos";
local dango_defender_minimal_value = 200;
local dango_bulker_attack_up = 15;
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");
@@ -62,11 +126,22 @@ local player_user_data_item_parameter_type_def = get_ref_item_parameter_method:g
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");
-- Dango Booster
local kitchen_skill_027_timer_field = player_data_type_def:get_field("_KitchenSkill027Timer");
-- Dango Glutton
local kitchen_skill_045_timer_field = player_data_type_def:get_field("_KitchenSkill045Timer");
-- Dango Bulker
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
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 data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlKitchenSkillId)");
function this.update(player, player_data)
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
if item_parameter == nil then
@@ -74,10 +149,20 @@ function this.update(player, player_data)
return;
end
buffs.update_generic_buff(this.list, dangos_type_name, "dango_defender", player_data, kitchen_skill_048_field, nil, nil, nil, nil, true, dango_defender_minimal_value);
this.update_dango_adrenaline();
end
this.update_dango_bulker(player_data);
buffs.update_generic_buff(this.list, dangos_type_name, "dango_defender", this.get_dango_name,
player_data, kitchen_skill_048_field, nil, nil, nil, nil, true, dango_defender_minimal_value);
buffs.update_generic_buff(this.list, dangos_type_name, "dango_booster", this.get_dango_name,
nil, nil, player_data, kitchen_skill_027_timer_field);
buffs.update_generic_buff(this.list, dangos_type_name, "dango_glutton", this.get_dango_name,
nil, nil, player_data, kitchen_skill_045_timer_field);
end
function this.update_dango_adrenaline()
if not this.is_dango_adrenaline_active then
@@ -85,19 +170,32 @@ function this.update_dango_adrenaline()
return;
end
buffs.update_generic(this.list, dangos_type_name, "dango_adrenaline");
buffs.update_generic(this.list, dangos_type_name, "dango_adrenaline", this.get_dango_name);
end
function this.init_names()
for dango_key, dango in pairs(this.list) do
local name = language.current_language.dangos[dango_key];
if name == nil then
name = dango_key;
end
dango.name = name;
function this.update_dango_bulker(player_data)
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
if atk_up_buff_second == nil then
error_handler.report("consumables.update_dango_bulker", "Failed to access Data: atk_up_buff_second");
return;
end
if atk_up_buff_second ~= dango_bulker_attack_up then
this.list.dango_bulker = nil;
return;
end
buffs.update_generic_buff(this.list, dangos_type_name, "dango_bulker", this.get_dango_name, nil, nil, player_data, atk_up_buff_second_timer_field);
end
function this.get_dango_name(dango_key)
local dango_name = get_name_method:call(nil, dango_ids[dango_key]);
if dango_name == nil then
error_handler.report("dangos.get_dango_name", string.format("Failed to access Data: %s_name", dango_key));
return dango_key;
end
return dango_name;
end
function this.init_dependencies()
@@ -111,6 +209,7 @@ function this.init_dependencies()
error_handler = require("MHR_Overlay.Misc.error_handler");
end
function this.init_module()
end

View File

@@ -9,6 +9,7 @@ local utils;
local language;
local error_handler;
local env_creature;
local consumables;
local sdk = sdk;
local tostring = tostring;
@@ -49,7 +50,13 @@ this.list = {
gold_wirebug = nil
};
this.peepersects_duration = 90;
local endemic_life_buffs_type_name = "endemic_life_buffs";
local marionette_mode_types = { "ruby_wirebug", "gold_wirebug" };
local butterflame_attack_up = 25;
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");
@@ -65,8 +72,11 @@ local crit_up_ec_second_timer_field = player_data_type_def:get_field("_CritUpEcS
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");
-- Butterflame
local atk_up_buff_second_field = player_data_type_def:get_field("_AtkUpBuffSecond");
local atk_up_buff_second_timer_field = player_data_type_def:get_field("_AtkUpBuffSecondTimer");
-- Peepersects
local stamina_up_buff_second_timer_field = player_data_type_def:get_field("_StaminaUpBuffSecondTimer");
local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase");
-- Ruby/Gold Wirebugs
@@ -75,66 +85,16 @@ local get_marionette_mode_type_method = player_quest_base_type_def:get_method("g
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, 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);
function this.update(player, player_data, item_parameter)
this.update_ruby_and_gold_wirebugs(player, player_data);
end
this.update_butterflame(player_data);
this.update_peepersects(player_data);
function this.update_generic_timer(endemic_life_buff_key, timer_owner, timer_holder, is_infinite)
local timer = nil;
if timer_holder ~= nil then
if utils.type.is_REField then
timer = timer_holder:get_data(timer_owner);
else
timer = timer_holder:call(timer_owner);
end
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
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, "cutterfly", this.get_endemic_life_name,
nil, nil, player_data, crit_up_ec_second_timer_field);
if utils.number.is_equal(timer, 0) then
this.list[endemic_life_buff_key] = nil;
return;
end
if is_infinite then
timer = nil;
else
timer = timer / 60;
end
end
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
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_generic", string.format("Failed to access Data: %s -> name", endemic_life_buff_key));
return;
end
endemic_life_buff = buffs.new("endemic_life_buffs", endemic_life_buff_key, name, level, duration);
this.list[endemic_life_buff_key] = endemic_life_buff;
else
endemic_life_buff.level = level;
if timer ~= nil then
buffs.update_timer(endemic_life_buff, timer);
end
end
buffs.update_generic_buff(this.list, endemic_life_buffs_type_name, "clothfly", this.get_endemic_life_name,
nil, nil, player_data, def_up_buff_second_rate_timer_field);
end
function this.update_ruby_and_gold_wirebugs(player, player_data)
@@ -155,11 +115,70 @@ function this.update_ruby_and_gold_wirebugs(player, player_data)
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);
buffs.update_generic_timer(this.list, endemic_life_buffs_type_name, endemic_life_buff_key, this.get_endemic_life_name,
player_data, wirebug_powerup_timer_field);
end
function this.init_names()
-- Nothing to do here
function this.update_butterflame(player_data)
local atk_up_buff_second = atk_up_buff_second_field:get_data(player_data);
if atk_up_buff_second == nil then
error_handler.report("consumables.update_butterflame", "Failed to access Data: atk_up_buff_second");
return;
end
if atk_up_buff_second ~= butterflame_attack_up then
this.list.butterflame = nil;
return;
end
buffs.update_generic_timer(this.list, endemic_life_buffs_type_name, "butterflame", this.get_endemic_life_name,
player_data, atk_up_buff_second_timer_field);
end
function this.update_peepersects(player_data)
local stamina_up_buff_second_timer = stamina_up_buff_second_timer_field:get_data(player_data);
if stamina_up_buff_second_timer == nil then
error_handler.report("consumables.update_peepersects", "Failed to access Data: stamina_up_buff_second_timer");
return;
end
if utils.number.is_equal(stamina_up_buff_second_timer, 0) then
this.list.peepersects = nil;
return;
end
local timer = stamina_up_buff_second_timer / 60;
local peepersects_buff = this.list.peepersects;
if peepersects_buff == nil and consumables.list.dash_juice ~= nil and timer <= consumables.list.dash_juice.timer then
return;
end
if peepersects_buff == nil
or (peepersects_buff ~= nil and timer > peepersects_buff.timer) then
local timer_percentage = timer / this.peepersects_duration;
if timer_percentage < 0.95 or timer_percentage > 1.05 then
this.list.peepersects = nil;
return;
end
end
buffs.update_generic(this.list, endemic_life_buffs_type_name, "peepersects", this.get_endemic_life_name, 1, timer, this.peepersects_duration);
end
function this.get_endemic_life_name(endemic_life_buff_key)
if singletons.message_manager == nil then
error_handler.report("endemic_life_buffs.get_endemic_life_name", "Failed to access Data: message_manager");
return endemic_life_buff_key;
end
local endemic_life_name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids[endemic_life_buff_key]);
if endemic_life_name == nil then
error_handler.report("endemic_life_buffs.get_endemic_life_name", string.format("Failed to access Data: %s_name", endemic_life_buff_key));
return endemic_life_buff_key;
end
return endemic_life_name;
end
function this.init_dependencies()
@@ -172,6 +191,7 @@ function this.init_dependencies()
language = require("MHR_Overlay.Misc.language");
error_handler = require("MHR_Overlay.Misc.error_handler");
env_creature = require("MHR_Overlay.Endemic_Life.env_creature");
consumables = require("MHR_Overlay.Buffs.consumables");
end
function this.init_module()

View File

@@ -41,7 +41,7 @@ local os = os;
local ValueType = ValueType;
local package = package;
local ids = {
--[[local melody_effect_ids = {
self_improvement = 0,
attack_up = 1,
defense_up = 2,
@@ -70,38 +70,7 @@ local ids = {
infernal_melody = 25,
sharpness_regeneration = 26,
sharpness_extension = 27
};
local melody_effect_keys = {
"self_improvement",
"attack_up",
"defense_up",
"affinity_up",
"elemental_attack_boost",
"attack_and_defense_up",
"attack_and_affinity_up",
"knockbacks_negated",
"earplugs_s",
"earplugs_l",
"tremors_negated",
"wind_pressure_negated",
"stun_negated",
"blight_negated",
"divine_protection",
"health_recovery_s",
"health_recovery_l",
"health_recovery_s_antidote",
"health_regeneration",
"stamina_use_reduced",
"stamina_recovery_up",
"sharpness_loss_reduced",
"environment_damage_negated",
"sonic_wave",
"sonic_barrier",
"infernal_melody",
"sharpness_regeneration",
"sharpness_extension"
};
};]]
this.list = {};
@@ -118,6 +87,9 @@ 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 data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.HornConcertId)");
function this.update(master_player)
local music_data_array = music_data_field:get_data(master_player);
if music_data_array == nil then
@@ -138,45 +110,45 @@ function this.update(master_player)
goto continue;
end
this.update_melody_effect(i + 1, music_data);
this.update_melody_effect(i, music_data);
::continue::
end
end
function this.update_melody_effect(lua_index, melody_data)
function this.update_melody_effect(index, melody_data)
local lua_index = index + 1;
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));
return;
end
if melody_timer == nil then
error_handler.report("melody_effects.update_melody_effect", "Failed to access Data: melody_timer No. " .. tostring(index));
return;
end
if utils.number.is_equal(melody_timer, 0) then
this.list[lua_index] = nil;
return;
end
if utils.number.is_equal(melody_timer, 0) then
this.list[lua_index] = nil;
return;
end
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];
local melody_effect = this.list[lua_index];
if melody_effect == nil then
local melody_effect_name = this.get_melody_effect_name(index);
melody_effect = buffs.new("melody_effects", melody_effect_key, name, 1, melody_timer / 60);
this.list[lua_index] = melody_effect;
else
buffs.update_timer(melody_effect, melody_timer / 60);
end
melody_effect = buffs.new("melody_effects", lua_index, melody_effect_name, 1, melody_timer / 60);
this.list[lua_index] = melody_effect;
else
buffs.update_timer(melody_effect, melody_timer / 60);
end
end
function this.init_names()
for index, dango in pairs(this.list) do
local name = language.current_language.dangos[dango.key];
if name == nil then
name = dango.key;
end
dango.name = name;
function this.get_melody_effect_name(melody_effect_id)
local melody_effect_name = get_name_method:call(nil, melody_effect_id);
if melody_effect_name == nil then
local name = string.format("Melody Effect No. %d", melody_effect_id);
error_handler.report("melody_effects.get_melody_effect_name", "Failed to access Data: " .. melody_effect_name);
return name;
end
return melody_effect_name;
end
function this.init_dependencies()

View File

@@ -0,0 +1,112 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
local error_handler;
local endemic_life_buffs;
local consumables;
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 = {
stamina_use_down = nil,
};
local misc_buffs_type_name = "misc_buffs";
local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData");
-- Dash Juice/Peepersects
local stamina_up_buff_second_timer_field = player_data_type_def:get_field("_StaminaUpBuffSecondTimer");
function this.update(player, player_data)
this.update_stamina_use_down(player_data);
end
function this.update_stamina_use_down(player_data)
if consumables.list.dash_juice ~= nil or endemic_life_buffs.list.peepersects ~= nil then
this.list.stamina_use_down = nil;
return;
end
local stamina_up_buff_second_timer = stamina_up_buff_second_timer_field:get_data(player_data);
if stamina_up_buff_second_timer == nil then
error_handler.report("consumables.update_stamina_use_down", "Failed to access Data: stamina_up_buff_second_timer");
return;
end
if utils.number.is_equal(stamina_up_buff_second_timer, 0) then
this.list.stamina_use_down = nil;
return;
end
buffs.update_generic(this.list, misc_buffs_type_name, "stamina_use_down", 1,
stamina_up_buff_second_timer / 60, endemic_life_buffs.peepersects_duration);
end
function this.init_names()
for misc_buff_key, dango in pairs(this.list) do
dango.name = this.get_misc_buff_name(misc_buff_key);
end
end
function this.get_misc_buff_name(misc_buff_key)
local misc_buff_name = language.current_language.misc_buffs[misc_buff_key];
if misc_buff_name == nil then
return misc_buff_key;
end
return misc_buff_name;
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");
endemic_life_buffs = require("MHR_Overlay.Buffs.endemic_life_buffs");
consumables = require("MHR_Overlay.Buffs.consumables");
end
function this.init_module()
end
return this;

View File

@@ -47,8 +47,41 @@ local package = package;
this.list = {
rousing_roar = nil,
power_drum = nil,
go_fight_win = nil
go_fight_win = nil,
power_drum = nil
};
local otomo_moves_ids = {
herbaceous_healing = 1,
felyne_silkbind = 2,
felyne_wyvernblast = 3,
rousing_roar = 4,
endemic_life_barrage = 5,
health_horn = 6,
healing_bubble = 7,
vase_of_vitality = 8,
furbidden_acorn = 9,
poison_purr_ison = 10,
summeown_endemic_life = 11,
shock_purr_ison = 12,
go_fight_win = 13,
giga_barrel_bombay = 14,
flash_bombay = 15,
anti_monster_mine = 16,
zap_blast_spinner = 17,
furr_ious = 18,
power_drum = 19,
fleet_foot_feat = 20,
whirlwind_assault = 21,
pilfer = 22,
shock_tripper = 23,
mega_boomerang = 24,
camouflage = 25,
healing_clover_bat = 26,
felyne_firewors = 27,
lottery_box = 28,
felyne_powered_up = 29,
ameowzing_mist = 30
};
local otomo_moves_type_name = "otomo_moves";
@@ -64,22 +97,28 @@ 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");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.OtSupportActionId)");
function this.update(player_data)
buffs.update_generic_buff(this.list, otomo_moves_type_name, "rousing_roar", nil, nil, player_data, beast_roar_otomo_timer_field);
buffs.update_generic_buff(this.list, otomo_moves_type_name, "power_drum", nil, nil, player_data, kijin_otomo_timer_field);
buffs.update_generic_buff(this.list, otomo_moves_type_name, "go_fight_win", nil, nil, player_data, runhigh_otomo_timer_field);
buffs.update_generic_buff(this.list, otomo_moves_type_name, "rousing_roar", this.get_otomo_move_name,
nil, nil, player_data, beast_roar_otomo_timer_field);
buffs.update_generic_buff(this.list, otomo_moves_type_name, "go_fight_win", this.get_otomo_move_name,
nil, nil, player_data, runhigh_otomo_timer_field);
buffs.update_generic_buff(this.list, otomo_moves_type_name, "power_drum", this.get_otomo_move_name,
nil, nil, player_data, kijin_otomo_timer_field);
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;
function this.get_otomo_move_name(otomo_move_key)
local otomo_move_name = get_name_method:call(nil, otomo_moves_ids[otomo_move_key]);
if otomo_move_name == nil then
error_handler.report("otomo_moves.get_otomo_move_name", string.format("Failed to access Data: %s_name", otomo_move_key));
return otomo_move_key;
end
return otomo_move_name;
end
function this.init_dependencies()

View File

@@ -51,6 +51,7 @@ this.list = {
intrepid_heart = nil,
dereliction = nil,
latent_power = nil,
protective_polish = nil,
wind_mantle = nil,
grinder_s = nil,
counterstrike = nil,
@@ -62,6 +63,7 @@ this.list = {
hellfire_cloak = nil,
agitator = nil,
furious = nil,
status_trigger = nil,
heaven_sent = nil,
heroics = nil,
resuscitate = nil,
@@ -70,167 +72,161 @@ this.list = {
frenzied_bloodlust = nil,
peak_performance = nil,
dragonheart = nil,
resentment = nil
resentment = nil,
bladescale_hone = nil,
spiribirds_call = nil
};
local skills_type_name = "skills";
local skill_data_list = {
-- 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
-- attack_boost = { id = 1 },
agitator = { id = 2 },
peak_performance = { id = 3, level = 0, is_equipped = false },
resentment = { id = 4, level = 0, is_equipped = false },
resuscitate = { id = 5, level = 0, is_equipped = false },
-- critical_eye = { id = 6 },
-- critical_boost = { id = 7 },
-- weakness_exploit = { id = 8 },
latent_power = { id = 9 },
maximum_might = { id = 10, level = 0, is_equipped = false },
-- critical_element = { id = 11 },
-- masters_touch = { id = 12 },
-- fire_attack = { id = 13 },
-- water_attack = { id = 14 },
-- ice_attack = { id = 15 },
-- thunder_attack = { id = 16 },
-- dragon_attack = { id = 17 },
-- poison_attack = { id = 18 },
-- paralysis_attack = { id = 19 },
-- sleep_attack = { id = 20 },
-- blast_attack = { id = 21 },
-- handicraft = { id = 22 },
-- razor_sharp = { id = 23 },
-- spare_shot = { id = 24 },
protective_polish = { id = 25 },
-- minds_eye = { id = 26 },
-- ballistics = { id = 27 },
-- bludgeoner = { id = 28 },
-- bow_charge_plus = { id = 29 },
-- focus = { id = 30 },
-- power_prolonger = { id = 31 },
-- marathon_runner = { id = 32 },
-- constitution = { id = 33 },
-- stamina_surge = { id = 34 },
-- guard = { id = 35 },
-- guard_up = { id = 36 },
offensive_guard = { id = 37 },
-- critical_draw = { id = 38 },
-- punishing_draw = { id = 39 },
-- quick_sheathe = { id = 40 },
-- slugger = { id = 41 },
-- stamina_thief = { id = 42 },
affinity_sliding = { id = 43 },
-- horn_maestro = { id = 44 },
-- artillery = { id = 45 },
-- load_shells = { id = 46 },
-- special_ammo_boost = { id = 47 },
-- normal_rapid_up = { id = 48 },
-- pierce_up = { id = 49 },
-- spread_up = { id = 50 },
-- ammo_up = { id = 51 },
-- reload_speed = { id = 52 },
-- recoil_down = { id = 53 },
-- steadiness = { id = 54 },
-- rapid_fire_up = { id = 55 },
-- defense_boost = { id = 56 },
-- divine_blessing = { id = 57 },
-- recovery_up = { id = 58 },
-- recovery_speed = { id = 59 },
-- speed_eating = { id = 60 },
-- earplugs = { id = 61 },
-- windproof = { id = 62 },
-- tremor_resistance = { id = 63 },
-- bubbly_dance = { id = 64 },
-- evade_window = { id = 65 },
-- evade_extender = { id = 66 },
-- fire_resistance = { id = 67 },
-- water_resistance = { id = 68 },
-- ice_resistance = { id = 69 },
-- thunder_resistance = { id = 70 },
-- dragon_resistance = { id = 71 },
-- blight_resistance = { id = 72 },
-- poison_resistance = { id = 73 },
-- paralysis_resistance = { id = 74 },
-- sleep_resistance = { id = 75 },
-- stun_resistance = { id = 76 },
-- muck_resistance = { id = 77 },
-- blast_resistance = { id = 78 },
-- botanist = { id = 79 },
-- geologist = { id = 80 },
-- partbreaker = { id = 81 },
-- capture_master = { id = 82 },
-- carving_master = { id = 83 },
-- good_luck = { id = 84 },
-- speed_sharpening = { id = 85 },
-- bombardier = { id = 86 },
-- mushroomancer = { id = 87 },
-- item_prolonger = { id = 88 },
-- wide_range = { id = 89 },
-- free_meal = { id = 90 },
heroics = { id = 91, level = 0, is_equipped = false },
-- fortify = { id = 92 },
-- flinch_free = { id = 93 },
-- jump_master = { id = 94 },
-- carving_pro = { id = 95 },
-- hunger_resistance = { id = 96 },
-- leap_of_faith = { id = 97 },
-- diversion = { id = 98 },
-- master_mounter = { id = 99 },
-- chameleos_blessing = { id = 100 },
-- kushala_blessing = { id = 101 },
-- teostra_blessing = { id = 102 },
dragonheart = { id = 103, level = 0, is_equipped = false },
-- wirebug_whisperer = { id = 104 },
wall_runner = { id = 105 },
counterstrike = { id = 106 },
-- rapid_morph = { id = 107 },
hellfire_cloak = { id = 108 },
-- wind_alignment = { id = 109 },
-- thunder_alignment = { id = 110 },
-- stormsoul = { id = 111 },
-- blood_rite = { id = 112 },
dereliction = { id = 113, level = 0, is_equipped = false },
furious = { id = 114 },
-- mail_of_hellfire = { id = 115 },
coalescence = { id = 116 },
bloodlust = { id = 117, level = 0, is_equipped = false },
-- defiance = { id = 118 },
-- sneak_attack = { id = 119 },
adrenaline_rush = { id = 120 },
-- embolden = { id = 121 },
-- redirection = { id = 122 },
spiribirds_call = { id = 123 },
-- charge_master = { id = 124 },
-- foray = { id = 125 },
-- tune_up = { id = 126 },
grinder_s = { id = 127 },
bladescale_hone = { id = 128 },
-- wall_runner_boost = { id = 129 },
-- element_exploit = { id = 130 },
burst = { id = 131 },
-- guts = { id = 132 },
-- quick_breath = { id = 133 },
status_trigger = { id = 134 },
intrepid_heart = { id = 135 },
-- buildup_boost = { id = 136 },
-- berserk = { id = 137 },
wind_mantle = { id = 138 },
-- powder_mantle = { id = 139 },
-- frostcraft = { id = 140 },
-- dragon_conversion = { id = 141 },
heaven_sent = { id = 142 },
frenzied_bloodlust = { id = 143 },
-- blood_awakening = { id = 144 },
-- strife = { id = 145 },
-- shock_absorber = { id = 146 },
-- inspiration = { id = 147 },
}
local burst_breakpoints = {5};
@@ -246,6 +242,8 @@ local frenzied_bloodlust_sheathed_duration = 0;
local dragonheart_breakpoints = {0.5, 0.5, 0.7, 0.7, 0.8};
local spiribirds_call_duration = 60;
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 = {
@@ -304,6 +302,8 @@ local equip_skill_231_wp_off_timer_field = player_data_type_def:get_field("_Equi
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");
-- Spiritbird's Call
local equip_skill_211_timer_field = player_data_type_def:get_field("_EquipSkill211_Timer");
@@ -339,7 +339,8 @@ local get_hunter_wire_skill_231_num_method = player_quest_base_type_def:get_meth
local bow_type_def = sdk.find_type_definition("snow.player.Bow");
local _equip_skill_216_bottle_up_timer_field = bow_type_def:get_field("_EquipSkill216_BottleUpTimer");
local qeree = {};
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlEquipSkillId)");
function this.update(player, player_data, weapon_type)
--local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
@@ -348,46 +349,6 @@ function this.update(player, player_data, weapon_type)
-- return;
--end
-- local fields = player_quest_base_type_def:get_fields();
-- xy = "Player:\n";
-- for i = 1, 999 do
-- local field = fields[i];
-- if field == nil then
-- break;
-- end
-- local value = field:get_data(player);
-- 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
-- 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_wind_mantle(player, weapon_type);
@@ -398,6 +359,7 @@ function this.update(player, player_data, weapon_type)
this.update_dragonheart();
this.update_resentment(player_data);
this.update_bladescale_hone(player, weapon_type);
this.update_spiribirds_call(player_data);
this.update_generic_skill("dereliction", player_data, symbiosis_skill_lost_vital_field,
nil, nil, nil, nil, true, nil, dereliction_breakpoints);
@@ -435,12 +397,12 @@ function this.update_generic_skill(skill_key, value_owner, value_holder, timer_o
is_infinite, minimal_value, level_breakpoints)
local skill_data = skill_data_list[skill_key];
if skill_data ~= nil and not skill_data.is_equipped then
if skill_data ~= nil and skill_data.is_equipped ~= nil and not skill_data.is_equipped then
this.list[skill_key] = nil;
return;
end
buffs.update_generic_buff(this.list, skills_type_name, skill_key,
buffs.update_generic_buff(this.list, skills_type_name, skill_key, this.get_skill_name,
value_owner, value_holder, timer_owner, timer_holder, duration_owner, duration_holder,
is_infinite, minimal_value, level_breakpoints);
end
@@ -452,15 +414,11 @@ function this.update_equipped_skill_data(player)
return;
end
-- xy = ""
-- for i = 0, 999 do
-- local has_skill = has_skill_method:call(player_skill_list, i, 1);
-- if has_skill then
-- xy = string.format("%s%d = %s\n", xy, i, tostring(has_skill));
-- end
-- end
for skill_key, skill_data in pairs(skill_data_list) do
if skill_data.is_equipped == nil then
goto continue;
end
local re_skill_data = get_skill_data_method:call(player_skill_list, skill_data.id);
if re_skill_data == nil then
goto continue;
@@ -516,7 +474,7 @@ function this.update_wind_mantle(player, weapon_type)
end
end
buffs.update_generic(this.list, skills_type_name, "wind_mantle", level, wind_mantle_duration - (wind_mantle_timer / 60), wind_mantle_duration);
buffs.update_generic(this.list, skills_type_name, "wind_mantle", this.get_skill_name, level, wind_mantle_duration - (wind_mantle_timer / 60), wind_mantle_duration);
end
function this.update_maximum_might(player_data)
@@ -544,17 +502,17 @@ function this.update_maximum_might(player_data)
end
elseif skill == nil then
local name = language.current_language.skills.maximum_might;
local maximum_might_name = this.get_skill_name("maximum_might");
if whole_body_timer < maximum_might_previous_timer_value then
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", name, 1);
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", maximum_might_name, 1);
elseif is_timer_zero then
if maximum_might_delay_timer == nil then
maximum_might_delay_timer = time.new_delay_timer(function()
maximum_might_delay_timer = nil;
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", name, 1);
this.list.maximum_might = buffs.new(skills_type_name, "maximum_might", maximum_might_name, 1);
end, 3.5);
end
@@ -579,8 +537,13 @@ function this.update_bloodlust()
end
if this.list.bloodlust == nil then
local name = language.current_language.skills.bloodlust;
this.list.bloodlust = buffs.new(skills_type_name, "bloodlust", name);
local bloodlust_name = this.get_skill_name("bloodlust");
if bloodlust_name == nil then
error_handler.report("skills.update_generic_buff", "Failed to access Data: bloodlust_name");
return;
end
this.list.bloodlust = buffs.new(skills_type_name, "bloodlust", bloodlust_name);
end
end
@@ -631,7 +594,7 @@ function this.update_frenzied_bloodlust(player, player_data)
timer = equip_skill_231_wp_off_timer;
end
local skill = buffs.update_generic(this.list, skills_type_name, "frenzied_bloodlust", 1, timer / 60);
local skill = buffs.update_generic(this.list, skills_type_name, "frenzied_bloodlust", this.get_skill_name, 1, timer / 60);
if is_wp_off_timer_max then
skill.duration = frenzied_bloodlust_duration / 60;
@@ -651,7 +614,7 @@ function this.update_peak_performance()
return;
end
buffs.update_generic(this.list, skills_type_name, "peak_performance");
buffs.update_generic(this.list, skills_type_name, "peak_performance", this.get_skill_name);
end
function this.update_dragonheart()
@@ -674,7 +637,7 @@ function this.update_dragonheart()
return;
end
buffs.update_generic(this.list, skills_type_name, "dragonheart");
buffs.update_generic(this.list, skills_type_name, "dragonheart", this.get_skill_name);
end
function this.update_resentment(player_data)
@@ -694,7 +657,7 @@ function this.update_resentment(player_data)
return;
end
buffs.update_generic(this.list, skills_type_name, "resentment");
buffs.update_generic(this.list, skills_type_name, "resentment", this.get_skill_name);
end
function this.update_bladescale_hone(player, weapon_type)
@@ -706,16 +669,31 @@ function this.update_bladescale_hone(player, weapon_type)
this.update_generic_skill("bladescale_hone", nil, nil, player, _equip_skill_216_bottle_up_timer_field);
end
function this.init_names()
for skill_key, skill in pairs(this.list) do
local name = language.current_language.skills[skill_key];
if name == nil then
name = skill_key;
end
skill.name = name;
function this.update_spiribirds_call(player_data)
local equip_skill_211_timer = equip_skill_211_timer_field:get_data(player_data);
if equip_skill_211_timer == nil then
error_handler.report("skills.update_spiribirds_call", "Failed to access Data: equip_skill_211_timer");
return;
end
if utils.number.is_equal(equip_skill_211_timer, 0) then
this.list.spiribirds_call = nil;
return;
end
local timer = spiribirds_call_duration - (equip_skill_211_timer / 60);
buffs.update_generic(this.list, skills_type_name, "spiribirds_call", this.get_skill_name, 1, timer, spiribirds_call_duration);
end
function this.get_skill_name(skill_key)
local skill_name = get_name_method:call(nil, skill_data_list[skill_key].id);
if skill_name == nil then
error_handler.report("skills.get_skill_name", string.format("Failed to access Data: %s_name", skill_key));
return skill_key;
end
return skill_name;
end
function this.init_dependencies()

View File

@@ -58,10 +58,13 @@ this.list = {
harvest_moon = nil,
-- Light Bowgun
fanning_maneuver = nil,
wyvernblast_reload = nil,
-- Heavy Bowgun
counter_charger = nil,
rising_moon = nil,
setting_sun = nil,
overheat = nil,
wyvernsnipe_reload = nil,
-- Hammer
impact_burst = nil,
-- Gunlance
@@ -93,6 +96,57 @@ this.list = {
bolt_boost = nil
};
local weapon_skill_ids = {
-- Great Sword
power_sheathe = nil,
-- Switch Axe
amped_state = nil,
switch_charger = nil,
axe_heavy_slam = nil,
-- Long Sword
spirit_gauge_autofill = nil, -- Soaring Kick, Iai Slash
spirit_gauge = nil,
harvest_moon = 94,
-- Light Bowgun
fanning_maneuver = 72,
wyvernblast_reload = nil,
-- Heavy Bowgun
counter_charger = 76,
rising_moon = 147,
setting_sun = 149,
overheat = nil,
wyvernsnipe_reload = nil,
-- Hammer
impact_burst = 109,
-- Gunlance
ground_splitter = 46,
erupting_cannon = 121,
-- Lance
anchor_rage = 37,
spiral_thrust = 38,
twin_wine = nil,
-- Sword & Shield
destroyer_oil = 97,
-- Dual Blades
ironshine_silk = 104,
archdemon_mode = nil,
-- Hunting Horn
silkbind_shockwave = 114,
bead_of_resonance = 35,
sonic_bloom = 112,
-- Charge Blade
element_boost = nil,
sword_boost_mode = nil,
-- Insect Glaive
red_extract = nil,
white_extract = nil,
orange_extract = nil,
all_extracts_mix = nil,
-- Bow
herculean_draw = nil,
bolt_boost = 154
};
-- 0 Great Sword
-- 1 Switch Axe
-- 2 Long Sword
@@ -113,6 +167,8 @@ local previous_weapon_type = -1;
local spirit_gauge_breakpoints = {3, 2};
local wyverblast_reload_duration = 60;
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");
@@ -168,6 +224,8 @@ local get_long_sword_shell_010_list_item_method = long_sword_shell_010_list_type
local light_bowgun_type_def = sdk.find_type_definition("snow.player.LightBowgun");
-- Fanning Maneuver
local light_bowgun_wire_buff_timer_field = light_bowgun_type_def:get_field("LightBowgunWireBuffTimer");
-- Wyvernblast Reload
local wyvernblast_reload_timer_field = player_data_type_def:get_field("_WyvernBlastReloadTimer");
-- Heavy Bowgun
@@ -175,7 +233,6 @@ local heavy_bowgun_type_def = sdk.find_type_definition("snow.player.HeavyBowgun"
-- Counter Charger
local reduce_charge_timer_field = heavy_bowgun_type_def:get_field("_ReduseChargeTimer");
local reduce_charge_timer_base_field = heavy_bowgun_type_def:get_field("_ReduseChargeTimeBase");
-- Rising Moon
local light_bowgun_shell_manager_type_def = sdk.find_type_definition("snow.shell.LightBowgunShellManager");
local get_light_bowgun_shell_030s_speed_boost_list_method = light_bowgun_shell_manager_type_def:get_method("get_getLightBowgunShell030s_SpeedBoost");
@@ -183,13 +240,17 @@ local get_light_bowgun_shell_030s_speed_boost_list_method = light_bowgun_shell_m
local light_bowgun_shell_030_type_def = sdk.find_type_definition("snow.shell.LightBowgunShell030");
local light_bowgun_shell_030_is_enable_hit_field = light_bowgun_shell_030_type_def:get_field("<IsEnableHit>k__BackingField");
local light_bowgun_shell_030_timer_field = light_bowgun_shell_030_type_def:get_field("_Timer");
-- Setting Sun
local get_light_bowgun_shell_030s_all_list_method = light_bowgun_shell_manager_type_def:get_method("get_getLightBowgunShell030s_All");
local light_bowgun_shell_030_list_type_def = sdk.find_type_definition("System.Collections.Generic.List`1<snow.shell.LightBowgunShell030>");
local get_light_bowgun_shell_030_list_count_method = light_bowgun_shell_030_list_type_def:get_method("get_Count");
local get_light_bowgun_shell_030_list_item_method = light_bowgun_shell_030_list_type_def:get_method("get_Item");
-- Overheat
local heavy_bowgun_overheat_timer_field = player_data_type_def:get_field("_HeavyBowgunOverHeatTimer");
-- Wyvernsnipe Reload
local heavy_bowgun_wyvern_snipe_timer_field = player_data_type_def:get_field("_HeavyBowgunWyvernSnipeTimer");
-- Hammer
@@ -345,6 +406,8 @@ local single_mvalue_field = single_type_def:get_field("mValue");
local int32_type_def = sdk.find_type_definition("System.Int32");
local int32_mvalue_field = int32_type_def:get_field("mValue");
local data_shortcut_type_def = sdk.find_type_definition("snow.data.DataShortcut");
local get_name_method = data_shortcut_type_def:get_method("getName(snow.data.DataDef.PlWeaponActionId)");
local heavy_bowgun_shot_type_data_fields = { explode_pile_data_normal_field, explode_pile_data_radiate_field, explode_pile_data_spread_field};
@@ -365,10 +428,10 @@ function this.update(player, player_data, weapon_type)
this.update_long_sword_skills(player);
elseif weapon_type == 3 then
this.update_light_bowgun_skills(player);
this.update_light_bowgun_skills(player, player_data);
elseif weapon_type == 4 then
this.update_heavy_bowgun_skills(player);
this.update_heavy_bowgun_skills(player, player_data);
elseif weapon_type == 5 then
this.update_hammer_skills(player);
@@ -400,8 +463,8 @@ function this.update(player, player_data, weapon_type)
end
function this.update_great_sword_skills(player)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "power_sheathe", nil, nil,
player, move_wp_off_buff_set_time_field, player, move_wp_off_buff_set_time_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "power_sheathe", this.get_weapon_skill_name,
nil, nil, player, move_wp_off_buff_set_time_field, player, move_wp_off_buff_set_time_field);
end
function this.update_switch_axe_skills(player)
@@ -411,26 +474,26 @@ function this.update_switch_axe_skills(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "amped_state", nil, nil,
player, get_bottle_awake_duration_timer_method, player, bottle_awake_duration_time_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "amped_state", this.get_weapon_skill_name,
nil, nil, player, get_bottle_awake_duration_timer_method, player, bottle_awake_duration_time_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "switch_charger", nil, nil,
player, no_use_slash_gauge_timer_field, player_user_data_slash_axe, get_no_user_slash_gauge_time_method);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "switch_charger", this.get_weapon_skill_name,
nil, nil, player, no_use_slash_gauge_timer_field, player_user_data_slash_axe, get_no_user_slash_gauge_time_method);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "axe_heavy_slam", nil, nil,
player, bottle_awake_assist_timer_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "axe_heavy_slam", this.get_weapon_skill_name,
nil, nil, player, bottle_awake_assist_timer_field);
end
function this.update_long_sword_skills(player)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "spirit_gauge_autofill", nil, nil,
player, get_long_sword_gauge_powerup_time_method);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "spirit_gauge_autofill", this.get_weapon_skill_name,
nil, nil, player, get_long_sword_gauge_powerup_time_method);
this.update_spirit_gauge(player);
this.update_harvest_moon();
end
function this.update_spirit_gauge(player)
local weapon_skill = buffs.update_generic_buff(this.list, weapon_skills_type_name, "spirit_gauge",
local weapon_skill = buffs.update_generic_buff(this.list, weapon_skills_type_name, "spirit_gauge", this.get_weapon_skill_name,
player, get_long_sword_gauge_lv_method, player, get_long_sword_gauge_lv_timer_method, nil, nil, false, nil, spirit_gauge_breakpoints);
if weapon_skill == nil then
@@ -496,7 +559,7 @@ function this.update_harvest_moon()
return;
end
local life_timer = life_timer_field:get_data(master_long_sword_shell_010);
local life_timer = long_sword_shell_010_life_timer_field:get_data(master_long_sword_shell_010);
if life_timer == nil then
error_handler.report("weapon_skills.update_harvest_moon", "Failed to access Data: life_timer");
return;
@@ -507,20 +570,43 @@ function this.update_harvest_moon()
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "harvest_moon", 1, life_timer);
buffs.update_generic(this.list, weapon_skills_type_name, "harvest_moon", this.get_weapon_skill_name, 1, life_timer);
end
function this.update_light_bowgun_skills(player)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "fanning_maneuver", nil, nil,
player, light_bowgun_wire_buff_timer_field);
function this.update_light_bowgun_skills(player, player_data)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "fanning_maneuver", this.get_weapon_skill_name,
nil, nil, player, light_bowgun_wire_buff_timer_field);
this.update_wyvernblast_reload(player_data);
end
function this.update_heavy_bowgun_skills(player)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "counter_charger", nil, nil,
player, reduce_charge_timer_field, player, reduce_charge_timer_base_field);
function this.update_wyvernblast_reload(player_data)
local wyvernblast_reload_timer = wyvernblast_reload_timer_field:get_data(player_data);
if wyvernblast_reload_timer == nil then
error_handler.report("weapon_skills.update_wyvernblast_reload", "Failed to access Data: heavy_bowgun_overheat_timer_field");
return;
end
if wyvernblast_reload_timer <= 1 then
this.list.wyvernblast_reload = nil;
return;
end
local timer = wyverblast_reload_duration - (wyvernblast_reload_timer / 60);
buffs.update_generic(this.list, weapon_skills_type_name, "wyvernblast_reload", this.get_weapon_skill_name, 1, timer);
end
function this.update_heavy_bowgun_skills(player, player_data)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "counter_charger", this.get_weapon_skill_name,
nil, nil, player, reduce_charge_timer_field, player, reduce_charge_timer_base_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "wyvernsnipe_reload", this.get_weapon_skill_name,
nil, nil, player_data, heavy_bowgun_wyvern_snipe_timer_field);
this.update_rising_moon();
this.update_setting_sun()
this.update_setting_sun();
this.update_overheat(player_data);
end
function this.update_rising_moon()
@@ -575,7 +661,7 @@ function this.update_rising_moon()
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "rising_moon", 1, timer);
buffs.update_generic(this.list, weapon_skills_type_name, "rising_moon", this.get_weapon_skill_name, 1, timer);
end
function this.update_setting_sun()
@@ -635,7 +721,22 @@ function this.update_setting_sun()
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "setting_sun", 1, timer);
buffs.update_generic(this.list, weapon_skills_type_name, "setting_sun", this.get_weapon_skill_name, 1, timer);
end
function this.update_overheat(player_data)
local heavy_bowgun_overheat_timer = heavy_bowgun_overheat_timer_field:get_data(player_data);
if heavy_bowgun_overheat_timer_field == nil then
error_handler.report("weapon_skills.update_overheat", "Failed to access Data: heavy_bowgun_overheat_timer_field");
return;
end
if heavy_bowgun_overheat_timer <= 1 then
this.list.overheat = nil;
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "overheat", this.get_weapon_skill_name, 1, heavy_bowgun_overheat_timer);
end
function this.update_hammer_skills(player)
@@ -645,8 +746,8 @@ function this.update_hammer_skills(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "impact_burst", nil, nil,
player, horn_impact_pulls_timer_field, player_user_data_hammer, hammer_impact_pulls_time_max_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "impact_burst", this.get_weapon_skill_name,
nil, nil, player, horn_impact_pulls_timer_field, player_user_data_hammer, hammer_impact_pulls_time_max_field);
end
function this.update_gunlance_skills(player)
@@ -656,8 +757,8 @@ function this.update_gunlance_skills(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "ground_splitter", nil, nil,
player, shot_damage_up_duration_timer_field, player_user_data_gunlance, get_player_user_data_gunlance_method);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "ground_splitter", this.get_weapon_skill_name,
nil, nil, player, shot_damage_up_duration_timer_field, player_user_data_gunlance, get_player_user_data_gunlance_method);
this.update_erupting_cannon(player, player_user_data_gunlance);
end
@@ -675,13 +776,13 @@ function this.update_erupting_cannon(player, player_user_data_gunlance)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "erupting_cannon", nil, nil,
player, explode_pile_buff_timer_field, explode_pile_data, explode_pile_data_duration_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "erupting_cannon", this.get_weapon_skill_name,
nil, nil, player, explode_pile_buff_timer_field, explode_pile_data, explode_pile_data_duration_field);
end
function this.update_lance_skills(player)
buffs.update_generic_buff(this.list, weapon_skills_type_name, "spiral_thrust", nil, nil,
player, get_ruten_timer_method);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "spiral_thrust", this.get_weapon_skill_name,
nil, nil, player, get_ruten_timer_method);
this.update_anchor_rage(player);
this.update_twin_wine(player);
@@ -728,8 +829,8 @@ function this.update_anchor_rage(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "anchor_rage", nil, nil,
player, get_guard_rage_timer_method, guard_rage_duration_valtype, single_mvalue_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "anchor_rage", this.get_weapon_skill_name,
nil, nil, player, get_guard_rage_timer_method, guard_rage_duration_valtype, single_mvalue_field);
end
function this.update_twin_wine(player)
@@ -739,8 +840,8 @@ function this.update_twin_wine(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "twin_wine", nil, nil,
chain_death_match_shell, chain_death_match_shell_life_timer_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "twin_wine", this.get_weapon_skill_name,
nil, nil, chain_death_match_shell, chain_death_match_shell_life_timer_field);
end
function this.update_sword_and_shield_skills(player)
@@ -750,8 +851,8 @@ function this.update_sword_and_shield_skills(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "destroyer_oil", nil, nil,
player, get_oil_buff_timer_method, player_user_data_short_sword, oil_buff_time_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "destroyer_oil", this.get_weapon_skill_name,
nil, nil, player, get_oil_buff_timer_method, player_user_data_short_sword, oil_buff_time_field);
end
function this.update_dual_blades_skills(player)
@@ -763,8 +864,10 @@ function this.update_dual_blades_skills(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "ironshine_silk", nil, nil,
player, get_sharpness_recovery_buff_valid_timer_method, player_user_data_dual_blades, sharpness_recovery_buff_valid_max_timer_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "ironshine_silk", this.get_weapon_skill_name,
nil, nil, player,
get_sharpness_recovery_buff_valid_timer_method,
player_user_data_dual_blades, sharpness_recovery_buff_valid_max_timer_field);
end
function this.update_archdemon_mode(player)
@@ -790,7 +893,7 @@ function this.update_archdemon_mode(player)
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "archdemon_mode", 1, kijin_kyouka_gauge);
buffs.update_generic(this.list, weapon_skills_type_name, "archdemon_mode", this.get_weapon_skill_name, 1, kijin_kyouka_gauge);
end
function this.update_hunting_horn_skills(player)
@@ -803,8 +906,8 @@ function this.update_hunting_horn_skills(player)
return;
end
buffs.update_generic_buff(this.list, weapon_skills_type_name, "silkbind_shockwave", nil, nil,
player, horn_impact_pulls_timer_field, player_user_data_horn, horn_impact_pulls_duration_field);
buffs.update_generic_buff(this.list, weapon_skills_type_name, "silkbind_shockwave", this.get_weapon_skill_name,
nil, nil, player, horn_impact_pulls_timer_field, player_user_data_horn, horn_impact_pulls_duration_field);
end
function this.update_bead_of_resonance()
@@ -864,7 +967,7 @@ function this.update_bead_of_resonance()
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "bead_of_resonance", 1, life_timer);
buffs.update_generic(this.list, weapon_skills_type_name, "bead_of_resonance", this.get_weapon_skill_name, 1, life_timer);
end
function this.update_sonic_bloom(player)
@@ -885,7 +988,7 @@ function this.update_sonic_bloom(player)
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "sonic_bloom", 1, life_timer);
buffs.update_generic(this.list, weapon_skills_type_name, "sonic_bloom", this.get_weapon_skill_name, 1, life_timer);
end
function this.update_charge_blade_skills(player)
@@ -934,7 +1037,7 @@ function this.update_element_boost(player, player_user_data_charge_axe)
end
end
buffs.update_generic(this.list, weapon_skills_type_name, "element_boost", 1, shield_buff_timer, duration);
buffs.update_generic(this.list, weapon_skills_type_name, "element_boost", this.get_weapon_skill_name, 1, shield_buff_timer, duration);
end
function this.update_sword_boost_mode(player, player_user_data_charge_axe)
@@ -955,7 +1058,8 @@ function this.update_sword_boost_mode(player, player_user_data_charge_axe)
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "sword_boost_mode", 1, sword_buff_timer / 60, sword_buff_time_duration / 60);
buffs.update_generic(this.list, weapon_skills_type_name, "sword_boost_mode", this.get_weapon_skill_name, 1,
sword_buff_timer / 60, sword_buff_time_duration / 60);
end
function this.update_insect_glaive_skills(player)
@@ -968,9 +1072,9 @@ function this.update_insect_glaive_skills(player)
return;
end
this.update_extract(player, "red_extract", get_red_extractive_time_method, red_extractive_max_time_field)
this.update_extract(player, "white_extract", get_white_extractive_time_method, white_extractive_max_time_field)
this.update_extract(player, "orange_extract", get_orange_extractive_time_method, orange_extractive_max_time_field)
this.update_extract(player, "red_extract", get_red_extractive_time_method, red_extractive_max_time_field);
this.update_extract(player, "white_extract", get_white_extractive_time_method, white_extractive_max_time_field);
this.update_extract(player, "orange_extract", get_orange_extractive_time_method, orange_extractive_max_time_field);
end
function this.update_all_extracts_mix(player)
@@ -1002,7 +1106,8 @@ function this.update_all_extracts_mix(player)
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, "all_extracts_mix", 1, red_extractive_time, all_extractive_max_time);
buffs.update_generic(this.list, weapon_skills_type_name, "all_extracts_mix", this.get_weapon_skill_name, 1,
red_extractive_time, all_extractive_max_time);
end
function this.update_extract(player, extract_key, time_holder, max_time_holder)
@@ -1047,7 +1152,7 @@ function this.update_extract(player, extract_key, time_holder, max_time_holder)
duration = extractive_max_time;
end
buffs.update_generic(this.list, weapon_skills_type_name, extract_key, 1, extractive_time, duration);
buffs.update_generic(this.list, weapon_skills_type_name, extract_key, this.get_weapon_skill_name, 1, extractive_time, duration);
end
function this.update_bow_skills(player)
@@ -1079,21 +1184,30 @@ function this.update_bow_skill(player, bow_skill_key, timer_holder, player_user_
return;
end
buffs.update_generic(this.list, weapon_skills_type_name, bow_skill_key, 1, timer / 60, max_time / 60);
buffs.update_generic(this.list, weapon_skills_type_name, bow_skill_key, this.get_weapon_skill_name, 1, timer / 60, max_time / 60);
end
function this.init_names()
for weapon_skill_key, weapon_skill in pairs(this.list) do
local name = language.current_language.weapon_skills[weapon_skill_key];
if name == nil then
name = weapon_skill_key;
end
weapon_skill.name = name;
weapon_skill.name = this.get_weapon_skill_name(weapon_skill_key);
end
end
function this.get_weapon_skill_name(weapon_skill_key)
if weapon_skill_ids[weapon_skill_key] == nil then
return language.current_language.weapon_skills[weapon_skill_key];
else
local weapon_skill_name = get_name_method:call(nil, weapon_skill_ids[weapon_skill_key]);
if weapon_skill_name == nil then
error_handler.report("weapon_skills.get_weapon_skill_name", string.format("Failed to access Data: %s_name", weapon_skill_key));
return weapon_skill_key;
end
return weapon_skill_name;
end
end
function this.init_dependencies()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");

View File

@@ -42,10 +42,12 @@ local package = package;
this.list = {};
this.creature_ids = {
cutterfly = 50,
clothfly = 7,
butterflame = 28,
peepersects = 29,
cutterfly = 50,
ruby_wirebug = 62,
gold_wirebug = 63
gold_wirebug = 63,
};
function this.new(REcreature)
@@ -99,6 +101,7 @@ function this.init(creature, REcreature)
end
creature.name = creature_name;
creature.id = creature_type;
end
function this.init_UI(creature)
@@ -150,7 +153,7 @@ function this.draw(creature, position_on_screen, opacity_scale)
position_on_screen.x = position_on_screen.x - text_width / 2;
end
drawing.draw_label(creature.name_label, position_on_screen, opacity_scale, creature.name);
drawing.draw_label(creature.name_label, position_on_screen, opacity_scale, creature.name .. " " .. creature.id);
end
function this.init_list()

View File

@@ -217,258 +217,6 @@ this.default_language = {
frenzy_overcome = "Frenzy Overcome"
},
consumables = {
demondrug = "Demondrug",
mega_demondrug = "Mega Demondrug",
armorskin = "Armorskin",
mega_armorskin = "Mega Armorskin",
might_seed = "Might Seed",
adamant_seed = "Adamant Seed",
demon_powder = "Demon Powder",
hardshell_powder = "Hardshell Powder",
immunizer = "Immunizer",
dash_juice = "Dash Juice",
gourmet_fish = "Gourmet Fish"
},
melody_effects = {
self_improvement = "Self-Improvement",
attack_up = "Attack Up",
defense_up = "Defense Up",
affinity_up = "Affinity Up",
elemental_attack_boost = "Elemental Attack Boost",
attack_and_defense_up = "Attack and Defense Up",
attack_and_affinity_up = "Attack and Affinity Up",
knockbacks_negated = "Knockbacks Negated",
earplugs_s = "Earplugs (S)",
earplugs_l = "Earplugs (L)",
tremors_negated = "Tremors Negated",
wind_pressure_negated = "Wind Pressure Negated",
stun_negated = "Stun Negated",
blight_negated = "Blight Negated",
divine_protection = "Divine Protection",
health_recovery_s = "Health Recovery (S)",
health_recovery_l = "Health Recovery (L)",
health_recovery_s_antidote = "Health Recovery (S) + Antidote",
health_regeneration = "Health Regeneration",
stamina_use_reduced = "Stamina Use Reduced",
stamina_recovery_up = "Stamina Recovery Up",
sharpness_loss_reduced = "Sharpness Loss Reduced",
environment_damage_negated = "Environment Damage Negated",
sonic_wave = "Sonic Wave",
sonic_barrier = "Sonic Barrier",
infernal_melody = "Infernal Melody",
sharpness_regeneration = "Sharpness Regeneration",
sharpness_extension = "Sharpness Extension"
},
skills = {
-- attack_boost = "Attack Boost",
agitator = "Agitator",
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",
-- 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_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"
},
weapon_skills = {
-- Great Sword
power_sheathe = "Power Sheathe",
@@ -479,31 +227,34 @@ this.default_language = {
-- Long Sword
spirit_gauge_autofill = "Spirit Gauge Autofill", -- Soaring Kick, Iai Slash
spirit_gauge = "Spirit Gauge",
harvest_moon = "Harvest Moon",
--harvest_moon = "Harvest Moon",
-- Light Bowgun
fanning_maneuver = "Fanning Maneuver",
--fanning_maneuver = "Fanning Maneuver",
wyvernblast_reload = "Wyvernblast Reload",
-- Heavy Bowgun
counter_charger = "Counter Charger",
rising_moon = "Rising Moon",
setting_sun = "Setting Sun",
--counter_charger = "Counter Charger",
--rising_moon = "Rising Moon",
--setting_sun = "Setting Sun",
overheat = "Overheat",
wyvernsnipe_reload = "Wyvernsnipe Reload",
-- Hammer
impact_burst = "Impact Burst",
--impact_burst = "Impact Burst",
-- Gunlance
ground_splitter = "Ground Splitter",
erupting_cannon = "Erupting Cannon",
--ground_splitter = "Ground Splitter",
--erupting_cannon = "Erupting Cannon",
-- Lance
anchor_rage = "Anchor Rage",
spiral_thrust = "Spiral Thrust",
--anchor_rage = "Anchor Rage",
--spiral_thrust = "Spiral Thrust",
twin_wine = "Twin Wine",
-- Sword & Shield
destroyer_oil = "Destroyer Oil",
--destroyer_oil = "Destroyer Oil",
-- Dual Blades
ironshine_silk = "Ironshine Silk",
archdemon_mode = "Archdemon Mode",
-- Hunting Horn
silkbind_shockwave = "Silkbind Shockwave",
bead_of_resonance = "Bead of Resonance",
sonic_bloom = "Sonic Bloom",
--silkbind_shockwave = "Silkbind Shockwave",
--bead_of_resonance = "Bead of Resonance",
--sonic_bloom = "Sonic Bloom",
-- Charge Blade
element_boost = "Element Boost",
sword_boost_mode ="Sword Boost Mode",
@@ -514,7 +265,11 @@ this.default_language = {
all_extracts_mix = "All Extracts Mix",
-- Bow
herculean_draw = "Herculean Draw",
bolt_boost = "Bolt Boost"
--bolt_boost = "Bolt Boost"
},
misc_buffs = {
stamina_use_down = "Stamina Use Down"
},
UI = {

View File

@@ -52,6 +52,7 @@ this.vec3 = {};
this.vec4 = {};
this.math = {};
this.unicode = {};
this.sdk = {};
this.constants = {};
this.constants.uninitialized_int = -420;
@@ -442,6 +443,40 @@ function this.unicode.sub(str, i, j)
return string.sub(str, i, b + c - 1);
end
function this.sdk.generate_enum(type_def)
if not type_def then
return {};
end
local fields = type_def:get_fields();
local enum = {};
for i, field in ipairs(fields) do
if field:is_static() then
local name = field:get_name();
local raw_value = field:get_data(nil);
local enum_entry = {
name = name,
value = raw_value;
};
table.insert(enum, enum_entry);
end
end
return enum;
end
function this.sdk.generate_enum_by_typename(type_name)
local type_def = sdk.find_type_definition(type_name);
if not type_def then
return {};
end;
return this.sdk.generate_enum(type_def);
end
function this.init_dependencies()
error_handler = require("MHR_Overlay.Misc.error_handler");
end

View File

@@ -14,6 +14,7 @@ local dangos;
local abnormal_statuses;
local otomo_moves;
local weapon_skills;
local misc_buffs;
local sdk = sdk;
local tostring = tostring;
@@ -136,6 +137,16 @@ function this.update()
::continue8::
end
for key, misc_buffs in pairs(misc_buffs.list) do
if not misc_buffs.is_active then
goto continue9;
end
table.insert(_displayed_buffs, misc_buffs);
::continue9::
end
displayed_buffs = this.sort_buffs(_displayed_buffs, cached_config);
end
@@ -220,6 +231,7 @@ function this.init_dependencies()
abnormal_statuses = require("MHR_Overlay.Buffs.abnormal_statuses");
otomo_moves = require("MHR_Overlay.Buffs.otomo_moves");
weapon_skills = require("MHR_Overlay.Buffs.weapon_skills");
misc_buffs = require("MHR_Overlay.Buffs.misc_buffs");
end
function this.init_module()

View File

@@ -59,19 +59,6 @@
"waterblight": "Waterblight",
"webbed": "Webbed"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"gourmet_fish": "Gourmet Fish",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"customization_menu": {
"UI_font": "UI Font",
"UI_font_notice": "Any changes to the font require script reload!",
@@ -375,86 +362,9 @@
"y": "Y",
"z": "Z"
},
"dangos": {
"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": {
"affinity_up": "Affinity Up",
"attack_and_affinity_up": "Attack and Affinity Up",
"attack_and_defense_up": "Attack and Defense Up",
"attack_up": "Attack Up",
"blight_negated": "Blight Negated",
"defense_up": "Defense Up",
"divine_protection": "Divine Protection",
"earplugs_l": "Earplugs (L)",
"earplugs_s": "Earplugs (S)",
"elemental_attack_boost": "Elemental Attack Boost",
"environment_damage_negated": "Environment Damage Negated",
"health_recovery_l": "Health Recovery (L)",
"health_recovery_s": "Health Recovery (S)",
"health_recovery_s_antidote": "Health Recovery (S) + Antidote",
"health_regeneration": "Health Regeneration",
"infernal_melody": "Infernal Melody",
"knockbacks_negated": "Knockbacks Negated",
"self_improvement": "Self-Improvement",
"sharpness_extension": "Sharpness Extension",
"sharpness_loss_reduced": "Sharpness Loss Reduced",
"sharpness_regeneration": "Sharpness Regeneration",
"sonic_barrier": "Sonic Barrier",
"sonic_wave": "Sonic Wave",
"stamina_recovery_up": "Stamina Recovery Up",
"stamina_use_reduced": "Stamina Use Reduced",
"stun_negated": "Stun Negated",
"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"
"misc_buffs": {
"stamina_use_down": "Stamina Use Down"
},
"parts": {
"abdomen": "Abdomen",
@@ -525,36 +435,6 @@
"wingclaws": "Wingclaws",
"wings": "Wings"
},
"skills": {
"adrenaline_rush": "Adrenaline Rush",
"affinity_sliding": "Affinity Sliding",
"agitator": "Agitator",
"bladescale_hone": "Bladescale Hone",
"bloodlust": "Bloodlust",
"burst": "Burst",
"coalescence": "Coalescence",
"counterstrike": "Counterstrike",
"dereliction": "Dereliction",
"dragonheart": "Dragonheart",
"frenzied_bloodlust": "Frenzied Bloodlust",
"furious": "Furious",
"grinder_s": "Grinder (S)",
"heaven_sent": "Heaven-Sent",
"hellfire_cloak": "Hellfire Cloak",
"heroics": "Heroics",
"intrepid_heart": "Intrepid Heart",
"kushala_daora_soul": "Kushala Daora Soul",
"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"
},
"stats": {
"affinity": "Affinity",
"attack": "Attack",
@@ -577,34 +457,22 @@
"weapon_skills": {
"all_extracts_mix": "All Extracts Mix",
"amped_state": "Amped State",
"anchor_rage": "Anchor Rage",
"archdemon_mode": "Archdemon Mode",
"axe_heavy_slam": "Axe: Heavy Slam",
"bead_of_resonance": "Bead of Resonance",
"bolt_boost": "Bolt Boost",
"counter_charger": "Counter Charger",
"destroyer_oil": "Destroyer Oil",
"element_boost": "Element Boost",
"erupting_cannon": "Erupting Cannon",
"fanning_maneuver": "Fanning Maneuver",
"ground_splitter": "Ground Splitter",
"harvest_moon": "Harvest Moon",
"herculean_draw": "Herculean Draw",
"impact_burst": "Impact Burst",
"ironshine_silk": "Ironshine Silk",
"orange_extract": "Orange Extract",
"overheat": "Overheat",
"power_sheathe": "Power Sheathe",
"red_extract": "Red Extract",
"rising_moon": "Rising Moon",
"setting_sun": "Setting Sun",
"silkbind_shockwave": "Silkbind Shockwave",
"sonic_bloom": "Sonic Bloom",
"spiral_thrust": "Spiral Thrust",
"spirit_gauge": "Spirit Gauge",
"spirit_gauge_autofill": "Spirit Gauge Autofill",
"switch_charger": "Switch Charger",
"sword_boost_mode": "Sword Boost Mode",
"twin_wine": "Twin Wine",
"white_extract": "White Extract"
"white_extract": "White Extract",
"wyvernblast_reload": "Wyvernblast Reload",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
}
}

View File

@@ -452,6 +452,9 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
@@ -552,6 +555,7 @@
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
@@ -607,6 +611,7 @@
"impact_burst": "Impact Burst",
"ironshine_silk": "Ironshine Silk",
"orange_extract": "O Extract",
"overheat": "Overheat",
"power_sheathe": "Power Sheathe",
"red_extract": "Red Extract",
"rising_moon": "Rising Moon",
@@ -622,6 +627,8 @@
"sword_boost_mode": "Sword Boost Mode",
"sword_charge": "Sword Charge",
"twin_wine": "Twin Wine",
"white_extract": "White Extract"
"white_extract": "White Extract",
"wyvernblast_reload": "Wyvernblast Reload",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
}
}

View File

@@ -453,6 +453,9 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
@@ -553,6 +556,7 @@
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
@@ -608,6 +612,7 @@
"impact_burst": "Impact Burst",
"ironshine_silk": "Ironshine Silk",
"orange_extract": "O Extract",
"overheat": "Overheat",
"power_sheathe": "Power Sheathe",
"red_extract": "Red Extract",
"rising_moon": "Rising Moon",
@@ -623,6 +628,8 @@
"sword_boost_mode": "Sword Boost Mode",
"sword_charge": "Sword Charge",
"twin_wine": "Twin Wine",
"white_extract": "White Extract"
"white_extract": "White Extract",
"wyvernblast_reload": "Wyvernblast Reload",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
}
}

View File

@@ -453,6 +453,9 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
@@ -553,6 +556,7 @@
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
@@ -604,6 +608,7 @@
"impact_burst": "Impact Burst",
"ironshine_silk": "Ironshine Silk",
"orange_extract": "O Extract",
"overheat": "Overheat",
"power_sheathe": "Power Sheathe",
"red_extract": "Red Extract",
"rising_moon": "Rising Moon",
@@ -619,6 +624,8 @@
"sword_boost_mode": "Sword Boost Mode",
"sword_charge": "Sword Charge",
"twin_wine": "Twin Wine",
"white_extract": "White Extract"
"white_extract": "White Extract",
"wyvernblast_reload": "Wyvernblast Reload",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
}
}

View File

@@ -453,6 +453,9 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
@@ -553,6 +556,7 @@
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
@@ -608,6 +612,7 @@
"impact_burst": "Impact Burst",
"ironshine_silk": "Ironshine Silk",
"orange_extract": "O Extract",
"overheat": "Overheat",
"power_sheathe": "Power Sheathe",
"red_extract": "Red Extract",
"rising_moon": "Rising Moon",
@@ -623,6 +628,8 @@
"sword_boost_mode": "Sword Boost Mode",
"sword_charge": "Sword Charge",
"twin_wine": "Twin Wine",
"white_extract": "White Extract"
"white_extract": "White Extract",
"wyvernblast_reload": "Wyvernblast Reload",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
}
}

View File

@@ -453,6 +453,9 @@
"tremors_negated": "Tremors Negated",
"wind_pressure_negated": "Wind Pressure Negated"
},
"misc_buffs": {
"stamina_use_down": "Stamina Use Down"
},
"otomo_moves": {
"go_fight_win": "Go, Fight, Win",
"power_drum": "Power Drum",
@@ -553,6 +556,7 @@
"protective_polish": "Protective Polish",
"resentment": "Resentment",
"resuscitate": "Resuscitate",
"spiribirds_call": "Spiribird's Call",
"status_trigger": "Status Trigger",
"wall_runner": "Wall Runner",
"wind_mantle": "Wind Mantle"
@@ -608,6 +612,7 @@
"impact_burst": "Impact Burst",
"ironshine_silk": "Ironshine Silk",
"orange_extract": "O Extract",
"overheat": "Overheat",
"power_sheathe": "Power Sheathe",
"red_extract": "Red Extract",
"rising_moon": "Rising Moon",
@@ -623,6 +628,8 @@
"sword_boost_mode": "Sword Boost Mode",
"sword_charge": "Sword Charge",
"twin_wine": "Twin Wine",
"white_extract": "White Extract"
"white_extract": "White Extract",
"wyvernblast_reload": "Wyvernblast Reload",
"wyvernsnipe_reload": "Wyvernsnipe Reload"
}
}