///
///
module AIRules {
export var standUp = new Rule({
name: "Stand if down",
firstPriority : AIRules.PRIORITY_ACTING_ON_SITUATION,
priority : AIRules.PRIORITY_ACTING_ON_SITUATION,
conditions : (runner : RulebookRunner) => {
let person = runner.noun;
return (person.stance != PersonStance.STANDING)
},
code : (runner : RulebookRunner) => {
return new ActionStand(runner.noun);
}
});
AI.combatRules.addRule(standUp);
AI.rules.addRule(standUp);
export var Hunt = AI.rules.createAndAddRule({
name: "Follow based on grudge",
firstPriority: AIRules.PRIORITY_ACTING_ON_SITUATION,
priority: AIRules.PRIORITY_ACTING_ON_IDLE,
code: (runner: RulebookRunner) => {
let person = runner.noun;
let hostiles = [...runner.noun.AI.hostileTargets].sort((a, b) => {
return person.AI.getHostilityTo(b) - person.AI.getHostilityTo(a);
});
for (let i = 0; i < hostiles.length; i++) {
if (ActionFollow.isCloseEnough(person, hostiles[i])) {
return new ActionFollow(person, hostiles[i]);
}
}
},
conditions: (runner: RulebookRunner) => {
return runner.noun.AI.hostileTargets.length > 0;
}
});
export var rngHit = AI.rules.createAndAddRule({
name: "Hit someone else RNGly",
firstPriority: AIRules.PRIORITY_ACTING_ON_IDLE,
priority: AIRules.PRIORITY_ACTING_ON_SITUATION,
code: (runner: RulebookRunner) => {
for (let i = 0; i < runner.noun.AI.newNoticed.length; i++) {
if (runner.noun.AI.newNoticed[i] instanceof Person && runner.noun.AI.newNoticed[i] != WorldState.player) {
return new ActionAttack(runner.noun, runner.noun.AI.newNoticed[i]);
}
}
},
conditions: (runner: RulebookRunner) => {
return (Math.random() * 100) >= 50;
}
});
}