aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp43
-rw-r--r--src/server/game/Handlers/LootHandler.cpp2
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp2
-rw-r--r--src/server/game/Loot/Loot.h29
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
5 files changed, 45 insertions, 33 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 5c97a5a5261..4bd199b6f3f 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -8808,19 +8808,19 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa
if (!go)
return true;
- if (lootType == LOOT_SKINNING)
+ switch (lootType)
{
- // Disarm Trap
- if (!go->IsWithinDistInMap(this, 20.f))
- return true;
- }
- else
- {
- if (lootType != LOOT_FISHINGHOLE && ((lootType != LOOT_FISHING && lootType != LOOT_FISHING_JUNK) || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this))
- return true;
-
- if (lootType == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault())
- return true;
+ case LOOT_FISHING:
+ case LOOT_FISHING_JUNK:
+ if (go->GetOwnerGUID() != GetGUID())
+ return true;
+ break;
+ case LOOT_FISHINGHOLE:
+ break;
+ default:
+ if (!go->IsWithinDistInMap(this))
+ return true;
+ break;
}
return false;
@@ -9121,15 +9121,6 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa
}
}
- // LOOT_INSIGNIA and LOOT_FISHINGHOLE unsupported by client
- switch (loot_type)
- {
- case LOOT_INSIGNIA: loot_type = LOOT_SKINNING; break;
- case LOOT_FISHINGHOLE: loot_type = LOOT_FISHING; break;
- case LOOT_FISHING_JUNK: loot_type = LOOT_FISHING; break;
- default: break;
- }
-
// need know merged fishing/corpse loot type for achievements
if (loot)
loot->loot_type = loot_type;
@@ -9149,14 +9140,14 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa
}
}
- if (!aeLooting)
+ if (!guid.IsItem() && !aeLooting)
SetLootGUID(guid);
WorldPackets::Loot::LootResponse packet;
packet.Owner = guid;
packet.LootObj = loot->GetGUID();
packet._LootMethod = _lootMethod;
- packet.AcquireReason = loot_type;
+ packet.AcquireReason = GetLootTypeForClient(loot_type);
packet.Acquired = true; // false == No Loot (this too^^)
packet.AELooting = aeLooting;
loot->BuildLootResponse(packet, this, permission);
@@ -26147,14 +26138,14 @@ void Player::StoreLootItem(ObjectGuid lootWorldObjectGuid, uint8 lootSlot, Loot*
{
SendNewItem(newitem, uint32(item->count), false, false, true);
UpdateCriteria(CriteriaType::LootItem, item->itemid, item->count);
- UpdateCriteria(CriteriaType::GetLootByType, item->itemid, item->count, loot->loot_type);
+ UpdateCriteria(CriteriaType::GetLootByType, item->itemid, item->count, GetLootTypeForClient(loot->loot_type));
UpdateCriteria(CriteriaType::LootAnyItem, item->itemid, item->count);
}
else
- aeResult->Add(newitem, item->count, loot->loot_type);
+ aeResult->Add(newitem, item->count, GetLootTypeForClient(loot->loot_type));
// LootItem is being removed (looted) from the container, delete it from the DB.
- if (lootWorldObjectGuid.IsItem() && loot->loot_type == LOOT_CORPSE)
+ if (loot->loot_type == LOOT_ITEM)
sLootItemStorage->RemoveStoredLootItemForContainer(lootWorldObjectGuid.GetCounter(), item->itemid, item->count, item->itemIndex);
ApplyItemLootedSpell(newitem, true);
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp
index 2d161ab7694..08f43c41a25 100644
--- a/src/server/game/Handlers/LootHandler.cpp
+++ b/src/server/game/Handlers/LootHandler.cpp
@@ -284,7 +284,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet
loot->gold = 0;
// Delete the money loot record from the DB
- if (guid.IsItem() && loot->loot_type == LOOT_CORPSE)
+ if (loot->loot_type == LOOT_ITEM)
sLootItemStorage->RemoveStoredMoneyForContainer(guid.GetCounter());
// Delete container if empty
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index 824676b8967..f52c02a32f9 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -202,7 +202,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet)
.WithPreparedCallback(std::bind(&WorldSession::HandleOpenWrappedItemCallback, this, item->GetPos(), item->GetGUID(), std::placeholders::_1)));
}
else
- player->SendLoot(item->GetGUID(), LOOT_CORPSE);
+ player->SendLoot(item->GetGUID(), LOOT_ITEM);
}
void WorldSession::HandleOpenWrappedItemCallback(uint16 pos, ObjectGuid itemGuid, PreparedQueryResult result)
diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h
index ae96d14393d..eaef0bba362 100644
--- a/src/server/game/Loot/Loot.h
+++ b/src/server/game/Loot/Loot.h
@@ -93,16 +93,37 @@ enum LootType : uint8
LOOT_PICKPOCKETING = 2,
LOOT_FISHING = 3,
LOOT_DISENCHANTING = 4,
- // ignored always by client
+ LOOT_ITEM = 5,
LOOT_SKINNING = 6,
- LOOT_PROSPECTING = 7,
- LOOT_MILLING = 8,
+ LOOT_GATHERING_NODE = 8,
+ LOOT_CHEST = 9,
+ LOOT_CORPSE_PERSONAL = 14,
LOOT_FISHINGHOLE = 20, // unsupported by client, sending LOOT_FISHING instead
LOOT_INSIGNIA = 21, // unsupported by client, sending LOOT_CORPSE instead
- LOOT_FISHING_JUNK = 22 // unsupported by client, sending LOOT_FISHING instead
+ LOOT_FISHING_JUNK = 22, // unsupported by client, sending LOOT_FISHING instead
+ LOOT_PROSPECTING = 23,
+ LOOT_MILLING = 24,
};
+constexpr LootType GetLootTypeForClient(LootType lootType)
+{
+ switch (lootType)
+ {
+ case LOOT_PROSPECTING:
+ case LOOT_MILLING:
+ return LOOT_DISENCHANTING;
+ case LOOT_INSIGNIA:
+ return LOOT_SKINNING;
+ case LOOT_FISHINGHOLE:
+ case LOOT_FISHING_JUNK:
+ return LOOT_FISHING;
+ default:
+ break;
+ }
+ return lootType;
+}
+
enum LootError : uint8
{
LOOT_ERROR_DIDNT_KILL = 0, // You don't have permission to loot that corpse.
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 9de42e04760..5dad69ba9f0 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1661,7 +1661,7 @@ void Spell::EffectOpenLock()
}
if (gameObjTarget)
- SendLoot(guid, LOOT_SKINNING);
+ SendLoot(guid, LOOT_CHEST);
else if (itemTarget)
{
itemTarget->SetItemFlag(ITEM_FIELD_FLAG_UNLOCKED);