aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r--src/server/game/Maps/Map.cpp93
1 files changed, 64 insertions, 29 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 5eccf0666a4..2edc516c427 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -3030,40 +3030,75 @@ void Map::ScriptsProcess()
switch (step.script->command)
{
case SCRIPT_COMMAND_TALK:
- // Source or target must be Creature.
- if (Creature *cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
+ if (step.script->datalong > CHAT_TYPE_WHISPER)
{
- if (step.script->datalong > CHAT_TYPE_WHISPER)
+ sLog.outError("%s invalid chat type (%u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->datalong);
+ break;
+ }
+ if (step.script->datalong2 & 0x1)
+ {
+ if (Player *pSource = _GetScriptPlayerSourceOrTarget(source, target, step.script))
{
- sLog.outError("%s invalid chat type (%u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->datalong);
- break;
- }
+ uint64 targetGUID = target ? target->GetGUID() : 0;
+ int loc_idx = pSource->GetSession()->GetSessionDbLocaleIndex();
+ const std::string text(sObjectMgr.GetTrinityString(step.script->dataint, loc_idx));
- uint64 targetGUID = target ? target->GetGUID() : 0;
- switch (step.script->datalong)
+ switch (step.script->datalong)
+ {
+ case CHAT_TYPE_SAY:
+ pSource->Say(text, LANG_UNIVERSAL);
+ break;
+ case CHAT_TYPE_YELL:
+ pSource->Yell(text, LANG_UNIVERSAL);
+ break;
+ case CHAT_TYPE_TEXT_EMOTE:
+ case CHAT_TYPE_BOSS_EMOTE:
+ pSource->TextEmote(text);
+ break;
+ case CHAT_TYPE_WHISPER:
+ if (!targetGUID || !IS_PLAYER_GUID(targetGUID))
+ {
+ sLog.outError("%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str());
+ break;
+ }
+ pSource->Whisper(text, LANG_UNIVERSAL, targetGUID);
+ break;
+ default:
+ break; // must be already checked at load
+ }
+ }
+ }
+ else
+ {
+ // Source or target must be Creature.
+ if (Creature *cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script))
{
- case CHAT_TYPE_SAY:
- cSource->Say(step.script->dataint, LANG_UNIVERSAL, targetGUID);
- break;
- case CHAT_TYPE_YELL:
- cSource->Yell(step.script->dataint, LANG_UNIVERSAL, targetGUID);
- break;
- case CHAT_TYPE_TEXT_EMOTE:
- cSource->TextEmote(step.script->dataint, targetGUID);
- break;
- case CHAT_TYPE_BOSS_EMOTE:
- cSource->MonsterTextEmote(step.script->dataint, targetGUID, true);
- break;
- case CHAT_TYPE_WHISPER:
- if (!targetGUID || !IS_PLAYER_GUID(targetGUID))
- {
- sLog.outError("%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str());
+ uint64 targetGUID = target ? target->GetGUID() : 0;
+ switch (step.script->datalong)
+ {
+ case CHAT_TYPE_SAY:
+ cSource->Say(step.script->dataint, LANG_UNIVERSAL, targetGUID);
break;
- }
- cSource->Whisper(step.script->dataint, targetGUID);
- break;
- default:
- break; // must be already checked at load
+ case CHAT_TYPE_YELL:
+ cSource->Yell(step.script->dataint, LANG_UNIVERSAL, targetGUID);
+ break;
+ case CHAT_TYPE_TEXT_EMOTE:
+ cSource->TextEmote(step.script->dataint, targetGUID);
+ break;
+ case CHAT_TYPE_BOSS_EMOTE:
+ cSource->MonsterTextEmote(step.script->dataint, targetGUID, true);
+ break;
+ case CHAT_TYPE_WHISPER:
+ if (!targetGUID || !IS_PLAYER_GUID(targetGUID))
+ {
+ sLog.outError("%s attempt to whisper to non-player unit, skipping.", step.script->GetDebugInfo().c_str());
+ break;
+ }
+ cSource->Whisper(step.script->dataint, targetGUID);
+ break;
+ default:
+ break; // must be already checked at load
+ }
}
}
break;