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

@@ -43,6 +43,7 @@ local utils = require("MHR_Overlay.Misc.utils");
local buffs = require("MHR_Overlay.Buffs.buffs");
local consumables = require("MHR_Overlay.Buffs.consumables");
local melody_effects = require("MHR_Overlay.Buffs.melody_effects");
local players = require("MHR_Overlay.Damage_Meter.players");
local non_players = require("MHR_Overlay.Damage_Meter.non_players");
@@ -113,6 +114,7 @@ buff_UI_entity.init_module();
buffs.init_module();
consumables.init_module();
melody_effects.init_module();
damage_hook.init_module();
players.init_module();
@@ -218,6 +220,7 @@ local function draw_modules(module_visibility_config, flow_state_name)
end
local function main_loop()
customization_menu.status = "OK";
singletons.init();
screen.update_window_size();
@@ -225,7 +228,7 @@ local function main_loop()
quest_status.update_is_online();
--quest_status.update_is_quest_host();
time.tick();
consumables.update();
buffs.update();
--buffs.debug();

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;

View File

@@ -6,6 +6,7 @@ local config;
local singletons;
local players;
local utils;
local language;
local sdk = sdk;
local tostring = tostring;
@@ -39,20 +40,6 @@ local os = os;
local ValueType = ValueType;
local package = package;
local ids = {
demondrug = 0,
mega_demondrug = 1,
armorskin = 2,
mega_armorskin = 4,
might_seed = 8,
adamant_seed = 16,
demon_powder = 32,
hardshell_powder = 64,
immunizer = 128,
dash_juice = 256
};
this.list = {
demondrug = nil,
mega_demondrug = nil,
@@ -109,17 +96,7 @@ 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.update()
local player_data_array = get_player_data_method:call(singletons.player_manager);
if player_data_array == nil then
return;
end
local player_data = get_value_method:call(player_data_array, players.myself.id);
if player_data == nil then
return;
end
function this.update(player_data)
local item_parameter = get_ref_item_parameter_method:call(singletons.player_manager);
if item_parameter == nil then
return;
@@ -141,6 +118,7 @@ function this.update_demondrug(player_data, item_parameter)
return;
end
if demondrug == 0 then
this.list.demondrug = nil;
this.list.mega_demondrug = nil;
@@ -156,14 +134,17 @@ function this.update_demondrug(player_data, item_parameter)
if mega_demondrug_const_value == nil then
return;
end
if demondrug == demondrug_const_value then
local buff = this.list.demondrug;
if buff ~= nil and buff.value == demondrug then
return;
end
this.list.demondrug = buffs.new("Demondrug", demondrug);
local name = language.current_language.consumables.demondrug;
this.list.demondrug = buffs.new(buffs.types.consumable, "demondrug", name, demondrug);
this.list.mega_demondrug = nil;
elseif demondrug == mega_demondrug_const_value then
@@ -172,8 +153,10 @@ function this.update_demondrug(player_data, item_parameter)
return;
end
local name = language.current_language.consumables.mega_demondrug;
this.list.demondrug = nil;
this.list.mega_demondrug = buffs.new("Mega Demondrug", demondrug);
this.list.mega_demondrug = buffs.new(buffs.types.consumable, "mega_demondrug", name, demondrug);
end
end
@@ -205,7 +188,9 @@ function this.update_armorskin(player_data, item_parameter)
return;
end
this.list.armorskin = buffs.new("Armorskin", armorskin);
local name = language.current_language.consumables.armorskin;
this.list.armorskin = buffs.new(buffs.types.consumable, "armorskin", name, armorskin);
this.list.mega_armorskin = nil;
elseif armorskin == mega_armorskin_const_value then
@@ -214,8 +199,10 @@ function this.update_armorskin(player_data, item_parameter)
return;
end
local name = language.current_language.consumables.mega_armorskin;
this.list.armorskin = nil;
this.list.mega_armorskin = buffs.new("Mega Armorskin", armorskin);
this.list.mega_armorskin = buffs.new(buffs.types.consumable, "mega_armorskin", name, armorskin);
end
end
@@ -242,7 +229,9 @@ function this.update_might_seed(player_data, item_parameter)
return;
end
buff = buffs.new("Might Seed", might_seed, might_seed_timer_const_value);
local name = language.current_language.consumables.might_seed;
buff = buffs.new(buffs.types.consumable, "might_seed", name, might_seed, might_seed_timer_const_value);
this.list.might_seed = buff;
else
buff.value = might_seed;
@@ -273,7 +262,9 @@ function this.update_adamant_seed(player_data, item_parameter)
return;
end
buff = buffs.new("Adamant Seed", adamant_seed, adamant_seed_timer_const_value);
local name = language.current_language.consumables.adamant_seed;
buff = buffs.new(buffs.types.consumable, "adamant_seed", name, adamant_seed, adamant_seed_timer_const_value);
this.list.adamant_seed = buff;
else
buff.value = adamant_seed;
@@ -304,7 +295,9 @@ function this.update_demon_powder(player_data, item_parameter)
return;
end
buff = buffs.new("Demon Powder", demon_powder, demon_powder_timer_const_value);
local name = language.current_language.consumables.demon_powder;
buff = buffs.new(buffs.types.consumable, "demon_powder", name, demon_powder, demon_powder_timer_const_value);
this.list.demon_powder = buff;
else
buff.value = demon_powder;
@@ -335,7 +328,9 @@ function this.update_hardshell_powder(player_data, item_parameter)
return;
end
buff = buffs.new("Hardshell Powder", hardshell_powder, demon_powder_timer_const_value);
local name = language.current_language.consumables.hardshell_powder;
buff = buffs.new(buffs.types.consumable, "hardshell_powder", name, hardshell_powder, demon_powder_timer_const_value);
this.list.hardshell_powder = buff;
else
buff.value = hardshell_powder;
@@ -361,7 +356,9 @@ function this.update_immunizer(player_data, item_parameter)
return;
end
buff = buffs.new("Immunizer", 0, immunizer_timer_const_value);
local name = language.current_language.consumables.immunizer;
buff = buffs.new(buffs.types.consumable, "immunizer", name, 0, immunizer_timer_const_value);
this.list.immunizer = buff;
else
buffs.update_timer(buff, immunizer_timer / 60);
@@ -381,19 +378,28 @@ function this.update_dash_juice(player_data, item_parameter)
end
local buff = this.list.dash_juice;
if buff == nil then
local dash_juice_timer_const_value = stamina_up_buff_second_field:get_data(item_parameter);
if dash_juice_timer_const_value == nil then
return;
end
buff = buffs.new("Dash Juice", 0, dash_juice_timer_const_value);
local name = language.current_language.consumables.dash_juice;
buff = buffs.new(buffs.types.consumable, "dash_juice", name, 0, dash_juice_timer_const_value);
this.list.dash_juice = buff;
else
buffs.update_timer(buff, dash_juice_timer / 60);
end
end
function this.init_names()
for key, buff in pairs(this.list) do
buff.name = language.current_language.consumables[key];
end
end
function this.init_module()
buffs = require("MHR_Overlay.Buffs.buffs");
config = require("MHR_Overlay.Misc.config");
@@ -401,6 +407,7 @@ function this.init_module()
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");
end
return this;

View File

@@ -0,0 +1,158 @@
local this = {};
local buffs;
local buff_UI_entity;
local config;
local singletons;
local players;
local utils;
local language;
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;
local ids = {
self_improvement = 0,
attack_up = 1,
defense_up = 2,
affinity_up = 3,
elemental_attack_boost = 4,
attack_and_defense_up = 5,
attack_and_affinity_up = 6,
knockbacks_negated = 7,
earplugs_s = 8,
earplugs_l = 9,
tremors_negated = 10,
wind_pressure_negated = 11,
stun_negated = 12,
blight_negated = 13,
divine_protection = 14,
health_recovery_s = 15,
health_recovery_l = 16,
health_recovery_s_antidote = 17,
health_regeneration = 18,
stamina_use_reduced = 19,
stamina_recovery_up = 20,
sharpness_loss_reduced = 21,
environment_damage_negated = 22,
sonic_wave = 23,
sonic_barrier = 24,
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 = {};
local music_data_type_def = sdk.find_type_definition("snow.player.Horn.MusicData");
local time_field = music_data_type_def:get_field("_Time");
function this.update(melody_data_table)
for lua_index, melody_data in ipairs(melody_data_table) do
if melody_data == "" then
goto continue;
end
local melody_timer = time_field:get_data(melody_data);
if melody_timer == nil then
goto continue;
end
if melody_timer == 0 then
this.list[lua_index] = nil;
goto continue;
end
local buff = this.list[lua_index];
if buff == nil then
local key = melody_effect_keys[lua_index];
local name = language.current_language.melody_effects[key];
buff = buffs.new(buffs.types.melody_effect, key, name, melody_timer, melody_timer / 60);
this.list[lua_index] = buff;
else
buff.value = melody_timer;
buffs.update_timer(buff, melody_timer / 60);
end
::continue::
end
end
function this.init_names()
for index, buff in pairs(this.list) do
buff.name = language.current_language.melody_effects[buff.key];
end
end
function this.init_module()
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");
end
return this;

View File

@@ -189,6 +189,50 @@ this.default_language = {
shock_otomo_trap = "Shock Buddy Trap"
},
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"
},
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"
},
UI = {
HP = "HP:",
stamina = "Stamina:",

View File

@@ -4,6 +4,7 @@ local buff_UI_entity;
local config;
local buffs;
local consumables;
local melody_effects;
local screen;
local utils;
@@ -45,21 +46,10 @@ function this.draw()
local displayed_buffs = {};
for _, buff in pairs(buffs.list) do
if not buff.is_active then
goto continue
end
table.insert(displayed_buffs, buff);
::continue::
end
for _, consumable in pairs(consumables.list) do
for key, consumable in pairs(consumables.list) do
if not consumable.is_active then
goto continue2
goto continue2;
end
table.insert(displayed_buffs, consumable);
@@ -67,6 +57,17 @@ function this.draw()
::continue2::
end
for _, melody_effect in pairs(melody_effects.list) do
if not melody_effect.is_active then
goto continue3;
end
table.insert(displayed_buffs, melody_effect);
::continue3::
end
-- sort
if cached_config.sorting.type == "Name" then
if cached_config.sorting.reversed_order then
@@ -106,7 +107,7 @@ function this.draw()
for _, buff in ipairs(displayed_buffs) do
if not buff.is_active then
goto continue3
goto continue4;
end
buffs.draw(buff, buff.buff_UI, position_on_screen, 1);
@@ -117,7 +118,7 @@ function this.draw()
position_on_screen.y = position_on_screen.y + cached_config.spacing.y * global_scale_modifier;
end
::continue3::
::continue4::
end
end
@@ -125,6 +126,7 @@ function this.init_module()
config = require("MHR_Overlay.Misc.config");
buff_UI_entity = require("MHR_Overlay.UI.UI_Entities.buff_UI_entity");
consumables = require("MHR_Overlay.Buffs.consumables");
melody_effects = require("MHR_Overlay.Buffs.melody_effects");
buffs = require("MHR_Overlay.Buffs.buffs");
--singletons = require("MHR_Overlay.Game_Handler.singletons");
config = require("MHR_Overlay.Misc.config");

View File

@@ -38,6 +38,18 @@
"tranq_bomb": "Tranq Bomb",
"waterblight": "Waterblight"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"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!",
@@ -323,6 +335,36 @@
"z": "Z"
},
"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"
},
"parts": {
"abdomen": "Abdomen",
"amatsu_unknown": "?",

View File

@@ -38,6 +38,18 @@
"tranq_bomb": "捕獲用麻酔玉",
"waterblight": "水属性やられ"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"customization_menu": {
"UI_font": "UI フォント",
"UI_font_notice": "フォントの変更後はスクリプトリセットを行ってください。",
@@ -323,6 +335,36 @@
"z": "Z"
},
"font_name": "NotoSansJP-Bold.otf",
"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"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",

View File

@@ -38,6 +38,18 @@
"tranq_bomb": "포획용마취옥",
"waterblight": "진흙구리"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"customization_menu": {
"UI_font": "UI 글꼴",
"UI_font_notice": "글꼴 변경시 스크립트를 리로드 해야합니다!",
@@ -323,6 +335,36 @@
"z": "Z"
},
"font_name": "NotoSansKR-Bold.otf",
"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"
},
"parts": {
"abdomen": "배",
"amatsu_unknown": "?",

View File

@@ -38,6 +38,18 @@
"tranq_bomb": "Снотворная порча",
"waterblight": "Водяная порча"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"customization_menu": {
"UI_font": "Шрифт интерфейса",
"UI_font_notice": "Любые изменения шрифта требуют перезагрузку скрипта!",
@@ -323,6 +335,36 @@
"z": "Z"
},
"font_name": "NotoSansKR-Bold.otf",
"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"
},
"parts": {
"abdomen": "Брюхо",
"amatsu_unknown": "?",

View File

@@ -38,6 +38,18 @@
"tranq_bomb": "捕获用麻醉球",
"waterblight": "水异常状态"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"customization_menu": {
"UI_font": "UI字体",
"UI_font_notice": "当更改字体时,请重新加载脚本!",
@@ -323,6 +335,36 @@
"z": "Z轴"
},
"font_name": "NotoSansSC-Bold.otf",
"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"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",

View File

@@ -38,6 +38,18 @@
"tranq_bomb": "麻醉",
"waterblight": "水屬性異常"
},
"consumables": {
"adamant_seed": "Adamant Seed",
"armorskin": "Armorskin",
"dash_juice": "Dash Juice",
"demon_powder": "Demon Powder",
"demondrug": "Demondrug",
"hardshell_powder": "Hardshell Powder",
"immunizer": "Immunizer",
"mega_armorskin": "Mega Armorskin",
"mega_demondrug": "Mega Demondrug",
"might_seed": "Might Seed"
},
"customization_menu": {
"UI_font": "UI 字型",
"UI_font_notice": "當更改文字時,請重新載入",
@@ -323,6 +335,36 @@
"z": "Z軸"
},
"font_name": "NotoSansTC-Bold.otf",
"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"
},
"parts": {
"abdomen": "腹部",
"amatsu_unknown": "?",