From bf798c05616c343191fa625862634d506f6586e0 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 12 Oct 2019 17:24:07 -0500 Subject: [PATCH] Pet critical logging [skip ci] --- utils/mods/legacy_combat.lua | 45 ++++++++++++++++++++++++++++++++---- zone/attack.cpp | 44 ++++++++++++++++++++++++++++++++--- 2 files changed, 82 insertions(+), 7 deletions(-) diff --git a/utils/mods/legacy_combat.lua b/utils/mods/legacy_combat.lua index c642371e3..644c96632 100644 --- a/utils/mods/legacy_combat.lua +++ b/utils/mods/legacy_combat.lua @@ -437,9 +437,28 @@ function TryPetCriticalHit(self, defender, hit) local CritPetChance = owner:GetAABonuses():PetCriticalHit() + owner:GetItemBonuses():PetCriticalHit() + owner:GetSpellBonuses():PetCriticalHit(); local CritChanceBonus = GetCriticalChanceBonus(self, hit.skill); + eq.debug( + string.format("[%s] [Mob::TryPetCriticalHit] CritPetChance [%i] CritChanceBonus [%i] | Bonuses AA [%i] Item [%i] Spell [%i]", + e.self:GetCleanName(), + CritPetChance, + CritChanceBonus, + owner:GetAABonuses():PetCriticalHit(), + owner:GetItemBonuses():PetCriticalHit(), + owner:GetSpellBonuses():PetCriticalHit() + ) + ); + if (CritPetChance or critChance) then critChance = critChance + CritPetChance; critChance = critChance + (critChance * CritChanceBonus / 100.0); + + eq.debug( + string.format("[%s] [Mob::TryPetCriticalHit] critChance [%i] PostCalcs", + e.self:GetCleanName(), + critChance + ) + ); + end if (critChance > 0) then @@ -449,9 +468,24 @@ function TryPetCriticalHit(self, defender, hit) local entity_list = eq.get_entity_list(); critMod = critMod + GetCritDmgMod(self, hit.skill) * 2; hit.damage_done = (hit.damage_done * critMod) / 100; - entity_list:FilteredMessageClose(this, false, CriticalMessageRange, - MT.CritMelee, Filter.MeleeCrits, string.format('%s scores a critical hit! (%d)', - self:GetCleanName(), e.hit.damage_done)); + + eq.debug( + string.format("[%s] [Mob::TryPetCriticalHit] critMod [%i] DmgMod [%i] DamageDone [%i]", + e.self:GetCleanName(), + critMod, + GetCritDmgMod(self, hit.skill), + hit.damage_done + ) + ); + + entity_list:FilteredMessageClose( + this, + false, + CriticalMessageRange, + MT.CritMelee, + Filter.MeleeCrits, + string.format('%s scores a critical hit! (%d)', self:GetCleanName(), e.hit.damage_done) + ); end end @@ -497,7 +531,6 @@ function GetCritDmgMod(self, skill) local aabonuses = self:GetAABonuses(); local itembonuses = self:GetItemBonuses(); local spellbonuses = self:GetSpellBonuses(); - critDmg_mod = critDmg_mod + itembonuses:CritDmgMod(Skill.HIGHEST_SKILL + 1); critDmg_mod = critDmg_mod + spellbonuses:CritDmgMod(Skill.HIGHEST_SKILL + 1); critDmg_mod = critDmg_mod + aabonuses:CritDmgMod(Skill.HIGHEST_SKILL + 1); @@ -505,6 +538,10 @@ function GetCritDmgMod(self, skill) critDmg_mod = critDmg_mod + spellbonuses:CritDmgMod(skill); critDmg_mod = critDmg_mod + aabonuses:CritDmgMod(skill); + if (critDmg_mod < -100) then + critDmg_mod = -100; + end + return critDmg_mod; end diff --git a/zone/attack.cpp b/zone/attack.cpp index 66099655e..aab19456e 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -3889,12 +3889,32 @@ void Mob::TryPetCriticalHit(Mob *defender, uint16 skill, int32 &damage) int32 CritPetChance = owner->aabonuses.PetCriticalHit + owner->itembonuses.PetCriticalHit + owner->spellbonuses.PetCriticalHit; int32 CritChanceBonus = GetCriticalChanceBonus(skill); + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::TryPetCriticalHit] CritPetChance [%i] CritChanceBonus [%i] | Bonuses AA [%i] Item [%i] Spell [%i]", + GetCleanName(), + CritPetChance, + CritChanceBonus, + owner->aabonuses.PetCriticalHit, + owner->itembonuses.PetCriticalHit, + owner->spellbonuses.PetCriticalHit + ); + if (CritPetChance || critChance) { //For pets use PetCriticalHit for base chance, pets do not innately critical with without it //even if buffed with a CritChanceBonus effects. critChance += CritPetChance; critChance += critChance*CritChanceBonus/100.0f; + + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::TryPetCriticalHit] critChance [%.2f] PostCalcs", + GetCleanName(), + critChance + ); } if(critChance > 0){ @@ -3905,9 +3925,27 @@ void Mob::TryPetCriticalHit(Mob *defender, uint16 skill, int32 &damage) { critMod += GetCritDmgMob(skill) * 2; // To account for base crit mod being 200 not 100 damage = (damage * critMod) / 100; - entity_list.FilteredMessageClose_StringID(this, false, 200, - MT_CritMelee, FilterMeleeCrits, CRITICAL_HIT, - GetCleanName(), itoa(damage)); + + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::TryPetCriticalHit] critMod [%.2f] DmgMod [%i] DamageDone [%i]", + GetCleanName(), + critMod, + GetCritDmgMob(skill), + damage + ); + + entity_list.FilteredMessageClose_StringID( + this, + false, + 200, + MT_CritMelee, + FilterMeleeCrits, + CRITICAL_HIT, + GetCleanName(), + itoa(damage) + ); } } }