fix add_one_tobill() 'fixme'
Not exhaustively tested.
This commit is contained in:
+2
-2
@@ -722,12 +722,12 @@ bill_dummy_object(struct obj *otmp)
|
|||||||
dummy->timed = 0;
|
dummy->timed = 0;
|
||||||
copy_oextra(dummy, otmp);
|
copy_oextra(dummy, otmp);
|
||||||
if (has_omid(dummy))
|
if (has_omid(dummy))
|
||||||
free_omid(dummy); /* only one association with m_id*/
|
free_omid(dummy); /* only one association with m_id */
|
||||||
if (Is_candle(dummy))
|
if (Is_candle(dummy))
|
||||||
dummy->lamplit = 0;
|
dummy->lamplit = 0;
|
||||||
dummy->owornmask = 0L; /* dummy object is not worn */
|
dummy->owornmask = 0L; /* dummy object is not worn */
|
||||||
addtobill(dummy, FALSE, TRUE, TRUE);
|
addtobill(dummy, FALSE, TRUE, TRUE);
|
||||||
if (cost)
|
if (cost && dummy->where != OBJ_DELETED)
|
||||||
alter_cost(dummy, -cost);
|
alter_cost(dummy, -cost);
|
||||||
/* no_charge is only valid for some locations */
|
/* no_charge is only valid for some locations */
|
||||||
otmp->no_charge = (otmp->where == OBJ_FLOOR
|
otmp->no_charge = (otmp->where == OBJ_FLOOR
|
||||||
|
|||||||
@@ -3213,35 +3213,43 @@ unpaid_cost(
|
|||||||
return amt;
|
return amt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* add 'obj' to 'shkp's bill */
|
||||||
staticfn void
|
staticfn void
|
||||||
add_one_tobill(struct obj *obj, boolean dummy, struct monst *shkp)
|
add_one_tobill(
|
||||||
|
struct obj *obj,
|
||||||
|
boolean dummy, /* True: obj is used up so goes on bill differently */
|
||||||
|
struct monst *shkp)
|
||||||
{
|
{
|
||||||
struct eshk *eshkp;
|
struct eshk *eshkp;
|
||||||
struct bill_x *bp;
|
struct bill_x *bp;
|
||||||
int bct;
|
int bct;
|
||||||
|
boolean unbilled = FALSE;
|
||||||
|
|
||||||
if (!billable(&shkp, obj, *u.ushops, TRUE))
|
|
||||||
return;
|
|
||||||
eshkp = ESHK(shkp);
|
eshkp = ESHK(shkp);
|
||||||
|
|
||||||
if (eshkp->billct == BILLSZ) {
|
|
||||||
You("got that for free!");
|
|
||||||
/*
|
|
||||||
* FIXME:
|
|
||||||
* What happens when this is a dummy object? It won't be on any
|
|
||||||
* object list.
|
|
||||||
*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* normally bill_p gets set up whenever you enter the shop, but obj
|
/* normally bill_p gets set up whenever you enter the shop, but obj
|
||||||
might be going onto the bill because hero just snagged it with
|
might be going onto the bill because hero just snagged it with
|
||||||
a grappling hook from outside without ever having been inside */
|
a grappling hook from outside without ever having been inside */
|
||||||
if (!eshkp->bill_p)
|
if (!eshkp->bill_p)
|
||||||
eshkp->bill_p = &(eshkp->bill[0]);
|
eshkp->bill_p = &eshkp->bill[0];
|
||||||
|
|
||||||
|
if (!billable(&shkp, obj, *u.ushops, TRUE)) {
|
||||||
|
/* shk doesn't want it */
|
||||||
|
unbilled = TRUE;
|
||||||
|
} else if (eshkp->billct == BILLSZ) {
|
||||||
|
/* shk's bill is completely full */
|
||||||
|
You("got that for free!");
|
||||||
|
unbilled = TRUE;
|
||||||
|
}
|
||||||
|
/* if not on any list (probably from bill_dummy_object() which creates
|
||||||
|
a new OBJ_FREE object), don't leave unmanaged object hanging around */
|
||||||
|
if (unbilled) {
|
||||||
|
if (obj->where == OBJ_FREE)
|
||||||
|
dealloc_obj(obj); /* change to obj->where==OBJ_DELETED */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bct = eshkp->billct;
|
bct = eshkp->billct;
|
||||||
bp = &(eshkp->bill_p[bct]);
|
bp = &eshkp->bill_p[bct];
|
||||||
bp->bo_id = obj->o_id;
|
bp->bo_id = obj->o_id;
|
||||||
bp->bquan = obj->quan;
|
bp->bquan = obj->quan;
|
||||||
if (dummy) { /* a dummy object must be inserted into */
|
if (dummy) { /* a dummy object must be inserted into */
|
||||||
|
|||||||
Reference in New Issue
Block a user