From c10526a3ae0087be2ae5e6a8bceb5ff454dea5f5 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Thu, 29 Apr 2010 14:05:41 +0200 Subject: [PATCH] =?UTF-8?q?Don=C2=B4t=20inherit=20refund=20data=20when=20c?= =?UTF-8?q?loning=20when=20original=20item=20is=20not=20refundable.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --HG-- branch : trunk --- src/game/Player.cpp | 52 +++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 35079e4ee4..f78ab5a5ee 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12012,17 +12012,22 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) if (IsInventoryPos(dst)) { + bool isRefundable = pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); + if (isRefundable) + AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() - count); + // change item amount before check (for unique max count check) - AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() - count); pSrcItem->SetCount(pSrcItem->GetCount() - count); ItemPosCountVec dest; uint8 msg = CanStoreItem(dstbag, dstslot, dest, pNewItem, false); if (msg != EQUIP_ERR_OK) { + if (isRefundable) + AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count); + delete pNewItem; pSrcItem->SetCount(pSrcItem->GetCount() + count); - AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count); SendEquipError(msg, pSrcItem, NULL); return; } @@ -12031,26 +12036,34 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) pSrcItem->SendUpdateToPlayer(this); pSrcItem->SetState(ITEM_CHANGED, this); StoreItem(dest, pNewItem, true); - AddRefundReference(pNewItem->GetGUID(), count); - pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost()); - pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney()); - pNewItem->SetRefundRecipient(GetGUIDLow()); - pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime()); - pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); - pNewItem->SaveRefundDataToDB(count); + if (isRefundable) + { + AddRefundReference(pNewItem->GetGUID(), count); + pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost()); + pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney()); + pNewItem->SetRefundRecipient(GetGUIDLow()); + pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime()); + pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); + pNewItem->SaveRefundDataToDB(count); + } } else if (IsBankPos (dst)) { + bool isRefundable = pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); + if (isRefundable) + AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() - count); + // change item amount before check (for unique max count check) - AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() - count); pSrcItem->SetCount(pSrcItem->GetCount() - count); ItemPosCountVec dest; uint8 msg = CanBankItem(dstbag, dstslot, dest, pNewItem, false); if (msg != EQUIP_ERR_OK) { + if (isRefundable) + AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count); + delete pNewItem; - AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count); pSrcItem->SetCount(pSrcItem->GetCount() + count); SendEquipError(msg, pSrcItem, NULL); return; @@ -12060,13 +12073,16 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count) pSrcItem->SendUpdateToPlayer(this); pSrcItem->SetState(ITEM_CHANGED, this); BankItem(dest, pNewItem, true); - AddRefundReference(pNewItem->GetGUID(), count); - pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost()); - pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney()); - pNewItem->SetRefundRecipient(GetGUIDLow()); - pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime()); - pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); - pNewItem->SaveRefundDataToDB(count); + if (isRefundable) + { + AddRefundReference(pNewItem->GetGUID(), count); + pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost()); + pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney()); + pNewItem->SetRefundRecipient(GetGUIDLow()); + pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime()); + pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); + pNewItem->SaveRefundDataToDB(count); + } } else if (IsEquipmentPos (dst)) {