diff --git a/scripts/commands/generic/cmdTip.py b/scripts/commands/generic/cmdTip.py index 25353f4bc..8527a531a 100644 --- a/scripts/commands/generic/cmdTip.py +++ b/scripts/commands/generic/cmdTip.py @@ -1,4 +1,5 @@ import sys def execute(objManager, player, target, args): + player.getPlayerObject().setExperience("entertainer", 13) return \ No newline at end of file diff --git a/scripts/commands/generic/requestWaypointAtPosition.py b/scripts/commands/generic/requestWaypointAtPosition.py deleted file mode 100644 index a1c13ca85..000000000 --- a/scripts/commands/generic/requestWaypointAtPosition.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -#Args: color planet x y z -def execute(objManager, player, target, args): - #TODO: move content in placeHolder method to here - return - -def placeHolder(): - cmdArgs = args.split(" ", 4) - - waypoint = objManager.createObject("object/waypoint/shared_waypoint.iff") - waypoint.getLocation().setTerrain(player.getCreatureObject().getLocation().getTerrain()) - waypoint.setLocation(float(cmdArgs[2]), float(cmdArgs[3]), float(cmdArgs[4])) - waypoint.setActive(True) - waypoint.setName("New Waypoint") - - player.getPlayerObject().addWaypoint(waypoint) - return \ No newline at end of file diff --git a/src/resources/commands/callbacks/RequestWaypointCmdCallback.java b/src/resources/commands/callbacks/RequestWaypointCmdCallback.java new file mode 100644 index 000000000..8facb90c1 --- /dev/null +++ b/src/resources/commands/callbacks/RequestWaypointCmdCallback.java @@ -0,0 +1,23 @@ +package resources.commands.callbacks; + +import resources.commands.ICmdCallback; +import resources.objects.SWGObject; +import resources.objects.player.PlayerObject; +import resources.objects.waypoint.WaypointObject; +import resources.player.Player; +import services.objects.ObjectManager; + +public class RequestWaypointCmdCallback implements ICmdCallback { + + @Override + public void execute(ObjectManager objManager, Player player, SWGObject target, String args) { + PlayerObject ghost = (PlayerObject) player.getPlayerObject(); + if (ghost == null) + return; + + WaypointObject waypoint = (WaypointObject) objManager.createObject("object/waypoint/shared_waypoint.iff", player.getCreatureObject().getLocation()); + ghost.addWaypoint(waypoint); + System.out.println("Waypoitn requested."); + } + +} diff --git a/src/resources/commands/callbacks/WaypointCmdCallback.java b/src/resources/commands/callbacks/WaypointCmdCallback.java index f50e7a17b..cd4994b45 100644 --- a/src/resources/commands/callbacks/WaypointCmdCallback.java +++ b/src/resources/commands/callbacks/WaypointCmdCallback.java @@ -9,7 +9,7 @@ public class WaypointCmdCallback implements ICmdCallback { @Override public void execute(ObjectManager objManager, Player player, SWGObject target, String args) { - // TODO Auto-generated method stub + System.out.println("Create Waypoint: " + args); } } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index e40dea1e8..ce8d27ffb 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -58,9 +58,9 @@ public class CreatureObject extends TangibleObject { private SWGList equipmentList = new SWGList(BaselineType.CREO, 6, 23); private SWGList appearanceList = new SWGList(BaselineType.CREO, 6, 33); - private SWGMap skillMods = new SWGMap<>(BaselineType.CREO, 4, 11, false, StringType.ASCII); // TODO: SkillMod structure + private SWGMap skillMods = new SWGMap<>(BaselineType.CREO, 4, 11, StringType.ASCII); // TODO: SkillMod structure private SWGMap missionCriticalObjs = new SWGMap<>(BaselineType.CREO, 4, 21); - private SWGMap abilities = new SWGMap<>(BaselineType.CREO, 4, 22, false, StringType.ASCII); + private SWGMap abilities = new SWGMap<>(BaselineType.CREO, 4, 22, StringType.ASCII); private SWGMap buffs = new SWGMap<>(BaselineType.CREO, 6, 26); // TODO: Buff structure public CreatureObject(long objectId) { diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index e0caec5d5..0beb7d1e8 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -24,10 +24,11 @@ public class PlayerObject extends IntangibleObject { private int bornDate = 0; private int adminTag = 0; - private SWGMap experience = new SWGMap<>(BaselineType.PLAY, 8, 0); // TODO: UpdateType - private SWGMap waypoints = new SWGMap<>(BaselineType.PLAY, 8, 0); // TODO: UpdateType - private SWGMap quests = new SWGMap<>(BaselineType.PLAY, 8, 0); // TODO: UpdateType + private SWGMap experience = new SWGMap<>(BaselineType.PLAY, 8, 0); + private SWGMap waypoints = new SWGMap<>(BaselineType.PLAY, 8, 1); + private SWGMap quests = new SWGMap<>(BaselineType.PLAY, 8, 7); private SWGList flags = new SWGList<>(BaselineType.PLAY, 3, 0); + public PlayerObject(long objectId) { super(objectId); setVolume(0); @@ -36,9 +37,14 @@ public class PlayerObject extends IntangibleObject { public void addWaypoint(WaypointObject waypoint) { synchronized(waypoints) { waypoints.put(waypoint.getObjectId(), waypoint); + waypoints.sendDeltaMessage(this); } } + public void setExperience(String type, int value) { + experience.put(type, value); + experience.sendDeltaMessage(this); + } public String getProfession() { return profession; } @@ -237,7 +243,8 @@ public class PlayerObject extends IntangibleObject { bb.addInt(100); // Max Drink bb.addInt(0); // Current Consumable bb.addInt(100); // Max Consumable - bb.addObject(waypoints); // TODO: Is there a difference between this one and baseline 8? + bb.addInt(0); // Waypoints - Is there a difference between this one and baseline 8? + bb.addInt(0); bb.addInt(0); // Defenders List (Set) bb.addInt(0); bb.addInt(0); // Kill Meter Points diff --git a/src/resources/objects/waypoint/WaypointObject.java b/src/resources/objects/waypoint/WaypointObject.java index cd25e7e9e..bfddcfefb 100644 --- a/src/resources/objects/waypoint/WaypointObject.java +++ b/src/resources/objects/waypoint/WaypointObject.java @@ -103,7 +103,7 @@ public class WaypointObject extends IntangibleObject implements Encodable{ @Override public byte[] encode() { - ByteBuffer bb = ByteBuffer.allocate(34 + name.length() * 2); + ByteBuffer bb = ByteBuffer.allocate(42 + name.length() * 2); bb.putInt(cellNumber); bb.putFloat((float) getLocation().getX()); bb.putFloat((float) getLocation().getY()); @@ -111,7 +111,8 @@ public class WaypointObject extends IntangibleObject implements Encodable{ bb.putLong(targetId); // unsure when this is anything but 0, have yet to see it change bb.putInt(getLocation().getTerrain().getCrc()); bb.putInt(name.length()); - bb.put(name.getBytes(Charset.forName("UTF-16LE"))); + bb.put(name.getBytes(Charset.forName("UTF-16LE"))); + bb.putLong(getObjectId()); bb.put((byte) color); bb.put((byte) (active ? 1 : 0)); return bb.array(); diff --git a/src/services/commands/CommandService.java b/src/services/commands/CommandService.java index c202a25b9..ef6805050 100644 --- a/src/services/commands/CommandService.java +++ b/src/services/commands/CommandService.java @@ -11,8 +11,7 @@ import resources.client_info.ClientFactory; import resources.client_info.visitors.DatatableData; import resources.commands.Command; import resources.commands.ICmdCallback; -import resources.commands.callbacks.ServerCmdCallback; -import resources.commands.callbacks.WaypointCmdCallback; +import resources.commands.callbacks.*; import resources.common.CRC; import resources.control.Intent; import resources.control.Service; @@ -121,6 +120,7 @@ public class CommandService extends Service { private void registerCallbacks() { registerCallback("waypoint", new WaypointCmdCallback()); + registerCallback("requestWaypointAtPosition", new RequestWaypointCmdCallback()); registerCallback("server", new ServerCmdCallback()); } } diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 326a331d1..f89923f59 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -32,6 +32,7 @@ import resources.control.Manager; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; import resources.objects.quadtree.QuadTree; +import resources.objects.waypoint.WaypointObject; import resources.player.Player; import resources.player.PlayerEvent; import resources.player.PlayerState; @@ -195,7 +196,7 @@ public class ObjectManager extends Manager { } private void addToQuadTree(SWGObject obj) { - if (obj == null) + if (obj == null || obj instanceof WaypointObject) return; Location loc = obj.getLocation(); if (loc == null || loc.getTerrain() == null) @@ -320,6 +321,8 @@ public class ObjectManager extends Manager { if (player.getPlayerObject() == null) { System.err.println("FATAL: " + player.getUsername() + "'s CreatureObject has a null ghost!"); } + + player.getPlayerObject().setOwner(player); } private long getNextObjectId() { diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index a455fc4a2..33b868049 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -217,6 +217,7 @@ public class ZoneService extends Service { creatureObj.setOwner(player); creatureObj.setSlot("ghost", playerObj); playerObj.setTag(player.getAccessLevel()); + playerObj.setOwner(player); player.setCreatureObject(creatureObj); return creatureObj.getObjectId(); }