Browse Source

Merge remote-tracking branch 'origin/flight-fix-cleanup' into release-1.3

pull/13/head
MagicBot 2 years ago
parent
commit
efab188ebd
  1. 94
      src/engine/gameManager/MovementManager.java
  2. 40
      src/engine/jobs/FlightJob.java
  3. 5
      src/engine/objects/PlayerCharacter.java
  4. 171
      src/engine/powers/poweractions/AbstractPowerAction.java

94
src/engine/gameManager/MovementManager.java

@ -18,7 +18,6 @@ import engine.exception.MsgSendException; @@ -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 { @@ -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) {
// 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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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);

40
src/engine/jobs/FlightJob.java

@ -1,40 +0,0 @@ @@ -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() {
}
}

5
src/engine/objects/PlayerCharacter.java

@ -4781,8 +4781,11 @@ public void dismissNecroPets() { @@ -4781,8 +4781,11 @@ public void dismissNecroPets() {
}finally{
this.updateLock.writeLock().unlock();
}
}
//temp removal
if(AbstractCharacter.CanFly(this) == false && this.altitude > 0)
GroundPlayer(this);
}
}
@Override
public void updateFlight() {

171
src/engine/powers/poweractions/AbstractPowerAction.java

@ -76,75 +76,108 @@ public abstract class AbstractPowerAction { @@ -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);

Loading…
Cancel
Save