diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 1a0ab123..9c9beb67 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -61,7 +61,7 @@ public class BuffService implements INetworkDispatch { public void addBuffToCreature(final CreatureObject creature, String buffName) { if(!FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) { - System.out.println("Buff script doesnt exist for: " + buffName); + //System.out.println("Buff script doesnt exist for: " + buffName); return; } diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index e06ee51a..1eee2b75 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -686,7 +686,7 @@ public class SimulationService implements INetworkDispatch { for(Mesh3DTriangle tri : tris) { if(ray.intersectsTriangle(tri, distance) != null) { - System.out.println("Collided with " + object.getTemplate() + " X: " + object.getPosition().x + " Y: " + object.getPosition().y + " Z: " + object.getPosition().z); + // System.out.println("Collided with " + object.getTemplate() + " X: " + object.getPosition().x + " Y: " + object.getPosition().y + " Z: " + object.getPosition().z); return false; } @@ -767,7 +767,7 @@ public class SimulationService implements INetworkDispatch { for(Mesh3DTriangle tri : tris) { if(ray.intersectsTriangle(tri, distance) != null) { - System.out.println("Collision with: " + cell.name); + // System.out.println("Collision with: " + cell.name); return false; } diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 75072fff..e1e0bbf1 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayClientEffectLocMessage; @@ -76,12 +77,21 @@ public class CombatService implements INetworkDispatch { public void doCombat(final CreatureObject attacker, final TangibleObject target, final WeaponObject weapon, final CombatCommand command, final int actionCounter) { + boolean success = true; if(!applySpecialCost(attacker, weapon, command)) - return; + success = false; if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptCombat(attacker, target)) - return; + success = false; + + if(!success) { + IoSession session = attacker.getClient().getSession(); + CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectId(), actionCounter); + session.write(new ObjControllerMessage(0x0B, commandRemove).serialize()); + StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), -1); + session.write(new ObjControllerMessage(0x0B, startTask).serialize()); + } /* // use preRun for delayed effects like officer orbital strike, grenades etc. if(FileUtilities.doesFileExist("scripts/commands/combat" + command.getCommandName() + ".py")) @@ -744,11 +754,24 @@ public class CombatService implements INetworkDispatch { public void doHeal(CreatureObject healer, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { + boolean success = true; + if(!applySpecialCost(healer, weapon, command)) - return; + success = false; if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptHeal(healer, target)) - return; + success = false; + + if(command.getAttackType() == 1 && target.getMaxHealth() == target.getHealth()) + success = false; + + if(!success) { + IoSession session = healer.getClient().getSession(); + CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(healer.getObjectId(), actionCounter); + session.write(new ObjControllerMessage(0x0B, commandRemove).serialize()); + StartTask startTask = new StartTask(actionCounter, healer.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), -1); + session.write(new ObjControllerMessage(0x0B, startTask).serialize()); + } if(command.getAttackType() == 1) doSingleTargetHeal(healer, target, weapon, command, actionCounter); diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index 82f5b3f1..e9fe85c1 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -205,12 +205,11 @@ public class CommandService implements INetworkDispatch { } if(!success) { + IoSession session = attacker.getClient().getSession(); CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectId(), actionCounter); - ObjControllerMessage objController = new ObjControllerMessage(0x0B, commandRemove); - attacker.getClient().getSession().write(objController.serialize()); + session.write(new ObjControllerMessage(0x0B, commandRemove).serialize()); StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), -1); - ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); - attacker.getClient().getSession().write(objController2.serialize()); + session.write(new ObjControllerMessage(0x0B, startTask).serialize()); } else { if(command.getHitType() == 5) {