diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index f4ef29224..9ececb451 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -12990,9 +12990,9 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) int16 freeslotid = INVALID_INDEX; int16 charges = 0; - if (item->Stackable || item->MaxCharges > 1) + if (item->Stackable || tmpmer_used) charges = mp->quantity; - else + else if ( item->MaxCharges > 1) charges = item->MaxCharges; EQ::ItemInstance* inst = database.CreateItem(item, charges); @@ -13238,12 +13238,9 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) LogMerchant(this, vendor, mp->quantity, price, item, false); int charges = mp->quantity; - //Hack workaround so usable items with 0 charges aren't simply deleted - if (charges == 0 && item->ItemType != 11 && item->ItemType != 17 && item->ItemType != 19 && item->ItemType != 21) - charges = 1; int freeslot = 0; - if (charges > 0 && (freeslot = zone->SaveTempItem(vendor->CastToNPC()->MerchantType, vendor->GetNPCTypeID(), itemid, charges, true)) > 0) { + if ((freeslot = zone->SaveTempItem(vendor->CastToNPC()->MerchantType, vendor->GetNPCTypeID(), itemid, charges, true)) > 0) { EQ::ItemInstance* inst2 = inst->Clone(); while (true) { diff --git a/zone/zone.cpp b/zone/zone.cpp index 2f974c35a..3dceb1250 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -419,12 +419,11 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg if (!ml.origslot) { ml.origslot = ml.slot; } - - if (charges > 0) { + bool is_stackable = database.GetItem(item)->Stackable; + if ((is_stackable && charges > 0) || (!is_stackable && sold)) { database.SaveMerchantTemp(npcid, ml.origslot, item, ml.charges); tmp_merlist.push_back(ml); - } - else { + } else { database.DeleteMerchantTemp(npcid, ml.origslot); } }