Browse Source

heading in lua movement loop add

Image 3 years ago
parent
commit
22930a7daa

+ 4 - 1
EQ2/source/WorldServer/LuaFunctions.cpp

@@ -1096,8 +1096,11 @@ int EQ2Emu_lua_MovementLoopAdd(lua_State* state) {
 	float speed = lua_interface->GetFloatValue(state, 5);
 	int32 delay = lua_interface->GetInt32Value(state, 6); //this should be given as seconds, as it is converted to ms later
 	string function = lua_interface->GetStringValue(state, 7);
+	
+	int8 num_args = (int8)lua_interface->GetNumberOfArgs(state);
+	float heading = lua_interface->GetFloatValue(state, 8);
 	if (spawn) {
-		spawn->AddMovementLocation(x, y, z, speed, delay, function.c_str());
+		spawn->AddMovementLocation(x, y, z, speed, delay, function.c_str(), heading, (num_args > 7) ? true : false );
 		spawn->GetZone()->AddMovementNPC(spawn);
 	}
 	lua_interface->ResetFunctionStack(state);

+ 7 - 2
EQ2/source/WorldServer/Spawn.cpp

@@ -2836,7 +2836,9 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
 				{
 					((Entity*)this)->SetSpeed(data->speed);
 					SetSpeed(data->speed);
-					if(!IsWidget())
+					if(data->use_movement_location_heading)
+						SetHeading(data->heading);
+					else if(!IsWidget())
 						FaceTarget(data->x, data->z);
 					// 0 delay at target location, need to set multiple locations
 					if(data->delay == 0 && movement_loop.size() > 0) {
@@ -2977,7 +2979,7 @@ void Spawn::ResetMovement(bool inFlight){
 		MMovementLoop.releasewritelock();
 }
 
-void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function){
+void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function, float heading, bool include_heading){
 
 	LogWrite(LUA__DEBUG, 5, "LUA", "AddMovementLocation: x: %.2f, y: %.2f, z: %.2f, speed: %.2f, delay: %i, lua: %s",
 		x, y, z, speed, delay, string(lua_function).c_str());
@@ -2990,6 +2992,9 @@ void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 de
 	data->delay = delay*1000;
 	if(lua_function)
 		data->lua_function = string(lua_function);
+	
+	data->heading = heading;
+	data->use_movement_location_heading = include_heading;
 	MMovementLoop.lock();
 	movement_loop.push_back(data);
 	MMovementLoop.unlock();

+ 3 - 1
EQ2/source/WorldServer/Spawn.h

@@ -182,6 +182,8 @@ struct MovementData{
 	float speed;
 	int32 delay;
 	string lua_function;
+	float heading;
+	bool use_movement_location_heading;
 };
 
 struct BasicInfoStruct{
@@ -1012,7 +1014,7 @@ public:
 	void	InitializeFooterPacketData(Player* player, PacketStruct* packet);
 
 	void	MoveToLocation(Spawn* spawn, float distance, bool immediate = true, bool isMappedLocation = false);
-	void	AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function);
+	void	AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function, float heading, bool include_heading = false);
 	void	ProcessMovement(bool isSpawnListLocked=false);
 	void	ResetMovement(bool inFlight=false);
 	bool	IsRunning();