mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-07-31 01:15:50 -04:00
Successful zone in
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user