Merge remote-tracking branch 'github/tung/shkp-anger-bill-fix' into NetHack-3.6.0
This commit is contained in:
@@ -38,7 +38,8 @@ STATIC_DCL struct monst *FDECL(next_shkp, (struct monst *, BOOLEAN_P));
|
|||||||
STATIC_DCL long FDECL(shop_debt, (struct eshk *));
|
STATIC_DCL long FDECL(shop_debt, (struct eshk *));
|
||||||
STATIC_DCL char *FDECL(shk_owns, (char *, struct obj *));
|
STATIC_DCL char *FDECL(shk_owns, (char *, struct obj *));
|
||||||
STATIC_DCL char *FDECL(mon_owns, (char *, struct obj *));
|
STATIC_DCL char *FDECL(mon_owns, (char *, struct obj *));
|
||||||
STATIC_DCL void FDECL(clear_unpaid, (struct obj *));
|
STATIC_DCL void FDECL(clear_unpaid_obj, (struct monst *, struct obj *));
|
||||||
|
STATIC_DCL void FDECL(clear_unpaid, (struct monst *, struct obj *));
|
||||||
STATIC_DCL long FDECL(check_credit, (long, struct monst *));
|
STATIC_DCL long FDECL(check_credit, (long, struct monst *));
|
||||||
STATIC_DCL void FDECL(pay, (long, struct monst *));
|
STATIC_DCL void FDECL(pay, (long, struct monst *));
|
||||||
STATIC_DCL long FDECL(get_cost, (struct obj *, struct monst *));
|
STATIC_DCL long FDECL(get_cost, (struct obj *, struct monst *));
|
||||||
@@ -260,15 +261,26 @@ boolean ghostly;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clear the unpaid bit on a single object and its contents. */
|
||||||
|
STATIC_OVL void
|
||||||
|
clear_unpaid_obj(shkp, otmp)
|
||||||
|
struct monst *shkp;
|
||||||
|
struct obj *otmp;
|
||||||
|
{
|
||||||
|
if (Has_contents(otmp))
|
||||||
|
clear_unpaid(shkp, otmp->cobj);
|
||||||
|
if (onbill(otmp, shkp, TRUE))
|
||||||
|
otmp->unpaid = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear the unpaid bit on all of the objects in the list. */
|
/* Clear the unpaid bit on all of the objects in the list. */
|
||||||
STATIC_OVL void
|
STATIC_OVL void
|
||||||
clear_unpaid(list)
|
clear_unpaid(shkp, list)
|
||||||
register struct obj *list;
|
struct monst *shkp;
|
||||||
|
struct obj *list;
|
||||||
{
|
{
|
||||||
while (list) {
|
while (list) {
|
||||||
if (Has_contents(list))
|
clear_unpaid_obj(shkp, list);
|
||||||
clear_unpaid(list->cobj);
|
|
||||||
list->unpaid = 0;
|
|
||||||
list = list->nobj;
|
list = list->nobj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -281,20 +293,17 @@ register struct monst *shkp;
|
|||||||
register struct obj *obj;
|
register struct obj *obj;
|
||||||
register struct monst *mtmp;
|
register struct monst *mtmp;
|
||||||
|
|
||||||
/* FIXME: object handling should be limited to
|
clear_unpaid(shkp, invent);
|
||||||
items which are on this particular shk's bill */
|
clear_unpaid(shkp, fobj);
|
||||||
|
clear_unpaid(shkp, level.buriedobjlist);
|
||||||
clear_unpaid(invent);
|
|
||||||
clear_unpaid(fobj);
|
|
||||||
clear_unpaid(level.buriedobjlist);
|
|
||||||
if (thrownobj)
|
if (thrownobj)
|
||||||
thrownobj->unpaid = 0;
|
clear_unpaid_obj(shkp, thrownobj);
|
||||||
if (kickedobj)
|
if (kickedobj)
|
||||||
kickedobj->unpaid = 0;
|
clear_unpaid_obj(shkp, kickedobj);
|
||||||
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
|
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
|
||||||
clear_unpaid(mtmp->minvent);
|
clear_unpaid(shkp, mtmp->minvent);
|
||||||
for (mtmp = migrating_mons; mtmp; mtmp = mtmp->nmon)
|
for (mtmp = migrating_mons; mtmp; mtmp = mtmp->nmon)
|
||||||
clear_unpaid(mtmp->minvent);
|
clear_unpaid(shkp, mtmp->minvent);
|
||||||
|
|
||||||
while ((obj = billobjs) != 0) {
|
while ((obj = billobjs) != 0) {
|
||||||
obj_extract_self(obj);
|
obj_extract_self(obj);
|
||||||
@@ -859,7 +868,7 @@ boolean silent;
|
|||||||
} else
|
} else
|
||||||
bp++;
|
bp++;
|
||||||
}
|
}
|
||||||
if (obj->unpaid & !silent)
|
if (obj->unpaid && !silent)
|
||||||
pline("onbill: unpaid obj not on bill?");
|
pline("onbill: unpaid obj not on bill?");
|
||||||
return (struct bill_x *) 0;
|
return (struct bill_x *) 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user