mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-06-22 21:19:27 +01:00
(svn r22120) -Change: [NoAI] Prevent AIs from getting consistently over their allowed amount of operations by subtracting the amount they went over "budget" from the budget for the next "tick".
This commit is contained in:
parent
7d24d642d9
commit
e9fe58d7bf
@ -188,7 +188,19 @@ bool Squirrel::MethodExists(HSQOBJECT instance, const char *method_name)
|
||||
bool Squirrel::Resume(int suspend)
|
||||
{
|
||||
assert(!this->crashed);
|
||||
/* Did we use more operations than we should have in the
|
||||
* previous tick? If so, subtract that from the current run. */
|
||||
if (this->overdrawn_ops > 0 && suspend > 0) {
|
||||
this->overdrawn_ops -= suspend;
|
||||
/* Do we need to wait even more? */
|
||||
if (this->overdrawn_ops >= 0) return true;
|
||||
|
||||
/* We can now only run whatever is "left". */
|
||||
suspend = -this->overdrawn_ops;
|
||||
}
|
||||
|
||||
this->crashed = !sq_resumecatch(this->vm, suspend);
|
||||
this->overdrawn_ops = -this->vm->_ops_till_suspend;
|
||||
return this->vm->_suspended != 0;
|
||||
}
|
||||
|
||||
@ -310,6 +322,7 @@ Squirrel::Squirrel()
|
||||
this->print_func = NULL;
|
||||
this->global_pointer = NULL;
|
||||
this->crashed = false;
|
||||
this->overdrawn_ops = 0;
|
||||
|
||||
/* Handle compile-errors ourself, so we can display it nicely */
|
||||
sq_setcompilererrorhandler(this->vm, &Squirrel::CompileError);
|
||||
|
@ -22,6 +22,7 @@ private:
|
||||
void *global_pointer; ///< Can be set by who ever initializes Squirrel
|
||||
SQPrintFunc *print_func; ///< Points to either NULL, or a custom print handler
|
||||
bool crashed; ///< True if the squirrel script made an error.
|
||||
int overdrawn_ops; ///< The amount of operations we have overdrawn.
|
||||
|
||||
/**
|
||||
* The internal RunError handler. It looks up the real error and calls RunError with it.
|
||||
|
Loading…
Reference in New Issue
Block a user