From: Markus Armbruster Date: Sat, 16 Jul 2011 11:06:17 +0000 (+0200) Subject: Don't let POGO (#0) navigate and march ghosts X-Git-Tag: v4.3.28~2 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=617cb41f66e65966e66743c11e7a64465eefa235 Don't let POGO (#0) navigate and march ghosts POGO can navigate dead ships, and march dead land units. The ghosts even get sighted and interdicted, and can hit mines (landmines only until commit fe372539, v4.3.27). Noted for ships in commit 9100af0b. Has always been broken. Fix by making shp_sel() and lnd_sel() explicitly reject ghosts. Same code pattern also exists in pln_sel, but dead plains fail the efficiency test, so it's harmless there. Apply the same fix anyway. --- diff --git a/src/lib/subs/lndsub.c b/src/lib/subs/lndsub.c index b3483b79b..30630a708 100644 --- a/src/lib/subs/lndsub.c +++ b/src/lib/subs/lndsub.c @@ -412,7 +412,7 @@ lnd_sel(struct nstr_item *ni, struct emp_qelem *list) * but much of the code assumes that only the land unit's * owner can march it. */ - if (land.lnd_own != player->cnum) + if (!land.lnd_own || land.lnd_own != player->cnum) continue; if (opt_MARKET) { if (ontradingblock(EF_LAND, &land)) { diff --git a/src/lib/subs/plnsub.c b/src/lib/subs/plnsub.c index c0e0816ee..a167f636f 100644 --- a/src/lib/subs/plnsub.c +++ b/src/lib/subs/plnsub.c @@ -538,7 +538,7 @@ pln_sel(struct nstr_item *ni, struct emp_qelem *list, struct sctstr *ap, * much of the code assumes that only the plane's owner can * fly it. */ - if (plane.pln_own != player->cnum) + if (!plane.pln_own || plane.pln_own != player->cnum) continue; if (plane.pln_mobil <= 0) continue; diff --git a/src/lib/subs/shpsub.c b/src/lib/subs/shpsub.c index 05d2112d0..3a45c7254 100644 --- a/src/lib/subs/shpsub.c +++ b/src/lib/subs/shpsub.c @@ -70,7 +70,7 @@ shp_sel(struct nstr_item *ni, struct emp_qelem *list) * much of the code assumes that only the ship's owner can * navigate it. */ - if (ship.shp_own != player->cnum) + if (!ship.shp_own || ship.shp_own != player->cnum) continue; mcp = &mchr[(int)ship.shp_type]; if (opt_MARKET) {