From c1464dcc12fc06edbc6300835b8a49432f19b6c0 Mon Sep 17 00:00:00 2001 From: GreenComfyTea Date: Wed, 1 Mar 2023 16:46:11 +0200 Subject: [PATCH] Fix poison damage not being accounted due to buildup_share being deep-copied --- .../MHR_Overlay/Damage_Meter/damage_hook.lua | 2 +- .../MHR_Overlay/Monsters/ailment_hook.lua | 5 ++-- .../autorun/MHR_Overlay/Monsters/ailments.lua | 25 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua b/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua index 244a7b1..0cff58b 100644 --- a/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua +++ b/reframework/autorun/MHR_Overlay/Damage_Meter/damage_hook.lua @@ -203,7 +203,7 @@ function damage_hook.update_damage(enemy, enemy_calc_damage_info) player = players.get_player(attacker_id); otomo = non_players.get_otomo(attacker_id); elseif attacker_id == 4 then - player = players.myself + player = players.myself; otomo = non_players.get_otomo(non_players.my_second_otomo_id); else player = non_players.get_servant(attacker_id - 1); diff --git a/reframework/autorun/MHR_Overlay/Monsters/ailment_hook.lua b/reframework/autorun/MHR_Overlay/Monsters/ailment_hook.lua index 0c01abe..5260092 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/ailment_hook.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/ailment_hook.lua @@ -80,8 +80,9 @@ function ailment_hook.poison_proc(poison_param) monster = small_monster.get_monster(enemy); end - monster.ailments[ailments.poison_id].cached_buildup_share = table_helpers.deep_copy(monster.ailments[ailments.poison_id].buildup_share); - monster.ailments[ailments.poison_id].cached_otomo_buildup_share = table_helpers.deep_copy(monster.ailments[ailments.poison_id].otomo_buildup_share); + monster.ailments[ailments.poison_id].cached_buildup_share = monster.ailments[ailments.poison_id].buildup_share; + monster.ailments[ailments.poison_id].cached_otomo_buildup_share = monster.ailments[ailments.poison_id].otomo_buildup_share; + ailments.clear_ailment_contribution(monster, ailments.poison_id); end diff --git a/reframework/autorun/MHR_Overlay/Monsters/ailments.lua b/reframework/autorun/MHR_Overlay/Monsters/ailments.lua index 8313510..c6804d7 100644 --- a/reframework/autorun/MHR_Overlay/Monsters/ailments.lua +++ b/reframework/autorun/MHR_Overlay/Monsters/ailments.lua @@ -684,7 +684,6 @@ function ailments.draw(monster, ailment_UI, cached_config, ailments_position_on_ end function ailments.apply_ailment_buildup(monster, player, otomo, ailment_type, ailment_buildup) - if monster == nil or (ailment_type ~= ailments.poison_id and ailment_type ~= ailments.blast_id and ailment_type ~= ailments.stun_id) or (ailment_buildup == 0 or ailment_buildup == nil) then @@ -723,6 +722,10 @@ function ailments.calculate_ailment_contribution(monster, ailment_type) total = total + otomo_buildup; end + if total == 0 then + total = 1; + end + for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do -- update ratio for this player monster.ailments[ailment_type].buildup_share[player] = player_buildup / total; @@ -735,15 +738,11 @@ function ailments.calculate_ailment_contribution(monster, ailment_type) end function ailments.clear_ailment_contribution(monster, ailment_type) - for player, player_buildup in pairs(monster.ailments[ailment_type].buildup) do - monster.ailments[ailment_type].buildup_share[player] = 0; - monster.ailments[ailment_type].buildup[player] = 0; - end + monster.ailments[ailment_type].buildup = {}; + monster.ailments[ailment_type].otomo_buildup = {}; - for aotomo, otomo_buildup in pairs(monster.ailments[ailment_type].otomo_buildup) do - monster.ailments[ailment_type].otomo_buildup_share[aotomo] = 0; - monster.ailments[ailment_type].otomo_buildup[aotomo] = 0; - end + monster.ailments[ailment_type].buildup_share = {}; + monster.ailments[ailment_type].otomo_buildup_share = {}; end -- Code by coavins @@ -781,7 +780,7 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage) damage_object.elemental_damage = 0; damage_object.ailment_damage = damage_portion; - players.update_damage(player, damage_source_type, true, damage_object); + players.update_damage(player, damage_source_type, monster.is_large, damage_object); end -- split up damage according to ratio of buildup on boss for this type @@ -797,10 +796,10 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage) local player = players.get_player(otomo.id); if player ~= nil then - players.update_damage(player, otomo_damage_source_type, true, damage_object); + players.update_damage(player, otomo_damage_source_type, monster.is_large, damage_object); end - players.update_damage(otomo, otomo_damage_source_type, true, damage_object); + players.update_damage(otomo, otomo_damage_source_type, monster.is_large, damage_object); end local damage_object = {}; @@ -809,7 +808,7 @@ function ailments.apply_ailment_damage(monster, ailment_type, ailment_damage) damage_object.elemental_damage = 0; damage_object.ailment_damage = ailment_damage; - players.update_damage(players.total, damage_source_type, true, damage_object); + players.update_damage(players.total, damage_source_type, monster.is_large, damage_object); end function ailments.init_module()