aboutsummaryrefslogtreecommitdiff
path: root/src/game/ItemHandler.cpp
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-04-30 19:20:59 +0200
committerMachiavelli <none@none>2010-04-30 19:20:59 +0200
commit4b1a9916acb8d2a8281346a430ee178434ec0c4b (patch)
tree86dd7176c1e4696f94f3efae2bb10557f240ecfe /src/game/ItemHandler.cpp
parent31113370b333801f7089e287707f8ae060cff09f (diff)
Clean up in item refund related code.
--HG-- branch : trunk
Diffstat (limited to 'src/game/ItemHandler.cpp')
-rw-r--r--src/game/ItemHandler.cpp147
1 files changed, 2 insertions, 145 deletions
diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp
index a51a78b226e..626b748d3c6 100644
--- a/src/game/ItemHandler.cpp
+++ b/src/game/ItemHandler.cpp
@@ -1372,44 +1372,7 @@ void WorldSession::HandleItemRefundInfoRequest(WorldPacket& recv_data)
return;
}
- // This function call unsets ITEM_FLAGS_REFUNDABLE if played time is over 2 hours.
- item->UpdatePlayedTime(GetPlayer());
-
- if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE))
- {
- sLog.outDebug("Item refund: item not refundable!");
- return;
- }
-
- if (GetPlayer()->GetGUIDLow() != item->GetRefundRecipient()) // Formerly refundable item got traded
- {
- sLog.outDebug("Item refund: item was traded!");
- item->SetNotRefundable(GetPlayer());
- return;
- }
-
- ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(item->GetPaidExtendedCost());
- if (!iece)
- {
- sLog.outDebug("Item refund: cannot find extendedcost data.");
- return;
- }
-
- uint32 itemCount = item->GetCount();
-
- WorldPacket data(SMSG_ITEM_REFUND_INFO_RESPONSE, 8+4+4+4+4*4+4*4+4+4);
- data << uint64(guid); // item guid
- data << uint32(item->GetPaidMoney() * itemCount); // money cost
- data << uint32(iece->reqhonorpoints * itemCount); // honor point cost
- data << uint32(iece->reqarenapoints * itemCount); // arena point cost
- for (uint8 i = 0; i < 5; ++i) // item cost data
- {
- data << iece->reqitem[i];
- data << (iece->reqitemcount[i] * itemCount);
- }
- data << uint32(0);
- data << uint32(GetPlayer()->GetTotalPlayedTime() - item->GetPlayedTime());
- SendPacket(&data);
+ GetPlayer()->SendRefundInfo(item);
}
void WorldSession::HandleItemRefund(WorldPacket &recv_data)
@@ -1425,113 +1388,7 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data)
return;
}
- if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_REFUNDABLE))
- {
- sLog.outDebug("Item refund: item not refundable!");
- return;
- }
-
- if (item->IsRefundExpired()) // item refund has expired
- {
- item->SetNotRefundable(GetPlayer());
- WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4);
- data << uint64(guid); // Guid
- data << uint32(10); // Error!
- SendPacket(&data);
- return;
- }
-
- if (GetPlayer()->GetGUIDLow() != item->GetRefundRecipient()) // Formerly refundable item got traded
- {
- sLog.outDebug("Item refund: item was traded!");
- item->SetNotRefundable(GetPlayer());
- return;
- }
-
- ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(item->GetPaidExtendedCost());
- if (!iece)
- {
- sLog.outDebug("Item refund: cannot find extendedcost data.");
- return;
- }
-
- uint32 itemCount = item->GetCount(); // stacked refundable items.
- uint32 moneyRefund = item->GetPaidMoney()*itemCount;
-
- bool store_error = false;
- for (uint8 i = 0; i < 5; ++i)
- {
- uint32 count = iece->reqitemcount[i] * itemCount;
- uint32 itemid = iece->reqitem[i];
-
- if (count && itemid)
- {
- ItemPosCountVec dest;
- uint8 msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemid, count);
- if (msg != EQUIP_ERR_OK)
- {
- store_error = true;
- break;
- }
- }
- }
-
- if (store_error)
- {
- WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4);
- data << uint64(guid); // Guid
- data << uint32(10); // Error!
- SendPacket(&data);
- return;
- }
-
- WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4+4+4+4+4*4+4*4);
- data << uint64(guid); // item guid
- data << uint32(0); // 0, or error code
- data << uint32(moneyRefund); // money cost
- data << uint32(iece->reqhonorpoints * itemCount); // honor point cost
- data << uint32(iece->reqarenapoints * itemCount); // arena point cost
- for (uint8 i = 0; i < 5; ++i) // item cost data
- {
- data << iece->reqitem[i];
- data << (iece->reqitemcount[i] * itemCount);
- }
- SendPacket(&data);
-
- // Delete any references to the refund data
- item->SetNotRefundable(GetPlayer());
-
- // Destroy item
- _player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
-
- // Grant back extendedcost items
- for (uint8 i = 0; i < 5; ++i)
- {
- uint32 count = iece->reqitemcount[i] * itemCount;
- uint32 itemid = iece->reqitem[i];
- if (count && itemid)
- {
- ItemPosCountVec dest;
- uint8 msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemid, count);
- ASSERT(msg == EQUIP_ERR_OK) /// Already checked before
- Item* it = _player->StoreNewItem(dest, itemid, true);
- _player->SendNewItem(it, count, true, false, true);
- }
- }
-
- // Grant back money
- if (moneyRefund)
- _player->ModifyMoney(moneyRefund);
-
- // Grant back Honor points
- uint32 honorRefund = iece->reqhonorpoints * itemCount;
- if (honorRefund)
- _player->ModifyHonorPoints(honorRefund);
-
- // Grant back Arena points
- uint32 arenaRefund = iece->reqarenapoints * itemCount;
- if (arenaRefund)
- _player->ModifyArenaPoints(arenaRefund);
+ GetPlayer()->RefundItem(item);
}
/**