diff options
author | Shauren <krzysiek.7.5.4@gmail.com> | 2011-09-19 09:12:46 -0700 |
---|---|---|
committer | Shauren <krzysiek.7.5.4@gmail.com> | 2011-09-19 09:12:46 -0700 |
commit | d7f9aafe9ff1ec4cbb02e57a8ebcfa9a5ba6381e (patch) | |
tree | ce4f24e18b17e8088b05c2cd76736ecdb3a3e918 /src | |
parent | a11bee31c39923e9129b457db5c6842e3693b3fb (diff) | |
parent | c9a4efdf8f699c4f44ec3726123b5fd5077a3417 (diff) |
Merge pull request #3114 from megamage/master
Fix crash caused by invalid talker in SmartScript. Closes #3082.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 13 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.h | 2 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 680c0815c6b..c0f844825f5 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -46,7 +46,7 @@ SmartScript::SmartScript() mLastTextID = 0; mTextGUID = 0; mUseTextTimer = false; - talker = NULL; + mTalkerEntry = 0; mTemplate = SMARTAI_TEMPLATE_BASIC; meOrigGUID = 0; goOrigGUID = 0; @@ -138,7 +138,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u return; ObjectList* targets = GetTargets(e, unit); - talker = me; + Creature* talker = me; if (targets) { for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) @@ -153,6 +153,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u delete targets; } + mTalkerEntry = talker->GetEntry(); mLastTextID = e.action.talk.textGroupID; mTextTimer = e.action.talk.duration; mTextGUID = IsPlayer(GetLastInvoker()) ? GetLastInvoker()->GetGUID() : 0;//invoker, used for $vars in texts @@ -2705,13 +2706,13 @@ void SmartScript::OnUpdate(uint32 const diff) { if (mTextTimer < diff) { - uint32 temp = mLastTextID; + uint32 textID = mLastTextID; mLastTextID = 0; + uint32 entry = mTalkerEntry; + mTalkerEntry = 0; mTextTimer = 0; mUseTextTimer = false; - uint32 tempEntry = talker?talker->GetEntry():0; - talker = NULL; - ProcessEventsFor(SMART_EVENT_TEXT_OVER, NULL, temp, tempEntry); + ProcessEventsFor(SMART_EVENT_TEXT_OVER, NULL, textID, entry); } else mTextTimer -= diff; } } diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 62855154c8a..aa4eeb602c0 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -248,7 +248,7 @@ class SmartScript uint32 mTextTimer; uint32 mLastTextID; uint64 mTextGUID; - Creature* talker; + uint32 mTalkerEntry; bool mUseTextTimer; SMARTAI_TEMPLATE mTemplate; |