Endemic Life Buffs: Add Ruby and Gold Wirebugs

This commit is contained in:
GreenComfyTea
2023-08-20 16:15:00 +03:00
parent 5e5df84308
commit f086ff2d5d
3 changed files with 88 additions and 61 deletions

View File

@@ -154,12 +154,12 @@ function this.update()
local master_player_data = get_player_data_method:call(master_player); local master_player_data = get_player_data_method:call(master_player);
if master_player_data ~= nil then if master_player_data ~= nil then
consumables.update(master_player_data); 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); otomo_moves.update(master_player_data);
if not is_player_lobby_base then 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); abnormal_statuses.update(master_player, master_player_data);
end end
else else

View File

@@ -44,9 +44,13 @@ local package = package;
this.list = { this.list = {
cutterfly = nil, 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 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_player_data_method = player_manager_type_def:get_method("get_PlayerData");
local get_ref_item_parameter_method = player_manager_type_def:get_method("get_RefItemParameter"); local 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"); local crit_up_ec_second_timer_field = player_data_type_def:get_field("_CritUpEcSecondTimer");
-- Clothfly -- Clothfly
local def_up_buff_second_rate_timer_field = player_data_type_def:get_field("_DefUpBuffSecondRateTimer"); 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 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"); local get_env_creature_name_message_method = message_manager_type_def:get_method("getEnvCreatureNameMessage");
function this.update(player_data) function this.update(player, player_data)
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager); this.update_generic_timer("cutterfly", player_data, crit_up_ec_second_timer_field);
if item_parameter == nil then this.update_generic_timer("clothfly", player_data, def_up_buff_second_rate_timer_field);
error_handler.report("endemic_life_buffs.update", "Failed to access Data: item_parameter"); this.update_ruby_and_gold_wirebugs(player, player_data);
return;
end
this.update_cutterfly(player_data, item_parameter);
this.update_clothfly(player_data, item_parameter);
end end
function this.update_cutterfly(player_data, item_parameter) function this.update_generic_timer(endemic_life_buff_key, timer_owner, timer_field, is_infinite)
local cutterfly_timer = crit_up_ec_second_timer_field:get_data(player_data); if is_infinite == nil then is_infinite = false; end
if cutterfly_timer == nil then
error_handler.report("endemic_life_buffs.update_cutterfly", "Failed to access Data: cutterfly_timer");
return;
end
if utils.number.is_equal(cutterfly_timer, 0) then local timer = nil;
this.list.cutterfly = nil; if timer_field ~= nil then
return; timer = timer_field:get_data(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));
local buff = this.list.cutterfly;
if buff == nil then
local name = get_env_creature_name_message_method:call(singletons.message_manager, env_creature.creature_ids.cutterfly);
if name == nil then
error_handler.report("endemic_life_buffs.update_cutterfly", "Failed to access Data: name");
return; return;
end end
buff = buffs.new(buffs.types.consumable, "cutterfly", name, 1, cutterfly_timer / 60); if utils.number.is_equal(timer, 0) then
this.list.cutterfly = buff; this.list[endemic_life_buff_key] = nil;
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");
return; return;
end end
buff = buffs.new(buffs.types.consumable, "clothfly", name, 1, clothfly_timer / 60); if is_infinite then
this.list.clothfly = buff; timer = nil;
else else
buffs.update_timer(buff, clothfly_timer / 60); timer = timer / 60;
end
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 end
function this.init_names() function this.init_names()

View File

@@ -43,7 +43,9 @@ this.list = {};
this.creature_ids = { this.creature_ids = {
cutterfly = 50, cutterfly = 50,
clothfly = 7 clothfly = 7,
ruby_wirebug = 62,
gold_wirebug = 63
}; };
function this.new(REcreature) 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"); error_handler.report("env_creature.init", "Failed to access Data: creature_name");
return; return;
end end
creature.name = creature_name; creature.name = creature_name;
end end