diff options
Diffstat (limited to 'src/game/LootMgr.cpp')
-rw-r--r-- | src/game/LootMgr.cpp | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/src/game/LootMgr.cpp b/src/game/LootMgr.cpp index 6f131167c5e..2cfd92f11fc 100644 --- a/src/game/LootMgr.cpp +++ b/src/game/LootMgr.cpp @@ -42,10 +42,10 @@ LootStore LootTemplates_Disenchant( "disenchant_loot_template", "item disenc LootStore LootTemplates_Fishing( "fishing_loot_template", "area id", true); LootStore LootTemplates_Gameobject( "gameobject_loot_template", "gameobject entry", true); LootStore LootTemplates_Item( "item_loot_template", "item entry", true); +LootStore LootTemplates_Mail( "mail_loot_template", "mail template id", false); LootStore LootTemplates_Milling( "milling_loot_template", "item entry (herb)", true); LootStore LootTemplates_Pickpocketing("pickpocketing_loot_template","creature pickpocket lootid", true); LootStore LootTemplates_Prospecting( "prospecting_loot_template", "item entry (ore)", true); -LootStore LootTemplates_QuestMail( "quest_mail_loot_template", "quest id (with mail template)",false); LootStore LootTemplates_Reference( "reference_loot_template", "reference id", false); LootStore LootTemplates_Skinning( "skinning_loot_template", "creature skinning id", true); LootStore LootTemplates_Spell( "spell_loot_template", "spell id (random item creating)",false); @@ -388,18 +388,19 @@ void Loot::AddItem(LootStoreItem const & item) } // Calls processor of corresponding LootTemplate (which handles everything including references) -void Loot::FillLoot(uint32 loot_id, LootStore const& store, Player* loot_owner, bool personal, uint16 lootMode /*= DEFAULT_LOOT_MODE*/) +bool Loot::FillLoot(uint32 loot_id, LootStore const& store, Player* loot_owner, bool personal, bool noEmptyError, uint16 lootMode /*= DEFAULT_LOOT_MODE*/) { // Must be provided if (!loot_owner) - return; + return false; LootTemplate const* tab = store.GetLootFor(loot_id); if (!tab) { - sLog.outErrorDb("Table '%s' loot id #%u used but it doesn't have records.",store.GetName(),loot_id); - return; + if (!noEmptyError) + sLog.outErrorDb("Table '%s' loot id #%u used but it doesn't have records.",store.GetName(),loot_id); + return false; } items.reserve(MAX_NR_LOOT_ITEMS); @@ -418,6 +419,8 @@ void Loot::FillLoot(uint32 loot_id, LootStore const& store, Player* loot_owner, // ... for personal loot else FillNotNormalLootFor(loot_owner); + + return true; } void Loot::FillNotNormalLootFor(Player* pl) @@ -1351,28 +1354,19 @@ void LoadLootTemplates_Prospecting() LootTemplates_Prospecting.ReportUnusedIds(ids_set); } -void LoadLootTemplates_QuestMail() +void LoadLootTemplates_Mail() { LootIdSet ids_set; - LootTemplates_QuestMail.LoadAndCollectLootIds(ids_set); + LootTemplates_Mail.LoadAndCollectLootIds(ids_set); // remove real entries and check existence loot - ObjectMgr::QuestMap const& questMap = objmgr.GetQuestTemplates(); - for (ObjectMgr::QuestMap::const_iterator itr = questMap.begin(); itr != questMap.end(); ++itr) - { - if (!itr->second->GetRewMailTemplateId()) - continue; - - if (ids_set.count(itr->first)) - ids_set.erase(itr->first); - /* disabled reporting: some quest mails not include items - else - LootTemplates_QuestMail.ReportNotExistedId(itr->first); - */ - } + for(uint32 i = 1; i < sMailTemplateStore.GetNumRows(); ++i) + if(sMailTemplateStore.LookupEntry(i)) + if(ids_set.count(i)) + ids_set.erase(i); // output error for any still listed (not referenced from appropriate table) ids - LootTemplates_QuestMail.ReportUnusedIds(ids_set); + LootTemplates_Mail.ReportUnusedIds(ids_set); } void LoadLootTemplates_Skinning() @@ -1449,7 +1443,7 @@ void LoadLootTemplates_Reference() LootTemplates_Skinning.CheckLootRefs(&ids_set); LootTemplates_Disenchant.CheckLootRefs(&ids_set); LootTemplates_Prospecting.CheckLootRefs(&ids_set); - LootTemplates_QuestMail.CheckLootRefs(&ids_set); + LootTemplates_Mail.CheckLootRefs(&ids_set); LootTemplates_Reference.CheckLootRefs(&ids_set); // output error for any still listed ids (not referenced from any loot table) |