Swoop is mountable for further tests

This commit is contained in:
CharonInferar
2014-04-13 03:50:45 +02:00
parent 9f72afee01
commit fa00c85290
8 changed files with 104 additions and 24 deletions
@@ -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
@@ -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
+1 -2
View File
@@ -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):
@@ -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;
}
@@ -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<String, Long> cooldowns = new ConcurrentHashMap<String, Long>();
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);
//}
@@ -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) {
+4
View File
@@ -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()) {
+18 -10
View File
@@ -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) {