From c7952382317c1424d3c381474dac4667eb86c24f Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Thu, 2 Jun 2022 20:39:52 -0500 Subject: [PATCH 1/5] Changed if/else tunnel to switch --- .../poweractions/AbstractPowerAction.java | 171 +++++++++++------- 1 file changed, 102 insertions(+), 69 deletions(-) diff --git a/src/engine/powers/poweractions/AbstractPowerAction.java b/src/engine/powers/poweractions/AbstractPowerAction.java index f7b1914f..20911147 100644 --- a/src/engine/powers/poweractions/AbstractPowerAction.java +++ b/src/engine/powers/poweractions/AbstractPowerAction.java @@ -76,75 +76,108 @@ public abstract class AbstractPowerAction { int token = DbManager.hasher.SBStringHash(IDString); //cache token, used for applying effects. PowersManager.ActionTokenByIDString.put(IDString, token); - if (type.equals("ApplyEffect")) - apa = new ApplyEffectPowerAction(rs, effects); - else if (type.equals("ApplyEffects")) - apa = new ApplyEffectsPowerAction(rs, effects); - else if (type.equals("DeferredPower")) - apa = new DeferredPowerPowerAction(rs, effects); - else if (type.equals("DamageOverTime")) - apa = new DamageOverTimePowerAction(rs, effects); - else if (type.equals("Peek")) - apa = new PeekPowerAction(rs); - else if (type.equals("Charm")) - apa = new CharmPowerAction(rs); - else if (type.equals("Fear")) - apa = new FearPowerAction(rs); - else if (type.equals("Confusion")) - apa = new ConfusionPowerAction(rs); - else if (type.equals("RemoveEffect")) - apa = new RemoveEffectPowerAction(rs); - else if (type.equals("Track")) - apa = new TrackPowerAction(rs, effects); - else if (type.equals("DirectDamage")) - apa = new DirectDamagePowerAction(rs, effects); - else if (type.equals("Transform")) - apa = new TransformPowerAction(rs, effects); - else if (type.equals("CreateMob")) - apa = new CreateMobPowerAction(rs); - else if (type.equals("Invis")) - apa = new InvisPowerAction(rs, effects); - else if (type.equals("ClearNearbyAggro")) - apa = new ClearNearbyAggroPowerAction(rs); - else if (type.equals("MobRecall")) - apa = new MobRecallPowerAction(rs); - else if (type.equals("SetItemFlag")) - apa = new SetItemFlagPowerAction(rs); - else if (type.equals("SimpleDamage")) - apa = new SimpleDamagePowerAction(rs); - else if (type.equals("TransferStatOT")) - apa = new TransferStatOTPowerAction(rs, effects); - else if (type.equals("TransferStat")) - apa = new TransferStatPowerAction(rs, effects); - else if (type.equals("Teleport")) - apa = new TeleportPowerAction(rs); - else if (type.equals("TreeChoke")) - apa = new TreeChokePowerAction(rs); - else if (type.equals("Block")) - apa = new BlockPowerAction(rs); - else if (type.equals("Resurrect")) - apa = new ResurrectPowerAction(rs); - else if (type.equals("ClearAggro")) - apa = new ClearAggroPowerAction(rs); - else if (type.equals("ClaimMine")) - apa = new ClaimMinePowerAction(rs); - else if (type.equals("Recall")) - apa = new RecallPowerAction(rs); - else if (type.equals("SpireDisable")) - apa = new SpireDisablePowerAction(rs); - else if (type.equals("Steal")) - apa = new StealPowerAction(rs); - else if (type.equals("Summon")) - apa = new SummonPowerAction(rs); - else if (type.equals("RunegateTeleport")) - apa = new RunegateTeleportPowerAction(rs); - else if (type.equals("RunegateTeleport")) - apa = new RunegateTeleportPowerAction(rs); - else if (type.equals("OpenGate")) - apa = new OpenGatePowerAction(rs); - else { - Logger.error("valid type not found for poweraction of ID" + rs.getInt("ID")); - continue; + apa = null; + switch (type) + { + default: + Logger.error("valid type not found for poweraction of ID" + rs.getInt("ID")); + break; + case "ApplyEffect": + apa = new ApplyEffectPowerAction(rs, effects); + break; + case "ApplyEffects": + apa = new ApplyEffectsPowerAction(rs, effects); + break; + case "DeferredPower": + apa = new DeferredPowerPowerAction(rs, effects); + break; + case "DamageOverTime": + apa = new DamageOverTimePowerAction(rs, effects); + break; + case "Peek": + apa = new PeekPowerAction(rs); + break; + case "Charm": + apa = new CharmPowerAction(rs); + break; + case "Fear": + apa = new FearPowerAction(rs); + break; + case "Confusion": + apa = new ConfusionPowerAction(rs); + break; + case "RemoveEffect": + apa = new RemoveEffectPowerAction(rs); + break; + case "Track": + apa = new TrackPowerAction(rs, effects); + break; + case "DirectDamage": + apa = new DirectDamagePowerAction(rs, effects); + break; + case "Transform": + apa = new TransformPowerAction(rs, effects); + break; + case "CreateMob": + apa = new CreateMobPowerAction(rs); + break; + case "Invis": + apa = new InvisPowerAction(rs, effects); + break; + case "ClearNearbyAggro": + apa = new ClearNearbyAggroPowerAction(rs); + break; + case "MobRecall": + apa = new MobRecallPowerAction(rs); + break; + case "SetItemFlag": + apa = new SetItemFlagPowerAction(rs); + break; + case "SimpleDamage": + apa = new SimpleDamagePowerAction(rs); + break; + case "TransferStatOT": + apa = new TransferStatOTPowerAction(rs, effects); + break; + case "TransferStat": + apa = new TransferStatPowerAction(rs, effects); + break; + case "Teleport": + apa = new TeleportPowerAction(rs); + break; + case "TreeChoke": + apa = new TreeChokePowerAction(rs); + break; + case "Block": + apa = new BlockPowerAction(rs); + break; + case "Resurrect": + apa = new ResurrectPowerAction(rs); + break; + case "ClearAggro": + apa = new ClearAggroPowerAction(rs); + break; + case "ClaimMine": + apa = new ClaimMinePowerAction(rs); + break; + case "Recall": + apa = new RecallPowerAction(rs); + break; + case "SpireDisable": + apa = new SpireDisablePowerAction(rs); + break; + case "Steal": + apa = new StealPowerAction(rs); + break; + case "Summon": + apa = new SummonPowerAction(rs); + break; + case "RunegateTeleport": + apa = new RunegateTeleportPowerAction(rs); + break; + case "OpenGate": + apa = new OpenGatePowerAction(rs); + break; } powerActions.put(IDString, apa); powerActionsByID.put(apa.UUID, apa); From 94bc41ab9d5768cc9667ed332060cf5a9d1b12c0 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Thu, 2 Jun 2022 21:01:18 -0500 Subject: [PATCH 2/5] added flight check --- src/engine/objects/PlayerCharacter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java index ef6f623a..9cf5b8ee 100644 --- a/src/engine/objects/PlayerCharacter.java +++ b/src/engine/objects/PlayerCharacter.java @@ -4781,8 +4781,11 @@ public void dismissNecroPets() { }finally{ this.updateLock.writeLock().unlock(); } + if(AbstractCharacter.CanFly(this) == false && this.altitude > 0) + { + GroundPlayer(this); + } } - } @Override public void updateFlight() { From 87e18351bedacac4485a698a888a5a99e5317ae3 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Fri, 3 Jun 2022 08:42:08 -0500 Subject: [PATCH 3/5] moved flight check to MovementManager --- src/engine/gameManager/MovementManager.java | 2 +- src/engine/objects/PlayerCharacter.java | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/engine/gameManager/MovementManager.java b/src/engine/gameManager/MovementManager.java index b66ba50a..28440b24 100644 --- a/src/engine/gameManager/MovementManager.java +++ b/src/engine/gameManager/MovementManager.java @@ -374,7 +374,7 @@ public enum MovementManager { // if stam less that 2 - time to force a landing if (pc.getStamina() < 10f || !canFly) { - + PlayerCharacter.GroundPlayer(pc); // dont call stop movement here as we want to // preserve endloc //pc.stopMovement(); diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java index 9cf5b8ee..bf3e0c19 100644 --- a/src/engine/objects/PlayerCharacter.java +++ b/src/engine/objects/PlayerCharacter.java @@ -4781,10 +4781,11 @@ public void dismissNecroPets() { }finally{ this.updateLock.writeLock().unlock(); } - if(AbstractCharacter.CanFly(this) == false && this.altitude > 0) - { - GroundPlayer(this); - } + //temp removal + //if(AbstractCharacter.CanFly(this) == false && this.altitude > 0) + //{ + // GroundPlayer(this); + //} } } @Override From bf87894f8c494c6e09351fd1cb0e4e9cd77c8b0d Mon Sep 17 00:00:00 2001 From: MagicBot Date: Sat, 4 Jun 2022 13:30:35 -0400 Subject: [PATCH 4/5] Removed flight job bonus code. --- src/engine/gameManager/MovementManager.java | 94 +-------------------- src/engine/jobs/FlightJob.java | 40 --------- 2 files changed, 4 insertions(+), 130 deletions(-) delete mode 100644 src/engine/jobs/FlightJob.java diff --git a/src/engine/gameManager/MovementManager.java b/src/engine/gameManager/MovementManager.java index 28440b24..eafc4192 100644 --- a/src/engine/gameManager/MovementManager.java +++ b/src/engine/gameManager/MovementManager.java @@ -18,7 +18,6 @@ import engine.exception.MsgSendException; import engine.job.JobContainer; import engine.job.JobScheduler; import engine.jobs.ChangeAltitudeJob; -import engine.jobs.FlightJob; import engine.math.Bounds; import engine.math.Vector3f; import engine.math.Vector3fImmutable; @@ -339,61 +338,7 @@ public enum MovementManager { } - //Update for when the character is in flight - public static void updateFlight(PlayerCharacter pc, ChangeAltitudeMsg msg, int duration) { - if (pc == null) - return; - - // clear flight timer job as we are about to update stuff and submit a new job - pc.clearTimer(flightTimerJobName); - - if (!pc.isActive()) { - pc.setAltitude(0); - pc.setDesiredAltitude(0); - pc.setTakeOffTime(0); - return; - } - - // Check to see if we are mid height change - JobContainer cjc = pc.getTimers().get(changeAltitudeTimerJobName); - if (cjc != null) { - addFlightTimer(pc, msg, MBServerStatics.FLY_FREQUENCY_MS); - return; - } - - // Altitude is zero, do nothing - if (pc.getAltitude() < 1) - return; - //make sure player is still allowed to fly - boolean canFly = false; - PlayerBonuses bonus = pc.getBonuses(); - - if (bonus != null && !bonus.getBool(ModType.NoMod, SourceType.Fly) && bonus.getBool(ModType.Fly, SourceType.None) && pc.isAlive()) - canFly = true; - - // if stam less that 2 - time to force a landing - if (pc.getStamina() < 10f || !canFly) { - PlayerCharacter.GroundPlayer(pc); - // dont call stop movement here as we want to - // preserve endloc - //pc.stopMovement(); - // sync world location - pc.setLoc(pc.getLoc()); - // force a landing - msg.setStartAlt(pc.getAltitude()); - msg.setTargetAlt(0); - msg.setAmountToMove(pc.getAltitude()); - msg.setUp(false); - DispatchMessage.dispatchMsgToInterestArea(pc, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); - MovementManager.addChangeAltitudeTimer(pc, msg.getStartAlt(), msg.getTargetAlt(), (int) (MBServerStatics.HEIGHT_CHANGE_TIMER_MS * pc.getAltitude())); - pc.setAltitude(msg.getStartAlt() - 10); - - } else //Add a new flight timer to check stam / force land - if (pc.getAltitude() > 0) - addFlightTimer(pc, msg, MBServerStatics.FLY_FREQUENCY_MS); - - } public static void finishChangeAltitude(AbstractCharacter ac, float targetAlt) { @@ -529,27 +474,6 @@ public enum MovementManager { member.setEndLoc(destination); } } - - //Getting rid of flgith timer. - - public static void addFlightTimer(PlayerCharacter pc, ChangeAltitudeMsg msg, int duration) { - if (pc == null || pc.getTimers() == null) - return; - if (!pc.getTimers().containsKey(flightTimerJobName)) { - FlightJob ftj = new FlightJob(pc, msg, duration); - JobContainer jc = JobScheduler.getInstance().scheduleJob(ftj, duration); - pc.getTimers().put(flightTimerJobName, jc); - } - } - - public static void addChangeAltitudeTimer(PlayerCharacter pc, float startAlt, float targetAlt, int duration) { - if (pc == null || pc.getTimers() == null) - return; - ChangeAltitudeJob catj = new ChangeAltitudeJob(pc, startAlt, targetAlt); - JobContainer jc = JobScheduler.getInstance().scheduleJob(catj, duration); - pc.getTimers().put(changeAltitudeTimerJobName, jc); - } - public static void translocate(AbstractCharacter teleporter, Vector3fImmutable targetLoc, Regions region) { @@ -557,15 +481,10 @@ public enum MovementManager { if (targetLoc == null) return; - Vector3fImmutable oldLoc = new Vector3fImmutable(teleporter.getLoc()); - - + teleporter.stopMovement(targetLoc); - teleporter.setRegion(region); - - //mobs ignore region sets for now. if (teleporter.getObjectType().equals(GameObjectType.Mob)){ @@ -588,17 +507,11 @@ public enum MovementManager { public static void translocateToObject(AbstractCharacter teleporter, AbstractWorldObject worldObject) { - - Vector3fImmutable targetLoc = teleporter.getLoc(); Vector3fImmutable oldLoc = new Vector3fImmutable(teleporter.getLoc()); - teleporter.stopMovement(teleporter.getLoc()); - - - - + teleporter.stopMovement(teleporter.getLoc()); //mobs ignore region sets for now. if (teleporter.getObjectType().equals(GameObjectType.Mob)){ @@ -609,6 +522,7 @@ public enum MovementManager { DispatchMessage.dispatchMsgToInterestArea(oldLoc, teleporter, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, false, false); return; } + boolean collide = false; int maxFloor = -1; int buildingID = 0; @@ -619,6 +533,7 @@ public enum MovementManager { if (collide) break; } + if (!collide) { teleporter.setInBuildingID(0); teleporter.setInBuilding(-1); @@ -633,7 +548,6 @@ public enum MovementManager { } } - TeleportToPointMsg msg = new TeleportToPointMsg(teleporter, targetLoc.getX(), targetLoc.getY(), targetLoc.getZ(), 0, -1, -1); //we shouldnt need to send teleport message to new area, as loadjob should pick it up. // DispatchMessage.dispatchMsgToInterestArea(teleporter, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); diff --git a/src/engine/jobs/FlightJob.java b/src/engine/jobs/FlightJob.java deleted file mode 100644 index 1bd9366c..00000000 --- a/src/engine/jobs/FlightJob.java +++ /dev/null @@ -1,40 +0,0 @@ -// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . -// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· -// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ -// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ -// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ -// Magicbane Emulator Project © 2013 - 2022 -// www.magicbane.com - - -package engine.jobs; - -import engine.gameManager.MovementManager; -import engine.job.AbstractScheduleJob; -import engine.net.client.msg.ChangeAltitudeMsg; -import engine.objects.PlayerCharacter; - -public class FlightJob extends AbstractScheduleJob { - - private final PlayerCharacter pc; - private final ChangeAltitudeMsg msg; - private final int duration; - - public FlightJob(PlayerCharacter pc, ChangeAltitudeMsg msg, int duration) { - super(); - this.msg = msg; - this.duration = duration; - this.pc = pc; - } - - @Override - protected void doJob() { - if (this.pc != null && this.msg != null) - MovementManager.updateFlight(pc, msg, duration); - } - - @Override - protected void _cancelJob() { - } - -} From d3f77d10c5f91f85334fdd303f4b4d5d997e1ac6 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Sat, 4 Jun 2022 13:45:09 -0400 Subject: [PATCH 5/5] Flight fix re-enabled. --- src/engine/objects/PlayerCharacter.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java index bf3e0c19..c7a55f57 100644 --- a/src/engine/objects/PlayerCharacter.java +++ b/src/engine/objects/PlayerCharacter.java @@ -4782,10 +4782,9 @@ public void dismissNecroPets() { this.updateLock.writeLock().unlock(); } //temp removal - //if(AbstractCharacter.CanFly(this) == false && this.altitude > 0) - //{ - // GroundPlayer(this); - //} + if(AbstractCharacter.CanFly(this) == false && this.altitude > 0) + GroundPlayer(this); + } } @Override