Move BoH item loss into separate function
This commit is contained in:
+27
-15
@@ -29,6 +29,7 @@ STATIC_DCL long FDECL(carry_count, (struct obj *, struct obj *, long,
|
|||||||
STATIC_DCL int FDECL(lift_object, (struct obj *, struct obj *, long *,
|
STATIC_DCL int FDECL(lift_object, (struct obj *, struct obj *, long *,
|
||||||
BOOLEAN_P));
|
BOOLEAN_P));
|
||||||
STATIC_DCL boolean FDECL(mbag_explodes, (struct obj *, int));
|
STATIC_DCL boolean FDECL(mbag_explodes, (struct obj *, int));
|
||||||
|
STATIC_DCL long FDECL(boh_loss, (struct obj *container, int));
|
||||||
STATIC_PTR int FDECL(in_container, (struct obj *));
|
STATIC_PTR int FDECL(in_container, (struct obj *));
|
||||||
STATIC_PTR int FDECL(out_container, (struct obj *));
|
STATIC_PTR int FDECL(out_container, (struct obj *));
|
||||||
STATIC_DCL void FDECL(removed_from_icebox, (struct obj *));
|
STATIC_DCL void FDECL(removed_from_icebox, (struct obj *));
|
||||||
@@ -2018,6 +2019,28 @@ int depthin;
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC_OVL long
|
||||||
|
boh_loss(container, held)
|
||||||
|
struct obj *container;
|
||||||
|
int held;
|
||||||
|
{
|
||||||
|
/* sometimes toss objects if a cursed magic bag */
|
||||||
|
if (Is_mbag(container) && container->cursed && Has_contents(container)) {
|
||||||
|
long loss = 0L;
|
||||||
|
struct obj *curr, *otmp;
|
||||||
|
|
||||||
|
for (curr = container->cobj; curr; curr = otmp) {
|
||||||
|
otmp = curr->nobj;
|
||||||
|
if (!rn2(13)) {
|
||||||
|
obj_extract_self(curr);
|
||||||
|
loss += mbag_item_gone(held, curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return loss;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Returns: -1 to stop, 1 item was inserted, 0 item was not inserted. */
|
/* Returns: -1 to stop, 1 item was inserted, 0 item was not inserted. */
|
||||||
STATIC_PTR int
|
STATIC_PTR int
|
||||||
in_container(obj)
|
in_container(obj)
|
||||||
@@ -2374,6 +2397,7 @@ boolean more_containers; /* True iff #loot multiple and this isn't last one */
|
|||||||
stash_one, inokay, outokay, outmaybe;
|
stash_one, inokay, outokay, outmaybe;
|
||||||
char c, emptymsg[BUFSZ], qbuf[QBUFSZ], pbuf[QBUFSZ], xbuf[QBUFSZ];
|
char c, emptymsg[BUFSZ], qbuf[QBUFSZ], pbuf[QBUFSZ], xbuf[QBUFSZ];
|
||||||
int used = 0;
|
int used = 0;
|
||||||
|
long loss;
|
||||||
|
|
||||||
abort_looting = FALSE;
|
abort_looting = FALSE;
|
||||||
emptymsg[0] = '\0';
|
emptymsg[0] = '\0';
|
||||||
@@ -2414,22 +2438,10 @@ boolean more_containers; /* True iff #loot multiple and this isn't last one */
|
|||||||
observe_quantum_cat(current_container);
|
observe_quantum_cat(current_container);
|
||||||
used = 1;
|
used = 1;
|
||||||
}
|
}
|
||||||
/* sometimes toss objects if a cursed magic bag */
|
|
||||||
cursed_mbag = (Is_mbag(current_container) && current_container->cursed
|
|
||||||
&& Has_contents(current_container));
|
|
||||||
if (cursed_mbag) {
|
|
||||||
long loss = 0L;
|
|
||||||
|
|
||||||
for (curr = current_container->cobj; curr; curr = otmp) {
|
if ((loss = boh_loss(current_container, held)) != 0) {
|
||||||
otmp = curr->nobj;
|
used = 1;
|
||||||
if (!rn2(13)) {
|
You("owe %ld %s for lost merchandise.", loss, currency(loss));
|
||||||
obj_extract_self(curr);
|
|
||||||
loss += mbag_item_gone(held, curr);
|
|
||||||
used = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (loss)
|
|
||||||
You("owe %ld %s for lost merchandise.", loss, currency(loss));
|
|
||||||
current_container->owt = weight(current_container);
|
current_container->owt = weight(current_container);
|
||||||
}
|
}
|
||||||
inokay = (invent != 0
|
inokay = (invent != 0
|
||||||
|
|||||||
Reference in New Issue
Block a user