mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-08-26 09:03:43 +02:00
a few protections from infinite loops
This commit is contained in:
parent
ccbaca6ecb
commit
61e1010e49
3 changed files with 29 additions and 2 deletions
|
@ -7,6 +7,8 @@ export class ActionManager {
|
|||
this.timedout = false;
|
||||
this.resume_func = null;
|
||||
this.resume_name = '';
|
||||
this.last_action_time = 0;
|
||||
this.recent_action_counter = 0;
|
||||
}
|
||||
|
||||
async resumeAction(actionFn, timeout) {
|
||||
|
@ -59,6 +61,25 @@ export class ActionManager {
|
|||
async _executeAction(actionLabel, actionFn, timeout = 10) {
|
||||
let TIMEOUT;
|
||||
try {
|
||||
if (this.last_action_time > 0) {
|
||||
let time_diff = Date.now() - this.last_action_time;
|
||||
if (time_diff < 20) {
|
||||
this.recent_action_counter++;
|
||||
}
|
||||
else {
|
||||
this.recent_action_counter = 0;
|
||||
}
|
||||
if (this.recent_action_counter > 2) {
|
||||
console.warn('Fast action loop detected, cancelling resume.');
|
||||
this.cancelResume(); // likely cause of repetition
|
||||
}
|
||||
if (this.recent_action_counter > 5) {
|
||||
console.error('Infinite action loop detected, shutting down.');
|
||||
this.agent.cleanKill('Infinite action loop detected, shutting down.');
|
||||
return { success: false, message: 'Infinite action loop detected, shutting down.', interrupted: false, timedout: false };
|
||||
}
|
||||
}
|
||||
this.last_action_time = Date.now();
|
||||
console.log('executing code...\n');
|
||||
|
||||
// await current action to finish (executing=false), with 10 seconds timeout
|
||||
|
|
|
@ -439,7 +439,11 @@ export class Agent {
|
|||
this.bot.clearControlStates();
|
||||
this.bot.pathfinder.stop(); // clear any lingering pathfinder
|
||||
this.bot.modes.unPauseAll();
|
||||
this.actions.resumeAction();
|
||||
setTimeout(() => {
|
||||
if (this.isIdle()) {
|
||||
this.actions.resumeAction();
|
||||
}
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
// Init NPC controller
|
||||
|
|
|
@ -1084,13 +1084,15 @@ function startDoorInterval(bot) {
|
|||
// shuffle positions so we're not always opening the same door
|
||||
const positions = [
|
||||
bot.entity.position.clone(),
|
||||
bot.entity.position.offset(0, 0, 1), // north
|
||||
bot.entity.position.offset(0, 0, 1),
|
||||
bot.entity.position.offset(0, 0, -1),
|
||||
bot.entity.position.offset(1, 0, 0),
|
||||
bot.entity.position.offset(-1, 0, 0),
|
||||
]
|
||||
let elevated_positions = positions.map(position => position.offset(0, 1, 0));
|
||||
positions.push(...elevated_positions);
|
||||
positions.push(bot.entity.position.offset(0, 2, 0)); // above head
|
||||
positions.push(bot.entity.position.offset(0, -1, 0)); // below feet
|
||||
|
||||
let currentIndex = positions.length;
|
||||
while (currentIndex != 0) {
|
||||
|
|
Loading…
Add table
Reference in a new issue