From c696db36f504427be6734c2bea7b7c711d66c850 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 11 Jun 2015 14:12:04 -0400 Subject: [PATCH] Added new FIRST_ZONE enum to PlayerEvent for distinguishing between switching initial logins and planet/area switching --- src/resources/control/Intent.java | 7 ++++--- src/resources/player/PlayerEvent.java | 1 + src/services/galaxy/ConnectionService.java | 2 +- src/services/objects/ObjectManager.java | 5 +++-- src/services/player/ZoneService.java | 4 +++- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/resources/control/Intent.java b/src/resources/control/Intent.java index d1ca9f1be..0fc919f47 100644 --- a/src/resources/control/Intent.java +++ b/src/resources/control/Intent.java @@ -107,9 +107,10 @@ public abstract class Intent { return; } synchronized (i) { - if (i.isComplete()) - broadcast(); - i.setAsParallel(this); + if (!i.isComplete()) { + i.setAsParallel(this); + } + broadcast(); } } diff --git a/src/resources/player/PlayerEvent.java b/src/resources/player/PlayerEvent.java index 58a786551..2b5cde4b7 100644 --- a/src/resources/player/PlayerEvent.java +++ b/src/resources/player/PlayerEvent.java @@ -30,6 +30,7 @@ package resources.player; public enum PlayerEvent { PE_CREATE_CHARACTER, + PE_FIRST_ZONE, PE_ZONE_IN, PE_LOGGED_OUT, PE_DISAPPEAR, diff --git a/src/services/galaxy/ConnectionService.java b/src/services/galaxy/ConnectionService.java index 59c43d986..00e5a026c 100644 --- a/src/services/galaxy/ConnectionService.java +++ b/src/services/galaxy/ConnectionService.java @@ -137,7 +137,7 @@ public class ConnectionService extends Service { private void onPlayerEventIntent(PlayerEventIntent pei) { switch (pei.getEvent()) { - case PE_ZONE_IN: { + case PE_FIRST_ZONE: { Player p = pei.getPlayer(); synchronized (zonedInPlayers) { zonedInPlayers.add(p); diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 022365592..77988b911 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -53,6 +53,7 @@ import resources.objects.buildouts.BuildoutLoader; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; import resources.player.Player; +import resources.player.PlayerEvent; import resources.server_info.CachedObjectDatabase; import resources.server_info.Config; import resources.server_info.Log; @@ -206,8 +207,8 @@ public class ObjectManager extends Manager { if (object instanceof CreatureObject && object.getOwner() != null){ sendPacket(object.getOwner(), new CmdStartScene(false, object.getObjectId(), ((CreatureObject)object).getRace(), object.getLocation(), (long)(ProjectSWG.getCoreTime()/1E3))); - ((CreatureObject)object).createObject(object.getOwner()); - ((CreatureObject)object).clearAware(); + object.createObject(object.getOwner()); + new PlayerEventIntent(object.getOwner(), PlayerEvent.PE_ZONE_IN).broadcast(); } } diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 1389a50e1..dca107247 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -193,7 +193,9 @@ public class ZoneService extends Service { System.out.printf("[%s] %s is zoning in%n", player.getUsername(), player.getCharacterName()); Log.i("ObjectManager", "Zoning in %s with character %s", player.getUsername(), player.getCharacterName()); sendCommitHistory(player); - new PlayerEventIntent(player, galaxy, PlayerEvent.PE_ZONE_IN).broadcast(); + PlayerEventIntent firstZone = new PlayerEventIntent(player, galaxy, PlayerEvent.PE_FIRST_ZONE); + PlayerEventIntent primary = new PlayerEventIntent(player, galaxy, PlayerEvent.PE_ZONE_IN); + primary.broadcastWithIntent(firstZone); } private void loadCommitHistory() {