mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
Game/Mapscripts: Implement SCRIPT_COMMAND_MOVEMENT
Cherry pick from 85357c75c4
This commit is contained in:
@@ -111,6 +111,7 @@ std::string GetScriptCommandName(ScriptCommands command)
|
||||
case SCRIPT_COMMAND_MODEL: res = "SCRIPT_COMMAND_MODEL"; break;
|
||||
case SCRIPT_COMMAND_CLOSE_GOSSIP: res = "SCRIPT_COMMAND_CLOSE_GOSSIP"; break;
|
||||
case SCRIPT_COMMAND_PLAYMOVIE: res = "SCRIPT_COMMAND_PLAYMOVIE"; break;
|
||||
case SCRIPT_COMMAND_MOVEMENT: res = "SCRIPT_COMMAND_MOVEMENT"; break;
|
||||
case SCRIPT_COMMAND_PLAY_ANIMKIT: res = "SCRIPT_COMMAND_PLAY_ANIMKIT"; break;
|
||||
default:
|
||||
{
|
||||
|
||||
@@ -115,7 +115,8 @@ enum ScriptCommands
|
||||
SCRIPT_COMMAND_MODEL = 32, // source = Creature, datalong = model id
|
||||
SCRIPT_COMMAND_CLOSE_GOSSIP = 33, // source = Player
|
||||
SCRIPT_COMMAND_PLAYMOVIE = 34, // source = Player, datalong = movie id
|
||||
SCRIPT_COMMAND_PLAY_ANIMKIT = 35 // source = Creature, datalong = AnimKit id
|
||||
SCRIPT_COMMAND_MOVEMENT = 35, // soucre = Creature, datalong = MovementType, datalong2 = MovementDistance (spawndist f.ex.), dataint = pathid
|
||||
SCRIPT_COMMAND_PLAY_ANIMKIT = 36 // source = Creature, datalong = AnimKit id
|
||||
};
|
||||
|
||||
// Benchmarked: Faster than std::unordered_map (insert/find)
|
||||
@@ -365,7 +366,14 @@ struct ScriptInfo
|
||||
uint32 MovieID; // datalong
|
||||
} PlayMovie;
|
||||
|
||||
struct // SCRIPT_COMMAND_PLAY_ANIMKIT (35)
|
||||
struct // SCRIPT_COMMAND_MOVEMENT (35)
|
||||
{
|
||||
uint32 MovementType; // datalong
|
||||
uint32 MovementDistance; // datalong2
|
||||
int32 Path; // dataint
|
||||
} Movement;
|
||||
|
||||
struct // SCRIPT_COMMAND_PLAY_ANIMKIT (36)
|
||||
{
|
||||
uint32 AnimKitID; // datalong
|
||||
} PlayAnimKit;
|
||||
|
||||
@@ -886,6 +886,28 @@ void Map::ScriptsProcess()
|
||||
player->SendMovieStart(step.script->PlayMovie.MovieID);
|
||||
break;
|
||||
|
||||
case SCRIPT_COMMAND_MOVEMENT:
|
||||
// Source must be Creature.
|
||||
if (Creature* cSource = _GetScriptCreature(source, true, step.script))
|
||||
{
|
||||
if (!cSource->IsAlive())
|
||||
return;
|
||||
|
||||
cSource->GetMotionMaster()->MovementExpired();
|
||||
cSource->GetMotionMaster()->MoveIdle();
|
||||
|
||||
switch (step.script->Movement.MovementType)
|
||||
{
|
||||
case RANDOM_MOTION_TYPE:
|
||||
cSource->GetMotionMaster()->MoveRandom((float)step.script->Movement.MovementDistance);
|
||||
break;
|
||||
case WAYPOINT_MOTION_TYPE:
|
||||
cSource->GetMotionMaster()->MovePath(step.script->Movement.Path, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SCRIPT_COMMAND_PLAY_ANIMKIT:
|
||||
// Source must be Creature.
|
||||
if (Creature* cSource = _GetScriptCreature(source, true, step.script))
|
||||
|
||||
Reference in New Issue
Block a user