aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scripting/MapScripts.cpp
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2014-09-13 20:41:31 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2014-09-13 20:41:31 +0200
commit59baaeec48fdd92d8b4067152772e5806be9ff53 (patch)
treeb4031184f1e16cfb9f87b8c8f5ec5ba5c7ba1f70 /src/server/game/Scripting/MapScripts.cpp
parent11bb300c6977f32d5240a698a12e258dc121a513 (diff)
Core/Chat: cleanup MonsterText methods
Diffstat (limited to 'src/server/game/Scripting/MapScripts.cpp')
-rw-r--r--src/server/game/Scripting/MapScripts.cpp93
1 files changed, 29 insertions, 64 deletions
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index b32fa288185..888c1ec7e8d 100644
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -373,84 +373,49 @@ void Map::ScriptsProcess()
switch (step.script->command)
{
case SCRIPT_COMMAND_TALK:
+ {
if (step.script->Talk.ChatType > CHAT_TYPE_WHISPER && step.script->Talk.ChatType != CHAT_MSG_RAID_BOSS_WHISPER)
{
TC_LOG_ERROR("scripts", "%s invalid chat type (%u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->Talk.ChatType);
break;
}
- if (step.script->Talk.Flags & SF_TALK_USE_PLAYER)
- {
- if (Player* player = _GetScriptPlayerSourceOrTarget(source, target, step.script))
- {
- LocaleConstant loc_idx = player->GetSession()->GetSessionDbLocaleIndex();
- BroadcastText const* broadcastText = sObjectMgr->GetBroadcastText(step.script->Talk.TextID);
- std::string text = broadcastText->GetText(loc_idx, player->getGender());
+ Unit* source = nullptr;
- switch (step.script->Talk.ChatType)
- {
- case CHAT_TYPE_SAY:
- player->Say(text, LANG_UNIVERSAL);
- break;
- case CHAT_TYPE_YELL:
- player->Yell(text, LANG_UNIVERSAL);
- break;
- case CHAT_TYPE_TEXT_EMOTE:
- case CHAT_TYPE_BOSS_EMOTE:
- player->TextEmote(text);
- break;
- case CHAT_TYPE_WHISPER:
- case CHAT_MSG_RAID_BOSS_WHISPER:
- {
- uint64 targetGUID = target ? target->GetGUID() : 0;
- if (!targetGUID || !IS_PLAYER_GUID(targetGUID))
- TC_LOG_ERROR("scripts", "%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str());
- else
- player->Whisper(text, LANG_UNIVERSAL, targetGUID);
- break;
- }
- default:
- break; // must be already checked at load
- }
- }
- }
+ if (step.script->Talk.Flags & SF_TALK_USE_PLAYER)
+ source = _GetScriptPlayerSourceOrTarget(source, target, step.script);
else
+ source = _GetScriptCreatureSourceOrTarget(source, target, step.script);
+
+ if (source)
{
- // Source or target must be Creature.
- if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
+ switch (step.script->Talk.ChatType)
{
- uint64 targetGUID = target ? target->GetGUID() : 0;
- switch (step.script->Talk.ChatType)
+ case CHAT_TYPE_SAY:
+ source->Say(step.script->Talk.TextID, target);
+ break;
+ case CHAT_TYPE_YELL:
+ source->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);
+ break;
+ case CHAT_TYPE_WHISPER:
+ case CHAT_MSG_RAID_BOSS_WHISPER:
{
- case CHAT_TYPE_SAY:
- cSource->MonsterSay(step.script->Talk.TextID, LANG_UNIVERSAL, target);
- break;
- case CHAT_TYPE_YELL:
- cSource->MonsterYell(step.script->Talk.TextID, LANG_UNIVERSAL, target);
- break;
- case CHAT_TYPE_TEXT_EMOTE:
- cSource->MonsterTextEmote(step.script->Talk.TextID, target);
- break;
- case CHAT_TYPE_BOSS_EMOTE:
- cSource->MonsterTextEmote(step.script->Talk.TextID, target, true);
- break;
- case CHAT_TYPE_WHISPER:
- if (!targetGUID || !IS_PLAYER_GUID(targetGUID))
- TC_LOG_ERROR("scripts", "%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str());
- else
- cSource->MonsterWhisper(step.script->Talk.TextID, target->ToPlayer());
- break;
- case CHAT_MSG_RAID_BOSS_WHISPER:
- if (!targetGUID || !IS_PLAYER_GUID(targetGUID))
- TC_LOG_ERROR("scripts", "%s attempt to raidbosswhisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str());
- else
- cSource->MonsterWhisper(step.script->Talk.TextID, target->ToPlayer(), true);
- break;
- default:
- break; // must be already checked at load
+ Player* receiver = target ? target->ToPlayer() : nullptr;
+ 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);
+ break;
}
+ default:
+ break; // must be already checked at load
}
}
break;
+ }
case SCRIPT_COMMAND_EMOTE:
// Source or target must be Creature.