diff options
author | DDuarte <dnpd.dd@gmail.com> | 2014-09-19 15:04:24 +0100 |
---|---|---|
committer | DDuarte <dnpd.dd@gmail.com> | 2014-09-19 15:04:24 +0100 |
commit | 878b7d38111599a3033b7f6fb9460eb69a5d7bf2 (patch) | |
tree | 8c7a26ac456b232dc66265c4906f2a436705b805 /src | |
parent | d672e78a5b7a98f4b58936a0bd1c948028005dc0 (diff) |
Core/MapScripts: Use proper source unit in SCRIPT_COMMAND_TALK
Closes #13161
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Scripting/MapScripts.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index db7c26fe5cb..7c24c59c334 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -379,7 +379,6 @@ void Map::ScriptsProcess() TC_LOG_ERROR("scripts", "%s invalid chat type (%u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->Talk.ChatType); break; } - Unit* source = nullptr; if (step.script->Talk.Flags & SF_TALK_USE_PLAYER) source = _GetScriptPlayerSourceOrTarget(source, target, step.script); @@ -388,17 +387,24 @@ void Map::ScriptsProcess() if (source) { + Unit* sourceUnit = source->ToUnit(); + if (!sourceUnit) + { + TC_LOG_ERROR("scripts", "%s source object (%s) is not an unit, skipping.", step.script->GetDebugInfo().c_str(), source->GetGUID().ToString().c_str()); + break; + } + switch (step.script->Talk.ChatType) { case CHAT_TYPE_SAY: - source->Say(step.script->Talk.TextID, target); + sourceUnit->Say(step.script->Talk.TextID, target); break; case CHAT_TYPE_YELL: - source->Yell(step.script->Talk.TextID, target); + sourceUnit->Yell(step.script->Talk.TextID, target); break; case CHAT_TYPE_TEXT_EMOTE: case CHAT_TYPE_BOSS_EMOTE: - source->TextEmote(step.script->Talk.TextID, target, step.script->Talk.ChatType == CHAT_TYPE_BOSS_EMOTE); + sourceUnit->TextEmote(step.script->Talk.TextID, target, step.script->Talk.ChatType == CHAT_TYPE_BOSS_EMOTE); break; case CHAT_TYPE_WHISPER: case CHAT_MSG_RAID_BOSS_WHISPER: @@ -407,7 +413,7 @@ void Map::ScriptsProcess() if (!receiver) TC_LOG_ERROR("scripts", "%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str()); else - source->Whisper(step.script->Talk.TextID, receiver, step.script->Talk.ChatType == CHAT_MSG_RAID_BOSS_WHISPER); + sourceUnit->Whisper(step.script->Talk.TextID, receiver, step.script->Talk.ChatType == CHAT_MSG_RAID_BOSS_WHISPER); break; } default: |