Game/Mapscripts: Implement SCRIPT_COMMAND_MOVEMENT

This commit is contained in:
Rushor authored and Aokromes committed 2017-02-10 05:24:53 +01:00
1 parent 79e6325716
commit 042633b10e
3 files changed
+32 -1

No files matched your search

+1
View File
@@ -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;
default:
{
char sz[32];
+9 -1
View File
@@ -112,7 +112,8 @@ enum ScriptCommands
SCRIPT_COMMAND_EQUIP = 31, // soucre = Creature, datalong = equipment id
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_PLAYMOVIE = 34, // source = Player, datalong = movie id
SCRIPT_COMMAND_MOVEMENT = 35 // soucre = Creature, datalong = MovementType, datalong2 = MovementDistance (spawndist f.ex.), dataint = pathid
};
// Benchmarked: Faster than std::unordered_map (insert/find)
@@ -361,6 +362,13 @@ struct ScriptInfo
{
uint32 MovieID; // datalong
} PlayMovie;
struct // SCRIPT_COMMAND_MOVEMENT (35)
{
uint32 MovementType; // datalong
uint32 MovementDistance; // datalong2
int32 Path; // dataint
} Movement;
};
std::string GetDebugInfo() const;
+22
View File
@@ -872,6 +872,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;
default:
TC_LOG_ERROR("scripts", "Unknown script command %s.", step.script->GetDebugInfo().c_str());
break;