(svn r23924) -Fix [FS#5054]: [NoGo] "Some" news messages would cause an assertion to be triggered due to a missing proper location for the viewport of the news message, so only allow building when valid data for the viewport is provided or no viewport is used

This commit is contained in:
rubidium 2012-02-11 19:42:33 +00:00
parent 445d12b6e5
commit 5417153982
2 changed files with 26 additions and 16 deletions

View File

@ -761,6 +761,31 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
default: return CMD_ERROR;
}
const WindowDesc *desc = _news_subtype_data[subtype].desc;
for (int i = 0; i < desc->nwid_length; i++) {
if (desc->nwid_parts[i].type == NWID_VIEWPORT && reftype1 != NR_VEHICLE && GetReferenceTile(reftype1, p2) == INVALID_TILE) {
return CMD_ERROR;
}
}
switch (subtype) {
/* These sub types require more parameters that are never passed. */
case NS_COMPANY_TROUBLE:
case NS_COMPANY_MERGER:
case NS_COMPANY_BANKRUPT:
case NS_COMPANY_NEW:
return CMD_ERROR;
/* This one only accepts engines. */
case NS_NEW_VEHICLES:
if (reftype1 != NR_ENGINE) return CMD_ERROR;
break;
/* The rest, in theory, accepts everything. */
default:
break;
}
if (company != INVALID_OWNER && company != _local_company) return CommandCost();
if (flags & DC_EXEC) {

View File

@ -22,26 +22,11 @@
class ScriptNews : public ScriptObject {
public:
/**
* Enumeration for corners of tiles.
* Enumeration for the news types that a script can create news for.
*/
enum NewsType {
/* Note: these values represent part of the in-game NewsSubtype enum */
NT_ARRIVAL_COMPANY = ::NS_ARRIVAL_COMPANY, ///< Category arrival for own company.
NT_ARRIVAL_OTHER = ::NS_ARRIVAL_OTHER, ///< Category arrival for other companies.
NT_ACCIDENT = ::NS_ACCIDENT, ///< Category accident.
NT_COMPANY_TROUBLE = ::NS_COMPANY_TROUBLE, ///< Category company in trouble.
NT_COMPANY_MERGER = ::NS_COMPANY_MERGER, ///< Category company merger.
NT_COMPANY_BANKRUPT = ::NS_COMPANY_BANKRUPT, ///< Category company bankrupt.
NT_COMPANY_NEW = ::NS_COMPANY_NEW, ///< Category company new.
NT_INDUSTRY_OPEN = ::NS_INDUSTRY_OPEN, ///< Category industry open.
NT_INDUSTRY_CLOSE = ::NS_INDUSTRY_CLOSE, ///< Category industry close.
NT_ECONOMY = ::NS_ECONOMY, ///< Category economy.
NT_INDUSTRY_COMPANY = ::NS_INDUSTRY_COMPANY, ///< Category industry changes for own company.
NT_INDUSTRY_OTHER = ::NS_INDUSTRY_OTHER, ///< Category industry changes for other companies.
NT_INDUSTRY_NOBODY = ::NS_INDUSTRY_NOBODY, ///< Category industry changes for nobody.
NT_ADVICE = ::NS_ADVICE, ///< Category advice.
NT_NEW_VEHICLES = ::NS_NEW_VEHICLES, ///< Category new vehicle.
NT_ACCEPTANCE = ::NS_ACCEPTANCE, ///< Category acceptance changes.
NT_SUBSIDIES = ::NS_SUBSIDIES, ///< Category subsidies.
NT_GENERAL = ::NS_GENERAL, ///< Category general.
};