*Never add the same loot item twice.

--HG--
branch : trunk
This commit is contained in:
maximius
2009-11-04 19:14:10 -08:00
parent 6aba32bd2b
commit c15a8e201b
2 changed files with 16 additions and 11 deletions
+14 -10
View File
@@ -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