Added support for more locomotions to prevent a lot of game-breaking issues

Right now you can simply stand up even though you're incapacitated or dead. After this you can't.
This commit is contained in:
Ziggy
2022-06-26 01:24:05 +02:00
parent 617fc5450b
commit 3a94591ec4
2 changed files with 19 additions and 8 deletions
@@ -1,7 +1,21 @@
package com.projectswg.holocore.resources.support.global.commands
import com.projectswg.common.data.encodables.tangible.Posture
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject
enum class Locomotion(val locomotionTableId: Int, val commandSdbColumnName: String, val check: (CreatureObject) -> Boolean) {
KNOCKED_DOWN(18, "L:knockedDown", {creatureObject -> creatureObject.posture == com.projectswg.common.data.encodables.tangible.Posture.KNOCKED_DOWN})
}
enum class Locomotion(val locomotionTableId: Int, val commandSdbColumnName: String, val posture: Posture) {
STANDING(0, "L:standing", Posture.UPRIGHT),
KNEELING(4, "L:kneeling", Posture.CROUCHED),
PRONE(7, "L:prone", Posture.PRONE),
SITTING(14, "L:sitting", Posture.SITTING),
SKILL_ANIMATING(15, "L:skillAnimating", Posture.SKILL_ANIMATING),
DRIVING_VEHICLE(16, "L:drivingVehicle", Posture.DRIVING_VEHICLE),
RIDING_CREATURE(17, "L:ridingCreature", Posture.RIDING_CREATURE),
KNOCKED_DOWN(18, "L:knockedDown", Posture.KNOCKED_DOWN),
INCAPACITATED(19, "L:incapacitated", Posture.INCAPACITATED),
DEAD(20, "L:dead", Posture.DEAD);
fun isActive(creatureObject: CreatureObject): Boolean {
return creatureObject.posture == posture
}
}
@@ -23,7 +23,6 @@ import com.projectswg.holocore.resources.support.global.player.PlayerEvent;
import com.projectswg.holocore.resources.support.objects.swg.SWGObject;
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject;
import com.projectswg.holocore.services.support.objects.ObjectStorageService.ObjectLookup;
import kotlin.jvm.functions.Function1;
import me.joshlarson.jlcommon.concurrency.ScheduledThreadPool;
import me.joshlarson.jlcommon.control.IntentHandler;
import me.joshlarson.jlcommon.control.Service;
@@ -188,11 +187,9 @@ public class CommandQueueService extends Service {
@NotNull Locomotion[] locomotions = Locomotion.values();
for (Locomotion locomotion : locomotions) {
Function1<CreatureObject, Boolean> check = locomotion.getCheck();
boolean active = locomotion.isActive(source);
Boolean result = check.invoke(source);
if (Boolean.TRUE.equals(result)) {
if (active) {
sourceLocomotions.add(locomotion);
}
}