diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index 56c89b9..0aa6567 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -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(); diff --git a/reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua b/reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua index 6a3914a..1d8daaf 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/abnormal_statuses.lua @@ -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"); diff --git a/reframework/autorun/MHR_Overlay/Buffs/buffs.lua b/reframework/autorun/MHR_Overlay/Buffs/buffs.lua index 8315b47..60e1526 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/buffs.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/buffs.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Buffs/consumables.lua b/reframework/autorun/MHR_Overlay/Buffs/consumables.lua index cdd7df7..a4fa878 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/consumables.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/consumables.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Buffs/dangos.lua b/reframework/autorun/MHR_Overlay/Buffs/dangos.lua index 575f861..b891418 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/dangos.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/dangos.lua @@ -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 diff --git a/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua b/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua index c902bcc..9e652b4 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua b/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua index 122f1f5..5e0707d 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua b/reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua new file mode 100644 index 0000000..768d67b --- /dev/null +++ b/reframework/autorun/MHR_Overlay/Buffs/misc_buffs.lua @@ -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; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua b/reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua index 4951052..6247213 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/otomo_moves.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Buffs/skills.lua b/reframework/autorun/MHR_Overlay/Buffs/skills.lua index bc3f9d0..722e44d 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/skills.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/skills.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua b/reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua index 2ae7c77..0a88a5f 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/weapon_skills.lua @@ -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("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"); 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"); diff --git a/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua b/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua index 4c086b9..16122a1 100644 --- a/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua +++ b/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua @@ -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() diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index fe24a40..b9f78b2 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -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 = { diff --git a/reframework/autorun/MHR_Overlay/Misc/utils.lua b/reframework/autorun/MHR_Overlay/Misc/utils.lua index e39671f..271c65c 100644 --- a/reframework/autorun/MHR_Overlay/Misc/utils.lua +++ b/reframework/autorun/MHR_Overlay/Misc/utils.lua @@ -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 diff --git a/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua b/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua index b809b39..3b097b1 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua @@ -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() diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index b20e6b6..c4a2b1a 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -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" } } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/ja-jp.json b/reframework/data/MHR Overlay/languages/ja-jp.json index d680008..c99dfaf 100644 --- a/reframework/data/MHR Overlay/languages/ja-jp.json +++ b/reframework/data/MHR Overlay/languages/ja-jp.json @@ -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" } } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 65471c5..e14e7a1 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -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" } } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index 3d38ff9..07e4f61 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -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" } } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index e7481ea..a7f116d 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -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" } } \ No newline at end of file diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index 6565e83..74e4809 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -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" } } \ No newline at end of file