Changeset - r17364:eb97848263b6
[Not reviewed]
master
0 2 0
rubidium - 13 years ago 2011-02-20 20:28:49
rubidium@openttd.org
(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".
2 files changed with 14 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/script/squirrel.cpp
Show inline comments
 
@@ -188,7 +188,19 @@ bool Squirrel::MethodExists(HSQOBJECT in
 
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);
src/script/squirrel.hpp
Show inline comments
 
@@ -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.
0 comments (0 inline, 0 general)