diff options
Diffstat (limited to 'src/game/ItemHandler.cpp')
| -rw-r--r-- | src/game/ItemHandler.cpp | 45 |
1 files changed, 14 insertions, 31 deletions
diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 5952f73062e..0d338a6ad7e 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -1359,41 +1359,32 @@ 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 (item->GetPlayedTime() > (2*HOUR)) // item refund has expired - item->SetNotRefundable(GetPlayer()); - ItemRefund* RefundData = item->GetRefundData(); - if (!RefundData) - { - sLog.outDebug("Item refund: cannot find refundable data."); - item->SetNotRefundable(GetPlayer()); - return; - } - - if (GetPlayer()->GetGUIDLow() != RefundData->eligibleFor) // Formerly refundable item got traded + 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(RefundData->paidExtendedCost); + ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(item->GetPaidExtendedCost()); if (!iece) { sLog.outDebug("Item refund: cannot find extendedcost data."); return; } - item->UpdatePlayedTime(GetPlayer()); WorldPacket data(SMSG_ITEM_REFUND_INFO_RESPONSE, 8+4+4+4+4*4+4*4+4+4); data << uint64(guid); // item guid - data << uint32(RefundData->paidMoney); // money cost + data << uint32(item->GetPaidMoney()); // money cost data << uint32(iece->reqhonorpoints); // honor point cost data << uint32(iece->reqarenapoints); // arena point cost for (uint8 i = 0; i < 5; ++i) // item cost data @@ -1425,7 +1416,7 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data) return; } - if (item->GetPlayedTime() > (2*HOUR)) // item refund has expired + if (item->IsRefundExpired()) // item refund has expired { item->SetNotRefundable(GetPlayer()); WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4); @@ -1435,28 +1426,22 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data) return; } - ItemRefund* RefundData = item->GetRefundData(); - if (!RefundData) - { - sLog.outDebug("Item refund: cannot find refundable data."); - item->SetNotRefundable(GetPlayer()); - return; - } - - if (GetPlayer()->GetGUIDLow() != RefundData->eligibleFor) // Formerly refundable item got traded + 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(RefundData->paidExtendedCost); + ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(item->GetPaidExtendedCost()); if (!iece) { sLog.outDebug("Item refund: cannot find extendedcost data."); return; } + uint32 moneyRefund = item->GetPaidMoney(); + bool store_error = false; for (uint8 i = 0; i < 5; ++i) { @@ -1487,7 +1472,7 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data) 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(RefundData->paidMoney); // money cost + data << uint32(moneyRefund); // money cost data << uint32(iece->reqhonorpoints); // honor point cost data << uint32(iece->reqarenapoints); // arena point cost for (uint8 i = 0; i < 5; ++i) // item cost data @@ -1498,8 +1483,8 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data) SendPacket(&data); // Delete any references to the refund data - item->DeleteRefundDataFromDB(); - GetPlayer()->DeleteRefundReference(item); + item->SetNotRefundable(GetPlayer()); + // Destroy item _player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true); @@ -1519,7 +1504,6 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data) } // Grant back money - uint32 moneyRefund = RefundData->paidMoney; if (moneyRefund) _player->ModifyMoney(moneyRefund); @@ -1533,5 +1517,4 @@ void WorldSession::HandleItemRefund(WorldPacket &recv_data) if (arenaRefund) _player->ModifyArenaPoints(arenaRefund); - delete RefundData; } |
