Browse Source

Patrol wait determined by MBServerStatics.AI_PATROL_DIVISOR

mob cast chance now determined by MBStatics.AI_POWER_CHANCE

mob cast cooldown now determined by MBServerStatics.AI_POWER_DIVISOR

guards use normal mob damage calculations
master
FatBoy-DOTC 1 year ago
parent
commit
3e659d981a
  1. 14
      src/engine/ai/MobileFSM.java
  2. 3
      src/engine/ai/utilities/CombatUtilities.java
  3. 4
      src/engine/objects/Mob.java
  4. 1
      src/engine/server/MBServerStatics.java

14
src/engine/ai/MobileFSM.java

@ -180,9 +180,7 @@ public class MobileFSM {
mob.stopPatrolTime = System.currentTimeMillis(); mob.stopPatrolTime = System.currentTimeMillis();
return; return;
} }
//wait between 10 and 15 seconds after reaching patrol point before moving if (mob.stopPatrolTime + (MBServerStatics.AI_PATROL_DIVISOR * 1000) > System.currentTimeMillis())
int patrolDelay = ThreadLocalRandom.current().nextInt(10000) + 5000;
if (mob.stopPatrolTime + patrolDelay > System.currentTimeMillis())
//early exit while waiting to patrol again //early exit while waiting to patrol again
return; return;
//guard captains inherit barracks patrol points dynamically //guard captains inherit barracks patrol points dynamically
@ -226,6 +224,9 @@ public class MobileFSM {
// mobile in the proper state to cast. // mobile in the proper state to cast.
if (mob == null) if (mob == null)
return false; return false;
if(ThreadLocalRandom.current().nextInt(100) > MBServerStatics.AI_POWER_CHANCE){
return false;
}
if (mob.mobPowers.isEmpty()) if (mob.mobPowers.isEmpty())
return false; return false;
if (mob.nextCastTime == 0) if (mob.nextCastTime == 0)
@ -272,12 +273,7 @@ public class MobileFSM {
msg = PowersManager.createPowerMsg(mobPower, powerRank, mob, target); msg = PowersManager.createPowerMsg(mobPower, powerRank, mob, target);
msg.setUnknown04(2); msg.setUnknown04(2);
PowersManager.finishUseMobPower(msg, mob, 0, 0); PowersManager.finishUseMobPower(msg, mob, 0, 0);
// Default minimum seconds between cast = 10 mob.nextCastTime = System.currentTimeMillis() + (MBServerStatics.AI_POWER_DIVISOR * 1000);
long coolDown = mobPower.getCooldown();
if (coolDown < 10000)
mob.nextCastTime = System.currentTimeMillis() + 10000 + coolDown;
else
mob.nextCastTime = System.currentTimeMillis() + coolDown;
return true; return true;
} }
return false; return false;

3
src/engine/ai/utilities/CombatUtilities.java

@ -335,7 +335,8 @@ public class CombatUtilities {
if(agent.isSummonedPet() == true || agent.isPet() == true || agent.isNecroPet() == true) { if(agent.isSummonedPet() == true || agent.isPet() == true || agent.isNecroPet() == true) {
damage = calculatePetDamage(agent); damage = calculatePetDamage(agent);
}else if(agent.isPlayerGuard() == true){ }else if(agent.isPlayerGuard() == true){
damage = calculateGuardDamage(agent); //damage = calculateGuardDamage(agent);
damage = calculateMobDamage(agent);
}else if (agent.getLevel() > 80) { }else if (agent.getLevel() > 80) {
damage = calculateEpicDamage(agent); damage = calculateEpicDamage(agent);
} else{ } else{

4
src/engine/objects/Mob.java

@ -1392,7 +1392,11 @@ public class Mob extends AbstractIntelligenceAgent {
NPCManager.applyRuneSetEffects(this); NPCManager.applyRuneSetEffects(this);
this.recalculateStats(); this.recalculateStats();
this.setHealth(this.healthMax); this.setHealth(this.healthMax);
if(this.building == null && ((Mob)this.npcOwner).BehaviourType.ordinal() == MobBehaviourType.GuardCaptain.ordinal()){
this.building = ((Mob)this.npcOwner).building;
} else {
this.region = BuildingManager.GetRegion(this.building, bindLoc.x, bindLoc.y, bindLoc.z); this.region = BuildingManager.GetRegion(this.building, bindLoc.x, bindLoc.y, bindLoc.z);
}
MovementManager.translocate(this,this.bindLoc, this.region); MovementManager.translocate(this,this.bindLoc, this.region);
if (!this.isSiege && !this.isPlayerGuard && contract == null) if (!this.isSiege && !this.isPlayerGuard && contract == null)
loadInventory(); loadInventory();

1
src/engine/server/MBServerStatics.java

@ -655,6 +655,7 @@ public class MBServerStatics {
public static int AI_POWER_DIVISOR = 20; public static int AI_POWER_DIVISOR = 20;
public static int AI_PET_HEEL_DISTANCE = 10; public static int AI_PET_HEEL_DISTANCE = 10;
public static int AI_PATROL_RADIUS = 60; public static int AI_PATROL_RADIUS = 60;
public static int AI_POWER_CHANCE = 30; // set 1 -100 to determine mobs chance to cast a spell
public static float AI_MAX_ANGLE = 10f; public static float AI_MAX_ANGLE = 10f;

Loading…
Cancel
Save