allow LUA Functions for movement to use nav path
This commit is contained in:
parent
7098c1dbf3
commit
7e69739e43
@ -1198,8 +1198,10 @@ int EQ2Emu_lua_MovementLoopAdd(lua_State* state) {
|
|||||||
|
|
||||||
int8 num_args = (int8)lua_interface->GetNumberOfArgs(state);
|
int8 num_args = (int8)lua_interface->GetNumberOfArgs(state);
|
||||||
float heading = lua_interface->GetFloatValue(state, 8);
|
float heading = lua_interface->GetFloatValue(state, 8);
|
||||||
|
bool exclude_heading = lua_interface->GetBooleanValue(state, 9);
|
||||||
|
bool use_nav_path = lua_interface->GetBooleanValue(state, 10);
|
||||||
if (spawn) {
|
if (spawn) {
|
||||||
spawn->AddMovementLocation(x, y, z, speed, delay, function.c_str(), heading, (num_args > 7) ? true : false );
|
spawn->AddMovementLocation(x, y, z, speed, delay, function.c_str(), heading, (num_args > 7 && !exclude_heading) ? true : false, use_nav_path);
|
||||||
spawn->GetZone()->AddMovementNPC(spawn);
|
spawn->GetZone()->AddMovementNPC(spawn);
|
||||||
}
|
}
|
||||||
lua_interface->ResetFunctionStack(state);
|
lua_interface->ResetFunctionStack(state);
|
||||||
@ -1262,12 +1264,13 @@ int EQ2Emu_lua_MoveToLocation(lua_State* state) {
|
|||||||
float speed = lua_interface->GetFloatValue(state, 5);
|
float speed = lua_interface->GetFloatValue(state, 5);
|
||||||
string lua_function = lua_interface->GetStringValue(state, 6);
|
string lua_function = lua_interface->GetStringValue(state, 6);
|
||||||
bool more_points = lua_interface->GetBooleanValue(state, 7);
|
bool more_points = lua_interface->GetBooleanValue(state, 7);
|
||||||
|
bool use_nav_path = lua_interface->GetBooleanValue(state, 8);
|
||||||
|
|
||||||
if (spawn) {
|
if (spawn) {
|
||||||
if (speed == 0)
|
if (speed == 0)
|
||||||
speed = spawn->GetSpeed();
|
speed = spawn->GetSpeed();
|
||||||
|
|
||||||
spawn->AddRunningLocation(x, y, z, speed, 0.0f, true, !more_points, lua_function);
|
spawn->AddRunningLocation(x, y, z, speed, 0.0f, true, !more_points, lua_function, false, use_nav_path);
|
||||||
}
|
}
|
||||||
lua_interface->ResetFunctionStack(state);
|
lua_interface->ResetFunctionStack(state);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -232,6 +232,8 @@ void NPC::SetRunbackLocation(float x, float y, float z, int32 gridid, bool set_h
|
|||||||
runback->gridid = gridid;
|
runback->gridid = gridid;
|
||||||
runback->stage = 0;
|
runback->stage = 0;
|
||||||
runback->reset_hp_on_runback = set_hp_runback;
|
runback->reset_hp_on_runback = set_hp_runback;
|
||||||
|
runback->use_nav_path = false;
|
||||||
|
runback->mapped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
MovementLocation* NPC::GetRunbackLocation(){
|
MovementLocation* NPC::GetRunbackLocation(){
|
||||||
|
@ -3217,12 +3217,13 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
|
|||||||
data2 = movement_loop[tmp_index];
|
data2 = movement_loop[tmp_index];
|
||||||
else
|
else
|
||||||
data2 = movement_loop[0];
|
data2 = movement_loop[0];
|
||||||
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, false, "", true);
|
|
||||||
AddRunningLocation(data2->x, data2->y, data2->z, data2->speed, 0, true, true, "", true);
|
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, false, "", true, data->use_nav_path);
|
||||||
|
AddRunningLocation(data2->x, data2->y, data2->z, data2->speed, 0, true, true, "", true, data2->use_nav_path);
|
||||||
}
|
}
|
||||||
// delay at target location, only need to set 1 location
|
// delay at target location, only need to set 1 location
|
||||||
else
|
else
|
||||||
AddRunningLocation(data->x, data->y, data->z, data->speed);
|
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, true, "", true, data->use_nav_path);
|
||||||
}
|
}
|
||||||
movement_start_time = 0;
|
movement_start_time = 0;
|
||||||
resume_movement = false;
|
resume_movement = false;
|
||||||
@ -3299,13 +3300,13 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
|
|||||||
else
|
else
|
||||||
data2 = movement_loop[0];
|
data2 = movement_loop[0];
|
||||||
// set the first location (adds it to movement_locations that we just cleared)
|
// set the first location (adds it to movement_locations that we just cleared)
|
||||||
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, false, "", true);
|
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, false, "", true, data->use_nav_path);
|
||||||
// set the location after that
|
// set the location after that
|
||||||
AddRunningLocation(data2->x, data2->y, data2->z, data2->speed, 0, true, true, "", true);
|
AddRunningLocation(data2->x, data2->y, data2->z, data2->speed, 0, true, true, "", true, data2->use_nav_path);
|
||||||
}
|
}
|
||||||
// there is a delay at the next location so we only need to set it
|
// there is a delay at the next location so we only need to set it
|
||||||
else {
|
else {
|
||||||
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, true, "", true);
|
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, true, "", true, data->use_nav_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset this timer to 0 now that we are moving again
|
// reset this timer to 0 now that we are moving again
|
||||||
@ -3320,7 +3321,7 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
|
|||||||
// not moving, have a target location but not at it yet
|
// not moving, have a target location but not at it yet
|
||||||
else if (data) {
|
else if (data) {
|
||||||
SetSpeed(data->speed);
|
SetSpeed(data->speed);
|
||||||
AddRunningLocation(data->x, data->y, data->z, data->speed);
|
AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, true, "", true, data->use_nav_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MMovementLoop.releasewritelock();
|
MMovementLoop.releasewritelock();
|
||||||
@ -3360,7 +3361,7 @@ void Spawn::ResetMovement(){
|
|||||||
ValidateRunning(true, true);
|
ValidateRunning(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function, float heading, bool include_heading){
|
void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function, float heading, bool include_heading, bool use_nav_path){
|
||||||
|
|
||||||
LogWrite(LUA__DEBUG, 5, "LUA", "AddMovementLocation: x: %.2f, y: %.2f, z: %.2f, speed: %.2f, delay: %i, lua: %s",
|
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());
|
x, y, z, speed, delay, string(lua_function).c_str());
|
||||||
@ -3376,6 +3377,7 @@ void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 de
|
|||||||
|
|
||||||
data->heading = heading;
|
data->heading = heading;
|
||||||
data->use_movement_location_heading = include_heading;
|
data->use_movement_location_heading = include_heading;
|
||||||
|
data->use_nav_path = use_nav_path;
|
||||||
MMovementLoop.lock();
|
MMovementLoop.lock();
|
||||||
movement_loop.push_back(data);
|
movement_loop.push_back(data);
|
||||||
MMovementLoop.unlock();
|
MMovementLoop.unlock();
|
||||||
@ -3476,7 +3478,7 @@ MovementLocation* Spawn::GetLastRunningLocation(){
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spawn::AddRunningLocation(float x, float y, float z, float speed, float distance_away, bool attackable, bool finished_adding_locations, string lua_function, bool isMapped){
|
void Spawn::AddRunningLocation(float x, float y, float z, float speed, float distance_away, bool attackable, bool finished_adding_locations, string lua_function, bool isMapped, bool useNavPath){
|
||||||
if(speed == 0)
|
if(speed == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -3511,6 +3513,7 @@ void Spawn::AddRunningLocation(float x, float y, float z, float speed, float dis
|
|||||||
data->lua_function = lua_function;
|
data->lua_function = lua_function;
|
||||||
data->gridid = 0; // used for runback defaults
|
data->gridid = 0; // used for runback defaults
|
||||||
data->reset_hp_on_runback = false;
|
data->reset_hp_on_runback = false;
|
||||||
|
data->use_nav_path = useNavPath;
|
||||||
|
|
||||||
MMovementLocations.lock_shared();
|
MMovementLocations.lock_shared();
|
||||||
if(movement_locations->size() > 0)
|
if(movement_locations->size() > 0)
|
||||||
@ -3714,11 +3717,21 @@ void Spawn::CalculateRunningLocation(bool stop){
|
|||||||
MovementLocation* current_location = movement_locations->at(0);
|
MovementLocation* current_location = movement_locations->at(0);
|
||||||
if (movement_locations->size() > 1) {
|
if (movement_locations->size() > 1) {
|
||||||
MovementLocation* data = movement_locations->at(1);
|
MovementLocation* data = movement_locations->at(1);
|
||||||
|
if(current_location->use_nav_path) {
|
||||||
|
GetZone()->movementMgr->NavigateTo((Entity*)this, current_location->x, current_location->y, current_location->z);
|
||||||
|
}
|
||||||
|
else {
|
||||||
RunToLocation(current_location->x, current_location->y, current_location->z, data->x, data->y, data->z);
|
RunToLocation(current_location->x, current_location->y, current_location->z, data->x, data->y, data->z);
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
if(current_location->use_nav_path) {
|
||||||
|
GetZone()->movementMgr->NavigateTo((Entity*)this, current_location->x, current_location->y, current_location->z);
|
||||||
|
}
|
||||||
|
else {
|
||||||
RunToLocation(current_location->x, current_location->y, current_location->z, 0, 0, 0);
|
RunToLocation(current_location->x, current_location->y, current_location->z, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
continueElseIf = false;
|
continueElseIf = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -224,6 +224,7 @@ struct MovementData{
|
|||||||
string lua_function;
|
string lua_function;
|
||||||
float heading;
|
float heading;
|
||||||
bool use_movement_location_heading;
|
bool use_movement_location_heading;
|
||||||
|
bool use_nav_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BasicInfoStruct{
|
struct BasicInfoStruct{
|
||||||
@ -265,6 +266,7 @@ struct MovementLocation{
|
|||||||
int32 gridid;
|
int32 gridid;
|
||||||
int8 stage;
|
int8 stage;
|
||||||
bool reset_hp_on_runback;
|
bool reset_hp_on_runback;
|
||||||
|
bool use_nav_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SpawnUpdate {
|
struct SpawnUpdate {
|
||||||
@ -1142,7 +1144,7 @@ public:
|
|||||||
void InitializeFooterPacketData(Player* player, PacketStruct* packet);
|
void InitializeFooterPacketData(Player* player, PacketStruct* packet);
|
||||||
|
|
||||||
void MoveToLocation(Spawn* spawn, float distance, bool immediate = true, bool isMappedLocation = false);
|
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, float heading, bool include_heading = false);
|
void AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function, float heading, bool include_heading = false, bool use_nav_path = false);
|
||||||
void ProcessMovement(bool isSpawnListLocked=false);
|
void ProcessMovement(bool isSpawnListLocked=false);
|
||||||
void ResetMovement();
|
void ResetMovement();
|
||||||
bool ValidateRunning(bool lockMovementLocation, bool lockMovementLoop);
|
bool ValidateRunning(bool lockMovementLocation, bool lockMovementLoop);
|
||||||
@ -1154,7 +1156,7 @@ public:
|
|||||||
MovementLocation* GetLastRunningLocation();
|
MovementLocation* GetLastRunningLocation();
|
||||||
void NewWaypointChange(MovementLocation* data);
|
void NewWaypointChange(MovementLocation* data);
|
||||||
bool CalculateChange();
|
bool CalculateChange();
|
||||||
void AddRunningLocation(float x, float y, float z, float speed, float distance_away = 0, bool attackable = true, bool finished_adding_locations = true, string lua_function = "", bool isMapped=false);
|
void AddRunningLocation(float x, float y, float z, float speed, float distance_away = 0, bool attackable = true, bool finished_adding_locations = true, string lua_function = "", bool isMapped=false, bool useNavPath=false);
|
||||||
bool RemoveRunningLocation();
|
bool RemoveRunningLocation();
|
||||||
void ClearRunningLocations();
|
void ClearRunningLocations();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user