fix(Core): implement "SCRIPT_COMMAND_MOVEMENT" (35) to fix Defias Thug waypoint errors (#1721)
* fix(DB): fix Defias Thug waypoint errors * implement SCRIPT_COMMAND_MOVEMENT (35); remove SQL script
This commit is contained in:
@@ -110,7 +110,8 @@ enum ScriptCommands
|
|||||||
SCRIPT_COMMAND_EQUIP = 31, // soucre = Creature, datalong = equipment id
|
SCRIPT_COMMAND_EQUIP = 31, // soucre = Creature, datalong = equipment id
|
||||||
SCRIPT_COMMAND_MODEL = 32, // source = Creature, datalong = model id
|
SCRIPT_COMMAND_MODEL = 32, // source = Creature, datalong = model id
|
||||||
SCRIPT_COMMAND_CLOSE_GOSSIP = 33, // source = Player
|
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)
|
// Benchmarked: Faster than std::unordered_map (insert/find)
|
||||||
@@ -359,6 +360,13 @@ struct ScriptInfo
|
|||||||
{
|
{
|
||||||
uint32 MovieID; // datalong
|
uint32 MovieID; // datalong
|
||||||
} PlayMovie;
|
} PlayMovie;
|
||||||
|
|
||||||
|
struct // SCRIPT_COMMAND_MOVEMENT (35)
|
||||||
|
{
|
||||||
|
uint32 MovementType; // datalong
|
||||||
|
uint32 MovementDistance; // datalong2
|
||||||
|
int32 Path; // dataint
|
||||||
|
} Movement;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string GetDebugInfo() const;
|
std::string GetDebugInfo() const;
|
||||||
|
|||||||
@@ -916,6 +916,28 @@ void Map::ScriptsProcess()
|
|||||||
player->SendMovieStart(step.script->PlayMovie.MovieID);
|
player->SendMovieStart(step.script->PlayMovie.MovieID);
|
||||||
break;
|
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:
|
default:
|
||||||
sLog->outError("Unknown script command %s.", step.script->GetDebugInfo().c_str());
|
sLog->outError("Unknown script command %s.", step.script->GetDebugInfo().c_str());
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user