diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 43 | ||||
-rw-r--r-- | src/server/game/Handlers/LootHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Loot/Loot.h | 29 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 |
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); |