mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-16 00:12:51 +00:00
(svn r15084) -Fix [NoAI] (r15027): by removing the threads for NoAIs, it is no longer possible to use DoCommand (even indirect) in AIAbstractList::Valuator().
This commit is contained in:
parent
a45b3c4304
commit
61093eb211
@ -756,6 +756,10 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm) {
|
||||
return sq_throwerror(vm, _SC("parameter 2 has an invalid type (expected function)"));
|
||||
}
|
||||
|
||||
/* Don't allow docommand from a Valuator, as we can't resume in
|
||||
* mid-code */
|
||||
AIObject::SetAllowDoCommand(false);
|
||||
|
||||
sq_addref(vm, &obj_func);
|
||||
|
||||
/* Read the params */
|
||||
@ -782,7 +786,10 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm) {
|
||||
}
|
||||
|
||||
/* Call the function */
|
||||
if (SQ_FAILED(sq_call(vm, nparam + 2, SQTrue, SQTrue))) return SQ_ERROR;
|
||||
if (SQ_FAILED(sq_call(vm, nparam + 2, SQTrue, SQTrue))) {
|
||||
AIObject::SetAllowDoCommand(true);
|
||||
return SQ_ERROR;
|
||||
}
|
||||
|
||||
/* Retreive the return value */
|
||||
SQInteger value;
|
||||
@ -802,6 +809,7 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm) {
|
||||
sq_release(vm, &obj_func);
|
||||
for (int i = 0; i < nparam; i++) sq_release(vm, &obj_params[i]);
|
||||
|
||||
AIObject::SetAllowDoCommand(true);
|
||||
return sq_throwerror(vm, _SC("return value of valuator is not valid (not integer/bool)"));
|
||||
}
|
||||
}
|
||||
@ -814,5 +822,7 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm) {
|
||||
|
||||
sq_release(vm, &obj_func);
|
||||
for (int i = 0; i < nparam; i++) sq_release(vm, &obj_params[i]);
|
||||
|
||||
AIObject::SetAllowDoCommand(true);
|
||||
return 0;
|
||||
}
|
||||
|
@ -198,7 +198,7 @@ int AIObject::GetCallbackVariable(int index)
|
||||
bool AIObject::DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint cmd, const char *text, AISuspendCallbackProc *callback)
|
||||
{
|
||||
if (AIObject::GetAllowDoCommand() == false) {
|
||||
AILog::Error("You are not allowed to execute any DoCommand (even indirect) in your constructor, Save(), and Load().\n");
|
||||
AILog::Error("You are not allowed to execute any DoCommand (even indirect) in your constructor, Save(), Load(), and any valuator.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user