@ -15,16 +15,11 @@ import engine.Enum.SourceType;
import engine.InterestManagement.InterestManager ;
import engine.InterestManagement.InterestManager ;
import engine.InterestManagement.WorldGrid ;
import engine.InterestManagement.WorldGrid ;
import engine.exception.MsgSendException ;
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.Bounds ;
import engine.math.Vector3f ;
import engine.math.Vector3f ;
import engine.math.Vector3fImmutable ;
import engine.math.Vector3fImmutable ;
import engine.net.DispatchMessage ;
import engine.net.DispatchMessage ;
import engine.net.client.ClientConnection ;
import engine.net.client.ClientConnection ;
import engine.net.client.msg.ChangeAltitudeMsg ;
import engine.net.client.msg.MoveToPointMsg ;
import engine.net.client.msg.MoveToPointMsg ;
import engine.net.client.msg.TeleportToPointMsg ;
import engine.net.client.msg.TeleportToPointMsg ;
import engine.net.client.msg.UpdateStateMsg ;
import engine.net.client.msg.UpdateStateMsg ;
@ -339,61 +334,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 ) {
public static void finishChangeAltitude ( AbstractCharacter ac , float targetAlt ) {
@ -530,43 +471,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 ) {
public static void translocate ( AbstractCharacter teleporter , Vector3fImmutable targetLoc , Regions region ) {
if ( targetLoc = = null )
if ( targetLoc = = null )
return ;
return ;
Vector3fImmutable oldLoc = new Vector3fImmutable ( teleporter . getLoc ( ) ) ;
Vector3fImmutable oldLoc = new Vector3fImmutable ( teleporter . getLoc ( ) ) ;
teleporter . stopMovement ( targetLoc ) ;
teleporter . stopMovement ( targetLoc ) ;
teleporter . setRegion ( region ) ;
teleporter . setRegion ( region ) ;
//mobs ignore region sets for now.
//mobs ignore region sets for now.
if ( teleporter . getObjectType ( ) . equals ( GameObjectType . Mob ) ) {
if ( teleporter . getObjectType ( ) . equals ( GameObjectType . Mob ) ) {
teleporter . setInBuildingID ( 0 ) ;
teleporter . setInBuildingID ( 0 ) ;
@ -588,18 +503,12 @@ public enum MovementManager {
public static void translocateToObject ( AbstractCharacter teleporter , AbstractWorldObject worldObject ) {
public static void translocateToObject ( AbstractCharacter teleporter , AbstractWorldObject worldObject ) {
Vector3fImmutable targetLoc = teleporter . getLoc ( ) ;
Vector3fImmutable targetLoc = teleporter . getLoc ( ) ;
Vector3fImmutable oldLoc = new Vector3fImmutable ( teleporter . getLoc ( ) ) ;
Vector3fImmutable oldLoc = new Vector3fImmutable ( teleporter . getLoc ( ) ) ;
teleporter . stopMovement ( teleporter . getLoc ( ) ) ;
teleporter . stopMovement ( teleporter . getLoc ( ) ) ;
//mobs ignore region sets for now.
//mobs ignore region sets for now.
if ( teleporter . getObjectType ( ) . equals ( GameObjectType . Mob ) ) {
if ( teleporter . getObjectType ( ) . equals ( GameObjectType . Mob ) ) {
teleporter . setInBuildingID ( 0 ) ;
teleporter . setInBuildingID ( 0 ) ;
@ -609,6 +518,7 @@ public enum MovementManager {
DispatchMessage . dispatchMsgToInterestArea ( oldLoc , teleporter , msg , DispatchChannel . PRIMARY , MBServerStatics . CHARACTER_LOAD_RANGE , false , false ) ;
DispatchMessage . dispatchMsgToInterestArea ( oldLoc , teleporter , msg , DispatchChannel . PRIMARY , MBServerStatics . CHARACTER_LOAD_RANGE , false , false ) ;
return ;
return ;
}
}
boolean collide = false ;
boolean collide = false ;
int maxFloor = - 1 ;
int maxFloor = - 1 ;
int buildingID = 0 ;
int buildingID = 0 ;
@ -619,6 +529,7 @@ public enum MovementManager {
if ( collide )
if ( collide )
break ;
break ;
}
}
if ( ! collide ) {
if ( ! collide ) {
teleporter . setInBuildingID ( 0 ) ;
teleporter . setInBuildingID ( 0 ) ;
teleporter . setInBuilding ( - 1 ) ;
teleporter . setInBuilding ( - 1 ) ;
@ -633,7 +544,6 @@ public enum MovementManager {
}
}
}
}
TeleportToPointMsg msg = new TeleportToPointMsg ( teleporter , targetLoc . getX ( ) , targetLoc . getY ( ) , targetLoc . getZ ( ) , 0 , - 1 , - 1 ) ;
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.
//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);
// DispatchMessage.dispatchMsgToInterestArea(teleporter, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);