Merge remote-tracking branch 'origin/flight-fix-cleanup' into release-1.3
This commit is contained in:
@@ -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) {
|
||||
|
||||
// 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) {
|
||||
|
||||
@@ -530,43 +475,17 @@ public enum MovementManager {
|
||||
}
|
||||
}
|
||||
|
||||
//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) {
|
||||
|
||||
|
||||
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)){
|
||||
teleporter.setInBuildingID(0);
|
||||
@@ -588,18 +507,12 @@ 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());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//mobs ignore region sets for now.
|
||||
if (teleporter.getObjectType().equals(GameObjectType.Mob)){
|
||||
teleporter.setInBuildingID(0);
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4781,9 +4781,12 @@ public void dismissNecroPets() {
|
||||
}finally{
|
||||
this.updateLock.writeLock().unlock();
|
||||
}
|
||||
}
|
||||
//temp removal
|
||||
if(AbstractCharacter.CanFly(this) == false && this.altitude > 0)
|
||||
GroundPlayer(this);
|
||||
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void updateFlight() {
|
||||
|
||||
|
||||
@@ -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 {
|
||||
apa = null;
|
||||
switch (type)
|
||||
{
|
||||
default:
|
||||
Logger.error("valid type not found for poweraction of ID" + rs.getInt("ID"));
|
||||
continue;
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user