mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-09-11 21:45:26 -04:00
Merge pull request #595 from madsboddum/valid_weapon
You must now have a supported weapon type equipped in order to execut…
This commit is contained in:
+9
@@ -0,0 +1,9 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
class AllLightsabersValidWeaponChecker : ValidWeaponChecker {
|
||||
override fun isValid(weaponType: WeaponType): Boolean {
|
||||
return weaponType.isLightsaber
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
class AllValidWeaponChecker : ValidWeaponChecker {
|
||||
override fun isValid(weaponType: WeaponType): Boolean {
|
||||
return true
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -67,7 +67,8 @@ public class CommandLoader extends DataLoader {
|
||||
.withCooldownTime2(set.getReal("cooldownTime2"))
|
||||
.withWarmupTime(set.getReal("warmupTime"))
|
||||
.withExecuteTime(set.getReal("executeTime"))
|
||||
.withTargetType(TargetType.getTargetType(set.getText("targetType")));
|
||||
.withTargetType(TargetType.getTargetType(set.getText("targetType")))
|
||||
.withValidWeapon(ValidWeapon.Companion.getByNum((int) set.getInt("validWeapon")));
|
||||
|
||||
@NotNull Locomotion[] locomotions = Locomotion.values();
|
||||
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
class ForcePowersValidWeaponChecker : ValidWeaponChecker {
|
||||
override fun isValid(weaponType: WeaponType): Boolean {
|
||||
return false // Not sure how this works, so just block ability usage until we actually need it
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
class MeleeValidWeaponChecker : ValidWeaponChecker {
|
||||
override fun isValid(weaponType: WeaponType): Boolean {
|
||||
return weaponType.isMelee
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
class RangedValidWeaponChecker : ValidWeaponChecker {
|
||||
override fun isValid(weaponType: WeaponType): Boolean {
|
||||
return weaponType.isRanged
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
class ThrownValidWeaponChecker : ValidWeaponChecker {
|
||||
override fun isValid(weaponType: WeaponType): Boolean {
|
||||
return weaponType == WeaponType.THROWN
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
enum class ValidWeapon(private val num: Int, private val validWeaponChecker: ValidWeaponChecker) {
|
||||
FORCE_POWER(-5, ForcePowersValidWeaponChecker()),
|
||||
ALL_LIGHTSABERS(-4, AllLightsabersValidWeaponChecker()),
|
||||
ALL(-3, AllValidWeaponChecker()),
|
||||
MELEE(-2, MeleeValidWeaponChecker()),
|
||||
RANGED(-1, RangedValidWeaponChecker()),
|
||||
THROWN(8, ThrownValidWeaponChecker());
|
||||
|
||||
fun isValid(weaponType: WeaponType): Boolean {
|
||||
return validWeaponChecker.isValid(weaponType)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getByNum(num: Int): ValidWeapon {
|
||||
return when (num) {
|
||||
FORCE_POWER.num -> FORCE_POWER
|
||||
ALL_LIGHTSABERS.num -> ALL_LIGHTSABERS
|
||||
ALL.num -> ALL
|
||||
MELEE.num -> MELEE
|
||||
RANGED.num -> RANGED
|
||||
THROWN.num -> THROWN
|
||||
else -> ALL
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.projectswg.holocore.resources.support.data.server_info.loader
|
||||
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType
|
||||
|
||||
interface ValidWeaponChecker {
|
||||
fun isValid(weaponType: WeaponType): Boolean
|
||||
}
|
||||
+5
-4
@@ -28,6 +28,7 @@ package com.projectswg.holocore.resources.support.global.commands;
|
||||
|
||||
import com.projectswg.common.data.CRC;
|
||||
import com.projectswg.common.data.combat.TargetType;
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.ValidWeapon;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
@@ -49,7 +50,7 @@ public class Command {
|
||||
private final double maxRange;
|
||||
private final int godLevel;
|
||||
private final boolean addToCombatQueue;
|
||||
private final int validWeapon;
|
||||
private final ValidWeapon validWeapon;
|
||||
private final int invalidWeapon;
|
||||
private final String cooldownGroup;
|
||||
private final double warmupTime;
|
||||
@@ -146,7 +147,7 @@ public class Command {
|
||||
return addToCombatQueue;
|
||||
}
|
||||
|
||||
public int getValidWeapon() {
|
||||
public ValidWeapon getValidWeapon() {
|
||||
return validWeapon;
|
||||
}
|
||||
|
||||
@@ -223,7 +224,7 @@ public class Command {
|
||||
private double maxRange;
|
||||
private int godLevel;
|
||||
private boolean addToCombatQueue;
|
||||
private int validWeapon;
|
||||
private ValidWeapon validWeapon;
|
||||
private int invalidWeapon;
|
||||
private String cooldownGroup;
|
||||
private double warmupTime;
|
||||
@@ -323,7 +324,7 @@ public class Command {
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommandBuilder withValidWeapon(int validWeapon) {
|
||||
public CommandBuilder withValidWeapon(ValidWeapon validWeapon) {
|
||||
this.validWeapon = validWeapon;
|
||||
return this;
|
||||
}
|
||||
|
||||
+19
-4
@@ -1,14 +1,13 @@
|
||||
package com.projectswg.holocore.services.support.global.commands;
|
||||
|
||||
import com.projectswg.common.data.CRC;
|
||||
import com.projectswg.common.data.RGB;
|
||||
import com.projectswg.common.data.combat.AttackType;
|
||||
import com.projectswg.common.data.combat.HitType;
|
||||
import com.projectswg.common.data.encodables.oob.StringId;
|
||||
import com.projectswg.common.network.packets.SWGPacket;
|
||||
import com.projectswg.common.network.packets.swg.zone.object_controller.CommandQueueDequeue;
|
||||
import com.projectswg.common.network.packets.swg.zone.object_controller.*;
|
||||
import com.projectswg.common.network.packets.swg.zone.object_controller.CommandQueueDequeue.ErrorCode;
|
||||
import com.projectswg.common.network.packets.swg.zone.object_controller.CommandQueueEnqueue;
|
||||
import com.projectswg.common.network.packets.swg.zone.object_controller.CommandTimer;
|
||||
import com.projectswg.common.network.packets.swg.zone.object_controller.IntendedTarget;
|
||||
import com.projectswg.holocore.intents.gameplay.combat.ExitCombatIntent;
|
||||
import com.projectswg.holocore.intents.support.global.command.ExecuteCommandIntent;
|
||||
import com.projectswg.holocore.intents.support.global.command.QueueCommandIntent;
|
||||
@@ -16,6 +15,7 @@ import com.projectswg.holocore.intents.support.global.network.InboundPacketInten
|
||||
import com.projectswg.holocore.intents.support.global.zone.PlayerEventIntent;
|
||||
import com.projectswg.holocore.resources.support.data.server_info.StandardLog;
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.DataLoader;
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.ValidWeapon;
|
||||
import com.projectswg.holocore.resources.support.global.commands.CombatCommand;
|
||||
import com.projectswg.holocore.resources.support.global.commands.Command;
|
||||
import com.projectswg.holocore.resources.support.global.commands.Locomotion;
|
||||
@@ -23,6 +23,8 @@ import com.projectswg.holocore.resources.support.global.commands.State;
|
||||
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.resources.support.objects.swg.weapon.WeaponObject;
|
||||
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponType;
|
||||
import com.projectswg.holocore.services.support.objects.ObjectStorageService.ObjectLookup;
|
||||
import me.joshlarson.jlcommon.concurrency.ScheduledThreadPool;
|
||||
import me.joshlarson.jlcommon.control.IntentHandler;
|
||||
@@ -244,6 +246,15 @@ public class CommandQueueService extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
ValidWeapon validWeapon = rootCommand.getValidWeapon();
|
||||
WeaponObject equippedWeapon = source.getEquippedWeapon();
|
||||
WeaponType equippedWeaponType = equippedWeapon.getType();
|
||||
|
||||
if (!validWeapon.isValid(equippedWeaponType)) {
|
||||
showInvalidWeaponFlyText(source);
|
||||
return new CheckCommandResult(ErrorCode.CANCELLED, 0);
|
||||
}
|
||||
|
||||
if (rootCommand instanceof CombatCommand combatCommand) {
|
||||
if (combatCommand.getHitType() == HitType.HEAL && combatCommand.getAttackType() == AttackType.SINGLE_TARGET) {
|
||||
SWGObject target;
|
||||
@@ -275,6 +286,10 @@ public class CommandQueueService extends Service {
|
||||
return new CheckCommandResult(ErrorCode.SUCCESS, 0);
|
||||
}
|
||||
|
||||
private void showInvalidWeaponFlyText(CreatureObject source) {
|
||||
source.sendSelf(new ShowFlyText(source.getObjectId(), new StringId("cbt_spam", "invalid_weapon"), ShowFlyText.Scale.MEDIUM, new RGB(255, 255, 255)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class EnqueuedCommand implements Comparable<EnqueuedCommand> {
|
||||
|
||||
Reference in New Issue
Block a user