diff options
author | maximius <none@none> | 2009-11-04 19:14:10 -0800 |
---|---|---|
committer | maximius <none@none> | 2009-11-04 19:14:10 -0800 |
commit | c15a8e201bab900e29cbc260e17451808e3dc897 (patch) | |
tree | 56da6033b88d866dd7c0da2325f2428dbd402e53 /src | |
parent | 6aba32bd2bf506cb61d775c52895d389a0997385 (diff) |
*Never add the same loot item twice.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/LootMgr.cpp | 24 | ||||
-rw-r--r-- | src/game/LootMgr.h | 3 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/game/LootMgr.cpp b/src/game/LootMgr.cpp index e1b6b0c5a21..9a035896cf3 100644 --- a/src/game/LootMgr.cpp +++ b/src/game/LootMgr.cpp @@ -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 diff --git a/src/game/LootMgr.h b/src/game/LootMgr.h index 5758242368e..2bb2b15f99b 100644 --- a/src/game/LootMgr.h +++ b/src/game/LootMgr.h @@ -137,6 +137,7 @@ struct Loot; class LootTemplate; typedef std::vector<QuestItem> QuestItemList; +typedef std::vector<LootItem> LootItemList; typedef std::map<uint32, QuestItemList *> QuestItemMap; typedef std::vector<LootStoreItem> LootStoreItemList; typedef UNORDERED_MAP<uint32, LootTemplate*> LootTemplateMap; @@ -153,7 +154,7 @@ class LootStore void Verify() const; void LoadAndCollectLootIds(LootIdSet& ids_set); - void CheckLootRefs(LootIdSet* ref_set = NULL) const;// check existence reference and remove it from ref_set + void CheckLootRefs(LootIdSet* ref_set = NULL) const; // check existence reference and remove it from ref_set void ReportUnusedIds(LootIdSet const& ids_set) const; void ReportNotExistedId(uint32 id) const; |