[8752] Changes in mail template related server load checks.

* Allow loot for not used in quest mail templates.
  This let use mail template based mails from scripts for example.
* Not allow use same mail template id in more ine quests.
This commit is contained in:
VladimirMangos 2009-10-29 13:25:34 +03:00
parent 6901325e68
commit ddd51cca6d
3 changed files with 23 additions and 11 deletions

View file

@ -1262,11 +1262,10 @@ void LoadLootTemplates_Mail()
LootTemplates_Mail.LoadAndCollectLootIds(ids_set); LootTemplates_Mail.LoadAndCollectLootIds(ids_set);
// remove real entries and check existence loot // remove real entries and check existence loot
ObjectMgr::QuestMap const& questMap = objmgr.GetQuestTemplates(); for(uint32 i = 1; i < sMailTemplateStore.GetNumRows(); ++i )
for(ObjectMgr::QuestMap::const_iterator itr = questMap.begin(); itr != questMap.end(); ++itr ) if(sMailTemplateStore.LookupEntry(i))
if(uint32 mail_template_id = itr->second->GetRewMailTemplateId()) if(ids_set.count(i))
if(ids_set.count(mail_template_id)) ids_set.erase(i);
ids_set.erase(mail_template_id);
// output error for any still listed (not referenced from appropriate table) ids // output error for any still listed (not referenced from appropriate table) ids
LootTemplates_Mail.ReportUnusedIds(ids_set); LootTemplates_Mail.ReportUnusedIds(ids_set);

View file

@ -3278,6 +3278,9 @@ void ObjectMgr::LoadQuests()
delete result; delete result;
// Post processing // Post processing
std::map<uint32,uint32> usedMailTemplates;
for (QuestMap::iterator iter = mQuestTemplates.begin(); iter != mQuestTemplates.end(); ++iter) for (QuestMap::iterator iter = mQuestTemplates.begin(); iter != mQuestTemplates.end(); ++iter)
{ {
Quest * qinfo = iter->second; Quest * qinfo = iter->second;
@ -3775,6 +3778,16 @@ void ObjectMgr::LoadQuests()
qinfo->RewMailTemplateId = 0; // no mail will send to player qinfo->RewMailTemplateId = 0; // no mail will send to player
qinfo->RewMailDelaySecs = 0; // no mail will send to player qinfo->RewMailDelaySecs = 0; // no mail will send to player
} }
else if (usedMailTemplates.find(qinfo->RewMailTemplateId) != usedMailTemplates.end())
{
std::map<uint32,uint32>::const_iterator used_mt_itr = usedMailTemplates.find(qinfo->RewMailTemplateId);
sLog.outErrorDb("Quest %u has `RewMailTemplateId` = %u but mail template %u already used for quest %u, quest will not have a mail reward.",
qinfo->GetQuestId(),qinfo->RewMailTemplateId,qinfo->RewMailTemplateId,used_mt_itr->second);
qinfo->RewMailTemplateId = 0; // no mail will send to player
qinfo->RewMailDelaySecs = 0; // no mail will send to player
}
else
usedMailTemplates[qinfo->RewMailTemplateId] = qinfo->GetQuestId();
} }
if (qinfo->NextQuestInChain) if (qinfo->NextQuestInChain)

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8751" #define REVISION_NR "8752"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__