diff options
author | Aokromes <aokromes@gmail.com> | 2017-02-15 07:11:48 +0100 |
---|---|---|
committer | Aokromes <aokromes@gmail.com> | 2017-02-15 07:11:48 +0100 |
commit | fac5ce67db12f1eec2f35deaee1a1a364614ddf5 (patch) | |
tree | efaa60d771e18f0ec34cea6cc9104fa82014f556 /src/server | |
parent | 8821f59340e706edb05d6d8af1625691e5d7f1be (diff) |
Game/Mapscripts: Implement SCRIPT_COMMAND_MOVEMENT
Cherry pick from 85357c75c4a202e2b7b72e14fe0d4083f74c87bb
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 12 | ||||
-rw-r--r-- | src/server/game/Maps/MapScripts.cpp | 22 |
3 files changed, 33 insertions, 2 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ae7c1281843..07630a55c8d 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -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: { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 03cc59171af..3ced865118c 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -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; diff --git a/src/server/game/Maps/MapScripts.cpp b/src/server/game/Maps/MapScripts.cpp index e322cdfc09d..c6eb2068165 100644 --- a/src/server/game/Maps/MapScripts.cpp +++ b/src/server/game/Maps/MapScripts.cpp @@ -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)) |