aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/LootHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/LootHandler.cpp')
-rw-r--r--[-rwxr-xr-x]src/server/game/Handlers/LootHandler.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index 1c9719a210f..b15636e75d2 100755..100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -31,7 +31,7 @@
#include "WorldPacket.h"
#include "WorldSession.h"
-void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket & recvData)
+void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_AUTOSTORE_LOOT_ITEM");
Player* player = GetPlayer();
@@ -93,6 +93,10 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket & recvData)
}
player->StoreLootItem(lootSlot, loot);
+
+ // If player is removing the last LootItem, delete the empty container.
+ if (loot->isLooted() && IS_ITEM_GUID(lguid))
+ player->GetSession()->DoLootRelease(lguid);
}
void WorldSession::HandleLootMoneyOpcode(WorldPacket & /*recvData*/)
@@ -200,10 +204,18 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket & /*recvData*/)
}
loot->gold = 0;
+
+ // Delete the money loot record from the DB
+ if (loot->containerID > 0)
+ loot->DeleteLootMoneyFromContainerItemDB();
+
+ // Delete container if empty
+ if (loot->isLooted() && IS_ITEM_GUID(guid))
+ player->GetSession()->DoLootRelease(guid);
}
}
-void WorldSession::HandleLootOpcode(WorldPacket & recvData)
+void WorldSession::HandleLootOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_LOOT");
@@ -381,8 +393,8 @@ void WorldSession::DoLootRelease(uint64 lguid)
player->DestroyItemCount(pItem, count, true);
}
else
- // FIXME: item must not be deleted in case not fully looted state. But this pre-request implement loot saving in DB at item save. Or cheating possible.
- player->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);
+ if (pItem->loot.isLooted()) // Only delete item if no loot or money (unlooted loot is saved to db)
+ player->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);
return; // item can be looted only single player
}
else
@@ -429,7 +441,7 @@ void WorldSession::DoLootRelease(uint64 lguid)
loot->RemoveLooter(player->GetGUID());
}
-void WorldSession::HandleLootMasterGiveOpcode(WorldPacket & recvData)
+void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData)
{
uint8 slotid;
uint64 lootguid, target_playerguid;