leash use vs perm_invent

Noticed while working on Qt's version of persistent inventory
window (paper doll-style display of equipment in use), leashing
or unleashing a pet wasn't updating persistent inventory.  Leash
descriptions format differently when in use so immediate update
is warranted.
This commit is contained in:
PatR
2020-08-10 13:20:24 -07:00
parent 8dca9b4f8a
commit 75fa283fb6
2 changed files with 24 additions and 17 deletions
+2 -1
View File
@@ -1,4 +1,4 @@
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.280 $ $NHDT-Date: 1597069374 2020/08/10 14:22:54 $ NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.281 $ $NHDT-Date: 1597090815 2020/08/10 20:20:15 $
General Fixes and Modified Features General Fixes and Modified Features
----------------------------------- -----------------------------------
@@ -243,6 +243,7 @@ wizard mode #wizintrinsic: setting Levitation wouldn't block Flying as
chatting to the quest leader in wizard mode with sufficient experience level chatting to the quest leader in wizard mode with sufficient experience level
and insufficient piety, player is asked whether alignment should be and insufficient piety, player is asked whether alignment should be
boosted; answering 'n' resulted in being prompted a second time boosted; answering 'n' resulted in being prompted a second time
leashing or unleashing pets wasn't updating persistent inventory window
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
+22 -16
View File
@@ -1,4 +1,4 @@
/* NetHack 3.7 apply.c $NHDT-Date: 1596498148 2020/08/03 23:42:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.326 $ */ /* NetHack 3.7 apply.c $NHDT-Date: 1597090815 2020/08/10 20:20:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.327 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -548,20 +548,23 @@ number_leashed()
/* otmp is about to be destroyed or stolen */ /* otmp is about to be destroyed or stolen */
void void
o_unleash(otmp) o_unleash(otmp)
register struct obj *otmp; struct obj *otmp;
{ {
register struct monst *mtmp; register struct monst *mtmp;
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
if (mtmp->m_id == (unsigned) otmp->leashmon) if (mtmp->m_id == (unsigned) otmp->leashmon) {
mtmp->mleashed = 0; mtmp->mleashed = 0;
otmp->leashmon = 0; otmp->leashmon = 0;
update_inventory();
break;
}
} }
/* mtmp is about to die, or become untame */ /* mtmp is about to die, or become untame */
void void
m_unleash(mtmp, feedback) m_unleash(mtmp, feedback)
register struct monst *mtmp; struct monst *mtmp;
boolean feedback; boolean feedback;
{ {
register struct obj *otmp; register struct obj *otmp;
@@ -573,8 +576,11 @@ boolean feedback;
Your("leash falls slack."); Your("leash falls slack.");
} }
for (otmp = g.invent; otmp; otmp = otmp->nobj) for (otmp = g.invent; otmp; otmp = otmp->nobj)
if (otmp->otyp == LEASH && otmp->leashmon == (int) mtmp->m_id) if (otmp->otyp == LEASH && (unsigned) otmp->leashmon == mtmp->m_id) {
otmp->leashmon = 0; otmp->leashmon = 0;
update_inventory();
break;
}
mtmp->mleashed = 0; mtmp->mleashed = 0;
} }
@@ -686,6 +692,7 @@ struct obj *obj;
mtmp->mleashed = 1; mtmp->mleashed = 1;
obj->leashmon = (int) mtmp->m_id; obj->leashmon = (int) mtmp->m_id;
mtmp->msleeping = 0; mtmp->msleeping = 0;
update_inventory();
} }
} else { } else {
/* applying a leash which is currently in use */ /* applying a leash which is currently in use */
@@ -697,6 +704,7 @@ struct obj *obj;
} else { } else {
mtmp->mleashed = 0; mtmp->mleashed = 0;
obj->leashmon = 0; obj->leashmon = 0;
update_inventory();
You("remove the leash from %s%s.", You("remove the leash from %s%s.",
spotmon ? "your " : "", l_monnam(mtmp)); spotmon ? "your " : "", l_monnam(mtmp));
} }
@@ -711,13 +719,10 @@ struct monst *mtmp;
{ {
struct obj *otmp; struct obj *otmp;
otmp = g.invent; for (otmp = g.invent; otmp; otmp = otmp->nobj)
while (otmp) { if (otmp->otyp == LEASH && (unsigned) otmp->leashmon == mtmp->m_id)
if (otmp->otyp == LEASH && otmp->leashmon == (int) mtmp->m_id) break;
return otmp; return otmp;
otmp = otmp->nobj;
}
return (struct obj *) 0;
} }
boolean boolean
@@ -735,13 +740,14 @@ next_to_u()
if (distu(mtmp->mx, mtmp->my) > 2) { if (distu(mtmp->mx, mtmp->my) > 2) {
for (otmp = g.invent; otmp; otmp = otmp->nobj) for (otmp = g.invent; otmp; otmp = otmp->nobj)
if (otmp->otyp == LEASH if (otmp->otyp == LEASH
&& otmp->leashmon == (int) mtmp->m_id) { && (unsigned) otmp->leashmon == mtmp->m_id) {
if (otmp->cursed) if (otmp->cursed)
return FALSE; return FALSE;
You_feel("%s leash go slack.",
(number_leashed() > 1) ? "a" : "the");
mtmp->mleashed = 0; mtmp->mleashed = 0;
otmp->leashmon = 0; otmp->leashmon = 0;
update_inventory();
You_feel("%s leash go slack.",
(number_leashed() > 1) ? "a" : "the");
} }
} }
} }