From f2ba61e69cbd0a383a28c58701fd174f3474d4b9 Mon Sep 17 00:00:00 2001 From: NoFantasy Date: Wed, 12 May 2010 14:08:32 +0200 Subject: [PATCH] [9883] Change SCRIPT_COMMAND_TALK to support CHAT_TYPE_* using enum ChatType Making data consistent with other, similar tables like EventAI's text tables. This convert existing data and also adds support for all chat types. Signed-off-by: NoFantasy --- sql/mangos.sql | 2 +- sql/updates/9883_01_mangos_scripts.sql | 25 ++++++++++++++++++ sql/updates/Makefile.am | 2 ++ src/game/Map.cpp | 35 ++++++++++++++++++-------- src/game/ObjectMgr.cpp | 4 +-- src/game/World.h | 2 +- src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 8 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 sql/updates/9883_01_mangos_scripts.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 7259160e33b..53e11d79de5 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `cache_id` int(10) default '0', - `required_9881_01_mangos_scripts` bit(1) default NULL + `required_9883_01_mangos_scripts` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- diff --git a/sql/updates/9883_01_mangos_scripts.sql b/sql/updates/9883_01_mangos_scripts.sql new file mode 100644 index 00000000000..5252b3e9b8b --- /dev/null +++ b/sql/updates/9883_01_mangos_scripts.sql @@ -0,0 +1,25 @@ +ALTER TABLE db_version CHANGE COLUMN required_9881_01_mangos_scripts required_9883_01_mangos_scripts bit; + +-- convert to CHAT_TYPE_WHISPER +UPDATE event_scripts SET datalong=4 WHERE command=0 AND datalong=1; +UPDATE gameobject_scripts SET datalong=4 WHERE command=0 AND datalong=1; +UPDATE gossip_scripts SET datalong=4 WHERE command=0 AND datalong=1; +UPDATE quest_end_scripts SET datalong=4 WHERE command=0 AND datalong=1; +UPDATE quest_start_scripts SET datalong=4 WHERE command=0 AND datalong=1; +UPDATE spell_scripts SET datalong=4 WHERE command=0 AND datalong=1; + +-- convert to CHAT_TYPE_YELL +UPDATE event_scripts SET datalong=1 WHERE command=0 AND datalong=2; +UPDATE gameobject_scripts SET datalong=1 WHERE command=0 AND datalong=2; +UPDATE gossip_scripts SET datalong=1 WHERE command=0 AND datalong=2; +UPDATE quest_end_scripts SET datalong=1 WHERE command=0 AND datalong=2; +UPDATE quest_start_scripts SET datalong=1 WHERE command=0 AND datalong=2; +UPDATE spell_scripts SET datalong=1 WHERE command=0 AND datalong=2; + +-- convert to CHAT_TYPE_TEXT_EMOTE +UPDATE event_scripts SET datalong=2 WHERE command=0 AND datalong=3; +UPDATE gameobject_scripts SET datalong=2 WHERE command=0 AND datalong=3; +UPDATE gossip_scripts SET datalong=2 WHERE command=0 AND datalong=3; +UPDATE quest_end_scripts SET datalong=2 WHERE command=0 AND datalong=3; +UPDATE quest_start_scripts SET datalong=2 WHERE command=0 AND datalong=3; +UPDATE spell_scripts SET datalong=2 WHERE command=0 AND datalong=3; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 9c96d8bba90..e1244127b21 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -59,6 +59,7 @@ pkgdata_DATA = \ 9849_01_characters_saved_variables.sql \ 9854_01_mangos_spell_bonus_data.sql \ 9881_01_mangos_scripts.sql \ + 9883_01_mangos_scripts.sql \ README ## Additional files to include when running 'make dist' @@ -98,4 +99,5 @@ EXTRA_DIST = \ 9849_01_characters_saved_variables.sql \ 9854_01_mangos_spell_bonus_data.sql \ 9881_01_mangos_scripts.sql \ + 9883_01_mangos_scripts.sql \ README diff --git a/src/game/Map.cpp b/src/game/Map.cpp index c76dc16b8a4..d8ad165bbeb 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -2860,7 +2860,7 @@ void Map::ScriptsProcess() break; } - if (source->GetTypeId()!=TYPEID_UNIT) + if (source->GetTypeId() != TYPEID_UNIT) { sLog.outError("SCRIPT_COMMAND_TALK (script id %u) call for non-creature (TypeId: %u), skipping.", step.script->id, source->GetTypeId()); break; @@ -2868,25 +2868,38 @@ void Map::ScriptsProcess() uint64 unit_target = target ? target->GetGUID() : 0; - //datalong 0=normal say, 1=whisper, 2=yell, 3=emote text switch(step.script->datalong) { - case 0: // Say - ((Creature *)source)->Say(step.script->dataint, LANG_UNIVERSAL, unit_target); + case CHAT_TYPE_SAY: + ((Creature*)source)->Say(step.script->dataint, LANG_UNIVERSAL, unit_target); + break; + case CHAT_TYPE_YELL: + ((Creature*)source)->Yell(step.script->dataint, LANG_UNIVERSAL, unit_target); + break; + case CHAT_TYPE_TEXT_EMOTE: + ((Creature*)source)->TextEmote(step.script->dataint, unit_target); + break; + case CHAT_TYPE_BOSS_EMOTE: + ((Creature*)source)->TextEmote(step.script->dataint, unit_target, true); break; - case 1: // Whisper + case CHAT_TYPE_WHISPER: if (!unit_target) { - sLog.outError("SCRIPT_COMMAND_TALK (script id %u) attempt to whisper (%u) NULL, skipping.", step.script->id, step.script->datalong); + sLog.outError("SCRIPT_COMMAND_TALK (script id %u) attempt to whisper (%u) 0-guid, skipping.", step.script->id, step.script->datalong); break; } - ((Creature *)source)->Whisper(step.script->dataint, unit_target); + ((Creature*)source)->Whisper(step.script->dataint, unit_target); break; - case 2: // Yell - ((Creature *)source)->Yell(step.script->dataint, LANG_UNIVERSAL, unit_target); + case CHAT_TYPE_BOSS_WHISPER: + if (!unit_target) + { + sLog.outError("SCRIPT_COMMAND_TALK (script id %u) attempt to whisper (%u) 0-guid, skipping.", step.script->id, step.script->datalong); + break; + } + ((Creature*)source)->Whisper(step.script->dataint, unit_target, true); break; - case 3: // Emote text - ((Creature *)source)->TextEmote(step.script->dataint, unit_target); + case CHAT_TYPE_ZONE_YELL: + ((Creature*)source)->YellToZone(step.script->dataint, LANG_UNIVERSAL, unit_target); break; default: break; // must be already checked at load diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 15fb472c5b0..aba985b86cd 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4200,9 +4200,9 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename) { case SCRIPT_COMMAND_TALK: { - if(tmp.datalong > 3) + if(tmp.datalong > CHAT_TYPE_ZONE_YELL) { - sLog.outErrorDb("Table `%s` has invalid talk type (datalong = %u) in SCRIPT_COMMAND_TALK for script id %u",tablename,tmp.datalong,tmp.id); + sLog.outErrorDb("Table `%s` has invalid CHAT_TYPE_ (datalong = %u) in SCRIPT_COMMAND_TALK for script id %u",tablename,tmp.datalong,tmp.id); continue; } if(tmp.dataint==0) diff --git a/src/game/World.h b/src/game/World.h index ca241781bfa..fb95ac6b85a 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -386,7 +386,7 @@ enum RealmZone }; // DB scripting commands -#define SCRIPT_COMMAND_TALK 0 // source = unit, target=any, datalong ( 0=say, 1=whisper, 2=yell, 3=emote text) +#define SCRIPT_COMMAND_TALK 0 // source = unit, target=any, datalong (see enum ChatType for supported CHAT_TYPE_'s) #define SCRIPT_COMMAND_EMOTE 1 // source = unit, datalong = anim_id #define SCRIPT_COMMAND_FIELD_SET 2 // source = any, datalong = field_id, datalog2 = value #define SCRIPT_COMMAND_MOVE_TO 3 // source = Creature, datalog2 = time, x/y/z diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index d86e330b6a2..5b0b43acea3 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 "9882" + #define REVISION_NR "9883" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 2060d1dc999..1dfd48da933 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_9849_01_characters_saved_variables" - #define REVISION_DB_MANGOS "required_9881_01_mangos_scripts" + #define REVISION_DB_MANGOS "required_9883_01_mangos_scripts" #define REVISION_DB_REALMD "required_9748_01_realmd_realmlist" #endif // __REVISION_SQL_H__