*Never add the same loot item twice.
--HG-- branch : trunk
This commit is contained in:
+14
-10
@@ -381,7 +381,7 @@ void Loot::AddItem(LootStoreItem const & item)
|
||||
if( !item.conditionId )
|
||||
{
|
||||
ItemPrototype const* proto = objmgr.GetItemPrototype(item.itemid);
|
||||
if( !proto || (proto->Flags & ITEM_FLAGS_PARTY_LOOT)==0 )
|
||||
if (!proto || (proto->Flags & ITEM_FLAGS_PARTY_LOOT) == 0)
|
||||
++unlootedCount;
|
||||
}
|
||||
}
|
||||
@@ -508,7 +508,7 @@ QuestItemList* Loot::FillNonQuestNonFFAConditionalLoot(Player* player)
|
||||
if(!item.is_counted)
|
||||
{
|
||||
++unlootedCount;
|
||||
item.is_counted=true;
|
||||
item.is_counted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -957,26 +957,30 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, bool rate, uint16
|
||||
}
|
||||
|
||||
// Rolling non-grouped items
|
||||
for (LootStoreItemList::const_iterator i = Entries.begin() ; i != Entries.end() ; ++i )
|
||||
for (LootStoreItemList::const_iterator i = Entries.begin(); i != Entries.end(); ++i)
|
||||
{
|
||||
if (i->lootmode &~ lootMode) // Do not add if mode mismatch
|
||||
if (i->lootmode &~ lootMode) // Do not add if mode mismatch
|
||||
continue;
|
||||
|
||||
if (!i->Roll(rate))
|
||||
continue; // Bad luck for the entry
|
||||
continue; // Bad luck for the entry
|
||||
|
||||
if (i->mincountOrRef < 0) // References processing
|
||||
for (LootItemList::const_iterator _item = loot.items.begin(); _item != loot.items.end(); ++_item)
|
||||
if (_item->itemid == i->itemid)
|
||||
continue; // Never add the same item twice
|
||||
|
||||
if (i->mincountOrRef < 0) // References processing
|
||||
{
|
||||
LootTemplate const* Referenced = LootTemplates_Reference.GetLootFor(-i->mincountOrRef);
|
||||
|
||||
if(!Referenced)
|
||||
continue; // Error message already printed at loading stage
|
||||
continue; // Error message already printed at loading stage
|
||||
|
||||
for (uint32 loop=0; loop < i->maxcount; ++loop) // Ref multiplicator
|
||||
for (uint32 loop = 0; loop < i->maxcount; ++loop) // Ref multiplicator
|
||||
Referenced->Process(loot, store, rate, lootMode, i->group);
|
||||
}
|
||||
else // Plain entries (not a reference, not grouped)
|
||||
loot.AddItem(*i); // Chance is already checked, just add
|
||||
else // Plain entries (not a reference, not grouped)
|
||||
loot.AddItem(*i); // Chance is already checked, just add
|
||||
}
|
||||
|
||||
// Now processing groups
|
||||
|
||||
Reference in New Issue
Block a user