aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorAokromes <aokromes@gmail.com>2017-02-15 07:11:48 +0100
committerAokromes <aokromes@gmail.com>2017-02-15 07:11:48 +0100
commitfac5ce67db12f1eec2f35deaee1a1a364614ddf5 (patch)
treeefaa60d771e18f0ec34cea6cc9104fa82014f556 /src/server
parent8821f59340e706edb05d6d8af1625691e5d7f1be (diff)
Game/Mapscripts: Implement SCRIPT_COMMAND_MOVEMENT
Cherry pick from 85357c75c4a202e2b7b72e14fe0d4083f74c87bb
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp1
-rw-r--r--src/server/game/Globals/ObjectMgr.h12
-rw-r--r--src/server/game/Maps/MapScripts.cpp22
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))