aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <krzysiek.7.5.4@gmail.com>2011-09-19 09:12:46 -0700
committerShauren <krzysiek.7.5.4@gmail.com>2011-09-19 09:12:46 -0700
commitd7f9aafe9ff1ec4cbb02e57a8ebcfa9a5ba6381e (patch)
treece4f24e18b17e8088b05c2cd76736ecdb3a3e918 /src
parenta11bee31c39923e9129b457db5c6842e3693b3fb (diff)
parentc9a4efdf8f699c4f44ec3726123b5fd5077a3417 (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.cpp13
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.h2
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;