fix #K3496 - leash description when pet changes

If persistent inventory is displayed and contains an entry for a leash
attached to a pet and the pet's type or name changes, the perm_invent
window didn't get updated to reflect the new leash information:
 x - leash (attached to <mon>)
Report was for polymorph but applied to growing into bigger form and
to being (re-/un-)christened as well.
This commit is contained in:
PatR
2021-12-19 09:30:07 -08:00
parent 5f98102e73
commit 7ccc195155
4 changed files with 18 additions and 2 deletions

View File

@@ -714,6 +714,9 @@ for accessibility reasons, give a message when monster teleports
if a gremlin stole intrinsic 'see invisible' the map wasn't updated properly
mark some messages as urgent ("You die*.", having equipment stolen, being
caught in a magical explosion)
if a leashed pet changed name (#name m) or an unnamed pet changed type
(polymorph or grow-up) and perm_invent was On, persistent inventory
display didn't get updated to show the leash's changed information
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -1107,6 +1107,9 @@ christen_monst(struct monst *mtmp, const char *name)
new_mgivenname(mtmp, lth); /* removes old name if one is present */
if (lth)
Strcpy(MGIVENNAME(mtmp), name);
/* if 'mtmp' is leashed, persistent inventory window needs updating */
if (mtmp->mleashed)
update_inventory(); /* x - leash (attached to Fido) */
return mtmp;
}

View File

@@ -1914,6 +1914,9 @@ grow_up(struct monst *mtmp, struct monst *victim)
lev_limit = (int) mtmp->m_lev; /* never undo increment */
mtmp->female = fem; /* gender might be changing */
/* if 'mtmp' is leashed, persistent inventory window needs updating */
if (mtmp->mleashed)
update_inventory(); /* x - leash (attached to a <mon> */
}
/* sanity checks */

View File

@@ -4345,8 +4345,15 @@ newcham(
/* take on the new form... */
set_mon_data(mtmp, mdat);
if (mtmp->mleashed && !leashable(mtmp))
m_unleash(mtmp, TRUE);
if (mtmp->mleashed) {
if (!leashable(mtmp))
m_unleash(mtmp, TRUE);
else
/* if leashed, persistent inventory window needs updating
(really only when mon_nam() is going to yield "a frog"
rather than "Kermit" but no need to micromanage here) */
update_inventory(); /* x - leash (attached to a <mon>) */
}
if (emits_light(olddata) != emits_light(mtmp->data)) {
/* used to give light, now doesn't, or vice versa,