Unified Combat System

This commit is contained in:
2024-03-17 15:56:47 -05:00
parent 836c076884
commit 9d7f2f39fe
10 changed files with 481 additions and 1759 deletions
+15 -22
View File
@@ -16,7 +16,6 @@ import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.mobileAI.Threads.MobAIThread;
import engine.mobileAI.Threads.Respawner;
import engine.mobileAI.utilities.CombatUtilities;
import engine.mobileAI.utilities.MovementUtilities;
import engine.net.DispatchMessage;
import engine.net.client.msg.PerformActionMsg;
@@ -66,7 +65,7 @@ public class MobAI {
}
if (!CombatUtilities.inRangeToAttack(mob, target))
if (mob.getRange() * mob.getRange() < mob.loc.distanceSquared(target.loc))
return;
switch (target.getObjectType()) {
@@ -108,7 +107,7 @@ public class MobAI {
return;
}
if (CombatUtilities.inRange2D(mob, target, mob.getRange())) {
if (mob.getRange() * mob.getRange() >= mob.loc.distanceSquared(target.loc)) {
//no weapons, default mob attack speed 3 seconds.
@@ -126,7 +125,7 @@ public class MobAI {
ItemBase offHand = mob.getWeaponItemBase(false);
if (mainHand == null && offHand == null) {
CombatUtilities.combatCycle(mob, target, true, null);
FinalCombatManager.combatCycle(mob, target);
int delay = 3000;
if (mob.isSiege())
delay = 11000;
@@ -135,13 +134,13 @@ public class MobAI {
int delay = 3000;
if (mob.isSiege())
delay = 11000;
CombatUtilities.combatCycle(mob, target, true, mob.getWeaponItemBase(true));
FinalCombatManager.combatCycle(mob, target);
mob.setLastAttackTime(System.currentTimeMillis() + delay);
} else if (mob.getWeaponItemBase(false) != null) {
int attackDelay = 3000;
if (mob.isSiege())
attackDelay = 11000;
CombatUtilities.combatCycle(mob, target, false, mob.getWeaponItemBase(false));
FinalCombatManager.combatCycle(mob, target);
mob.setLastAttackTime(System.currentTimeMillis() + attackDelay);
}
}
@@ -180,7 +179,7 @@ public class MobAI {
ItemBase offHand = mob.getWeaponItemBase(false);
if (mainHand == null && offHand == null) {
CombatUtilities.combatCycle(mob, target, true, null);
FinalCombatManager.combatCycle(mob, target);
int delay = 3000;
if (mob.isSiege())
delay = 15000;
@@ -189,13 +188,13 @@ public class MobAI {
int attackDelay = 3000;
if (mob.isSiege())
attackDelay = 15000;
CombatUtilities.combatCycle(mob, target, true, mob.getWeaponItemBase(true));
FinalCombatManager.combatCycle(mob, target);
mob.setLastAttackTime(System.currentTimeMillis() + attackDelay);
} else if (mob.getWeaponItemBase(false) != null) {
int attackDelay = 3000;
if (mob.isSiege())
attackDelay = 15000;
CombatUtilities.combatCycle(mob, target, false, mob.getWeaponItemBase(false));
FinalCombatManager.combatCycle(mob, target);
mob.setLastAttackTime(System.currentTimeMillis() + attackDelay);
}
@@ -223,7 +222,7 @@ public class MobAI {
ItemBase offHand = mob.getWeaponItemBase(false);
if (mainHand == null && offHand == null) {
CombatUtilities.combatCycle(mob, target, true, null);
FinalCombatManager.combatCycle(mob, target);
int delay = 3000;
if (mob.isSiege())
delay = 11000;
@@ -232,13 +231,13 @@ public class MobAI {
int attackDelay = 3000;
if (mob.isSiege())
attackDelay = 11000;
CombatUtilities.combatCycle(mob, target, true, mob.getWeaponItemBase(true));
FinalCombatManager.combatCycle(mob, target);
mob.setLastAttackTime(System.currentTimeMillis() + attackDelay);
} else if (mob.getWeaponItemBase(false) != null) {
int attackDelay = 3000;
if (mob.isSiege())
attackDelay = 11000;
CombatUtilities.combatCycle(mob, target, false, mob.getWeaponItemBase(false));
FinalCombatManager.combatCycle(mob, target);
mob.setLastAttackTime(System.currentTimeMillis() + attackDelay);
if (target.getCombatTarget() == null) {
target.setCombatTarget(mob);
@@ -423,15 +422,9 @@ public class MobAI {
if (mob.isPlayerGuard())
powerRank = getGuardPowerRank(mob);
//check for hit-roll
if (mobPower.requiresHitRoll)
if (CombatUtilities.triggerDefense(mob, mob.getCombatTarget()))
return false;
// Cast the spell
if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mobPower.getRange())) {
if (mob.getRange() * mob.getRange() >= mob.loc.distanceSquared(target.loc)) {
PerformActionMsg msg;
@@ -745,7 +738,7 @@ public class MobAI {
//move back to owner
if (CombatUtilities.inRange2D(mob, mob.guardCaptain, 6))
if (mob.getRange() * mob.getRange() >= mob.loc.distanceSquared(mob.guardCaptain.loc))
return;
mob.destination = mob.guardCaptain.getLoc();
@@ -852,7 +845,7 @@ public class MobAI {
try {
if (mob.getCombatTarget() != null && CombatUtilities.inRange2D(mob, mob.getCombatTarget(), MobAIThread.AI_BASE_AGGRO_RANGE * 0.5f))
if (mob.getCombatTarget() != null && mob.getRange() * mob.getRange() >= MobAIThread.AI_BASE_AGGRO_RANGE * 0.5f)
return;
if (mob.isPlayerGuard() && !mob.despawned) {
@@ -902,7 +895,7 @@ public class MobAI {
mob.getTimestamps().put("lastChase",System.currentTimeMillis());
if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) {
if (mob.getRange() * mob.getRange() <= mob.loc.distanceSquared(mob.combatTarget.loc)) {
if (mob.getRange() > 15) {
mob.destination = mob.getCombatTarget().getLoc();
MovementUtilities.moveToLocation(mob, mob.destination, 0, false);