I have a script that works fairly well for pathfinding using the pathfinding service, but I can only get it to target parts, I keep getting errors describing that UpperTorso is not part of the player. I haven't found any docs referring to the how to identify the R15 parts. Not sure if Upper Torso is right, I used it bc it was the CanCollide = true.
Also I am confused I think about how to call the player depending on if Im in localscripts or general ones. Actually, I don't think I've gotten the player into a script yet... :(
So my script is inside a model called "bot" which is a NPC model. I have my function for FindPath and several other associated functions. I call the function like this and it works fine (workspace.globe is just a part):
while true do
wait(0.1)
FindPath(workspace.globe.Position, 1, 1, 500)
end
Then I try this and nothing:
while true do
wait(0.1)
local character = game.Workspace.Player
local player = game.Players:GetPlayerFromCharacter(character)
FindPath(player.UpperTorso.Position, 1, 1, 500)
end
Thank you for any help!!!
Edit: Here is the entire script per request:
local pathfinding = game:GetService("PathfindingService")
local Bot = script.Parent
local Hum = Bot.Humanoid
local Tor = Bot.Torso
local Showed = {}
local function NumTab(T)
local N = 0
for i,v in pairs(T) do
N = N + 1
end
return N
end
local Bot = {}
FindPath = function(finish, PointM, MaxPoint, MaxDist)
local MaxPoint = MaxPoint or 1
local PointM = PointM or 1
local MaxDist = MaxDist or 500
local Am = 1
local path = pathfinding:ComputeRawPathAsync(Tor.Position, finish, MaxDist)
local points = path:GetPointCoordinates()
for _, point in pairs(points) do
if Am == PointM then
Hum:MoveTo(point)
repeat
distance = (point - Tor.Position).magnitude
wait()
until distance < 3
end
if Am == MaxPoint then
Am = 1
else
Am = Am + 1
end
end
end
ShowPath = function(start, finish)
local path = pathfinding:ComputeRawPathAsync(start, finish, 500)
local points = path:GetPointCoordinates()
for _, point in pairs(points) do
local part = Instance.new("Part", Workspace)
part.FormFactor = Enum.FormFactor.Custom
part.Size = Vector3.new(1,1,1)
part.Position = point
part.Anchored = true
part.CanCollide = false
table.insert(Showed, part)
end
end
ClearPaths = function()
for i,v in pairs(Showed) do
v:Destroy()
Showed[i] = nil
end
end
GetBackwardsCoordinates = function(Path)
local BackPath = {}
local points = Path:GetPointCoordinates()
for i = NumTab(points), 1, -1 do
table.insert(BackPath, points[1])
end
return BackPath
end
GetBackwardsPath = function(Path)
local points = Path:GetPointCoordinates()
local finish = points[1]
local start = points[#points]
return pathfinding:ComputeRawPathAsync(start, finish, 500)
end
MovePlayer = function(Player, finish)
local Char = Player.Character
local Tor = Char.Torso
local Hum = Char.Humanoid
local path = pathfinding:ComputeRawPathAsync(Tor.Position, finish, 500)
local points = path:GetPointCoordinates()
local point = points[1]
if point then
Hum:MoveTo(point)
repeat
distance = (point - Tor.Position).magnitude
wait()
until distance < 3
Bot.MovePlayer(Player, finish)
end
end
while true do
wait(0.1)
FindPath(workspace.globe.Position, 1, 1, 500)
end

4 comments
Please add your FindPath function, as i think the issue is with that. (You only send a StartPosition, not an End Position)
local pathfinding = game:GetService("PathfindingService") local Bot = script.Parent local Hum = Bot.Humanoid local Tor = Bot.Torso local Showed = {} local function NumTab(T) local N = 0 for i,v in pairs(T) do N = N + 1 end return N end local Bot = {} FindPath = function(finish, PointM, MaxPoint, MaxDist) local MaxPoint = MaxPoint or 1 local PointM = PointM or 1 local MaxDist = MaxDist
Sorry, that looks crazy on my screen. Did I post it right??
@RubenKan Sry, Im a noob here. I posted the entire script into answers.