diff options
Diffstat (limited to 'src/server/game/Loot/LootMgr.cpp')
-rw-r--r-- | src/server/game/Loot/LootMgr.cpp | 58 |
1 files changed, 11 insertions, 47 deletions
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 992e75baca7..569e4c36c4e 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -101,7 +101,6 @@ class LootTemplate::LootGroup // A set of loot def void CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_set) const; LootStoreItemList* GetExplicitlyChancedItemList() { return &ExplicitlyChanced; } LootStoreItemList* GetEqualChancedItemList() { return &EqualChanced; } - void CopyConditions(ConditionContainer conditions); private: LootStoreItemList ExplicitlyChanced; // Entries with chances defined in DB LootStoreItemList EqualChanced; // Zero chances - every entry takes the same chance @@ -217,15 +216,6 @@ bool LootStore::HaveQuestLootForPlayer(uint32 loot_id, Player const* player) con return false; } -void LootStore::ResetConditions() -{ - for (LootTemplateMap::iterator itr = m_LootTemplates.begin(); itr != m_LootTemplates.end(); ++itr) - { - ConditionContainer empty; - itr->second->CopyConditions(empty); - } -} - LootTemplate const* LootStore::GetLootFor(uint32 loot_id) const { LootTemplateMap::const_iterator tab = m_LootTemplates.find(loot_id); @@ -453,15 +443,6 @@ bool LootTemplate::LootGroup::HasQuestDropForPlayer(Player const* player) const return false; } -void LootTemplate::LootGroup::CopyConditions(ConditionContainer /*conditions*/) -{ - for (LootStoreItemList::iterator i = ExplicitlyChanced.begin(); i != ExplicitlyChanced.end(); ++i) - (*i)->conditions.clear(); - - for (LootStoreItemList::iterator i = EqualChanced.begin(); i != EqualChanced.end(); ++i) - (*i)->conditions.clear(); -} - // Rolls an item from the group (if any takes its chance) and adds the item to the loot void LootTemplate::LootGroup::Process(Loot& loot, uint16 lootMode, Player const* personalLooter /*= nullptr*/) const { @@ -558,16 +539,6 @@ void LootTemplate::AddEntry(LootStoreItem* item) Entries.push_back(item); } -void LootTemplate::CopyConditions(ConditionContainer const& conditions) -{ - for (LootStoreItemList::iterator i = Entries.begin(); i != Entries.end(); ++i) - (*i)->conditions.clear(); - - for (LootGroups::iterator i = Groups.begin(); i != Groups.end(); ++i) - if (LootGroup* group = *i) - group->CopyConditions(conditions); -} - void LootTemplate::CopyConditions(LootItem* li) const { // Copies the conditions list from a template item to a LootItemData @@ -880,21 +851,15 @@ void LootTemplate::CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_se group->CheckLootRefs(store, ref_set); } -bool LootTemplate::addConditionItem(Condition* cond) +bool LootTemplate::LinkConditions(ConditionId const& id, ConditionsReference reference) { - if (!cond || !cond->isLoaded())//should never happen, checked at loading - { - TC_LOG_ERROR("loot", "LootTemplate::addConditionItem: condition is null"); - return false; - } - if (!Entries.empty()) { - for (LootStoreItemList::iterator i = Entries.begin(); i != Entries.end(); ++i) + for (LootStoreItem* item : Entries) { - if ((*i)->itemid == uint32(cond->SourceEntry)) + if (item->itemid == uint32(id.SourceEntry)) { - (*i)->conditions.push_back(cond); + item->conditions = std::move(reference); return true; } } @@ -902,20 +867,19 @@ bool LootTemplate::addConditionItem(Condition* cond) if (!Groups.empty()) { - for (LootGroups::iterator groupItr = Groups.begin(); groupItr != Groups.end(); ++groupItr) + for (LootGroup* group : Groups) { - LootGroup* group = *groupItr; if (!group) continue; LootStoreItemList* itemList = group->GetExplicitlyChancedItemList(); if (!itemList->empty()) { - for (LootStoreItemList::iterator i = itemList->begin(); i != itemList->end(); ++i) + for (LootStoreItem* item : *itemList) { - if ((*i)->itemid == uint32(cond->SourceEntry)) + if (item->itemid == uint32(id.SourceEntry)) { - (*i)->conditions.push_back(cond); + item->conditions = std::move(reference); return true; } } @@ -924,11 +888,11 @@ bool LootTemplate::addConditionItem(Condition* cond) itemList = group->GetEqualChancedItemList(); if (!itemList->empty()) { - for (LootStoreItemList::iterator i = itemList->begin(); i != itemList->end(); ++i) + for (LootStoreItem* item : *itemList) { - if ((*i)->itemid == uint32(cond->SourceEntry)) + if (item->itemid == uint32(id.SourceEntry)) { - (*i)->conditions.push_back(cond); + item->conditions = std::move(reference); return true; } } |