From c761cd982fa82e53a5933f29e498d61ea4856b2f Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Tue, 4 Mar 2025 18:31:02 -0600 Subject: [PATCH] fix immunities --- src/engine/devcmd/cmds/PrintEffectsCmd.java | 7 +- src/engine/gameManager/PowersManager.java | 87 +-------------------- src/engine/powers/ActionsBase.java | 37 +++++---- 3 files changed, 30 insertions(+), 101 deletions(-) diff --git a/src/engine/devcmd/cmds/PrintEffectsCmd.java b/src/engine/devcmd/cmds/PrintEffectsCmd.java index bbb08e68..2361104c 100644 --- a/src/engine/devcmd/cmds/PrintEffectsCmd.java +++ b/src/engine/devcmd/cmds/PrintEffectsCmd.java @@ -49,13 +49,16 @@ public class PrintEffectsCmd extends AbstractDevCmd { String output = "Effects for Player:" + newline; AbstractCharacter absTar = (AbstractCharacter) target; - for(Effect eff : absTar.effects.values()){ + + for(String key : absTar.effects.keySet()){ + Effect eff = absTar.effects.get(key); if(eff.getJobContainer() != null) { - output += eff.getName() + " (" + eff.getTrains() + ") " + eff.getJobContainer().timeToExecutionLeft() + newline; + output += "[" + key + "] " + eff.getName() + " (" + eff.getTrains() + ") " + eff.getJobContainer().timeToExecutionLeft() * 0.001f + newline; }else{ output += eff.getName() + " (" + eff.getTrains() + ") " + "PERMANENT" + newline; } } + throwbackInfo(pc, output); } diff --git a/src/engine/gameManager/PowersManager.java b/src/engine/gameManager/PowersManager.java index a03f7a27..d9d5666d 100644 --- a/src/engine/gameManager/PowersManager.java +++ b/src/engine/gameManager/PowersManager.java @@ -846,10 +846,10 @@ public enum PowersManager { // called when a spell finishes casting. perform actions public static void finishUsePower(final PerformActionMsg msg, PlayerCharacter playerCharacter, int casterLiveCounter, int targetLiveCounter) { - if(true) { - newFinishCast(msg); - return; - } + // if(true) { + // newFinishCast(msg); + // return; + //} PerformActionMsg performActionMsg; Dispatch dispatch; @@ -1986,26 +1986,6 @@ public enum PowersManager { + ab.getEffectID()); return; } - - if(AbstractCharacter.IsAbstractCharacter(awo)) { - try { - boolean immune = false; - AbstractCharacter absChar = (AbstractCharacter) awo; - for (AbstractEffectModifier mod : ab.getPowerAction().getEffectsBase().getModifiers()) { - if (absChar.getBonuses() != null) { - if (absChar.getBonuses().getBool(ModType.ImmuneTo, mod.sourceType) || absChar.getBonuses().getBool(ModType.NoMod, mod.sourceType)) - immune = true; - } - } - - if (immune) - return; - }catch(Exception e){ - - } - } - - pa.startAction(source, awo, targetLoc, trains, ab, pb); } @@ -3112,65 +3092,6 @@ public enum PowersManager { return true; } - public static void newFinishCast(PerformActionMsg msg){ - - PlayerCharacter source = PlayerCharacter.getPlayerCharacter(msg.getSourceID()); - - if(source == null) - return; - - if(!source.isAlive()) - return; - - PowersBase powerBase = PowersManager.getPowerByToken(msg.getPowerUsedID()); - - if(powerBase == null) - return; - - int trains = msg.getNumTrains(); - if(source.getPowers().containsKey(msg.getPowerUsedID())){ - trains = source.getPowers().get(msg.getPowerUsedID()).getTrains(); - } - - if(powerBase.targetSelf) { - msg.setTargetID(source.getObjectUUID()); - msg.setTargetType(GameObjectType.PlayerCharacter.ordinal()); - } - AbstractWorldObject target = getTarget(msg); - - - if(target == null) - return; - - for(ActionsBase action : powerBase.getActions()){ - String stackType = action.stackType; - if(target.effects.containsKey(stackType)){ - Effect eff = target.effects.get(stackType); - if(action.greaterThan && trains <= eff.getTrains()) - continue; - if(action.greaterThanEqual && trains < eff.getTrains()) - continue; - if(AbstractCharacter.IsAbstractCharacter(target)){ - AbstractCharacter absTar = (AbstractCharacter) target; - if(absTar.getBonuses() != null){ - SourceType sourceType = SourceType.GetSourceType(action.stackType); - if(sourceType != null && absTar.getBonuses().getBool(ModType.ImmuneTo,sourceType)) - continue; - if(sourceType != null && absTar.getBonuses().getBool(ModType.NoMod,sourceType)) - continue; - } - } - } - int duration = action.getDuration(trains); - runPowerAction(source,target,target.loc,action,trains,powerBase,duration); - //action.getPowerAction().startAction(source,target,target.loc,trains,action,powerBase); - } - source.setIsCasting(false); - PerformActionMsg castMsg = new PerformActionMsg(msg); - castMsg.setNumTrains(9999); - castMsg.setUnknown04(2); - DispatchMessage.dispatchMsgToInterestArea(source, castMsg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); - } } diff --git a/src/engine/powers/ActionsBase.java b/src/engine/powers/ActionsBase.java index 5264d18b..26779720 100644 --- a/src/engine/powers/ActionsBase.java +++ b/src/engine/powers/ActionsBase.java @@ -244,25 +244,30 @@ public class ActionsBase { if (bonus == null) return false; - //TODO make this more efficient then testing strings - if (this.stackType.equals("Stun") && bonus.getBool(ModType.ImmuneTo, SourceType.Stun)) - return true; //Currently stun immune. Skip stun - else if (this.stackType.equals("Snare") && bonus.getBool(ModType.ImmuneTo, SourceType.Snare)) - return true; //Currently snare immune. Skip snare - else if (this.stackType.equals("Blindness") && bonus.getBool(ModType.ImmuneTo, SourceType.Blind)) - return true; //Currently blind immune. Skip blind - else if (this.stackType.equals("PowerInhibitor") && bonus.getBool(ModType.ImmuneTo, SourceType.Powerblock)) - return true; //Currently power block immune. Skip power block - else if (this.stackType.equals("Root") && bonus.getBool(ModType.ImmuneTo, SourceType.Root)) + SourceType sourceType = SourceType.GetSourceType(this.stackType); + + if(sourceType != null && (bonus.getBool(ModType.ImmuneTo,sourceType) || bonus.getBool(ModType.NoMod,sourceType))) return true; - // else if (pb.isHeal() && (bonus.getByte("immuneTo.Heal")) >= trains) - // return true; //Currently shadowmantled. Skip heals - else if (this.stackType.equals("Flight") && bonus.getBool(ModType.NoMod, SourceType.Fly)) + + if(pb.vampDrain() && bonus.getBool(ModType.BlockedPowerType, SourceType.VAMPDRAIN)) return true; - else if (this.stackType.equals("Track") && bonus.getBool(ModType.CannotTrack, SourceType.None)) + + if (this.stackType.equals("Track") && bonus.getBool(ModType.CannotTrack, SourceType.None)) + return true; + + if (this.stackType.equals("PowerInhibitor") && bonus.getBool(ModType.ImmuneTo, SourceType.Powerblock)) return true; - else - return pb.vampDrain() && bonus.getBool(ModType.BlockedPowerType, SourceType.VAMPDRAIN); + + if(ac.effects.containsKey(this.stackType)) { + Effect eff = ac.effects.get(this.stackType); + if(eff != null) { + if (this.greaterThan && trains <= eff.getTrains()) + return true; + + if (this.greaterThanEqual && trains < eff.getTrains()) + return true; + } + } } return false; }