Add Horn Melody Effects to Buff UI

This commit is contained in:
GreenComfyTea
2023-08-04 19:35:25 +03:00
parent 63ddbff12a
commit 71b1992710
12 changed files with 582 additions and 289 deletions

View File

@@ -3,6 +3,11 @@ local this = {};
local buff_UI_entity;
local config;
local singletons;
local players;
local consumables;
local melody_effects;
local utils;
local language;
local sdk = sdk;
local tostring = tostring;
@@ -36,9 +41,25 @@ local os = os;
local ValueType = ValueType;
local package = package;
this.list = {};
this.types = {
consumable = 0,
melody_effect = 1,
dango = 2,
};
function this.new(name, value, duration)
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");
local player_base_type_def = find_master_player_method:get_return_type();
local get_player_data_method = player_base_type_def:get_method("get_PlayerData");
local music_data_field = player_base_type_def:get_field("_MusicData");
local system_array_type_def = sdk.find_type_definition("System.Array");
local length_method = system_array_type_def:get_method("get_Length");
local get_value_method = system_array_type_def:get_method("GetValue(System.Int32)");
function this.new(type, key, name, value, duration)
local is_infinite = false;
value = value or 0;
@@ -50,6 +71,8 @@ function this.new(name, value, duration)
local buff = {};
buff.type = type;
buff.key = key;
buff.name = name;
buff.value = value;
@@ -81,6 +104,40 @@ function this.init_UI(buff)
buff.buff_UI = buff_UI_entity.new(cached_config.bar, cached_config.name_label, cached_config.timer_label);
end
function this.init_names()
consumables.init_names();
melody_effects.init_names();
end
function this.update()
local master_player = find_master_player_method:call(singletons.player_manager);
if master_player == nil then
return;
end
local master_player_data = get_player_data_method:call(master_player);
if master_player_data ~= nil then
consumables.update(master_player_data);
end
local music_data_array = music_data_field:get_data(master_player);
if music_data_array ~= nil then
local music_data_table = {};
local length = length_method:call(music_data_array) - 1;
for i = 0, length do
local music_data = get_value_method:call(music_data_array, i);
if music_data == nil then
music_data = "";
end
table.insert(music_data_table, music_data);
end
melody_effects.update(music_data_table);
end
end
function this.draw(buff, buff_UI, position_on_screen, opacity_scale)
buff_UI_entity.draw(buff, buff_UI, position_on_screen, opacity_scale);
end
@@ -105,241 +162,11 @@ function this.init_module()
config = require("MHR_Overlay.Misc.config");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
singletons = require("MHR_Overlay.Game_Handler.singletons");
--[[local buff = this.new("Enviroment Damage Negated");
buff.duration = 90;
buff.timer = 65;
buff.timer_percentage = 0.66;
buff.minutes_left = 1;
buff.seconds_left = 5
this.list["Enviroment Damage Negated"] = buff;
local buff = this.new("Sharpness Loss Reduced");
buff.duration = 120;
buff.timer = 70;
buff.timer_percentage = 0.583;
buff.minutes_left = 1;
buff.seconds_left = 10
this.list["Sharpness Loss Reduced"] = buff;
local buff = this.new("Sharpness Loss Reduced 2");
buff.duration = 120;
buff.timer = 70;
buff.timer_percentage = 0.583;
buff.minutes_left = 1;
buff.seconds_left = 10
buff.is_infinite = true;
this.list["Sharpness Loss Reduced 2"] = buff;]]
end
function this.debug()
--Buffs location:
--snow.player.PlayerManager -> <PlayerData> k_BackingField -> [0]
-- snow.player.PlayerManager ->
-- <PlayerData>k_BackingField -> [0]
-- Attack Up
-- Defense Up
-- Affinity Up _AtkUpEcSecond and _AtkUpEcSecondTimer
-- Sharpness Loss Reduced
-- Elemental Attack Boost
-- Divine Protection
-- Health Regeneration
-- Natural Healing Up
-- Blight Negated
-- Immunity
-- Stamina Recovery Up
-- Stamina Use Reduced
-- Knockbacks Negated _DefUpEcSecond and _DefUpEcSecondTimer
-- Sonic Barrier
-- Earplugs (S)
-- Earplugs (L)
-- Tremor Negated
-- Enviroment Damage Negated
-- Stun Negated
-- Wind Pressure Negated
-- Gourmet Fish Effect
-- Self Improvement
-- Infernal Melody
local player_data_array = singletons.player_manager:get_field("<PlayerData>k__BackingField");
local player_data = player_data_array:get_element(0);
local _AtkUpAlive = player_data:get_field("_AtkUpAlive");
local _DefUpAlive = player_data:get_field("_DefUpAlive");
xy = "AtkUpAlive: " .. tostring(_AtkUpAlive);
xy = xy .. "\n_DefUpAlive: " .. tostring(_DefUpAlive);
local _AtkUpBuffSecond = player_data:get_field("_AtkUpBuffSecond");
local _DefUpBuffSecond = player_data:get_field("_DefUpBuffSecond");
local _DefUpBuffSecondRate = player_data:get_field("_DefUpBuffSecondRate");
xy = xy .. "\n_AtkUpBuffSecond: " .. tostring(_AtkUpBuffSecond);
xy = xy .. "\n_DefUpBuffSecond: " .. tostring(_DefUpBuffSecond);
xy = xy .. "\n_DefUpBuffSecondRate: " .. tostring(_DefUpBuffSecondRate);
local _AtkUpBuffSecondTimer = player_data:get_field("_AtkUpBuffSecondTimer");
local _DefUpBuffSecondTimer = player_data:get_field("_DefUpBuffSecondTimer");
local _DefUpBuffSecondRateTimer = player_data:get_field("_DefUpBuffSecondRateTimer");
xy = xy .. "\n_AtkUpBuffSecondTimer: " .. tostring(_AtkUpBuffSecondTimer);
xy = xy .. "\n_DefUpBuffSecondTimer: " .. tostring(_DefUpBuffSecondTimer);
xy = xy .. "\n_DefUpBuffSecondRateTimer: " .. tostring(_DefUpBuffSecondRateTimer);
local _StaminaUpBuffSecondTimer = player_data:get_field("_StaminaUpBuffSecondTimer");
xy = xy .. "\n_StaminaUpBuffSecondTimer: " .. tostring(_StaminaUpBuffSecondTimer);
local _AtkUpItemSecond = player_data:get_field("_AtkUpItemSecond");
local _DefUpItemSecond = player_data:get_field("_DefUpItemSecond");
xy = xy .. "\n_AtkUpItemSecond: " .. tostring(_AtkUpItemSecond);
xy = xy .. "\n_DefUpItemSecond: " .. tostring(_DefUpItemSecond);
local _AtkUpItemSecondTimer = player_data:get_field("_AtkUpItemSecondTimer");
local _DefUpItemSecondTimer = player_data:get_field("_DefUpItemSecondTimer");
xy = xy .. "\n_AtkUpItemSecondTimer: " .. tostring(_AtkUpItemSecondTimer);
xy = xy .. "\n_DefUpItemSecondTimer: " .. tostring(_DefUpItemSecondTimer);
local _SuperArmorItemTimer = player_data:get_field("_SuperArmorItemTimer");
xy = xy .. "\n_SuperArmorItemTimer: " .. tostring(_SuperArmorItemTimer);
local _AtkUpEcSecondTimer = player_data:get_field("_AtkUpEcSecondTimer");
local _AtkUpEcSecond = player_data:get_field("_AtkUpEcSecond");
xy = xy .. "\n_AtkUpEcSecondTimer: " .. tostring(_AtkUpEcSecondTimer);
xy = xy .. "\n_AtkUpEcSecond: " .. tostring(_AtkUpEcSecond);
local _DefUpEcSecondTimer = player_data:get_field("_DefUpEcSecondTimer");
local _DefUpEcSecond = player_data:get_field("_DefUpEcSecond");
xy = xy .. "\n_DefUpEcSecondTimer: " .. tostring(_DefUpEcSecondTimer);
xy = xy .. "\n_DefUpEcSecond: " .. tostring(_DefUpEcSecond);
local _CritUpEcSecondTimer = player_data:get_field("_CritUpEcSecondTimer");
local _CritChanceUpBowTimer = player_data:get_field("_CritChanceUpBowTimer");
local _CritChanceUpBow = player_data:get_field("_CritChanceUpBow");
xy = xy .. "\n_CritUpEcSecondTimer: " .. tostring(_CritUpEcSecondTimer);
xy = xy .. "\n_CritChanceUpBowTimer: " .. tostring(_CritChanceUpBowTimer);
xy = xy .. "\n_CritChanceUpBow: " .. tostring(_CritChanceUpBow);
local _MusicRegeneTimer = player_data:get_field("_MusicRegeneTimer");
xy = xy .. "\n_MusicRegeneTimer: " .. tostring(_MusicRegeneTimer);
local _LeadEnemyTimer = player_data:get_field("_LeadEnemyTimer");
local _IsLeadEnemy = player_data:get_field("_IsLeadEnemy");
xy = xy .. "\n_LeadEnemyTimer: " .. tostring(_LeadEnemyTimer);
xy = xy .. "\n_IsLeadEnemy: " .. tostring(_IsLeadEnemy);
local _DebuffPreventionTimer = player_data:get_field("_DebuffPreventionTimer");
xy = xy .. "\n_DebuffPreventionTimer: " .. tostring(_DebuffPreventionTimer);
local _FishRegeneTimer = player_data:get_field("_FishRegeneTimer");
local _FishRegeneEnableTimer = player_data:get_field("_FishRegeneEnableTimer");
xy = xy .. "\n_FishRegeneTimer: " .. tostring(_FishRegeneTimer);
xy = xy .. "\n_FishRegeneEnableTimer: " .. tostring(_FishRegeneEnableTimer);
local _VitalizerTimer = player_data:get_field("_VitalizerTimer");
xy = xy .. "\n_VitalizerTimer: " .. tostring(_VitalizerTimer);
local _RunhighOtomoTimer = player_data:get_field("_RunhighOtomoTimer");
local _KijinBulletTimer = player_data:get_field("_KijinBulletTimer");
local _KoukaBulletTimer = player_data:get_field("_KoukaBulletTimer");
local _EquipSkill_036_Timer = player_data:get_field("_EquipSkill_036_Timer");
xy = xy .. "\n_RunhighOtomoTimer: " .. tostring(_RunhighOtomoTimer);
xy = xy .. "\n_KijinBulletTimer: " .. tostring(_KijinBulletTimer);
xy = xy .. "\n_KoukaBulletTimer: " .. tostring(_KoukaBulletTimer);
xy = xy .. "\n_EquipSkill_036_Timer: " .. tostring(_EquipSkill_036_Timer);
local _HyperArmorItemTimer = player_data:get_field("_HyperArmorItemTimer");
xy = xy .. "\n_HyperArmorItemTimer: " .. tostring(_HyperArmorItemTimer);
local _KijinOtomoTimer = player_data:get_field("_KijinOtomoTimer");
local _BeastRoarOtomoTimer = player_data:get_field("_BeastRoarOtomoTimer");
local _ChallengeTimer = player_data:get_field("_ChallengeTimer");
local _WholeBodyTimer = player_data:get_field("_WholeBodyTimer");
xy = xy .. "\n_KijinOtomoTimer: " .. tostring(_KijinOtomoTimer);
xy = xy .. "\n_BeastRoarOtomoTimer: " .. tostring(_BeastRoarOtomoTimer);
xy = xy .. "\n_ChallengeTimer: " .. tostring(_ChallengeTimer);
xy = xy .. "\n_WholeBodyTimer: " .. tostring(_WholeBodyTimer);
local _SlidingTimer = player_data:get_field("_SlidingTimer");
local _SlidingPowerupTimer = player_data:get_field("_SlidingPowerupTimer");
xy = xy .. "\n_SlidingTimer: " .. tostring(_SlidingTimer);
xy = xy .. "\n_SlidingPowerupTimer: " .. tostring(_SlidingPowerupTimer);
local _WallRunTimer = player_data:get_field("_WallRunTimer");
local _WallRunPowerupTimer = player_data:get_field("_WallRunPowerupTimer");
xy = xy .. "\n_WallRunTimer: " .. tostring(_WallRunTimer);
xy = xy .. "\n_WallRunPowerupTimer: " .. tostring(_WallRunPowerupTimer);
local _CounterattackPowerupTimer = player_data:get_field("_CounterattackPowerupTimer");
xy = xy .. "\n_CounterattackPowerupTimer: " .. tostring(_CounterattackPowerupTimer);
-- sic!
local _OnibiPowerUpTiemr = player_data:get_field("_OnibiPowerUpTiemr");
local _OnibiPowerUpInterval = player_data:get_field("_OnibiPowerUpInterval");
xy = xy .. "\n_OnibiPowerUpTiemr: " .. tostring(_OnibiPowerUpTiemr);
xy = xy .. "\n_OnibiPowerUpInterval: " .. tostring(_OnibiPowerUpInterval);
local _HyakuryuDragonPowerUpTimer = player_data:get_field("_HyakuryuDragonPowerUpTimer");
local _HyakuryuDragonPowerUpCnt = player_data:get_field("_HyakuryuDragonPowerUpCnt");
local _HyakuryuHyakuryuOnazutiPowerUpInterval = player_data:get_field("_HyakuryuHyakuryuOnazutiPowerUpInterval");
xy = xy .. "\n_HyakuryuDragonPowerUpTimer: " .. tostring(_HyakuryuDragonPowerUpTimer);
xy = xy .. "\n_HyakuryuDragonPowerUpCnt: " .. tostring(_HyakuryuDragonPowerUpCnt);
xy = xy .. "\n_HyakuryuHyakuryuOnazutiPowerUpInterval: " .. tostring(_HyakuryuHyakuryuOnazutiPowerUpInterval);
local _KitchenSkill027Timer = player_data:get_field("_KitchenSkill027Timer");
local _KitchenSkill045Timer = player_data:get_field("_KitchenSkill045Timer");
xy = xy .. "\n_KitchenSkill027Timer: " .. tostring(_KitchenSkill027Timer);
xy = xy .. "\n_KitchenSkill045Timer: " .. tostring(_KitchenSkill045Timer);
-- sic!
local _ReduseUseStaminaKichenSkillActive = player_data:get_field("_ReduseUseStaminaKichenSkillActive");
xy = xy .. "\n_ReduseUseStaminaKichenSkillActive: " .. tostring(_ReduseUseStaminaKichenSkillActive);
local _HeavyBowgunWyvernSnipeTimer = player_data:get_field("_HeavyBowgunWyvernSnipeTimer");
local _HeavyBowgunWyvernMachineGunTimer = player_data:get_field("_HeavyBowgunWyvernMachineGunTimer");
local _HeavyBowgunWyvernSnipeBullet = player_data:get_field("_HeavyBowgunWyvernSnipeBullet");
local _HeavyBowgunWyvernMachineGunBullet = player_data:get_field("_HeavyBowgunWyvernMachineGunBullet");
xy = xy .. "\n_HeavyBowgunWyvernSnipeTimer: " .. tostring(_HeavyBowgunWyvernSnipeTimer);
xy = xy .. "\n_HeavyBowgunWyvernMachineGunTimer: " .. tostring(_HeavyBowgunWyvernMachineGunTimer);
xy = xy .. "\n_HeavyBowgunWyvernSnipeBullet: " .. tostring(_HeavyBowgunWyvernSnipeBullet);
xy = xy .. "\n_HeavyBowgunWyvernMachineGunBullet: " .. tostring(_HeavyBowgunWyvernMachineGunBullet);
local _ChargeDragonSlayCannonTime = player_data:get_field("_ChargeDragonSlayCannonTime");
xy = xy .. "\n_ChargeDragonSlayCannonTime: " .. tostring(_ChargeDragonSlayCannonTime);
local _WyvernBlastGauge = player_data:get_field("_WyvernBlastGauge");
local _WyvernBlastReloadTimer = player_data:get_field("_WyvernBlastReloadTimer");
xy = xy .. "\n_WyvernBlastGauge: " .. tostring(_WyvernBlastGauge);
xy = xy .. "\n_WyvernBlastReloadTimer: " .. tostring(_WyvernBlastReloadTimer);
players = require("MHR_Overlay.Damage_Meter.players");
consumables = require("MHR_Overlay.Buffs.consumables");
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
utils = require("MHR_Overlay.Misc.utils");
language = require("MHR_Overlay.Misc.language");
end
return this;