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);
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
lua_interface->ResetFunctionStack(state);
|
||||
@ -1262,12 +1264,13 @@ int EQ2Emu_lua_MoveToLocation(lua_State* state) {
|
||||
float speed = lua_interface->GetFloatValue(state, 5);
|
||||
string lua_function = lua_interface->GetStringValue(state, 6);
|
||||
bool more_points = lua_interface->GetBooleanValue(state, 7);
|
||||
bool use_nav_path = lua_interface->GetBooleanValue(state, 8);
|
||||
|
||||
if (spawn) {
|
||||
if (speed == 0)
|
||||
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);
|
||||
return 0;
|
||||
|
@ -232,6 +232,8 @@ void NPC::SetRunbackLocation(float x, float y, float z, int32 gridid, bool set_h
|
||||
runback->gridid = gridid;
|
||||
runback->stage = 0;
|
||||
runback->reset_hp_on_runback = set_hp_runback;
|
||||
runback->use_nav_path = false;
|
||||
runback->mapped = false;
|
||||
}
|
||||
|
||||
MovementLocation* NPC::GetRunbackLocation(){
|
||||
|
@ -3217,12 +3217,13 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
|
||||
data2 = movement_loop[tmp_index];
|
||||
else
|
||||
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
|
||||
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;
|
||||
resume_movement = false;
|
||||
@ -3299,13 +3300,13 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
|
||||
else
|
||||
data2 = movement_loop[0];
|
||||
// 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
|
||||
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
|
||||
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
|
||||
@ -3320,7 +3321,7 @@ void Spawn::ProcessMovement(bool isSpawnListLocked){
|
||||
// not moving, have a target location but not at it yet
|
||||
else if (data) {
|
||||
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();
|
||||
@ -3360,7 +3361,7 @@ void Spawn::ResetMovement(){
|
||||
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",
|
||||
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->use_movement_location_heading = include_heading;
|
||||
data->use_nav_path = use_nav_path;
|
||||
MMovementLoop.lock();
|
||||
movement_loop.push_back(data);
|
||||
MMovementLoop.unlock();
|
||||
@ -3476,7 +3478,7 @@ MovementLocation* Spawn::GetLastRunningLocation(){
|
||||
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)
|
||||
return;
|
||||
|
||||
@ -3511,6 +3513,7 @@ void Spawn::AddRunningLocation(float x, float y, float z, float speed, float dis
|
||||
data->lua_function = lua_function;
|
||||
data->gridid = 0; // used for runback defaults
|
||||
data->reset_hp_on_runback = false;
|
||||
data->use_nav_path = useNavPath;
|
||||
|
||||
MMovementLocations.lock_shared();
|
||||
if(movement_locations->size() > 0)
|
||||
@ -3714,11 +3717,21 @@ void Spawn::CalculateRunningLocation(bool stop){
|
||||
MovementLocation* current_location = movement_locations->at(0);
|
||||
if (movement_locations->size() > 1) {
|
||||
MovementLocation* data = movement_locations->at(1);
|
||||
RunToLocation(current_location->x, current_location->y, current_location->z, data->x, data->y, data->z);
|
||||
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);
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
else
|
||||
RunToLocation(current_location->x, current_location->y, current_location->z, 0, 0, 0);
|
||||
|
||||
continueElseIf = false;
|
||||
}
|
||||
}
|
||||
|
@ -224,6 +224,7 @@ struct MovementData{
|
||||
string lua_function;
|
||||
float heading;
|
||||
bool use_movement_location_heading;
|
||||
bool use_nav_path;
|
||||
};
|
||||
|
||||
struct BasicInfoStruct{
|
||||
@ -265,6 +266,7 @@ struct MovementLocation{
|
||||
int32 gridid;
|
||||
int8 stage;
|
||||
bool reset_hp_on_runback;
|
||||
bool use_nav_path;
|
||||
};
|
||||
|
||||
struct SpawnUpdate {
|
||||
@ -1142,7 +1144,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, 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 ResetMovement();
|
||||
bool ValidateRunning(bool lockMovementLocation, bool lockMovementLoop);
|
||||
@ -1154,7 +1156,7 @@ public:
|
||||
MovementLocation* GetLastRunningLocation();
|
||||
void NewWaypointChange(MovementLocation* data);
|
||||
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();
|
||||
void ClearRunningLocations();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user