Fix: impossible from splitting named stack on bill
Trying to split an unpaid stack of named items in a shop, with perm_invent enabled, would cause an impossible 'unpaid_cost: object wasn't on any bill' because copy_oextra -> oname triggered an inventory update while the newly created split stack was marked unpaid but before the billing information had been split to match. Defer the copy_oextra call until the billing info has already been split.
This commit is contained in:
@@ -423,11 +423,11 @@ splitobj(struct obj *obj, long num)
|
|||||||
be tracking the original */
|
be tracking the original */
|
||||||
if (otmp->where == OBJ_LUAFREE)
|
if (otmp->where == OBJ_LUAFREE)
|
||||||
otmp->where = OBJ_FREE;
|
otmp->where = OBJ_FREE;
|
||||||
|
if (obj->unpaid)
|
||||||
|
splitbill(obj, otmp);
|
||||||
copy_oextra(otmp, obj);
|
copy_oextra(otmp, obj);
|
||||||
if (has_omid(otmp))
|
if (has_omid(otmp))
|
||||||
free_omid(otmp); /* only one association with m_id*/
|
free_omid(otmp); /* only one association with m_id*/
|
||||||
if (obj->unpaid)
|
|
||||||
splitbill(obj, otmp);
|
|
||||||
if (obj->timed)
|
if (obj->timed)
|
||||||
obj_split_timers(obj, otmp);
|
obj_split_timers(obj, otmp);
|
||||||
if (obj_sheds_light(obj))
|
if (obj_sheds_light(obj))
|
||||||
|
|||||||
Reference in New Issue
Block a user