From: Markus Armbruster Date: Fri, 11 May 2018 16:57:47 +0000 (+0200) Subject: arm: Rework "cannot carry nukes" test for robustness X-Git-Tag: v4.4.1~31 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=c347db0551be0d96f18d245e16e820ad2c87f67f arm: Rework "cannot carry nukes" test for robustness We reject satellites, ABMs, anti-ship missiles, and SAMs. That's enumerating badness. More robust replacement: accept only bomber, tactical, cargo, except for anti-ship missiles. Throw in PLN_LAUNCHED sanity checking while there. Signed-off-by: Markus Armbruster --- diff --git a/src/lib/commands/arm.c b/src/lib/commands/arm.c index d412c642a..4bbfe7420 100644 --- a/src/lib/commands/arm.c +++ b/src/lib/commands/arm.c @@ -30,7 +30,7 @@ * Dave Pare, 1986 * Ken Stevens, 1995 * Steve McClure, 2000 - * Markus Armbruster, 2006-2011 + * Markus Armbruster, 2006-2018 */ #include @@ -61,11 +61,13 @@ arm(void) && relations_with(pl.pln_own, player->cnum) != ALLIED) continue; plc = &plchr[(int)pl.pln_type]; - if ((plc->pl_flags & (P_O | P_N | P_MAR)) - || (plc->pl_flags & (P_M | P_F)) == (P_M | P_F)) { + if (!(plc->pl_flags & (P_B | P_T | P_C)) + || (plc->pl_flags & P_MAR)) { pr("A %s cannot carry nuclear devices!\n", plc->pl_name); return RET_FAIL; } + if (CANT_HAPPEN(pl.pln_flags & PLN_LAUNCHED)) + continue; if (opt_MARKET) { if (ontradingblock(EF_PLANE, &pl)) { pr("You cannot arm %s while it is on the trading block!\n", @@ -145,6 +147,8 @@ disarm(void) continue; if (!getnuke(nuk_on_plane(&pl), &nuke)) continue; + if (CANT_HAPPEN(pl.pln_flags & PLN_LAUNCHED)) + continue; if (opt_MARKET) { if (ontradingblock(EF_PLANE, &pl)) { pr("You cannot disarm %s while it is on the trading block!\n",