hi guys
i have a game about transportation and now i am adding lifts. BUT MY SCRIPT DOESN'T WORK! it keeps erroring:
"Position is not a valid member of Model"
well, that's a stupid name for a part. but the problem is IT NORMALLY WORKS! the part is anchored and is ALWAYS there, but randomly when playing or testing that error occurs.
the part is inside a model and the model is targeted with an ObjectValue inside the script
main = script.Parent.Parent.Main
iM = script.Parent.isMoving
cM = script.Parent.canMove
iU = script.Parent.inUse
floors = script.Parent.Parent.Parent:GetChildren() --where to look for floors
speed = 0 --current speed, changing it does nothing
maxSpeed = 4 --highest speed
tolerance = 5 --how many studs before destination the lift slows down
minSpeed = 0.4 --minimal speed when slowing down
acceleration = 0.2 --I hope I don't have to explain this?
hasStopped = false
holdPos = Vector3.new()
lastDirectionUp = false
wait(0.1)
function up()
lastDirectionUp = true
main.Anchored = false
main.BodyVelocity.MaxForce = Vector3.new(0, math.huge, 0)
main.BodyVelocity.Velocity = Vector3.new(0, speed, 0)
iM.Value = true
end
function down()
lastDirectionUp = false
main.Anchored = false
main.BodyVelocity.MaxForce = Vector3.new(0, math.huge, 0)
main.BodyVelocity.Velocity = Vector3.new(0, -speed, 0)
iM.Value = true
end
function stop()
iM.Value = false
main.BodyVelocity.Velocity = Vector3.new(0, 0, 0)
if hasStopped == false then
hasStopped = true
if lastDirectionUp == true then
holdPos = Vector3.new(
main.Position.X,
(math.ceil(main.Position.Y*10))/10,
main.Position.Z)
elseif lastDirectionUp == false then
holdPos = Vector3.new(
main.Position.X,
(math.floor(main.Position.Y*10))/10,
main.Position.Z)
end
end
if (main.Position.Y +0.05) < holdPos.Y then
up()
elseif (main.Position.Y -0.05) > holdPos.Y then
down()
else
main.BodyVelocity.Velocity = Vector3.new(0, 0, 0)
speed = minSpeed
end
end
function checkFloors()
local canGo = true
for i,floor in pairs(floors) do
if floor:FindFirstChild("DoorClosed") then
if floor.DoorClosed.Value == false then
canGo = false
end
end
end
if canGo then script.Parent.canMove.Value = true
else script.Parent.canMove.Value = false end
end
while wait(0.1) do
if script.Parent.targetFloor.Value ~= nil then
if (main.Position.Y -tolerance) > script.Parent.targetFloor.Value.Position.Position.Y
or (main.Position.Y +tolerance) < script.Parent.targetFloor.Value.Position.Position.Y then
speed = speed +acceleration
else
speed = speed -acceleration
end
end
if speed < minSpeed then speed = minSpeed end
if speed > maxSpeed then speed = maxSpeed end
if cM.Value == true then
if script.Parent.targetFloor.Value ~= nil
and (main.Position.Y +0.08) < script.Parent.targetFloor.Value.Position.Position.Y then
up()
hasStopped = false
elseif script.Parent.targetFloor.Value ~= nil
and (main.Position.Y -0.08) > script.Parent.targetFloor.Value.Position.Position.Y then
down()
hasStopped = false
else
stop()
end
else
stop()
end
r1 = Region3.new(
Vector3.new(
math.min(script.Parent.Parent.pos1.Position.X, script.Parent.Parent.pos2.Position.X),
math.min(script.Parent.Parent.pos1.Position.Y, script.Parent.Parent.pos2.Position.Y),
math.min(script.Parent.Parent.pos1.Position.Z, script.Parent.Parent.pos2.Position.Z)
),
Vector3.new(
math.max(script.Parent.Parent.pos1.Position.X, script.Parent.Parent.pos2.Position.X),
math.max(script.Parent.Parent.pos1.Position.Y, script.Parent.Parent.pos2.Position.Y),
math.max(script.Parent.Parent.pos1.Position.Z, script.Parent.Parent.pos2.Position.Z)
)
)
plrFound = false
for i,Part in pairs(game.Workspace:FindPartsInRegion3(r1,nil,math.huge)) do
if Part.Name == "Head" then
plrFound = true
end
end
if plrFound == true then
iU.Value = true
else
iU.Value = false
end
checkFloors()
end
sorry it's unorganized af lol (believe me, a lot of people have worse organized scripts)

2 comments
Can you say what line the error is on?
random lines