diff --git a/reframework/autorun/MHR_Overlay.lua b/reframework/autorun/MHR_Overlay.lua index aaaf282..d9a547b 100644 --- a/reframework/autorun/MHR_Overlay.lua +++ b/reframework/autorun/MHR_Overlay.lua @@ -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(); diff --git a/reframework/autorun/MHR_Overlay/Buffs/buffs.lua b/reframework/autorun/MHR_Overlay/Buffs/buffs.lua index 3c0c75d..c87b4ca 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/buffs.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/buffs.lua @@ -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 -> k_BackingField -> [0] - - -- snow.player.PlayerManager -> - -- 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("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; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Buffs/consumables.lua b/reframework/autorun/MHR_Overlay/Buffs/consumables.lua index 9df5c48..f7def9e 100644 --- a/reframework/autorun/MHR_Overlay/Buffs/consumables.lua +++ b/reframework/autorun/MHR_Overlay/Buffs/consumables.lua @@ -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; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua b/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua new file mode 100644 index 0000000..59f63ac --- /dev/null +++ b/reframework/autorun/MHR_Overlay/Buffs/melody_effects.lua @@ -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; \ No newline at end of file diff --git a/reframework/autorun/MHR_Overlay/Misc/language.lua b/reframework/autorun/MHR_Overlay/Misc/language.lua index 17860ee..7a20ddf 100644 --- a/reframework/autorun/MHR_Overlay/Misc/language.lua +++ b/reframework/autorun/MHR_Overlay/Misc/language.lua @@ -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:", diff --git a/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua b/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua index e13b87f..0a6b415 100644 --- a/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua +++ b/reframework/autorun/MHR_Overlay/UI/Modules/buff_UI.lua @@ -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"); diff --git a/reframework/data/MHR Overlay/languages/en-us.json b/reframework/data/MHR Overlay/languages/en-us.json index 7a2a1ad..75a02d1 100644 --- a/reframework/data/MHR Overlay/languages/en-us.json +++ b/reframework/data/MHR Overlay/languages/en-us.json @@ -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": "?", diff --git a/reframework/data/MHR Overlay/languages/ja-jp.json b/reframework/data/MHR Overlay/languages/ja-jp.json index 5219fe2..414a97b 100644 --- a/reframework/data/MHR Overlay/languages/ja-jp.json +++ b/reframework/data/MHR Overlay/languages/ja-jp.json @@ -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": "?", diff --git a/reframework/data/MHR Overlay/languages/ko-kr.json b/reframework/data/MHR Overlay/languages/ko-kr.json index 152aae0..3be98eb 100644 --- a/reframework/data/MHR Overlay/languages/ko-kr.json +++ b/reframework/data/MHR Overlay/languages/ko-kr.json @@ -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": "?", diff --git a/reframework/data/MHR Overlay/languages/ru-ru.json b/reframework/data/MHR Overlay/languages/ru-ru.json index 663b216..6eb071b 100644 --- a/reframework/data/MHR Overlay/languages/ru-ru.json +++ b/reframework/data/MHR Overlay/languages/ru-ru.json @@ -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": "?", diff --git a/reframework/data/MHR Overlay/languages/zh-cn.json b/reframework/data/MHR Overlay/languages/zh-cn.json index a78efd2..2692607 100644 --- a/reframework/data/MHR Overlay/languages/zh-cn.json +++ b/reframework/data/MHR Overlay/languages/zh-cn.json @@ -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": "?", diff --git a/reframework/data/MHR Overlay/languages/zh-tw.json b/reframework/data/MHR Overlay/languages/zh-tw.json index c1379d0..999a419 100644 --- a/reframework/data/MHR Overlay/languages/zh-tw.json +++ b/reframework/data/MHR Overlay/languages/zh-tw.json @@ -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": "?",