Hello! thanks for logging in, i have problems with waypoints ..
1- the characters with waypoint follow the waypoints but they do not follow them very straight, and sometimes they do a few meters and stay still
This is the code:
-- LUA Script - precede every function and global member with lowercase name of script
-- globals
local aniplaying = 0
ai_newdest_time = {}
ai_cover_on = {}
-- init when level first runs
function civilian_waypoint_init(e)
ai_soldier_state[e] = "patrol";
ai_soldier_pathindex[e] = -1;
ai_start_x[e] = nil
ai_starting_heath[e] = nil
ai_ran_to_cover[e] = 0
ModulateSpeed(e,1.0)
ai_old_health[e] = 0
--CharacterControlStand(e)
ai_returning_home[e] = 0
ai_newdest_time[e] = -1
ai_cover_on[e] = 0
ai_alerted_spoken[e] = 0
end
function civilian_waypoint_main(e)
EntObjNo = g_Entity[e]['obj']
if ai_soldier_state[e] == "patrol" then
if ai_soldier_pathindex[e] == -1 then
ai_soldier_pathindex[e] = -2
CharacterControlUnarmed(e)
PathIndex = -1
PathPointIndex = -1
pClosest = 99999
for pa = 1, AIGetTotalPaths(), 1 do
for po = 1 , AIGetPathCountPoints(pa), 1 do
pDX = g_Entity[e]['x'] - AIPathGetPointX(pa,po)
pDZ = g_Entity[e]['z'] - AIPathGetPointZ(pa,po)
pDist = math.sqrt(math.abs(pDX*pDX)+math.abs(pDZ*pDZ))
if pDist < pClosest and pDist < 200 then
pClosest = pDist
PathIndex = pa
PathPointIndex = po
end
end -- po
end -- pa
if PathIndex > -1 then
ai_soldier_pathindex[e] = PathIndex
ai_path_point_index[e] = PathPointIndex
ModulateSpeed(e,1.0)
SetCharacterToWalk(e)
ai_path_point_direction[e] = 1
ai_path_point_max[e] = AIGetPathCountPoints(ai_soldier_pathindex[e])
end
end
if ai_soldier_pathindex[e] > -1 then
ai_patrol_x[e] = AIPathGetPointX(ai_soldier_pathindex[e],ai_path_point_index[e])
ai_patrol_z[e] = AIPathGetPointZ(ai_soldier_pathindex[e],ai_path_point_index[e])
AIEntityGoToPosition(EntObjNo,ai_patrol_x[e],ai_patrol_z[e])
tDistX = g_Entity[e]['x'] - ai_patrol_x[e]
tDistZ = g_Entity[e]['z'] - ai_patrol_z[e]
DistFromPath = math.sqrt(math.abs(tDistX*tDistX)+math.abs(tDistZ*tDistZ))
if DistFromPath < 50 then
if ai_path_point_direction[e] == 1 then
ai_path_point_index[e] = ai_path_point_index[e] + 1
if ( ai_path_point_index[e] > ai_path_point_max[e] ) then
ai_path_point_index[e] = ai_path_point_max[e] - 1
ai_path_point_direction[e] = 0
end
else
ai_path_point_index[e] = ai_path_point_index[e] - 1
if ( ai_path_point_index[e] < 1 ) then
ai_path_point_index[e] = 2
ai_path_point_direction[e] = 1
end
end
end
end
else
CharacterControlFidget(e)
end
end
2- I can not move entities such as vehicles, I tried several scripts and some do not work and another the cars were in reverse
[video=youtube] https://www.youtube.com/watch?v=R6Tx9hrzoZM [/video]
with this code the cars do not move directly (obviously the entity is NOT in static mode and is not as immovable either)
local state = {}
local pathindex = {}
local pathpointindex = {}
local pathdirection = {}
local movespeed = {}
local rotationOffset = {}
function follow_waypoints_init(e)
state[e] = "find a waypoint"
movespeed[e] = 60
rotationOffset[e] = 180
end
function follow_waypoints_main(e)
if state[e] == "find a waypoint" then
pathindex[e],pathpointindex[e],pathdirection[e] = GetNearestWaypoint(e)
if pathindex[e] > -1 then
state[e] = "follow waypoints"
else
state[e] = "no path"
end
elseif state[e] == "follow waypoints" then
pathindex[e],pathpointindex[e],pathdirection[e] = FollowWaypointPath(e,pathindex[e],pathpointindex[e],pathdirection[e],movespeed[e])
elseif state[e] == "no path" then
PromptLocal(e,"No path found near me!")
end
PromptLocal(e,"path index = "..pathindex[e].." , point index = "..pathpointindex[e].." , direction = "..pathdirection[e])
end
function follow_waypoints_exit(e)
end
function GetNearestWaypoint(e)
PathIndex = -1
PathPointIndex = -1
PathDirection = -1
pClosest = 99999
for pa = 1, AIGetTotalPaths(), 1 do
for po = 1 , AIGetPathCountPoints(pa), 1 do
pDX = g_Entity[e]['x'] - AIPathGetPointX(pa,po)
pDZ = g_Entity[e]['z'] - AIPathGetPointZ(pa,po)
pDist = math.sqrt(math.abs(pDX*pDX)+math.abs(pDZ*pDZ))
if pDist < pClosest and pDist < 200 then
pClosest = pDist
PathIndex = pa
PathPointIndex = po
if po > AIGetPathCountPoints(pa) then
PathDirection = -1
else
PathDirection = 1
end
end
end -- po
end -- pa
return PathIndex, PathPointIndex, PathDirection
end
function FollowWaypointPath(e,pathid,pointid,pathdirection,speed)
dpx = AIPathGetPointX(pathid,pointid)
dpz = AIPathGetPointZ(pathid,pointid)
CollisionOff(e)
RotateToPoint(e,dpx,dpz,rotationOffset)
MoveForward(e,speed)
CollisionOn(e)
tDistX = g_Entity[e]['x'] - dpx
tDistZ = g_Entity[e]['z'] - dpz
DistFromPath = math.sqrt(math.abs(tDistX*tDistX)+math.abs(tDistZ*tDistZ))
if DistFromPath < 50 then
maxpathpoints = AIGetPathCountPoints(pathid)
if pathdirection == 1 then
pointid = pointid + pathdirection
if pointid > maxpathpoints then
pathdirection = -1
pointid = maxpathpoints-1
end
else
pointid = pointid + pathdirection
if pointid < 1 then
pathdirection = 1
pointid = 2
end
end
end
return pathid, pointid, pathdirection
end
function RotateToPoint(e,x,z,offset)
if g_Entity[e] ~= nil and x > 0 and z > 0 then
local destx = x - g_Entity[e]['x']
local destz = z - g_Entity[e]['z']
local angle = math.atan2(destx,destz)
angle = angle * (180.0 / math.pi)
if angle < 0 then
angle = 360 + angle
elseif angle > 360 then
angle = angle - 360
end
SetRotation(e,0,angle+offset,0)
return angle
end
end
can you help me please? Thank you