diff --git a/scripts/commands/afk.py b/scripts/commands/afk.py deleted file mode 100644 index 68670816..00000000 --- a/scripts/commands/afk.py +++ /dev/null @@ -1,13 +0,0 @@ -from resources.datatables import PlayerFlags -import sys - -def setup(): - return - -def run(core, actor, target, commandString): - command = core.commandService.getCommandByName("toggleawayfromkeyboard") - - if command: - core.commandService.processCommand(actor, target, command, 0, commandString) - - return diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 08a6cee5..712c5ca0 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -52,6 +52,7 @@ import resources.objects.waypoint.WaypointObject; import resources.objects.weapon.WeaponObject; import services.ai.AIActor; import services.combat.CombatEvents.DamageTaken; +import services.command.BaseSWGCommand; import services.command.CombatCommand; import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow; @@ -400,7 +401,7 @@ public class CombatService implements INetworkDispatch { } - private void sendCombatPackets(CreatureObject attacker, TangibleObject target, WeaponObject weapon, CombatCommand command, int actionCounter, float damage, int armorAbsorbed, int hitType) { + private void sendCombatPackets(CreatureObject attacker, TangibleObject target, WeaponObject weapon, BaseSWGCommand command, int actionCounter, float damage, int armorAbsorbed, int hitType) { String animationStr = command.getRandomAnimation(weapon); CombatAction combatAction = new CombatAction(CRC.StringtoCRC(animationStr), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC()); @@ -429,7 +430,7 @@ public class CombatService implements INetworkDispatch { } - private void sendHealPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { + private void sendHealPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, BaseSWGCommand command, int actionCounter) { CombatAction combatAction = new CombatAction(CRC.StringtoCRC(command.getDefaultAnimations()[0]), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC()); ObjControllerMessage objController = new ObjControllerMessage(0x1B, combatAction); diff --git a/src/services/command/BaseSWGCommand.java b/src/services/command/BaseSWGCommand.java index 0448a8ea..f228aa16 100644 --- a/src/services/command/BaseSWGCommand.java +++ b/src/services/command/BaseSWGCommand.java @@ -27,6 +27,9 @@ import engine.resources.common.CRC; import java.util.ArrayList; import java.util.List; +import java.util.Random; + +import resources.objects.weapon.WeaponObject; public class BaseSWGCommand implements Cloneable { @@ -55,6 +58,21 @@ public class BaseSWGCommand implements Cloneable { private Byte[] invalidPostures; private Long[] invalidStates; + private String[] defaultAnimations = new String[]{}; + private String[] oneHandedAnimations = new String[]{}; + private String[] twoHandedAnimations = new String[]{}; + private String[] polearmAnimations = new String[]{}; + private String[] unarmedAnimations = new String[]{}; + private String[] pistolAnimations = new String[]{}; + private String[] carbineAnimations = new String[]{}; + private String[] lightRifleAnimations = new String[]{}; + private String[] rifleAnimations = new String[]{}; + private String[] heavyWpnAnimations = new String[]{}; + private String[] oneHandedLSAnimations = new String[]{}; + private String[] twoHandedLSAnimations = new String[]{}; + private String[] polearmLSAnimations = new String[]{}; + private String[] thrownAnimations = new String[]{}; + public BaseSWGCommand(String commandName) { setCommandName(commandName); setCommandCRC(CRC.StringtoCRC(commandName)); @@ -362,4 +380,169 @@ public class BaseSWGCommand implements Cloneable { this.warmupTime = warmupTime; } + public String[] getDefaultAnimations() { + return defaultAnimations; + } + + public void setDefaultAnimations(String[] defaultAnimations) { + this.defaultAnimations = defaultAnimations; + } + + public String[] getOneHandedAnimations() { + return oneHandedAnimations; + } + + public void setOneHandedAnimations(String[] oneHandedAnimations) { + this.oneHandedAnimations = oneHandedAnimations; + } + + public String[] getTwoHandedAnimations() { + return twoHandedAnimations; + } + + public void setTwoHandedAnimations(String[] twoHandedAnimations) { + this.twoHandedAnimations = twoHandedAnimations; + } + + public String[] getPolearmAnimations() { + return polearmAnimations; + } + + public void setPolearmAnimations(String[] polearmAnimations) { + this.polearmAnimations = polearmAnimations; + } + + public String[] getUnarmedAnimations() { + return unarmedAnimations; + } + + public void setUnarmedAnimations(String[] unarmedAnimations) { + this.unarmedAnimations = unarmedAnimations; + } + + public String[] getPistolAnimations() { + return pistolAnimations; + } + + public void setPistolAnimations(String[] pistolAnimations) { + this.pistolAnimations = pistolAnimations; + } + + public String[] getCarbineAnimations() { + return carbineAnimations; + } + + public void setCarbineAnimations(String[] carbineAnimations) { + this.carbineAnimations = carbineAnimations; + } + + public String[] getLightRifleAnimations() { + return lightRifleAnimations; + } + + public void setLightRifleAnimations(String[] lightRifleAnimations) { + this.lightRifleAnimations = lightRifleAnimations; + } + + public String[] getRifleAnimations() { + return rifleAnimations; + } + + public void setRifleAnimations(String[] rifleAnimations) { + this.rifleAnimations = rifleAnimations; + } + + public String[] getHeavyWpnAnimations() { + return heavyWpnAnimations; + } + + public void setHeavyWpnAnimations(String[] heavyWpnAnimations) { + this.heavyWpnAnimations = heavyWpnAnimations; + } + + public String[] getOneHandedLSAnimations() { + return oneHandedLSAnimations; + } + + public void setOneHandedLSAnimations(String[] oneHandedLSAnimations) { + this.oneHandedLSAnimations = oneHandedLSAnimations; + } + + public String[] getTwoHandedLSAnimations() { + return twoHandedLSAnimations; + } + + public void setTwoHandedLSAnimations(String[] twoHandedLSAnimations) { + this.twoHandedLSAnimations = twoHandedLSAnimations; + } + + public String[] getPolearmLSAnimations() { + return polearmLSAnimations; + } + + public void setPolearmLSAnimations(String[] polearmLSAnimations) { + this.polearmLSAnimations = polearmLSAnimations; + } + + public String[] getThrownAnimations() { + return thrownAnimations; + } + + public void setThrownAnimations(String[] thrownAnimations) { + this.thrownAnimations = thrownAnimations; + } + + public String getRandomAnimation(WeaponObject weapon) { + int weaponType = weapon.getWeaponType(); + String[] animations; + + switch (weaponType) { + case 0: + animations = rifleAnimations; + break; + case 1: + animations = carbineAnimations; + break; + case 2: + animations = pistolAnimations; + break; + case 3: + animations = heavyWpnAnimations; + break; + case 4: + animations = oneHandedAnimations; + break; + case 5: + animations = twoHandedAnimations; + break; + case 6: + animations = defaultAnimations; + break; + case 7: + animations = polearmAnimations; + break; + case 8: + animations = thrownAnimations; + break; + case 9: + animations = oneHandedLSAnimations; + break; + case 10: + animations = twoHandedLSAnimations; + break; + case 11: + animations = polearmLSAnimations; + break; + default: + animations = defaultAnimations; + break; + } + + if (animations.length == 0) { + animations = defaultAnimations; + } + + return animations[new Random().nextInt(animations.length)]; + } + } diff --git a/src/services/command/CombatCommand.java b/src/services/command/CombatCommand.java index cab1f4ef..77ecde00 100644 --- a/src/services/command/CombatCommand.java +++ b/src/services/command/CombatCommand.java @@ -21,28 +21,11 @@ ******************************************************************************/ package services.command; -import java.util.Random; - -import resources.objects.weapon.WeaponObject; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; public class CombatCommand extends BaseSWGCommand { - private String[] defaultAnimations = new String[]{}; - private String[] oneHandedAnimations = new String[]{}; - private String[] twoHandedAnimations = new String[]{}; - private String[] polearmAnimations = new String[]{}; - private String[] unarmedAnimations = new String[]{}; - private String[] pistolAnimations = new String[]{}; - private String[] carbineAnimations = new String[]{}; - private String[] lightRifleAnimations = new String[]{}; - private String[] rifleAnimations = new String[]{}; - private String[] heavyWpnAnimations = new String[]{}; - private String[] oneHandedLSAnimations = new String[]{}; - private String[] twoHandedLSAnimations = new String[]{}; - private String[] polearmLSAnimations = new String[]{}; - private String[] thrownAnimations = new String[]{}; private byte validTargetType; private byte hitType; private byte healType; @@ -67,16 +50,12 @@ public class CombatCommand extends BaseSWGCommand { private int damageType, elementalType, elementalValue; private String performanceSpam; private byte hitSpam; - //private float cooldown; private String delayAttackEggTemplate; private String delayAttackParticle; private float initialAttackDelay; private float delayAttackInterval; private int delayAttackLoops; private int delayAttackEggPosition; - //private String cooldownGroup; - //private float executeTime; - //private float warmupTime; private float vigorCost; // for commando kill meter and bm specials private float criticalChance; private int attack_rolls; @@ -166,119 +145,7 @@ public class CombatCommand extends BaseSWGCommand { e.printStackTrace(); } } - - public String[] getDefaultAnimations() { - return defaultAnimations; - } - - public void setDefaultAnimations(String[] defaultAnimations) { - this.defaultAnimations = defaultAnimations; - } - - public String[] getOneHandedAnimations() { - return oneHandedAnimations; - } - - public void setOneHandedAnimations(String[] oneHandedAnimations) { - this.oneHandedAnimations = oneHandedAnimations; - } - - public String[] getTwoHandedAnimations() { - return twoHandedAnimations; - } - - public void setTwoHandedAnimations(String[] twoHandedAnimations) { - this.twoHandedAnimations = twoHandedAnimations; - } - - public String[] getPolearmAnimations() { - return polearmAnimations; - } - - public void setPolearmAnimations(String[] polearmAnimations) { - this.polearmAnimations = polearmAnimations; - } - - public String[] getUnarmedAnimations() { - return unarmedAnimations; - } - - public void setUnarmedAnimations(String[] unarmedAnimations) { - this.unarmedAnimations = unarmedAnimations; - } - - public String[] getPistolAnimations() { - return pistolAnimations; - } - - public void setPistolAnimations(String[] pistolAnimations) { - this.pistolAnimations = pistolAnimations; - } - - public String[] getCarbineAnimations() { - return carbineAnimations; - } - - public void setCarbineAnimations(String[] carbineAnimations) { - this.carbineAnimations = carbineAnimations; - } - - public String[] getLightRifleAnimations() { - return lightRifleAnimations; - } - - public void setLightRifleAnimations(String[] lightRifleAnimations) { - this.lightRifleAnimations = lightRifleAnimations; - } - - public String[] getRifleAnimations() { - return rifleAnimations; - } - - public void setRifleAnimations(String[] rifleAnimations) { - this.rifleAnimations = rifleAnimations; - } - - public String[] getHeavyWpnAnimations() { - return heavyWpnAnimations; - } - - public void setHeavyWpnAnimations(String[] heavyWpnAnimations) { - this.heavyWpnAnimations = heavyWpnAnimations; - } - - public String[] getOneHandedLSAnimations() { - return oneHandedLSAnimations; - } - - public void setOneHandedLSAnimations(String[] oneHandedLSAnimations) { - this.oneHandedLSAnimations = oneHandedLSAnimations; - } - - public String[] getTwoHandedLSAnimations() { - return twoHandedLSAnimations; - } - - public void setTwoHandedLSAnimations(String[] twoHandedLSAnimations) { - this.twoHandedLSAnimations = twoHandedLSAnimations; - } - - public String[] getPolearmLSAnimations() { - return polearmLSAnimations; - } - - public void setPolearmLSAnimations(String[] polearmLSAnimations) { - this.polearmLSAnimations = polearmLSAnimations; - } - - public String[] getThrownAnimations() { - return thrownAnimations; - } - - public void setThrownAnimations(String[] thrownAnimations) { - this.thrownAnimations = thrownAnimations; - } - + public byte getValidTargetType() { return validTargetType; } @@ -550,64 +417,7 @@ public class CombatCommand extends BaseSWGCommand { public void setHitSpam(byte hitSpam) { this.hitSpam = hitSpam; } - - public String getRandomAnimation(WeaponObject weapon) { - - int weaponType = weapon.getWeaponType(); - String[] animations; - - switch(weaponType) { - - case 0: - animations = rifleAnimations; - break; - case 1: - animations = carbineAnimations; - break; - case 2: - animations = pistolAnimations; - break; - case 3: - animations = heavyWpnAnimations; - break; - case 4: - animations = oneHandedAnimations; - break; - case 5: - animations = twoHandedAnimations; - break; - case 6: - animations = defaultAnimations; - break; - case 7: - animations = polearmAnimations; - break; - case 8: - animations = thrownAnimations; - break; - case 9: - animations = oneHandedLSAnimations; - break; - case 10: - animations = twoHandedLSAnimations; - break; - case 11: - animations = polearmLSAnimations; - break; - - default: - animations = defaultAnimations; - break; - - } - - if(animations.length == 0) - animations = defaultAnimations; - - return animations[new Random().nextInt(animations.length)]; - - } - + public String getDelayAttackEggTemplate() { return delayAttackEggTemplate; } diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index efb0fd84..ad76e992 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -27,7 +27,6 @@ import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import main.NGECore; @@ -43,7 +42,6 @@ import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.*; -import resources.datatables.StateStatus; import protocol.swg.ObjControllerMessage; import protocol.swg.objectControllerObjects.CommandEnqueue; import protocol.swg.objectControllerObjects.CommandEnqueueRemove; @@ -56,6 +54,7 @@ import resources.objects.weapon.WeaponObject; public class CommandService implements INetworkDispatch { private Vector commandLookup = new Vector(); + private ConcurrentHashMap aliases = new ConcurrentHashMap(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private NGECore core; @@ -63,6 +62,10 @@ public class CommandService implements INetworkDispatch { this.core = core; } + public void registerAlias(String name, String target) { + aliases.put(CRC.StringtoCRC(name.toLowerCase()), CRC.StringtoCRC(target.toLowerCase())); + } + public boolean callCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) { if (actor == null) { return false; @@ -109,9 +112,7 @@ public class CommandService implements INetworkDispatch { } switch (command.getTargetType()) { - case 0: // Target Not Used For This Command or Self - target = actor; - + case 0: // Target Not Used For This Command break; case 1: // Other Only if (target == null || target == actor) { @@ -208,26 +209,21 @@ public class CommandService implements INetworkDispatch { } long warmupTime = (long) (command.getWarmupTime() * 1000F); - final CreatureObject actorObject = actor; - final SWGObject targetObject = target; - if (warmupTime != 0) { - scheduler.schedule(new Runnable() { - - @Override - public void run() { - processCommand(actorObject, targetObject, command, actionCounter, commandArgs); - } - - }, warmupTime, TimeUnit.MILLISECONDS); - } else { - processCommand(actor, target, command, actionCounter, commandArgs); + try { + Thread.sleep(warmupTime); + } catch (InterruptedException e) { + e.printStackTrace(); } + processCommand(actor, target, command, actionCounter, commandArgs); + return true; } public void callCommand(SWGObject actor, String commandName, SWGObject target, String commandArgs) { + System.out.println("CommandService: void callCommand(actor, commandName, target, commandArgs): This shouldn't be called anymore."); + if (actor == null) return; @@ -284,15 +280,7 @@ public class CommandService implements INetworkDispatch { sub += 5; } - boolean isCombatCommand = false; - - System.out.println(((String) visitor.getObject(i, 85-sub))); - - if(((String) visitor.getObject(i, 3)).equals("failSpecialAttack") || ((String) visitor.getObject(i, 85-sub)).equals("defaultattack")) - isCombatCommand = true; - - - if (hasCharacterAbility || isCombatCommand) { + if (hasCharacterAbility) { CombatCommand command = new CombatCommand(name.toLowerCase()); commandLookup.add(command); return command; @@ -348,13 +336,7 @@ public class CommandService implements INetworkDispatch { sub += 5; } - boolean isCombatCommand = false; - - if(((String) visitor.getObject(i, 3)).equals("failSpecialAttack") || ((String) visitor.getObject(i, 85-sub)).equals("defaultattack")) - isCombatCommand = true; - - // "isCombatCommand" needs to be changed so that non-combat commands that are flagged to added to a combat queue are not considered combat commands - if (hasCharacterAbility || isCombatCommand) { + if (hasCharacterAbility) { CombatCommand command = new CombatCommand(commandName); commandLookup.add(command); return command; @@ -376,25 +358,21 @@ public class CommandService implements INetworkDispatch { public void processCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) { actor.addCooldown(command.getCooldownGroup(), command.getCooldown()); + if (command instanceof CombatCommand) { processCombatCommand(actor, target, (CombatCommand) command, actionCounter, commandArgs); } else { if (FileUtilities.doesFileExist("scripts/commands/" + command.getCommandName() + ".py")) { core.scriptService.callScript("scripts/commands/", command.getCommandName(), "run", core, actor, target, commandArgs); } + + if (FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) { + core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "run", core, actor, target, commandArgs); + } } } public void processCombatCommand(CreatureObject attacker, SWGObject target, CombatCommand command, int actionCounter, String commandArgs) { - - // Check if the person has access to this ability. - // Abilities (inc expertise ones) are added automatically as they level - // by reading the datatables. - // disabled for now (breaks all combat) - //if (!attacker.hasAbility(command.getCommandName())) { - // return; - //} - if(FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) { core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "setup", core, attacker, target, command); @@ -502,7 +480,6 @@ public class CommandService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - data.order(ByteOrder.LITTLE_ENDIAN); Client client = core.getClient(session); @@ -514,7 +491,13 @@ public class CommandService implements INetworkDispatch { CommandEnqueue commandEnqueue = new CommandEnqueue(); commandEnqueue.deserialize(data); - BaseSWGCommand command = getCommandByCRC(commandEnqueue.getCommandCRC()); + int commandCRC = commandEnqueue.getCommandCRC(); + + if (aliases.containsKey(commandEnqueue.getCommandCRC())) { + commandCRC = aliases.get(commandCRC); + } + + BaseSWGCommand command = getCommandByCRC(commandCRC); if (command == null) { //System.out.println("Unknown Command CRC: " + commandEnqueue.getCommandCRC()); @@ -553,26 +536,8 @@ public class CommandService implements INetworkDispatch { } - public CombatCommand registerCombatCommand(String name) { - BaseSWGCommand command = getCommandByName(name); - - if (command == null) { - return null; - } - - if (command instanceof CombatCommand) { - return (CombatCommand) command; - } else { - System.out.println("Warning: Forced to make non-combat command " + name + " a combat command."); - commandLookup.remove(command); - CombatCommand combatCommand = new CombatCommand(name.toLowerCase()); - commandLookup.add(combatCommand); - return combatCommand; - } - } - + public BaseSWGCommand registerCombatCommand(String name) { return getCommandByName(name); } public BaseSWGCommand registerCommand(String name) { return getCommandByName(name); } public BaseSWGCommand registerGmCommand(String name) { return getCommandByName(name); } - public void registerAlias(String name, String target) { } }