summaryrefslogtreecommitdiff
path: root/src/news_gui.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2012-02-11 19:42:33 +0000
committerrubidium <rubidium@openttd.org>2012-02-11 19:42:33 +0000
commit5417153982f226247f3f3848bd70594897a834bc (patch)
treee1ce153a9588d122a0aa26d031c81bfc2cbdc824 /src/news_gui.cpp
parent445d12b6e543fe119d863735e3ba75a1c74602db (diff)
downloadopenttd-5417153982f226247f3f3848bd70594897a834bc.tar.xz
(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
Diffstat (limited to 'src/news_gui.cpp')
-rw-r--r--src/news_gui.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 2b4cc1616..47817d77e 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -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) {