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
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
@@ -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);
|
||||||
this.region = BuildingManager.GetRegion(this.building, bindLoc.x, bindLoc.y, bindLoc.z);
|
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);
|
||||||
|
}
|
||||||
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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user