From 542ec386609a5cfb82d765cbc4c5ed6622840ff9 Mon Sep 17 00:00:00 2001 From: Dencelle Date: Mon, 24 May 2021 21:16:46 -0500 Subject: [PATCH] [Bug Fix] Fix for charges not being sold correctly (#1357) * fix for charges not being sold correctly https://github.com/EQEmu/Server/issues/1350 this fixes this issue * Update client_packet.cpp * Update zone.cpp this completes the fix for all charge items being sold to merchants * code opmizations could probably be fixed up better but this is a little cleaner * Update snake_casing Co-authored-by: Chris Miles --- zone/client_packet.cpp | 9 +++------ zone/zone.cpp | 7 +++---- 2 files changed, 6 insertions(+), 10 deletions(-) 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); } }