Fix load, unload, lload, lunload not to give away civilians

The game generally doesn't let you give away civilians.  But the check
in load_comm_ok() for that compared the sector old owner to the player
instead of the ship's or land unit's owner, which is incorrect for
foreign ships or land units.  Fix that.

Also make fix the message there not to assume that the civilians are
owned by the player.  This can't currently happen, but will when these
commands support use by deities properly.
This commit is contained in:
Markus Armbruster 2009-01-04 11:59:10 +01:00
parent 430ce903d3
commit 92a366ce24

View file

@ -322,13 +322,15 @@ lload(void)
} }
static int static int
load_comm_ok(struct sctstr *sectp, i_type item, int move_amt) load_comm_ok(struct sctstr *sectp, natid unit_own,
i_type item, int move_amt)
{ {
if (!move_amt) if (!move_amt)
return 0; return 0;
if (sectp->sct_oldown != player->cnum && item == I_CIVIL) { if (sectp->sct_oldown != unit_own && item == I_CIVIL) {
pr("%s civilians refuse to %s at %s!\n", pr("%s civilians refuse to %s at %s!\n",
move_amt < 0 ? "Your" : "Foreign", (move_amt < 0 ? unit_own : sectp->sct_oldown) == player->cnum
? "Your" : "Foreign",
move_amt < 0 ? "disembark" : "board", move_amt < 0 ? "disembark" : "board",
xyas(sectp->sct_x, sectp->sct_y, player->cnum)); xyas(sectp->sct_x, sectp->sct_y, player->cnum));
return 0; return 0;
@ -691,7 +693,7 @@ load_comm_ship(struct sctstr *sectp, struct shpstr *sp,
move_amt = sect_amt; move_amt = sect_amt;
if (move_amt < sect_amt - ITEM_MAX) if (move_amt < sect_amt - ITEM_MAX)
move_amt = sect_amt - ITEM_MAX; move_amt = sect_amt - ITEM_MAX;
if (!load_comm_ok(sectp, item, move_amt)) if (!load_comm_ok(sectp, sp->shp_own, item, move_amt))
return RET_OK; return RET_OK;
if (!want_to_abandon(sectp, item, move_amt, 0)) if (!want_to_abandon(sectp, item, move_amt, 0))
return RET_FAIL; return RET_FAIL;
@ -864,7 +866,7 @@ load_comm_land(struct sctstr *sectp, struct lndstr *lp,
move_amt = sect_amt; move_amt = sect_amt;
if (move_amt < sect_amt - ITEM_MAX) if (move_amt < sect_amt - ITEM_MAX)
move_amt = sect_amt - ITEM_MAX; move_amt = sect_amt - ITEM_MAX;
if (!load_comm_ok(sectp, item, move_amt)) if (!load_comm_ok(sectp, lp->lnd_own, item, move_amt))
return RET_OK; return RET_OK;
if (sectp->sct_own != player->cnum && move_amt > 0) { if (sectp->sct_own != player->cnum && move_amt > 0) {
pr("Sector %s is not yours.\n", pr("Sector %s is not yours.\n",