TrinityCore / TrinityCore

TrinityCore Open Source MMO Framework (master = 11.0.5.57534, 3.3.5 = 3.3.5a.12340, cata classic = 4.4.1.57564)
http://www.trinitycore.org
GNU General Public License v2.0
9.63k stars 6.06k forks source link

[3.3.5] Quest/Item: Quest item Loot Exploit #14956

Closed ghost closed 4 years ago

ghost commented 9 years ago
  1. Make a Raid and change loot to freeforall
  2. Kill a boss that drop Qeust item ( like Shadowfrost Shard )
  3. Get 2 ( or more ) characters to loot Shadowfrost Shard at the same time
  4. Get Ready for take quest item at the same time by 2 chars

if you do this correct both chars will get shadowfrost shard

Revision: c544e88 TDB: 58

Rushor commented 9 years ago

Important for reproducing this: the delay of both user must be the same

ghost commented 9 years ago

@Rushor, not that much but yes, we did it with 80MS

Keader commented 9 years ago

confirm on rev 5a7adbba3a327d804520134f2ba90652b5c023be

AriDEV commented 9 years ago

I dont think its an exploit... if u are questing in a party or in a raid and a quest item drops evryone in the party should get the quest item aswell.

"Some quest items are considered party loot. If a quest asks you to retrieve something by killing a specific target, and looting his head for example, that head will be able to be picked up by the entire group; making that item party loot. This also applies for quest items where the loot is set to Free for All, and only one of the users currently has the quest, so if the player without the quest would loot the NPC first, the other player would still be able to retrieve the quest item. "

Rushor commented 9 years ago

btw: this happens also for other items like gear/weapons?

Shauren commented 9 years ago

@AriDEV Shadowfrost Shard is an exception. It only drops one copy of it

Keader commented 9 years ago

@Rushor nops, only quest itens

AriDEV commented 9 years ago

@Shauren , sry didnt know its an exception i thought its an item like http://www.wowhead.com/item=115280/abrogator-stone didnt raided icc since cataclysm.

ghost commented 9 years ago

another exception [Head of Onyxia]

D4R4 commented 9 years ago

Confirm, ancient bug, realllllly annoying, afaik it only bothered me in case of ShadowfrostShard, but i guess it applies to all quest items

Exodius commented 9 years ago

@AriDEV Loot system for Legendary Quest items was changed in MoP and all of them are a part of Personal Loot system.

Shauren commented 9 years ago

@Exodius it did not change. New quests use new rules (personal - mop cloak, wod ring) but old ones (Dragonwrath, Shadowmourne, daggers from dragon soul) are single drops

AriDEV commented 9 years ago

@Exodius that was the case why i had sayd it changed, but as Shauren sayd its an exception.

Exodius commented 9 years ago

@Shauren that's what I was actually wanting to say but it came all wrong (and I just noticed the mistake I made). Sorry for the confusion.

Keader commented 8 years ago

Still bugged on current rev (48a12cb2f5511d964771c3177479c661bb12252c) No one has some fix or hackfix for this?

Keader commented 8 years ago

@jackpoz if you have free time, can take look on this?

Jildor commented 4 years ago

@Shauren @jackpoz can you check if this can be valid?

To reproduce the issue, get a quest that need loot items, by example

  1. get two players in a group
  2. .quest add 47 (in two players)
  3. .go cre id 475
  4. kill npc
  5. click with two players the npc to see loot
  6. do .reload all for lag server (you can do 2-3 times in a row)
  7. click with two players the quest item before reload all finish
  8. two players get the item

I do this:

diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot)

     LootItem* item = loot->LootItemInSlot(lootSlot, this, &qitem, &ffaitem, &conditem);

-    if (!item)
+    if (!item || item->is_looted)
     {
         SendEquipError(EQUIP_ERR_ALREADY_LOOTED, nullptr, nullptr);
         return;

and I can't reproduce the issue, but I'm not sure if can be ok

I tested also with quest item that can be looted by all players with quest and also works fine, all players with quest in group can get the item in that loot, by example: https://www.wowhead.com/item=8363/shaman-voodoo-charm and also to ensure I have tried things like skinning

Edit: added a log for test, if I see ok I will try to open a PR ;)