mplayer creation bestowing 0 gold pieces

Reported directly to devteam:  a fake player monster was petrified
and when creating its statue yielded "Calculating weight of 0 gold
pieces?".

Fake player monsters on the Astral Plane level were being created
with rn2(1000) gold pieces so had a 1 in 1000 chance of that being 0.
Gold gets created with a non-zero amount but the routine that gives
it to a monster sets the amount to the requested value.  That didn't
update the weight so didn't notice the 0.  Putting it into a container
(the statue) did recalculate the weight and did notice.

There was a choice between forcing a non-zero amount or allowing 0
and bypassing its creation and placement in monster's inventory.
I went with the latter.
This commit is contained in:
PatR
2023-04-29 05:30:14 -07:00
parent f9a35132d6
commit 70949a787e
2 changed files with 11 additions and 6 deletions

View File

@@ -1156,6 +1156,9 @@ wearing the Eyes of the Overworld overrides OPTIONS:blind; breaking the
blindness stay cured after removing them was not
change helm of brilliance from iron to crystal so that it no longer needs to
be a special case for metallic armor vs spell casting
fake player monsters in endgame had a 1 in 1000 chance to be given a stack
of 0 gold pieces, eventually triggering an impossible warning (cited
one was "Calculating weight of 0 gold pieces?")
Fixes to 3.7.0-x General Problems Exposed Via git Repository

View File

@@ -558,16 +558,18 @@ m_initweap(register struct monst *mtmp)
(void) mongets(mtmp, rnd_offensive_item(mtmp));
}
/*
* Makes up money for monster's inventory.
*/
/* create a new stack of gold in monster's inventory */
void
mkmonmoney(struct monst *mtmp, long amount)
{
struct obj *gold = mksobj(GOLD_PIECE, FALSE, FALSE);
/* mk_mplayer() passes rn2(1000) so the amount might be 0 */
if (amount > 0L) {
struct obj *gold = mksobj(GOLD_PIECE, FALSE, FALSE);
gold->quan = amount;
add_to_minv(mtmp, gold);
gold->quan = amount;
gold->owt = weight(gold);
add_to_minv(mtmp, gold);
}
}
static void