From 29a723e41e90345f804b2fe644c7697bcfafa419 Mon Sep 17 00:00:00 2001 From: NoFantasy Date: Sun, 19 Sep 2010 20:49:59 +0200 Subject: [PATCH] [10507] Extend SCRIPT_COMMAND_TALK with option to set language for text Signed-off-by: NoFantasy --- doc/script_commands.txt | 1 + src/game/Map.cpp | 6 +++--- src/game/ObjectMgr.cpp | 5 +++++ src/game/ObjectMgr.h | 4 ++-- src/shared/revision_nr.h | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 324265326..1068aa693 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -93,6 +93,7 @@ spell_scripts * datalong (see enum ChatType for supported CHAT_TYPE_'s) * datalong2 = creature entry (searching for a buddy, closest to source) * datalong3 = creature search radius + * datalong4 = language * data_flags = flag_target_player_as_source = 0x01 flag_original_source_as_target = 0x02 flag_buddy_as_target = 0x04 diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 2b27723f0..936785151 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -2279,10 +2279,10 @@ void Map::ScriptsProcess() switch(step.script->talk.chatType) { case CHAT_TYPE_SAY: - pSource->MonsterSay(textId, LANG_UNIVERSAL, unit_target); + pSource->MonsterSay(textId, step.script->talk.language, unit_target); break; case CHAT_TYPE_YELL: - pSource->MonsterYell(textId, LANG_UNIVERSAL, unit_target); + pSource->MonsterYell(textId, step.script->talk.language, unit_target); break; case CHAT_TYPE_TEXT_EMOTE: pSource->MonsterTextEmote(textId, unit_target); @@ -2307,7 +2307,7 @@ void Map::ScriptsProcess() pSource->MonsterWhisper(textId, unit_target, true); break; case CHAT_TYPE_ZONE_YELL: - pSource->MonsterYellToZone(textId, LANG_UNIVERSAL, unit_target); + pSource->MonsterYellToZone(textId, step.script->talk.language, unit_target); break; default: break; // must be already checked at load diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 77affa779..c4dfc001e 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4442,6 +4442,11 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename) sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_TALK for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.talk.creatureEntry, tmp.id, tmp.talk.searchRadius); continue; } + if (!GetLanguageDescByID(tmp.talk.language)) + { + sLog.outErrorDb("Table `%s` has datalong4 = %u in SCRIPT_COMMAND_TALK for script id %u, but this language does not exist.", tablename, tmp.talk.language, tmp.id); + continue; + } if (tmp.talk.textId[0] == 0) { sLog.outErrorDb("Table `%s` has invalid talk text id (dataint = %i) in SCRIPT_COMMAND_TALK for script id %u", tablename, tmp.talk.textId, tmp.id); diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index a35d26775..a3e5e65b5 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -72,7 +72,7 @@ typedef UNORDERED_MAP GameTeleMap; enum eScriptCommand { SCRIPT_COMMAND_TALK = 0, // source = WorldObject, target = any/none, datalong (see enum ChatType for supported CHAT_TYPE_'s) - // datalong2 = creature entry (searching for a buddy, closest to source), datalong3 = creature search radius + // datalong2 = creature entry (searching for a buddy, closest to source), datalong3 = creature search radius, datalong4 = language // data_flags = flag_target_player_as_source = 0x01 // flag_original_source_as_target = 0x02 // flag_buddy_as_target = 0x04 @@ -132,7 +132,7 @@ struct ScriptInfo uint32 chatType; // datalong uint32 creatureEntry; // datalong2 uint32 searchRadius; // datalong3 - uint32 unused1; // datalong4 + uint32 language; // datalong4 uint32 flags; // data_flags int32 textId[MAX_TEXT_ID]; // dataint to dataint4 } talk; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a27a081ef..d05f2e2ce 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10506" + #define REVISION_NR "10507" #endif // __REVISION_NR_H__