From beeca529cd8970df48cbd0ebdddd2f6d675707f2 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Mon, 27 Jan 2025 15:55:40 -0600 Subject: [PATCH] fortitudes handled last --- src/engine/gameManager/CombatManager.java | 28 +++++++++++++++---- .../mobileAI/utilities/CombatUtilities.java | 5 ++-- src/engine/objects/Resists.java | 13 +++++---- .../effectmodifiers/HealthEffectModifier.java | 5 ++-- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/engine/gameManager/CombatManager.java b/src/engine/gameManager/CombatManager.java index e9b26dda..90ec0034 100644 --- a/src/engine/gameManager/CombatManager.java +++ b/src/engine/gameManager/CombatManager.java @@ -850,6 +850,22 @@ public enum CombatManager { else damage = calculateDamage(ac, tarAc, minDamage, maxDamage, damageType, resists); + if(weapon != null && weapon.effects != null){ + float armorPierce = 0; + for(Effect eff : weapon.effects.values()){ + for(AbstractEffectModifier mod : eff.getEffectModifiers()){ + if(mod.modType.equals(ModType.ArmorPiercing)){ + armorPierce += mod.minMod * (mod.getRamp() * eff.getTrains()); + } + } + } + if(armorPierce > 0){ + damage *= 1 - armorPierce; + } + } + + Resists.handleFortitude(tarAc,damageType,damage); + float d = 0f; errorTrack = 12; @@ -1055,10 +1071,12 @@ public enum CombatManager { //calculate resists in if any + + if (resists != null) - return resists.getResistedDamage(source, target, damageType, damage, 0); - else - return damage; + damage = resists.getResistedDamage(source, target, damageType, damage, 0); + + return damage; } private static void sendPassiveDefenseMessage(AbstractCharacter source, ItemBase wb, AbstractWorldObject target, int passiveType, DeferredPowerJob dpj, boolean mainHand) { @@ -1400,9 +1418,9 @@ public enum CombatManager { Resists resists = ac.getResists(); - if (resists != null) + if (resists != null) { amount = resists.getResistedDamage(target, ac, ds.getDamageType(), amount, 0); - + } total += amount; } diff --git a/src/engine/mobileAI/utilities/CombatUtilities.java b/src/engine/mobileAI/utilities/CombatUtilities.java index 691cea31..f65444c3 100644 --- a/src/engine/mobileAI/utilities/CombatUtilities.java +++ b/src/engine/mobileAI/utilities/CombatUtilities.java @@ -101,9 +101,10 @@ public class CombatUtilities { if (!target.isAlive()) return; - if (AbstractWorldObject.IsAbstractCharacter(target)) + if (AbstractWorldObject.IsAbstractCharacter(target)) { + damage = Resists.handleFortitude((AbstractCharacter) target,DamageType.Crush,damage); trueDamage = ((AbstractCharacter) target).modifyHealth(-damage, agent, false); - else if (target.getObjectType() == GameObjectType.Building) + }else if (target.getObjectType() == GameObjectType.Building) trueDamage = ((Building) target).modifyHealth(-damage, agent); //Don't send 0 damage kay thanx. diff --git a/src/engine/objects/Resists.java b/src/engine/objects/Resists.java index ad7450e1..324b553f 100644 --- a/src/engine/objects/Resists.java +++ b/src/engine/objects/Resists.java @@ -125,7 +125,7 @@ public class Resists { } //Handle Fortitudes - private static float handleFortitude(AbstractCharacter target, DamageType type, float damage) { + public static float handleFortitude(AbstractCharacter target, DamageType type, float damage) { if (target == null || !(target.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))) return damage; PlayerBonuses bonus = target.getBonuses(); @@ -456,10 +456,11 @@ public class Resists { //handle fortitudes //damage = handleFortitude(target, type, damage); //calculate armor piercing - float ap = source.getBonuses().getFloatPercentAll(ModType.ArmorPiercing, SourceType.None); - float damageAfterResists = damage; - if(type.equals(DamageType.Pierce) || type.equals(DamageType.Crush) || type.equals(DamageType.Slash)) - damageAfterResists = damage * (1 - (this.getResist(type, trains) * 0.01f) + ap); + //float ap = 0; + //if(type.equals(DamageType.Pierce) || type.equals(DamageType.Crush) || type.equals(DamageType.Slash)) + //source.getBonuses().getFloatPercentAll(ModType.ArmorPiercing, SourceType.None); + + float damageAfterResists = damage * (1 - (this.getResist(type, trains) * 0.01f)); //check to see if any damage absorbers should cancel if (target != null) { //debug damage shields if any found @@ -479,7 +480,7 @@ public class Resists { } target.cancelOnTakeDamage(type, (damageAfterResists)); } - damageAfterResists = handleFortitude(target, type, damageAfterResists); + //damageAfterResists = handleFortitude(target, type, damageAfterResists); return damageAfterResists; } diff --git a/src/engine/powers/effectmodifiers/HealthEffectModifier.java b/src/engine/powers/effectmodifiers/HealthEffectModifier.java index 3ddaf96b..8c5c7e67 100644 --- a/src/engine/powers/effectmodifiers/HealthEffectModifier.java +++ b/src/engine/powers/effectmodifiers/HealthEffectModifier.java @@ -303,9 +303,10 @@ public class HealthEffectModifier extends AbstractEffectModifier { // calculate resists in if any if (resists != null) { - if (AbstractWorldObject.IsAbstractCharacter(awo)) + if (AbstractWorldObject.IsAbstractCharacter(awo)) { + damage = Resists.handleFortitude((AbstractCharacter) awo, damageType, damage * -1); damage = resists.getResistedDamage(source, (AbstractCharacter) awo, damageType, damage * -1, trains) * -1; - else + }else damage = resists.getResistedDamage(source, null, damageType, damage * -1, trains) * -1; }