From 8fdad1d4c57211bdf5adffaff965b51e2ceb0a82 Mon Sep 17 00:00:00 2001 From: Seefo Date: Wed, 23 Apr 2014 15:16:06 -0400 Subject: [PATCH] Fixed some vehicle bugs --- src/services/DevService.java | 12 +-- src/services/pet/MountService.java | 142 ++++++++++++++++------------- 2 files changed, 86 insertions(+), 68 deletions(-) diff --git a/src/services/DevService.java b/src/services/DevService.java index 1a7f453d..9cba11f5 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1211,11 +1211,10 @@ public class DevService implements INetworkDispatch { deed1.setBER(15); deed1.setAttributes(); inventory.add(deed1); - - break; + return; case 112: core.resourceService.spawnSpecificResourceContainer("Radioactive", player, 100000); - break; + return; case 120: // SWGObject houseDeed = core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet); // inventory.add(houseDeed); @@ -1224,9 +1223,8 @@ public class DevService implements INetworkDispatch { Player_House_Deed deed = (Player_House_Deed)core.objectService.createObject(templateString, planet); deed.setBMR(15); deed.setAttributes(); - inventory.add(deed); - - break; + inventory.add(deed); + return; case 125: TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet); genericCraftingTool.setCustomName("Generic Crafting Tool"); @@ -1234,7 +1232,9 @@ public class DevService implements INetworkDispatch { return; case 130: TangibleObject swoopDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_speederbike_swoop_deed.iff", planet); + TangibleObject av21deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_landspeeder_av21_deed.iff", planet); inventory.add(swoopDeed); + inventory.add(av21deed); return; } } diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index 8b5eb59c..2c0b636d 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -32,6 +32,7 @@ import resources.common.OutOfBand; import resources.datatables.DisplayType; import resources.datatables.Options; import resources.datatables.Posture; +import resources.datatables.State; import resources.datatables.StateStatus; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; @@ -392,50 +393,55 @@ public class MountService implements INetworkDispatch { } public void mount(CreatureObject rider, CreatureObject mount) { - if (rider == null) { - return; - } - - if (mount == null) { - return; - } - // FIXME like above, movement skillmod should be used instead of creo4 vars and never be 0, otherwise it thinks we are always rooted //if (rider.getSkillModBase("movement") == 0) { - //rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_rooted"), DisplayType.Broadcast); - //return; + //rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_rooted"), DisplayType.Broadcast); + //return; //} - if (mount.getOption(Options.DISABLED)) { + // Check if mount may be mounted + if (rider == null) + { + return; + } + if (mount == null) + { + return; + } + if (!mount.getOption(Options.MOUNT)) + { + return; + } + if (mount.getOption(Options.DISABLED)) + { rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); return; } - - if (!mount.getOption(Options.MOUNT)) { + if (rider.isInStealth()) + { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:no_mount_stealth"), DisplayType.Broadcast); return; } - - if (!canMount(rider, mount)) { + if (!canMount(rider, mount)) + { rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast); return; } - if (rider.isInStealth()) { - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:no_mount_stealth"), DisplayType.Broadcast); - return; - } + // Put rider into mount + mount._add(rider); - rider.setStateBitmask(rider.getStateBitmask() | 0x8000000); - rider.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); + // Set mount states and stuff + mount.setStateBitmask(mount.getStateBitmask() | State.MountedCreature); + mount.setState(State.MountedCreature, true); + mount.setPosture(Posture.DrivingVehicle); - synchronized(mount.getMutex()) { - mount._add(rider); - } - - mount.setStateBitmask(mount.getStateBitmask() | 0x10000000); - //mount.setState(State.MountedCreature, true); + // Set rider states and stuff + rider.setStateBitmask(rider.getStateBitmask() | State.RidingMount); + rider.setState(StateStatus.RidingMount, true); + + // Notify observers and update quadtree mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), mount.getObjectID(), 4), true); - //rider.setState(State.RidingMount, true); core.simulationService.remove(rider, rider.getWorldPosition().x, rider.getWorldPosition().z, false); } @@ -518,11 +524,16 @@ public class MountService implements INetworkDispatch { return false; } - if (mount.getSlottedObject("rider") != rider) { - return false; + if(mount.getSlottedObject("rider") == rider) return true; + + if(mount.getAttachment("passenger") == null) return false; + + for(int i = 1; i < (int) mount.getAttachment("passenger"); i++) + { + if (mount.getSlottedObject("rider" + i) != rider) return true; } - return true; + return false; } public boolean isMounted(SWGObject actor, CreatureObject mount) { @@ -621,52 +632,59 @@ public class MountService implements INetworkDispatch { } public void dismount(CreatureObject rider, CreatureObject mount) { - if (rider == null || mount == null) { + + // Check if mount is currently mounted + if (rider == null || mount == null) + { + return; + } + if (!isMounted(rider)) + { + return; + } + if (!mount.getOption(Options.MOUNT)) + { return; } - if (!isMounted(rider)) { - return; - } + // Dismount all passengers - if (!mount.getOption(Options.MOUNT)) { - return; - } - - if (rider.getObjectID() == mount.getOwnerId()) { + if (rider.getObjectID() == mount.getOwnerId()) + { CreatureObject owner = rider; - - mount.viewChildren(owner, false, false, new Traverser() { - - public void process(SWGObject passenger) { - if (passenger != owner) { - mount._remove(passenger); - mount.notifyObservers(new UpdateContainmentMessage(passenger.getObjectID(), 0, -1), false); - - if (passenger instanceof CreatureObject) { - ((CreatureObject) passenger).setState(StateStatus.RidingMount, false); - ((CreatureObject) passenger).setPosture(Posture.Upright); - } - - core.simulationService.add(passenger, mount.getWorldPosition().x, mount.getWorldPosition().z, false); - core.simulationService.teleport(passenger, mount.getWorldPosition(), mount.getOrientation(), 0); - } + mount.viewChildren(owner, false, false, new Traverser() + { + public void process(SWGObject passenger) + { + if (passenger != owner) dismount(rider, mount); } }); } + // Remove rider from mount mount._remove(rider); - mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), false); - - if (rider.getObjectID() == mount.getOwnerId()) { - mount.setState(StateStatus.MountedCreature, false); + + // Set mount states and stuff + if (rider.getObjectID() == mount.getOwnerId()) + { + mount.setStateBitmask(0); + mount.setState(State.MountedCreature, false); } - core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); + // Set rider states and stuff + rider.setStateBitmask(0); + rider.setState(StateStatus.RidingMount, false); + rider.setPosture((byte) 0); + + // Update observers and quadtree + mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), true); core.simulationService.teleport(rider, mount.getWorldPosition(), mount.getOrientation(), 0); + core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); - if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) { + // Store mount if it's a creature + if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) + { store(rider, mount); } }