fix pull request #469 - multiple '$' invent slots
Assigning a partial stack of gold to quiver (Qnn$) resulted in an extra '$' slot in inventory, one for the unquivered part and another for the quivered part. Throwing a non-quivered partial stack of gold at self (tnn$.) also resulted in an extra '$' slot after throwing at self was rejected. For the first case, reject the quiver-subset-of-gold attempt. For both cases, recombine the two stacks back to original amount. Fixes #469
This commit is contained in:
@@ -102,8 +102,9 @@ throw_obj(struct obj *obj, int shotlimit)
|
||||
if (obj->oclass == COIN_CLASS && obj != uquiver)
|
||||
return throw_gold(obj);
|
||||
|
||||
if (!canletgo(obj, "throw"))
|
||||
if (!canletgo(obj, "throw")) {
|
||||
return 0;
|
||||
}
|
||||
if (obj->oartifact == ART_MJOLLNIR && obj != uwep) {
|
||||
pline("%s must be wielded before it can be thrown.", The(xname(obj)));
|
||||
return 0;
|
||||
@@ -2160,6 +2161,11 @@ throw_gold(struct obj *obj)
|
||||
|
||||
if (!u.dx && !u.dy && !u.dz) {
|
||||
You("cannot throw gold at yourself.");
|
||||
/* If we tried to throw part of a stack, force it to merge back
|
||||
together (same as in throw_obj). Essential for gold. */
|
||||
if (obj->o_id == g.context.objsplit.parent_oid
|
||||
|| obj->o_id == g.context.objsplit.child_oid)
|
||||
(void) unsplitobj(obj);
|
||||
return 0;
|
||||
}
|
||||
freeinv(obj);
|
||||
|
||||
@@ -499,6 +499,11 @@ dowieldquiver(void)
|
||||
if (uquiver && uquiver->o_id == g.context.objsplit.parent_oid) {
|
||||
unsplitobj(newquiver);
|
||||
goto already_quivered;
|
||||
} else if (newquiver->oclass == COIN_CLASS) {
|
||||
/* don't allow splitting a stack of coins into quiver */
|
||||
You("can't ready only part of your gold.");
|
||||
unsplitobj(newquiver);
|
||||
return 0;
|
||||
}
|
||||
finish_splitting = TRUE;
|
||||
} else if (newquiver == uquiver) {
|
||||
|
||||
Reference in New Issue
Block a user