Successful zone in

This commit is contained in:
Obique
2014-12-06 00:57:42 -06:00
committed by Obique
parent f966a1521e
commit 6c961b1c92
2 changed files with 97 additions and 4 deletions
+53 -2
View File
@@ -1,19 +1,34 @@
package services.objects;
import intents.GalacticPacketIntent;
import intents.swgobject_events.SWGObjectEventIntent;
import intents.swgobject_events.SWGObjectMovedIntent;
import java.util.HashMap;
import java.util.Map;
import main.ProjectSWG;
import network.packets.swg.zone.HeartBeatMessage;
import network.packets.swg.zone.ParametersMessage;
import network.packets.swg.zone.UpdatePvpStatusMessage;
import network.packets.swg.zone.chat.ChatOnConnectAvatar;
import network.packets.swg.zone.chat.VoiceChatStatus;
import network.packets.swg.zone.insertion.ChatServerStatus;
import network.packets.swg.zone.insertion.CmdStartScene;
import network.packets.swg.zone.insertion.SelectCharacter;
import resources.Location;
import resources.Race;
import resources.Terrain;
import resources.control.Intent;
import resources.control.Manager;
import resources.objects.SWGObject;
import resources.objects.creature.CreatureObject;
import resources.objects.intangible.IntangibleObject;
import resources.objects.player.PlayerObject;
import resources.objects.quadtree.QuadTree;
import resources.objects.tangible.TangibleObject;
import resources.player.Player;
import services.player.PlayerManager;
public class ObjectManager extends Manager {
@@ -24,12 +39,13 @@ public class ObjectManager extends Manager {
public ObjectManager() {
objects = new HashMap<Long, SWGObject>();
quadTree = new HashMap<String, QuadTree<SWGObject>>();
maxObjectId = 0;
maxObjectId = 1;
}
@Override
public boolean initialize() {
registerForIntent(SWGObjectEventIntent.TYPE);
registerForIntent(GalacticPacketIntent.TYPE);
for (Terrain t : Terrain.values()) {
quadTree.put(t.getFile(), new QuadTree<SWGObject>(-5000, -5000, 5000, 5000));
}
@@ -50,6 +66,11 @@ public class ObjectManager extends Manager {
x = nTerrain.getX();
y = nTerrain.getZ();
quadTree.get(nTerrain.getTerrain().getFile()).put(x, y, obj);
} else if (i instanceof GalacticPacketIntent) {
GalacticPacketIntent gpi = (GalacticPacketIntent) i;
if (gpi.getPacket() instanceof SelectCharacter) {
zoneInCharacter(gpi.getPlayerManager(), gpi.getNetworkId());
}
}
}
@@ -67,6 +88,26 @@ public class ObjectManager extends Manager {
}
}
private void zoneInCharacter(PlayerManager playerManager, long netId) {
Player player = playerManager.getPlayerFromNetworkId(netId);
if (player != null) {
long objId = player.getCreatureObject().getObjectId();
Race race = ((CreatureObject) player.getCreatureObject()).getRace();
Location l = player.getCreatureObject().getLocation();
long time = (long)(ProjectSWG.getCoreTime()/1E3);
sendPacket(player, new HeartBeatMessage());
sendPacket(player, new ChatServerStatus(true));
sendPacket(player, new VoiceChatStatus());
sendPacket(player, new ParametersMessage());
sendPacket(player, new ChatOnConnectAvatar());
sendPacket(player, new CmdStartScene(false, objId, race, l, time));
// player.getCreatureObject().createObject(player);
CreatureObject creature = (CreatureObject) player.getCreatureObject();
player.sendPacket(new UpdatePvpStatusMessage(creature.getPvpType(), creature.getPvpFactionId(), creature.getObjectId()));
creature.createObject(player);
}
}
private long getNextObjectId() {
synchronized (objects) {
return maxObjectId++;
@@ -87,6 +128,8 @@ public class ObjectManager extends Manager {
return null;
template = template.substring(7, template.length()-7-4);
switch (getFirstTemplatePart(template)) {
case "creature": return createCreatureObject(objectId, template);
case "player": return createPlayerObject(objectId, template);
case "tangible": return createTangibleObject(objectId, template);
case "intangible": return createIntangibleObject(objectId, template);
case "weapon": break;
@@ -96,12 +139,20 @@ public class ObjectManager extends Manager {
return null;
}
private CreatureObject createCreatureObject(long objectId, String template) {
return new CreatureObject(objectId);
}
private PlayerObject createPlayerObject(long objectId, String template) {
return new PlayerObject(objectId);
}
private TangibleObject createTangibleObject(long objectId, String template) {
if (!template.startsWith("tangible/"))
return null;
template = template.substring(9);
switch (getFirstTemplatePart(template)) {
case "creature": break;
}
return new TangibleObject(objectId);
}