(svn r22629) -Fix [FS#4599]: Remove all usages of the ErrorRefStack. It was continuously overwritten by e.g. industry prospection without closing the old error window; also StopTextRefStackUsage() was not called for errors returned by commands (which caused FS#4599). Now return in the CommandCost result whether the textref stack needs to be used, and store a copy of the stack values in the error window just like for the normal string parameters.

This commit is contained in:
frosch
2011-07-03 14:32:15 +00:00
parent 2158f4f1bf
commit 2a55273291
6 changed files with 93 additions and 37 deletions

View File

@@ -549,18 +549,18 @@ CommandCost CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, uin
uint16 result = group->GetCallbackResult();
if (result == 0x400 || result == CALLBACK_FAILED) return CommandCost();
/* Copy some parameters from the registers to the error message text ref. stack */
SwitchToErrorRefStack();
StartTextRefStackUsage(4);
SwitchToNormalRefStack();
CommandCost res;
switch (result) {
case 0x401: return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
case 0x402: return_cmd_error(STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST);
case 0x403: return_cmd_error(STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT);
default: return_cmd_error(GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + result));
case 0x401: res = CommandCost(STR_ERROR_SITE_UNSUITABLE);
case 0x402: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST);
case 0x403: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT);
default: res = CommandCost(GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + result));
}
NOT_REACHED();
/* Copy some parameters from the registers to the error message text ref. stack */
res.UseTextRefStack(4);
return res;
}
/**