mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[7417] Fixed crash at access by unexpected NULL pointer in quest templates map.
Never never use operator[] for _access_ to elements std::map.
This commit is contained in:
parent
ba1cfbf121
commit
ebccd69b2f
2 changed files with 11 additions and 7 deletions
|
|
@ -3282,14 +3282,15 @@ void ObjectMgr::LoadQuests()
|
||||||
|
|
||||||
if(qinfo->NextQuestInChain)
|
if(qinfo->NextQuestInChain)
|
||||||
{
|
{
|
||||||
if(mQuestTemplates.find(qinfo->NextQuestInChain) == mQuestTemplates.end())
|
QuestMap::iterator qNextItr = mQuestTemplates.find(qinfo->NextQuestInChain);
|
||||||
|
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 );
|
||||||
qinfo->NextQuestInChain = 0;
|
qinfo->NextQuestInChain = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
mQuestTemplates[qinfo->NextQuestInChain]->prevChainQuests.push_back(qinfo->GetQuestId());
|
qNextItr->second->prevChainQuests.push_back(qinfo->GetQuestId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill additional data stores
|
// fill additional data stores
|
||||||
|
|
@ -3307,14 +3308,15 @@ void ObjectMgr::LoadQuests()
|
||||||
|
|
||||||
if(qinfo->NextQuestId)
|
if(qinfo->NextQuestId)
|
||||||
{
|
{
|
||||||
if (mQuestTemplates.find(abs(qinfo->GetNextQuestId())) == mQuestTemplates.end())
|
QuestMap::iterator qNextItr = mQuestTemplates.find(abs(qinfo->GetNextQuestId()));
|
||||||
|
if (qNextItr == mQuestTemplates.end())
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Quest %d has NextQuestId %i, but no such quest", qinfo->GetQuestId(), qinfo->GetNextQuestId());
|
sLog.outErrorDb("Quest %d has NextQuestId %i, but no such quest", qinfo->GetQuestId(), qinfo->GetNextQuestId());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int32 signedQuestId = qinfo->NextQuestId < 0 ? -int32(qinfo->GetQuestId()) : int32(qinfo->GetQuestId());
|
int32 signedQuestId = qinfo->NextQuestId < 0 ? -int32(qinfo->GetQuestId()) : int32(qinfo->GetQuestId());
|
||||||
mQuestTemplates[abs(qinfo->GetNextQuestId())]->prevQuests.push_back(signedQuestId);
|
qNextItr->second->prevQuests.push_back(signedQuestId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4949,7 +4951,8 @@ void ObjectMgr::LoadAreaTriggerTeleports()
|
||||||
|
|
||||||
if(at.requiredQuest)
|
if(at.requiredQuest)
|
||||||
{
|
{
|
||||||
if(!mQuestTemplates[at.requiredQuest])
|
QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuest);
|
||||||
|
if(qReqItr != mQuestTemplates.end())
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Required Quest %u not exist for trigger %u, remove quest done requirement.",at.requiredQuest,Trigger_ID);
|
sLog.outErrorDb("Required Quest %u not exist for trigger %u, remove quest done requirement.",at.requiredQuest,Trigger_ID);
|
||||||
at.requiredQuest = 0;
|
at.requiredQuest = 0;
|
||||||
|
|
@ -4958,7 +4961,8 @@ void ObjectMgr::LoadAreaTriggerTeleports()
|
||||||
|
|
||||||
if(at.requiredQuestHeroic)
|
if(at.requiredQuestHeroic)
|
||||||
{
|
{
|
||||||
if(!mQuestTemplates[at.requiredQuestHeroic])
|
QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuestHeroic);
|
||||||
|
if(qReqItr != mQuestTemplates.end())
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Required Quest %u not exist for trigger %u, remove quest done requirement.",at.requiredQuestHeroic,Trigger_ID);
|
sLog.outErrorDb("Required Quest %u not exist for trigger %u, remove quest done requirement.",at.requiredQuestHeroic,Trigger_ID);
|
||||||
at.requiredQuestHeroic = 0;
|
at.requiredQuestHeroic = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7416"
|
#define REVISION_NR "7417"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue