Don´t inherit refund data when cloning when original item is not refundable.

--HG--
branch : trunk
This commit is contained in:
Machiavelli
2010-04-29 14:05:41 +02:00
parent f7ab90d79d
commit c10526a3ae
+34 -18
View File
@@ -12012,17 +12012,22 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count)
if (IsInventoryPos(dst)) 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) // change item amount before check (for unique max count check)
AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() - count);
pSrcItem->SetCount(pSrcItem->GetCount() - count); pSrcItem->SetCount(pSrcItem->GetCount() - count);
ItemPosCountVec dest; ItemPosCountVec dest;
uint8 msg = CanStoreItem(dstbag, dstslot, dest, pNewItem, false); uint8 msg = CanStoreItem(dstbag, dstslot, dest, pNewItem, false);
if (msg != EQUIP_ERR_OK) if (msg != EQUIP_ERR_OK)
{ {
if (isRefundable)
AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count);
delete pNewItem; delete pNewItem;
pSrcItem->SetCount(pSrcItem->GetCount() + count); pSrcItem->SetCount(pSrcItem->GetCount() + count);
AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count);
SendEquipError(msg, pSrcItem, NULL); SendEquipError(msg, pSrcItem, NULL);
return; return;
} }
@@ -12031,26 +12036,34 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count)
pSrcItem->SendUpdateToPlayer(this); pSrcItem->SendUpdateToPlayer(this);
pSrcItem->SetState(ITEM_CHANGED, this); pSrcItem->SetState(ITEM_CHANGED, this);
StoreItem(dest, pNewItem, true); StoreItem(dest, pNewItem, true);
AddRefundReference(pNewItem->GetGUID(), count); if (isRefundable)
pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost()); {
pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney()); AddRefundReference(pNewItem->GetGUID(), count);
pNewItem->SetRefundRecipient(GetGUIDLow()); pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost());
pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime()); pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney());
pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); pNewItem->SetRefundRecipient(GetGUIDLow());
pNewItem->SaveRefundDataToDB(count); pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime());
pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE);
pNewItem->SaveRefundDataToDB(count);
}
} }
else if (IsBankPos (dst)) 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) // change item amount before check (for unique max count check)
AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() - count);
pSrcItem->SetCount(pSrcItem->GetCount() - count); pSrcItem->SetCount(pSrcItem->GetCount() - count);
ItemPosCountVec dest; ItemPosCountVec dest;
uint8 msg = CanBankItem(dstbag, dstslot, dest, pNewItem, false); uint8 msg = CanBankItem(dstbag, dstslot, dest, pNewItem, false);
if (msg != EQUIP_ERR_OK) if (msg != EQUIP_ERR_OK)
{ {
if (isRefundable)
AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count);
delete pNewItem; delete pNewItem;
AlterRefundReferenceCount(pSrcItem->GetGUID(), pSrcItem->GetCount() + count);
pSrcItem->SetCount(pSrcItem->GetCount() + count); pSrcItem->SetCount(pSrcItem->GetCount() + count);
SendEquipError(msg, pSrcItem, NULL); SendEquipError(msg, pSrcItem, NULL);
return; return;
@@ -12060,13 +12073,16 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count)
pSrcItem->SendUpdateToPlayer(this); pSrcItem->SendUpdateToPlayer(this);
pSrcItem->SetState(ITEM_CHANGED, this); pSrcItem->SetState(ITEM_CHANGED, this);
BankItem(dest, pNewItem, true); BankItem(dest, pNewItem, true);
AddRefundReference(pNewItem->GetGUID(), count); if (isRefundable)
pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost()); {
pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney()); AddRefundReference(pNewItem->GetGUID(), count);
pNewItem->SetRefundRecipient(GetGUIDLow()); pNewItem->SetPaidExtendedCost(pSrcItem->GetPaidExtendedCost());
pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime()); pNewItem->SetPaidMoney(pSrcItem->GetPaidMoney());
pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE); pNewItem->SetRefundRecipient(GetGUIDLow());
pNewItem->SaveRefundDataToDB(count); pNewItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, pSrcItem->GetPlayedTime());
pNewItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE);
pNewItem->SaveRefundDataToDB(count);
}
} }
else if (IsEquipmentPos (dst)) else if (IsEquipmentPos (dst))
{ {