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:
parent
430ce903d3
commit
92a366ce24
1 changed files with 7 additions and 5 deletions
|
@ -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",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue