player update handled in new thread

This commit is contained in:
2025-01-01 10:31:46 -06:00
parent df7a106237
commit 1098265145
13 changed files with 95 additions and 35 deletions
+4 -4
View File
@@ -68,7 +68,7 @@ public enum MovementManager {
if (toMove.getObjectType().equals(GameObjectType.PlayerCharacter)) { if (toMove.getObjectType().equals(GameObjectType.PlayerCharacter)) {
if (((PlayerCharacter) toMove).isCasting()) if (((PlayerCharacter) toMove).isCasting())
((PlayerCharacter) toMove).update(); ((PlayerCharacter) toMove).update(false);
} }
@@ -96,7 +96,7 @@ public enum MovementManager {
if (!toMove.isMoving()) if (!toMove.isMoving())
toMove.resetLastSetLocUpdate(); toMove.resetLastSetLocUpdate();
else else
toMove.update(); toMove.update(false);
// Update movement for the player // Update movement for the player
@@ -351,7 +351,7 @@ public enum MovementManager {
ChatManager.chatSystemInfo((PlayerCharacter) ac, "Finished Alt change, setting the end location to " + ac.getEndLoc().getX() + ' ' + ac.getEndLoc().getZ() + " moving=" + ac.isMoving() + " and current location is " + curLoc.getX() + ' ' + curLoc.getZ()); ChatManager.chatSystemInfo((PlayerCharacter) ac, "Finished Alt change, setting the end location to " + ac.getEndLoc().getX() + ' ' + ac.getEndLoc().getZ() + " moving=" + ac.isMoving() + " and current location is " + curLoc.getX() + ' ' + curLoc.getZ());
//Send run/walk/sit/stand to tell the client we are flying / landing etc //Send run/walk/sit/stand to tell the client we are flying / landing etc
ac.update(); ac.update(false);
ac.stopMovement(ac.getLoc()); ac.stopMovement(ac.getLoc());
if (ac.isAlive()) if (ac.isAlive())
MovementManager.sendRWSSMsg(ac); MovementManager.sendRWSSMsg(ac);
@@ -408,7 +408,7 @@ public enum MovementManager {
if (bonus.getBool(ModType.Stunned, SourceType.None) || bonus.getBool(ModType.CannotMove, SourceType.None)) if (bonus.getBool(ModType.Stunned, SourceType.None) || bonus.getBool(ModType.CannotMove, SourceType.None))
continue; continue;
member.update(); member.update(false);
// All checks passed, let's move the player // All checks passed, let's move the player
+5 -7
View File
@@ -8,7 +8,6 @@
package engine.gameManager; package engine.gameManager;
import com.sun.corba.se.spi.orbutil.fsm.ActionBase;
import engine.Enum.*; import engine.Enum.*;
import engine.InterestManagement.HeightMap; import engine.InterestManagement.HeightMap;
import engine.InterestManagement.WorldGrid; import engine.InterestManagement.WorldGrid;
@@ -28,7 +27,6 @@ import engine.net.client.ClientConnection;
import engine.net.client.msg.*; import engine.net.client.msg.*;
import engine.objects.*; import engine.objects.*;
import engine.powers.*; import engine.powers.*;
import engine.powers.effectmodifiers.AbstractEffectModifier;
import engine.powers.poweractions.AbstractPowerAction; import engine.powers.poweractions.AbstractPowerAction;
import engine.powers.poweractions.TrackPowerAction; import engine.powers.poweractions.TrackPowerAction;
import engine.server.MBServerStatics; import engine.server.MBServerStatics;
@@ -179,7 +177,7 @@ public enum PowersManager {
if (pc != null) { if (pc != null) {
sendPowerMsg(pc, 2, msg); sendPowerMsg(pc, 2, msg);
if (pc.isCasting()) { if (pc.isCasting()) {
pc.update(); pc.update(false);
} }
pc.setIsCasting(false); pc.setIsCasting(false);
@@ -591,7 +589,7 @@ public enum PowersManager {
// make person casting stand up if spell (unless they're casting a chant which does not make them stand up) // make person casting stand up if spell (unless they're casting a chant which does not make them stand up)
if (pb.isSpell() && !pb.isChant() && playerCharacter.isSit()) { if (pb.isSpell() && !pb.isChant() && playerCharacter.isSit()) {
playerCharacter.update(); playerCharacter.update(false);
playerCharacter.setSit(false); playerCharacter.setSit(false);
UpdateStateMsg updateStateMsg = new UpdateStateMsg(playerCharacter); UpdateStateMsg updateStateMsg = new UpdateStateMsg(playerCharacter);
DispatchMessage.dispatchMsgToInterestArea(playerCharacter, updateStateMsg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); DispatchMessage.dispatchMsgToInterestArea(playerCharacter, updateStateMsg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);
@@ -614,7 +612,7 @@ public enum PowersManager {
if (time > 100) { if (time > 100) {
playerCharacter.update(); playerCharacter.update(false);
playerCharacter.setIsCasting(true); playerCharacter.setIsCasting(true);
} }
@@ -792,7 +790,7 @@ public enum PowersManager {
playerCharacter.removeEffectBySource(EffectSourceType.Root,40,true); playerCharacter.removeEffectBySource(EffectSourceType.Root,40,true);
} }
if (playerCharacter.isCasting()) { if (playerCharacter.isCasting()) {
playerCharacter.update(); playerCharacter.update(false);
playerCharacter.updateStamRegen(-100); playerCharacter.updateStamRegen(-100);
} }
@@ -2318,7 +2316,7 @@ public enum PowersManager {
// set player is not casting for regens // set player is not casting for regens
if (pc.isCasting()) { if (pc.isCasting()) {
pc.update(); pc.update(false);
} }
pc.setIsCasting(false); pc.setIsCasting(false);
@@ -151,7 +151,7 @@ public enum SimulationManager {
if (player == null) if (player == null)
continue; continue;
player.update(); player.update(false);
} }
_updatePulseTime = System.currentTimeMillis() + 500; _updatePulseTime = System.currentTimeMillis() + 500;
+2 -2
View File
@@ -85,7 +85,7 @@ public class ClientMessagePump implements NetMsgHandler {
if (pc == null) if (pc == null)
return; return;
pc.update(); pc.update(false);
if (msg.getSpeed() == 2) if (msg.getSpeed() == 2)
pc.setWalkMode(false); pc.setWalkMode(false);
else else
@@ -114,7 +114,7 @@ public class ClientMessagePump implements NetMsgHandler {
if (pc == null) if (pc == null)
return; return;
pc.update(); pc.update(false);
pc.setSit(msg.toggleSitStand()); pc.setSit(msg.toggleSitStand());
@@ -70,7 +70,7 @@ public class ChangeAltitudeHandler extends AbstractClientMsgHandler {
if (pc.getAltitude() == 0 && !msg.up()) if (pc.getAltitude() == 0 && !msg.up())
return true; return true;
pc.update(); pc.update(false);
pc.stopMovement(pc.getLoc()); pc.stopMovement(pc.getLoc());
msg.setStartAlt(pc.getAltitude()); msg.setStartAlt(pc.getAltitude());
if (msg.up()) { if (msg.up()) {
@@ -135,7 +135,7 @@ public class ChangeAltitudeHandler extends AbstractClientMsgHandler {
} }
if (msg.up()) { if (msg.up()) {
pc.update(); pc.update(false);
pc.setDesiredAltitude(targetAlt); pc.setDesiredAltitude(targetAlt);
pc.setTakeOffTime(System.currentTimeMillis()); pc.setTakeOffTime(System.currentTimeMillis());
} else { } else {
@@ -161,7 +161,7 @@ public class ChangeAltitudeHandler extends AbstractClientMsgHandler {
} else } else
pc.setDesiredAltitude(targetAlt); pc.setDesiredAltitude(targetAlt);
pc.update(); pc.update(false);
pc.setTakeOffTime(System.currentTimeMillis()); pc.setTakeOffTime(System.currentTimeMillis());
+4 -5
View File
@@ -31,7 +31,6 @@ import engine.net.ByteBufferWriter;
import engine.net.DispatchMessage; import engine.net.DispatchMessage;
import engine.net.client.msg.UpdateStateMsg; import engine.net.client.msg.UpdateStateMsg;
import engine.powers.EffectsBase; import engine.powers.EffectsBase;
import engine.powers.effectmodifiers.AbstractEffectModifier;
import engine.server.MBServerStatics; import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger; import org.pmw.tinylog.Logger;
@@ -1841,7 +1840,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
} }
//updates //updates
public void update() { public void update(Boolean newSystem) {
} }
public void updateRegen() { public void updateRegen() {
@@ -1861,16 +1860,16 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
try { try {
switch (updateType) { switch (updateType) {
case ALL: case ALL:
update(); update(false);
break; break;
case REGEN: case REGEN:
updateRegen(); updateRegen();
break; break;
case LOCATION: case LOCATION:
update(); update(false);
break; break;
case MOVEMENTSTATE: case MOVEMENTSTATE:
update(); update(false);
break; break;
case FLIGHT: case FLIGHT:
updateFlight(); updateFlight();
+3 -3
View File
@@ -270,7 +270,7 @@ public abstract class AbstractWorldObject extends AbstractGameObject {
this.effects.remove(name); this.effects.remove(name);
if (this.getObjectType().equals(GameObjectType.PlayerCharacter)) if (this.getObjectType().equals(GameObjectType.PlayerCharacter))
if (name.equals("Flight")) { if (name.equals("Flight")) {
((PlayerCharacter) this).update(); ((PlayerCharacter) this).update(false);
PlayerCharacter.GroundPlayer((PlayerCharacter) this); PlayerCharacter.GroundPlayer((PlayerCharacter) this);
} }
} }
@@ -385,7 +385,7 @@ public abstract class AbstractWorldObject extends AbstractGameObject {
if (source.equals("Flight")) { if (source.equals("Flight")) {
//ground player //ground player
if (this.getObjectType().equals(GameObjectType.PlayerCharacter)) { if (this.getObjectType().equals(GameObjectType.PlayerCharacter)) {
((PlayerCharacter) this).update(); ((PlayerCharacter) this).update(false);
PlayerCharacter.GroundPlayer((PlayerCharacter) this); PlayerCharacter.GroundPlayer((PlayerCharacter) this);
} }
} }
@@ -414,7 +414,7 @@ public abstract class AbstractWorldObject extends AbstractGameObject {
if (source.equals("Flight")) { if (source.equals("Flight")) {
//ground player //ground player
if (this.getObjectType().equals(GameObjectType.PlayerCharacter)) { if (this.getObjectType().equals(GameObjectType.PlayerCharacter)) {
((PlayerCharacter) this).update(); ((PlayerCharacter) this).update(false);
PlayerCharacter.GroundPlayer((PlayerCharacter) this); PlayerCharacter.GroundPlayer((PlayerCharacter) this);
} }
} }
+9 -7
View File
@@ -26,7 +26,6 @@ import engine.job.JobScheduler;
import engine.jobs.DeferredPowerJob; import engine.jobs.DeferredPowerJob;
import engine.jobs.FinishSpireEffectJob; import engine.jobs.FinishSpireEffectJob;
import engine.jobs.NoTimeJob; import engine.jobs.NoTimeJob;
import engine.jobs.RefreshGroupJob;
import engine.math.Bounds; import engine.math.Bounds;
import engine.math.FastMath; import engine.math.FastMath;
import engine.math.Vector3fImmutable; import engine.math.Vector3fImmutable;
@@ -2102,7 +2101,7 @@ public class PlayerCharacter extends AbstractCharacter {
this.lastUpdateTime = System.currentTimeMillis(); this.lastUpdateTime = System.currentTimeMillis();
this.lastStamUpdateTime = System.currentTimeMillis(); this.lastStamUpdateTime = System.currentTimeMillis();
this.update(); this.update(false);
PowersManager.applyPower(this, this, Vector3fImmutable.ZERO, -1661758934, 40, false); PowersManager.applyPower(this, this, Vector3fImmutable.ZERO, -1661758934, 40, false);
@@ -2923,7 +2922,7 @@ public class PlayerCharacter extends AbstractCharacter {
public synchronized void grantXP(int xp) { public synchronized void grantXP(int xp) {
if(this.promotionClass == null && this.level == 10){ if(this.promotionClass == null && this.level == 10){
this.setOverFlowEXP(0); this.setOverFlowEXP(0);
this.update(); this.update(false);
this.incVer(); this.incVer();
this.recalculate(); this.recalculate();
this.calculateMaxHealthManaStamina(); this.calculateMaxHealthManaStamina();
@@ -3084,7 +3083,7 @@ public class PlayerCharacter extends AbstractCharacter {
} }
if (charReloadRequired) { if (charReloadRequired) {
this.update(); this.update(false);
this.incVer(); this.incVer();
this.recalculate(); this.recalculate();
this.calculateMaxHealthManaStamina(); this.calculateMaxHealthManaStamina();
@@ -3157,7 +3156,7 @@ public class PlayerCharacter extends AbstractCharacter {
bonus += this.bonuses.getFloatPercentNullZero(ModType.Speed, SourceType.None); bonus += this.bonuses.getFloatPercentNullZero(ModType.Speed, SourceType.None);
// TODO get equip bonus // TODO get equip bonus
this.update(); this.update(false);
this.speedMod = bonus; this.speedMod = bonus;
} }
@@ -4839,7 +4838,10 @@ public class PlayerCharacter extends AbstractCharacter {
} }
@Override @Override
public void update() { public void update(Boolean newSystem) {
if(!newSystem)
return;
if (this.updateLock.writeLock().tryLock()) { if (this.updateLock.writeLock().tryLock()) {
try { try {
@@ -5547,7 +5549,7 @@ public class PlayerCharacter extends AbstractCharacter {
@Override @Override
public final void setIsCasting(final boolean isCasting) { public final void setIsCasting(final boolean isCasting) {
if (this.isCasting != isCasting) if (this.isCasting != isCasting)
this.update(); this.update(false);
this.isCasting = isCasting; this.isCasting = isCasting;
} }
@@ -30,7 +30,7 @@ public class AttributeEffectModifier extends AbstractEffectModifier {
@Override @Override
public void applyBonus(AbstractCharacter ac, int trains) { public void applyBonus(AbstractCharacter ac, int trains) {
ac.update(); ac.update(false);
Float amount = 0f; Float amount = 0f;
PlayerBonuses bonus = ac.getBonuses(); PlayerBonuses bonus = ac.getBonuses();
if (this.percentMod != 0f) { //Stat Percent Modifiers if (this.percentMod != 0f) { //Stat Percent Modifiers
@@ -29,7 +29,7 @@ public class HealthRecoverRateEffectModifier extends AbstractEffectModifier {
@Override @Override
public void applyBonus(AbstractCharacter ac, int trains) { public void applyBonus(AbstractCharacter ac, int trains) {
ac.update(); ac.update(false);
Float amount = 0f; Float amount = 0f;
PlayerBonuses bonus = ac.getBonuses(); PlayerBonuses bonus = ac.getBonuses();
if (this.useRampAdd) if (this.useRampAdd)
@@ -39,7 +39,7 @@ public class NoModEffectModifier extends AbstractEffectModifier {
PlayerCharacter flyer = (PlayerCharacter) ac; PlayerCharacter flyer = (PlayerCharacter) ac;
if (flyer.getAltitude() > 0) if (flyer.getAltitude() > 0)
flyer.update(); flyer.update(false);
PlayerCharacter.GroundPlayer(flyer); PlayerCharacter.GroundPlayer(flyer);
break; break;
+3
View File
@@ -517,6 +517,9 @@ public class WorldServer {
Logger.info("Starting Bane Thread"); Logger.info("Starting Bane Thread");
BaneThread.startBaneThread(); BaneThread.startBaneThread();
Logger.info("Starting Player Update Thread");
UpdateThread.startUpdateThread();
return true; return true;
} }
+58
View File
@@ -0,0 +1,58 @@
// ·. · · · · .
// · ·
// · ·
//
// · · ·
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.workthreads;
import engine.Enum;
import engine.gameManager.SessionManager;
import engine.gameManager.SimulationManager;
import engine.objects.Bane;
import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;
public class UpdateThread implements Runnable {
public Long lastRun;
public static int instancedelay = 1000;
public UpdateThread() {
Logger.info(" UpdateThread thread has started!");
}
public void processPlayerUpdate() {
try {
for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()){
player.update(true);
}
} catch (Exception e) {
Logger.error("UPDATE ERROR");
}
}
public void run() {
lastRun = System.currentTimeMillis();
while (true) {
if (System.currentTimeMillis() >= lastRun + instancedelay) { // Correct condition
this.processPlayerUpdate();
lastRun = System.currentTimeMillis(); // Update lastRun after processing
}
}
}
public static void startUpdateThread() {
Thread updateThread;
updateThread = new Thread(new UpdateThread());
updateThread.setName("updateThread");
updateThread.start();
}
}