diff --git a/src/news_gui.cpp b/src/news_gui.cpp --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -761,6 +761,31 @@ CommandCost CmdCustomNewsItem(TileIndex 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) { diff --git a/src/script/api/script_news.hpp b/src/script/api/script_news.hpp --- a/src/script/api/script_news.hpp +++ b/src/script/api/script_news.hpp @@ -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. };