mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[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:
parent
6901325e68
commit
ddd51cca6d
3 changed files with 23 additions and 11 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -3766,21 +3769,31 @@ void ObjectMgr::LoadQuests()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(qinfo->RewMailTemplateId)
|
if (qinfo->RewMailTemplateId)
|
||||||
{
|
{
|
||||||
if(!sMailTemplateStore.LookupEntry(qinfo->RewMailTemplateId))
|
if (!sMailTemplateStore.LookupEntry(qinfo->RewMailTemplateId))
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Quest %u has `RewMailTemplateId` = %u but mail template %u does not exist, quest will not have a mail reward.",
|
sLog.outErrorDb("Quest %u has `RewMailTemplateId` = %u but mail template %u does not exist, quest will not have a mail reward.",
|
||||||
qinfo->GetQuestId(),qinfo->RewMailTemplateId,qinfo->RewMailTemplateId);
|
qinfo->GetQuestId(),qinfo->RewMailTemplateId,qinfo->RewMailTemplateId);
|
||||||
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)
|
||||||
{
|
{
|
||||||
QuestMap::iterator qNextItr = mQuestTemplates.find(qinfo->NextQuestInChain);
|
QuestMap::iterator qNextItr = mQuestTemplates.find(qinfo->NextQuestInChain);
|
||||||
if(qNextItr == mQuestTemplates.end())
|
if (qNextItr == mQuestTemplates.end())
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Quest %u has `NextQuestInChain` = %u but quest %u does not exist, quest chain will not work.",
|
sLog.outErrorDb("Quest %u has `NextQuestInChain` = %u but quest %u does not exist, quest chain will not work.",
|
||||||
qinfo->GetQuestId(),qinfo->NextQuestInChain ,qinfo->NextQuestInChain );
|
qinfo->GetQuestId(),qinfo->NextQuestInChain ,qinfo->NextQuestInChain );
|
||||||
|
|
@ -3791,7 +3804,7 @@ void ObjectMgr::LoadQuests()
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill additional data stores
|
// fill additional data stores
|
||||||
if(qinfo->PrevQuestId)
|
if (qinfo->PrevQuestId)
|
||||||
{
|
{
|
||||||
if (mQuestTemplates.find(abs(qinfo->GetPrevQuestId())) == mQuestTemplates.end())
|
if (mQuestTemplates.find(abs(qinfo->GetPrevQuestId())) == mQuestTemplates.end())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue