attack delay catching

This commit is contained in:
2024-06-03 21:35:37 -05:00
parent d9ab1032f4
commit 9a9ea99bc7
4 changed files with 43 additions and 37 deletions
+13 -31
View File
@@ -47,7 +47,7 @@ public enum CombatManager {
public static final int COMBAT_PARRY_ANIMATION = 299;
public static final int COMBAT_DODGE_ANIMATION = 300;
public static void combatCycle(AbstractCharacter attacker, AbstractWorldObject target) {
public static void combatCycle(AbstractCharacter attacker, AbstractWorldObject target, long addedDelay) {
//early exit checks
@@ -78,45 +78,45 @@ public enum CombatManager {
if (mainWeapon == null && offWeapon == null) {
//no weapons equipped, punch with both fists
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD,addedDelay);
if (attacker.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))
processAttack(attacker, target, mbEnums.EquipSlotType.LHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.LHELD,addedDelay);
return;
}
if (mainWeapon != null && offWeapon == null) {
//swing right hand only
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD,addedDelay);
return;
}
if (mainWeapon == null && offWeapon != null && !offWeapon.template.item_skill_used.equals("Block")) {
//swing left hand only
processAttack(attacker, target, mbEnums.EquipSlotType.LHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.LHELD,addedDelay);
return;
}
if (mainWeapon == null && offWeapon != null && offWeapon.template.item_skill_used.equals("Block")) {
//no weapon equipped with a shield, punch with one hand
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD,addedDelay);
return;
}
if (mainWeapon != null && offWeapon != null && offWeapon.template.item_skill_used.equals("Block")) {
//one weapon equipped with a shield, swing with one hand
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD,addedDelay);
return;
}
if (mainWeapon != null && offWeapon != null && !offWeapon.template.item_skill_used.equals("Block")) {
//two weapons equipped, swing both hands
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.RHELD,addedDelay);
if (attacker.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))
processAttack(attacker, target, mbEnums.EquipSlotType.LHELD);
processAttack(attacker, target, mbEnums.EquipSlotType.LHELD,addedDelay);
}
}
public static void processAttack(AbstractCharacter attacker, AbstractWorldObject target, mbEnums.EquipSlotType slot) {
public static void processAttack(AbstractCharacter attacker, AbstractWorldObject target, mbEnums.EquipSlotType slot, long addedDelay) {
if (slot == null || target == null || attacker == null)
return;
@@ -126,24 +126,6 @@ public enum CombatManager {
return;
}
long delay = 0L;
if(attacker.getTimestamps().containsKey("Attack" + slot)){
if(attacker.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter)){
if(slot.equals(mbEnums.EquipSlotType.RHELD)){
delay = (long)(attacker.speedHandOne * 100L);
}else{
delay = (long)(attacker.speedHandTwo * 100L);
}
}
if(System.currentTimeMillis() < attacker.getTimestamps().get("Attack" + slot)){
return;
}
}
attacker.getTimestamps().put("Attack" + slot, System.currentTimeMillis() + delay - 500L);
target.combatLock.writeLock().lock();
// check if character is in range to attack target
@@ -212,7 +194,7 @@ public enum CombatManager {
}
//get delay for the auto attack job
delay = 5000;
long delay = 5000;
//if (weapon != null) {
@@ -248,7 +230,7 @@ public enum CombatManager {
if (((AbstractCharacter) target).combatTarget == null || !((AbstractCharacter) target).combatTarget.isAlive()) {
((AbstractCharacter) target).combatTarget = attacker;
if (target.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter) && ((AbstractCharacter) target).isCombat())
combatCycle((AbstractCharacter) target, attacker);
combatCycle((AbstractCharacter) target, attacker,0);
}
}
@@ -640,7 +622,7 @@ public enum CombatManager {
ConcurrentHashMap<String, JobContainer> timers = attacker.getTimers();
if (timers != null) {
AttackJob aj = new AttackJob(attacker, slot.ordinal(), true);
AttackJob aj = new AttackJob(attacker, slot.ordinal(), true, attacker.getCombatTarget());
JobContainer job;
job = JobScheduler.getInstance().scheduleJob(aj, (System.currentTimeMillis() + delay)); // offset 1 millisecond so no overlap issue
timers.put("Attack" + slot.name(), job);