diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 730b5eca7..95ede3e24 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -150,7 +150,8 @@ Where "A -> B" means that the command is executed from A with B as target. 3 SCRIPT_COMMAND_MOVE_TO resultingSource = Creature If position is very near to current position, or x=y=z=0, then only orientation is changed - * datalong2 = travel time + * datalong2 = travel_speed*100 (use 0 for creature default movement) + * data_flags & SCRIPT_FLAG_COMMAND_ADDITIONAL: teleport unit to position * x/y/z/o 4 SCRIPT_COMMAND_FLAG_SET source = any diff --git a/sql/mangos.sql b/sql/mangos.sql index 88213325e..139d6c90a 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_11940_07_mangos_spell_scripts` bit(1) default NULL + `required_11947_01_mangos_dbscripts` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- diff --git a/sql/updates/11947_01_mangos_dbscripts.sql b/sql/updates/11947_01_mangos_dbscripts.sql new file mode 100644 index 000000000..7045386ef --- /dev/null +++ b/sql/updates/11947_01_mangos_dbscripts.sql @@ -0,0 +1,19 @@ +ALTER TABLE db_version CHANGE COLUMN required_11940_07_mangos_spell_scripts required_11947_01_mangos_dbscripts bit; + +-- Update teleport +UPDATE creature_movement_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); +UPDATE event_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); +UPDATE gameobject_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); +UPDATE gossip_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); +UPDATE quest_end_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); +UPDATE quest_start_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); +UPDATE spell_scripts SET data_flags=data_flags|8 WHERE command=3 AND datalong2=0 AND (x!=0 AND y!=0 AND z!=0); + +-- Set all move commands to default creature speed +UPDATE creature_movement_scripts SET datalong2=0 WHERE command=3; +UPDATE event_scripts SET datalong2=0 WHERE command=3; +UPDATE gameobject_scripts SET datalong2=0 WHERE command=3; +UPDATE gossip_scripts SET datalong2=0 WHERE command=3; +UPDATE quest_end_scripts SET datalong2=0 WHERE command=3; +UPDATE quest_start_scripts SET datalong2=0 WHERE command=3; +UPDATE spell_scripts SET datalong2=0 WHERE command=3; diff --git a/src/game/ScriptMgr.cpp b/src/game/ScriptMgr.cpp index e4938b4b5..5a8dbfa0e 100644 --- a/src/game/ScriptMgr.cpp +++ b/src/game/ScriptMgr.cpp @@ -1036,13 +1036,21 @@ void ScriptAction::HandleScriptStep() break; } - if (m_script->moveTo.travelTime != 0) + // For command additional teleport the unit + if (m_script->data_flags & SCRIPT_FLAG_COMMAND_ADDITIONAL) { - float speed = ((Unit*)pSource)->GetDistance(m_script->x, m_script->y, m_script->z) / ((float)m_script->moveTo.travelTime * 0.001f); - ((Unit*)pSource)->MonsterMoveWithSpeed(m_script->x, m_script->y, m_script->z, speed); - } - else ((Unit*)pSource)->NearTeleportTo(m_script->x, m_script->y, m_script->z, m_script->o != 0.0f ? m_script->o : ((Unit*)pSource)->GetOrientation()); + break; + } + + // Normal Movement + if (m_script->moveTo.travelSpeed) + ((Unit*)pSource)->MonsterMoveWithSpeed(m_script->x, m_script->y, m_script->z, m_script->moveTo.travelSpeed * 0.01f); + else + { + ((Unit*)pSource)->GetMotionMaster()->Clear(); + ((Unit*)pSource)->GetMotionMaster()->MovePoint(0, m_script->x, m_script->y, m_script->z); + } break; } case SCRIPT_COMMAND_FLAG_SET: @@ -1175,8 +1183,7 @@ void ScriptAction::HandleScriptStep() pGo->SetLootState(GO_READY); pGo->SetRespawnTime(time_to_despawn); //despawn object in ? seconds - - pGo->GetMap()->Add(pGo); + pGo->Refresh(); break; } case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE: diff --git a/src/game/ScriptMgr.h b/src/game/ScriptMgr.h index 4a68723b4..754a30816 100644 --- a/src/game/ScriptMgr.h +++ b/src/game/ScriptMgr.h @@ -48,7 +48,8 @@ enum ScriptCommand // resSource, resTar SCRIPT_COMMAND_EMOTE = 1, // resSource = Unit, resTarget = Unit/none // datalong1 = emote_id SCRIPT_COMMAND_FIELD_SET = 2, // source = any, datalong3 = field_id, datalong2 = value - SCRIPT_COMMAND_MOVE_TO = 3, // resSource = Creature, datalong2 = time, x/y/z + SCRIPT_COMMAND_MOVE_TO = 3, // resSource = Creature, datalong2 = travel_speed*100, x/y/z + // data_flags & SCRIPT_FLAG_COMMAND_ADDITIONAL: teleport unit to position SCRIPT_COMMAND_FLAG_SET = 4, // source = any, datalong3 = field_id, datalong2 = bitmask SCRIPT_COMMAND_FLAG_REMOVE = 5, // source = any, datalong3 = field_id, datalong2 = bitmask SCRIPT_COMMAND_TELEPORT_TO = 6, // source or target with Player, datalong2 = map_id, x/y/z @@ -128,7 +129,7 @@ struct ScriptInfo struct // SCRIPT_COMMAND_MOVE_TO (3) { uint32 unused1; // datalong - uint32 travelTime; // datalong2 + uint32 travelSpeed; // datalong2 } moveTo; struct // SCRIPT_COMMAND_FLAG_SET (4) @@ -334,6 +335,7 @@ struct ScriptInfo { switch (command) { + case SCRIPT_COMMAND_MOVE_TO: case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE: case SCRIPT_COMMAND_CAST_SPELL: case SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b62469b64..f83fb6ae7 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 "11946" + #define REVISION_NR "11947" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index abe66d29e..66fc94249 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_11785_02_characters_instance" - #define REVISION_DB_MANGOS "required_11940_07_mangos_spell_scripts" + #define REVISION_DB_MANGOS "required_11947_01_mangos_dbscripts" #define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version" #endif // __REVISION_SQL_H__