From f086ff2d5d3ff7b1c38da81e4975d1f930664105 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Sun, 20 Aug 2023 16:15:00 +0300 Subject: [PATCH] Endemic Life Buffs: Add Ruby and Gold Wirebugs --- .../autorun/MHR_Overlay/Buffs/buffs.lua | 6 +- .../MHR_Overlay/Buffs/endemic_life_buffs.lua | 137 +++++++++++------- .../MHR_Overlay/Endemic_Life/env_creature.lua | 6 +- 3 files changed, 88 insertions(+), 61 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Buffs/buffs.lua b/reframework/autorun/MHR_Overlay/Buffs/buffs.lua index 7a26c37..480339e 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/buffs.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/buffs.lua @@ -154,12 +154,12 @@ function this.update() local master_player_data = get_player_data_method:call(master_player); if master_player_data ~= nil then consumables.update(master_player_data); - endemic_life_buffs.update(master_player_data); - skills.update(master_player, master_player_data); - dangos.update(master_player, master_player_data); otomo_moves.update(master_player_data); if not is_player_lobby_base then + skills.update(master_player, master_player_data); + dangos.update(master_player, master_player_data); + endemic_life_buffs.update(master_player, master_player_data); abnormal_statuses.update(master_player, master_player_data); end else diff --git a/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua b/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua index 237a6a3..d3a6a18 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/endemic_life_buffs.lua @@ -44,9 +44,13 @@ local package = package; this.list = { cutterfly = nil, - clothfly = nil + clothfly = nil, + ruby_wirebug = nil, + gold_wirebug = nil }; +local marionette_mode_types = { "ruby_wirebug", "gold_wirebug" }; + local player_manager_type_def = sdk.find_type_definition("snow.player.PlayerManager"); local get_player_data_method = player_manager_type_def:get_method("get_PlayerData"); local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter"); @@ -59,75 +63,96 @@ local player_data_type_def = sdk.find_type_definition("snow.player.PlayerData"); local crit_up_ec_second_timer_field = player_data_type_def:get_field("_CritUpEcSecondTimer"); -- Clothfly local def_up_buff_second_rate_timer_field = player_data_type_def:get_field("_DefUpBuffSecondRateTimer"); +-- Ruby/Gold Wirebugs +local wirebug_powerup_timer_field = player_data_type_def:get_field("_WireBugPowerUpTimer"); + + + +local player_quest_base_type_def = sdk.find_type_definition("snow.player.PlayerQuestBase"); +-- Ruby/Gold Wirebugs +local get_marionette_mode_type_method = player_quest_base_type_def:get_method("get_MarionetteModeType"); local message_manager_type_def = sdk.find_type_definition("snow.gui.MessageManager"); local get_env_creature_name_message_method = message_manager_type_def:get_method("getEnvCreatureNameMessage"); -function this.update(player_data) - local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager); - if item_parameter == nil then - error_handler.report("endemic_life_buffs.update", "Failed to access Data: item_parameter"); - return; - end - - this.update_cutterfly(player_data, item_parameter); - this.update_clothfly(player_data, item_parameter); +function this.update(player, player_data) + this.update_generic_timer("cutterfly", player_data, crit_up_ec_second_timer_field); + this.update_generic_timer("clothfly", player_data, def_up_buff_second_rate_timer_field); + this.update_ruby_and_gold_wirebugs(player, player_data); end -function this.update_cutterfly(player_data, item_parameter) - local cutterfly_timer = crit_up_ec_second_timer_field:get_data(player_data); - if cutterfly_timer == nil then - error_handler.report("endemic_life_buffs.update_cutterfly", "Failed to access Data: cutterfly_timer"); - return; - end +function this.update_generic_timer(endemic_life_buff_key, timer_owner, timer_field, is_infinite) + if is_infinite == nil then is_infinite = false; end - if utils.number.is_equal(cutterfly_timer, 0) then - this.list.cutterfly = nil; - return; - end - - local buff = this.list.cutterfly; - - if buff == nil then - local name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids.cutterfly); - if name == nil then - error_handler.report("endemic_life_buffs.update_cutterfly", "Failed to access Data: name"); + local timer = nil; + if timer_field ~= nil then + timer = timer_field:get_data(timer_owner); + if timer == nil then + error_handler.report("endemic_life_buffs.update_generic_timer", string.format("Failed to access Data: %s_timer", endemic_life_buff_key)); return; end - buff = buffs.new(buffs.types.consumable, "cutterfly", name, 1, cutterfly_timer / 60); - this.list.cutterfly = buff; - else - buffs.update_timer(buff, cutterfly_timer / 60); - end -end - -function this.update_clothfly(player_data, item_parameter) - local clothfly_timer = def_up_buff_second_rate_timer_field:get_data(player_data); - if clothfly_timer == nil then - error_handler.report("endemic_life_buffs.update_clothfly", "Failed to access Data: clothfly_timer"); - return; - end - - if utils.number.is_equal(clothfly_timer, 0) then - this.list.clothfly = nil; - return; - end - - local buff = this.list.clothfly; - - if buff == nil then - local name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids.clothfly); - if name == nil then - error_handler.report("endemic_life_buffs.update_clothfly", "Failed to access Data: name"); + if utils.number.is_equal(timer, 0) then + this.list[endemic_life_buff_key] = nil; return; end - buff = buffs.new(buffs.types.consumable, "clothfly", name, 1, clothfly_timer / 60); - this.list.clothfly = buff; - else - buffs.update_timer(buff, clothfly_timer / 60); + 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(buffs.types.endemic_life_buff, 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 +end + +function this.update_ruby_and_gold_wirebugs(player, player_data) + local marionette_mode_type = get_marionette_mode_type_method:call(player); + if marionette_mode_type == nil then + error_handler.report("endemic_life_buffs.update_ruby_and_gold_wirebugs", "Failed to access Data: marionette_mode_type"); + end + + if marionette_mode_type ~= 1 and marionette_mode_type ~= 2 then + this.list.ruby_wirebug = nil; + this.list.gold_wirebug = nil; + return; + elseif marionette_mode_type ~= 1 then + this.list.ruby_wirebug = nil; + else + this.list.gold_wirebug = nil; + end + + local endemic_life_buff_key = marionette_mode_types[marionette_mode_type]; + + this.update_generic_timer(endemic_life_buff_key, player_data, wirebug_powerup_timer_field); end function this.init_names() diff --git a/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua b/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua index 3bc22ec..4c086b9 100644 --- a/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua +++ b/reframework/autorun/MHR_Overlay/Endemic_Life/env_creature.lua @@ -43,7 +43,9 @@ this.list = {}; this.creature_ids = { cutterfly = 50, - clothfly = 7 + clothfly = 7, + ruby_wirebug = 62, + gold_wirebug = 63 }; function this.new(REcreature) @@ -95,7 +97,7 @@ function this.init(creature, REcreature) error_handler.report("env_creature.init", "Failed to access Data: creature_name"); return; end - + creature.name = creature_name; end