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.
*
* Known contributors to this file:
* Dave Pare, 1986
- * Markus Armbruster, 2004-2011
+ * Markus Armbruster, 2004-2012
*/
#include <config.h>
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 {
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);