From c16d82df16e1fd0cebd3c7f09a638cf6b0ea06ba Mon Sep 17 00:00:00 2001 From: Obique Date: Fri, 24 Aug 2018 12:58:56 -0500 Subject: [PATCH] Stopped posture updates when riding a mount, and prevented non-group from mounting each others' vehicles --- .../global/commands/callbacks/KneelCmdCallback.java | 3 +++ .../global/commands/callbacks/LogoutCmdCallback.java | 3 +++ .../global/commands/callbacks/ProneCmdCallback.java | 4 +++- .../global/commands/callbacks/SitOnObjectCmdCallback.java | 2 +- .../global/commands/callbacks/StandCmdCallback.java | 2 ++ .../services/gameplay/world/travel/PlayerMountService.java | 7 +++++++ 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KneelCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KneelCmdCallback.java index 5b332bc55..795d0a0f4 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KneelCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KneelCmdCallback.java @@ -33,6 +33,7 @@ import com.projectswg.holocore.resources.support.global.commands.ICmdCallback; import com.projectswg.holocore.resources.support.global.player.Player; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; +import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureState; import org.jetbrains.annotations.NotNull; public class KneelCmdCallback implements ICmdCallback { @@ -40,6 +41,8 @@ public class KneelCmdCallback implements ICmdCallback { @Override public void execute(@NotNull Player player, SWGObject target, @NotNull String args) { CreatureObject creature = player.getCreatureObject(); + if (creature.isStatesBitmask(CreatureState.RIDING_MOUNT)) + return; if (creature.isPerforming()) { new DanceIntent(player.getCreatureObject()).broadcast(); } else { diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/LogoutCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/LogoutCmdCallback.java index 65e09344f..32b7018f7 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/LogoutCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/LogoutCmdCallback.java @@ -36,6 +36,7 @@ import com.projectswg.holocore.resources.support.global.player.Player; import com.projectswg.holocore.resources.support.global.player.PlayerState; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; +import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureState; import com.projectswg.holocore.utilities.ScheduledUtilities; import me.joshlarson.jlcommon.control.IntentChain; import me.joshlarson.jlcommon.log.Log; @@ -48,6 +49,8 @@ public class LogoutCmdCallback implements ICmdCallback { @Override public void execute(@NotNull Player player, SWGObject target, @NotNull String args) { CreatureObject creature = player.getCreatureObject(); + if (creature.isStatesBitmask(CreatureState.RIDING_MOUNT)) + return; creature.setPosture(Posture.SITTING); Log.i("Logout command called for %s - 30s timer started", creature.getObjectName()); updateLogout(player, creature, 30); diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/ProneCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/ProneCmdCallback.java index 863d8900c..7c7144262 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/ProneCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/ProneCmdCallback.java @@ -33,6 +33,7 @@ import com.projectswg.holocore.resources.support.global.commands.ICmdCallback; import com.projectswg.holocore.resources.support.global.player.Player; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; +import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureState; import org.jetbrains.annotations.NotNull; public class ProneCmdCallback implements ICmdCallback { @@ -40,7 +41,8 @@ public class ProneCmdCallback implements ICmdCallback { @Override public void execute(@NotNull Player player, SWGObject target, @NotNull String args) { CreatureObject creature = player.getCreatureObject(); - + if (creature.isStatesBitmask(CreatureState.RIDING_MOUNT)) + return; if (creature.isPerforming()) { new DanceIntent(player.getCreatureObject()).broadcast(); } else { diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/SitOnObjectCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/SitOnObjectCmdCallback.java index ed97efb66..399df8be2 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/SitOnObjectCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/SitOnObjectCmdCallback.java @@ -42,7 +42,7 @@ public class SitOnObjectCmdCallback implements ICmdCallback { public void execute(@NotNull Player player,SWGObject target, @NotNull String args) { CreatureObject creature = player.getCreatureObject(); - if (creature.getPosture() == Posture.DEAD || creature.getPosture() == Posture.INCAPACITATED) + if (creature.getPosture() == Posture.DEAD || creature.getPosture() == Posture.INCAPACITATED || creature.isStatesBitmask(CreatureState.RIDING_MOUNT)) return; long objectID = creature.getObjectId(); SitOnObject sot; diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/StandCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/StandCmdCallback.java index 9e3f49786..6278bad88 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/StandCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/StandCmdCallback.java @@ -42,6 +42,8 @@ public class StandCmdCallback implements ICmdCallback { public void execute(@NotNull Player player, SWGObject target, @NotNull String args) { CreatureObject creature = player.getCreatureObject(); + if (creature.isStatesBitmask(CreatureState.RIDING_MOUNT)) + return; if(creature.isPerforming()) { // Ziggy: When you move while dancing, the client wants to execute /stand instead of /stopDance. Blame SOE. new DanceIntent(player.getCreatureObject()).broadcast(); diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/world/travel/PlayerMountService.java b/src/main/java/com/projectswg/holocore/services/gameplay/world/travel/PlayerMountService.java index 6b71e7086..4061b26e5 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/world/travel/PlayerMountService.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/world/travel/PlayerMountService.java @@ -42,8 +42,10 @@ import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.ServerAttribute; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureState; +import com.projectswg.holocore.resources.support.objects.swg.group.GroupObject; import com.projectswg.holocore.resources.support.objects.swg.intangible.IntangibleObject; import com.projectswg.holocore.resources.support.objects.swg.tangible.OptionFlag; +import com.projectswg.holocore.services.support.objects.ObjectStorageService.ObjectLookup; import me.joshlarson.jlcommon.control.IntentHandler; import me.joshlarson.jlcommon.control.Service; import me.joshlarson.jlcommon.log.Log; @@ -247,6 +249,11 @@ public class PlayerMountService extends Service { requester.setLocation(Location.zero()); requester.moveToSlot(vehicle, "rider", vehicle.getArrangementId(requester)); } else if (vehicle.getSlottedObject("rider") != null) { + GroupObject group = (GroupObject) ObjectLookup.getObjectById(requester.getGroupId()); + if (group == null || !group.getGroupMembers().values().contains(vehicle.getOwnerId())) { + Log.d("%s attempted to mount a vehicle when not in the same group as the owner!", requester); + return; + } boolean added = false; for (int i = 1; i <= 7; i++) { if (!vehicle.hasSlot("rider" + i)) {