[11947] Improve SCRIPT_COMMAND_MOVE_TO

This changes the handling of SCRIPT_COMMAND_MOVE_TO, to not expect some travel-time, but directly provide the speed for the movement (*100).

Attention to DB-Devs, please check your MOVE_TO scripts.

Signed-off-by: Schmoozerd <schmoozerd@scriptdev2.com>
This commit is contained in:
Xfurry 2012-04-10 23:36:57 +02:00 committed by Schmoozerd
parent 78b0ffe4eb
commit ea08f7c5d7
7 changed files with 42 additions and 13 deletions

View file

@ -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 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 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 * x/y/z/o
4 SCRIPT_COMMAND_FLAG_SET source = any 4 SCRIPT_COMMAND_FLAG_SET source = any

View file

@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
`version` varchar(120) default NULL, `version` varchar(120) default NULL,
`creature_ai_version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL,
`cache_id` int(10) default '0', `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'; ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
-- --

View file

@ -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;

View file

@ -1036,13 +1036,21 @@ void ScriptAction::HandleScriptStep()
break; 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()); ((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; break;
} }
case SCRIPT_COMMAND_FLAG_SET: case SCRIPT_COMMAND_FLAG_SET:
@ -1175,8 +1183,7 @@ void ScriptAction::HandleScriptStep()
pGo->SetLootState(GO_READY); pGo->SetLootState(GO_READY);
pGo->SetRespawnTime(time_to_despawn); //despawn object in ? seconds pGo->SetRespawnTime(time_to_despawn); //despawn object in ? seconds
pGo->Refresh();
pGo->GetMap()->Add(pGo);
break; break;
} }
case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE: case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE:

View file

@ -48,7 +48,8 @@ enum ScriptCommand // resSource, resTar
SCRIPT_COMMAND_EMOTE = 1, // resSource = Unit, resTarget = Unit/none SCRIPT_COMMAND_EMOTE = 1, // resSource = Unit, resTarget = Unit/none
// datalong1 = emote_id // datalong1 = emote_id
SCRIPT_COMMAND_FIELD_SET = 2, // source = any, datalong3 = field_id, datalong2 = value 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_SET = 4, // source = any, datalong3 = field_id, datalong2 = bitmask
SCRIPT_COMMAND_FLAG_REMOVE = 5, // 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 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) struct // SCRIPT_COMMAND_MOVE_TO (3)
{ {
uint32 unused1; // datalong uint32 unused1; // datalong
uint32 travelTime; // datalong2 uint32 travelSpeed; // datalong2
} moveTo; } moveTo;
struct // SCRIPT_COMMAND_FLAG_SET (4) struct // SCRIPT_COMMAND_FLAG_SET (4)
@ -334,6 +335,7 @@ struct ScriptInfo
{ {
switch (command) switch (command)
{ {
case SCRIPT_COMMAND_MOVE_TO:
case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE: case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE:
case SCRIPT_COMMAND_CAST_SPELL: case SCRIPT_COMMAND_CAST_SPELL:
case SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL: case SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL:

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "11946" #define REVISION_NR "11947"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__

View file

@ -1,6 +1,6 @@
#ifndef __REVISION_SQL_H__ #ifndef __REVISION_SQL_H__
#define __REVISION_SQL_H__ #define __REVISION_SQL_H__
#define REVISION_DB_CHARACTERS "required_11785_02_characters_instance" #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" #define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
#endif // __REVISION_SQL_H__ #endif // __REVISION_SQL_H__