From fa00c85290dc67c44cb3493fd4147cb2ee0bc761 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Sun, 13 Apr 2014 03:50:45 +0200 Subject: [PATCH] Swoop is mountable for further tests --- .../vehicle/speederbike_swoop_pcd.py | 14 ++--- .../vehicle_deed/speederbike_swoop_deed.py | 4 +- scripts/radial/vehicle.py | 3 +- .../creature/CreatureMessageBuilder.java | 3 +- .../objects/creature/CreatureObject.java | 62 ++++++++++++++++++- .../objects/tangible/TangibleObject.java | 10 +++ src/services/SimulationService.java | 4 ++ src/services/object/ObjectService.java | 28 ++++++--- 8 files changed, 104 insertions(+), 24 deletions(-) diff --git a/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py b/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py index 94a561f7..ec2deccd 100644 --- a/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py +++ b/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py @@ -1,23 +1,21 @@ import sys def setup(core, object): - object.setAttachment('vehicleId', core.objectService.generateObjectID()) + #object.setAttachment('vehicleId', core.objectService.generateObjectID()) object.setAttachment('radial_filename', 'item') return def use(core, actor, object): if object: - vehicleId = object.getAttachment('vehicleId') + vehicleId = object.getObjectID() + #vehicleId = object.getAttachment('vehicleId') if not vehicleId: return vehicle = core.objectService.getObject(vehicleId) - - if vehicle: - core.objectService.destroyObject(vehicle) - else: - core.objectService.createObject('object/mobile/vehicles/shared_speederbike_swoop.iff', vehicleId, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) - core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) + + swoop = core.objectService.createObject('object/mobile/vehicles/shared_speederbike_swoop.iff', vehicleId, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) + core.simulationService.add(swoop, swoop.getPosition().x, swoop.getPosition().z, True) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py b/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py index abd61184..b32e90e3 100644 --- a/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py @@ -8,12 +8,12 @@ def use(core, actor, object): datapad = actor.getSlottedObject('datapad') pcd = core.objectService.createObject('object/intangible/vehicle/shared_speederbike_swoop_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - actor.sendSystemMessage('actor.getObjectID() %s' % actor.getObjectID(), 0) + #actor.sendSystemMessage('actor.getObjectID() %s' % actor.getObjectID(), 0) if datapad and pcd: datapad.add(pcd) core.objectService.destroyObject(object) vehicle = core.objectService.createObject('object/mobile/vehicle/shared_speederbike_swoop.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - vehicle.setOwner(actor) + vehicle.setOwnerId(actor.getObjectID()) core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) return \ No newline at end of file diff --git a/scripts/radial/vehicle.py b/scripts/radial/vehicle.py index 2585a9ef..a1e5a7b2 100644 --- a/scripts/radial/vehicle.py +++ b/scripts/radial/vehicle.py @@ -1,6 +1,5 @@ from resources.common import RadialOptions -from resources.common import RadialOptions -from services.ai import Vehicles + import sys def createRadial(core, owner, target, radials): diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index d70cf87c..18ae40e8 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -1149,7 +1149,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putLong(ownerId); int size = buffer.position(); buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0D, buffer, size + 4); + //buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0D, buffer, size + 4); 0F,12 doesnt crash + buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0F, buffer, size + 4); // checked from 0xA up to 0x1F return buffer; } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 6173600b..2d2cc731 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -34,6 +34,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayMusicMessage; +import protocol.swg.UpdateContainmentMessage; import protocol.swg.UpdatePostureMessage; import protocol.swg.UpdatePVPStatusMessage; import protocol.swg.chat.ChatSystemMessage; @@ -50,6 +51,7 @@ import main.NGECore; import engine.clients.Client; import resources.common.Cooldown; import resources.common.OutOfBand; +import resources.datatables.Options; import resources.objects.Buff; import resources.objects.DamageOverTime; import resources.objects.SWGList; @@ -66,7 +68,7 @@ import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import services.command.BaseSWGCommand; -@Entity(version=6) +@Entity(version=7) public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent @@ -186,6 +188,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent private ConcurrentHashMap cooldowns = new ConcurrentHashMap(); + public boolean mounted = false; + public CreatureObject mountedVehicle; + public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, Template, position, orientation); messageBuilder = new CreatureMessageBuilder(this); @@ -1781,6 +1786,61 @@ public class CreatureObject extends TangibleObject implements IPersistent { return (PlayerObject) this.getSlottedObject("ghost"); } + public boolean isMounted() { + return mounted; + } + + public void setMounted(boolean mounted) { + this.mounted = mounted; + } + + public CreatureObject getMountedVehicle() { + return mountedVehicle; + } + + public void setMountedVehicle(CreatureObject mountedVehicle) { + this.mountedVehicle = mountedVehicle; + } + + public void mount(CreatureObject owner) { + synchronized(objectMutex) { + if ((this.getOptionsBitmask() & Options.MOUNT) == Options.MOUNT){ + UpdateContainmentMessage updateContainmentMessage= new UpdateContainmentMessage(owner.getObjectID(), this.getObjectID(), -1); + owner.getClient().getSession().write(updateContainmentMessage.serialize()); + owner.setParent(this); + } + } + } + + public void unmount(CreatureObject owner) { + synchronized(objectMutex) { + if ((this.getOptionsBitmask() & Options.MOUNT) == Options.MOUNT){ + UpdateContainmentMessage updateContainmentMessage= new UpdateContainmentMessage(owner.getObjectID(), this.getObjectID(), -1); + owner.getClient().getSession().write(updateContainmentMessage.serialize()); + } + } + } + + public void initMount(CreatureObject owner) { + synchronized(objectMutex) { + this.ownerId = owner.getObjectID(); + setStateBitmask(0x10000000); + owner.setParent(this); + owner.getClient().getSession().write(messageBuilder.buildOwnerIdDelta(ownerId)); + owner.setMountedVehicle(this); + this.setOwnerId(owner.getObjectID()); + //this.add(owner); // NPE at engine.resources.objects.SWGObject.getCorrectArrangementId(kd:844) + this.mount(owner); + // setStateBitmask(28); + // owner.setStateBitmask(27); + owner.setStateBitmask(0x8000000); + this.setPosture((byte)10); + + //this.sendBaselines(owner.getClient()); + + } + } + //public float getCooldown(String cooldownGroup) { //return ((float) getCooldown(cooldownGroup) / (float) 1000); //} diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index de1b586b..62f3f00d 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -82,6 +82,8 @@ public class TangibleObject extends SWGObject { private boolean looted = false; private boolean lootLock = false; + private String serialNumber; + @NotPersistent private TangibleObject killer = null; @@ -470,6 +472,14 @@ public class TangibleObject extends SWGObject { this.lootLock = lootLock; } + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + @Override public void sendBaselines(Client destination) { diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index e76920c7..5009c159 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -332,6 +332,10 @@ public class SimulationService implements INetworkDispatch { } CreatureObject object = (CreatureObject) client.getParent(); + + if (object.mounted) + object=object.getMountedVehicle(); + Point3D newPos; Point3D oldPos; synchronized(object.getMutex()) { diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index f993e851..f4385f18 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -428,24 +428,32 @@ public class ObjectService implements INetworkDispatch { if (Template.startsWith("object/creature/") || Template.startsWith("object/mobile/")) { if (Template.startsWith("object/mobile/")) { ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE); - } else if (Template.startsWith("object/mobile/beast_master/")) { + } + if (Template.startsWith("object/mobile/beast_master/")) { ((CreatureObject) object).setOptionsBitmask(Options.NONE); - } else if (Template.startsWith("object/mobile/vendor/")) { + } + if (Template.startsWith("object/mobile/vendor/")) { ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE | Options.USABLE); - } else if (Template.startsWith("object/mobile/vehicle/")) { + } + if (Template.startsWith("object/mobile/vehicle/")) { ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE | Options.MOUNT); - System.err.println("Options.MOUNT"); - } else if (Template.startsWith("object/mobile/hologram/")) { + } + if (Template.startsWith("object/mobile/hologram/")) { ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE); - } else if (Template.startsWith("object/creature/npc/theme_park/")) { + } + if (Template.startsWith("object/creature/npc/theme_park/")) { ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE); - } else if (Template.startsWith("object/creature/npc/general/")) { + } + if (Template.startsWith("object/creature/npc/general/")) { ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE); - } else if (Template.startsWith("object/creature/droid/crafted/")) { + } + if (Template.startsWith("object/creature/droid/crafted/")) { ((CreatureObject) object).setOptionsBitmask(Options.NONE); - } else if (Template.startsWith("object/creature/droid/")) { + } + if (Template.startsWith("object/creature/droid/")) { ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE | Options.INVULNERABLE); - } else if (Template.startsWith("object/creature/player/")) { + } + if (Template.startsWith("object/creature/player/")) { ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE); } } else if (object instanceof TangibleObject) {