From 729cf65e1207eed02184a2098e1acef1dc73aaa6 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 23 Jun 2012 21:29:15 +0200 Subject: [PATCH] Don't let fly and drop give away civilians Flying them to a foreign destination magically changes their allegiance. Prohibit that. Equivalent change was already in commit 35887222 (v4.2.17) but got reverted immediately (commit 20199b22), because fly and drop should stay consistent with load, which let you give away civilians then. No more since commit 92a366ce (v4.3.20). This change makes fly and drop consistent with load again. --- src/lib/commands/drop.c | 14 ++++++++++---- src/lib/commands/fly.c | 15 ++++++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/lib/commands/drop.c b/src/lib/commands/drop.c index 9441fdfa..330f9cd4 100644 --- a/src/lib/commands/drop.c +++ b/src/lib/commands/drop.c @@ -28,7 +28,7 @@ * * Known contributors to this file: * Dave Pare, 1986 - * Markus Armbruster, 2004-2011 + * Markus Armbruster, 2004-2012 */ #include @@ -74,9 +74,15 @@ drop(void) if (relations_with(target.sct_own, player->cnum) == ALLIED) { /* own or allied sector: cargo drop */ - if (ip->i_uid == I_CIVIL && target.sct_own != target.sct_oldown) { - pr("Can't drop civilians into occupied sectors.\n"); - return RET_FAIL; + if (ip->i_uid == I_CIVIL) { + if (target.sct_own != player->cnum) { + pr("Your civilians refuse to board a flight abroad!\n"); + return RET_FAIL; + } + if (target.sct_own != target.sct_oldown) { + pr("Can't drop civilians into occupied sectors.\n"); + return RET_FAIL; + } } wantflags = P_C; } else { diff --git a/src/lib/commands/fly.c b/src/lib/commands/fly.c index f3d723b0..f861b331 100644 --- a/src/lib/commands/fly.c +++ b/src/lib/commands/fly.c @@ -80,11 +80,16 @@ fly(void) return RET_SYN; cno = target.gen.ef_type == EF_SHIP ? target.gen.uid : -1; - if (ip && ip->i_uid == I_CIVIL - && target.gen.ef_type == EF_SECTOR - && target.sect.sct_own != target.sect.sct_oldown) { - pr("Can't fly civilians into occupied sectors.\n"); - return RET_FAIL; + if (ip && ip->i_uid == I_CIVIL) { + if (target.gen.own != player->cnum) { + pr("Your civilians refuse to board a flight abroad!\n"); + return RET_FAIL; + } + if (target.gen.ef_type == EF_SECTOR + && target.sect.sct_own != target.sect.sct_oldown) { + pr("Can't fly civilians into occupied sectors.\n"); + return RET_FAIL; + } } ap_to_target = strlen(flightpath);