local selectRoute = function(train, model) local route = train.PrimaryPart.Values.RouteValue.Value local given = model:FindFirstChild("GivenPath") local greenLitPaths = {} local yellowLitPaths = {} --some code omitted for this post local function searchPathOptions() --Omitted for this post local function findBestPath() searchPathOptions() if #greenLitPaths == 1 then local array = greenLitPaths[1] local finalPath = array[1] print(finalPath) return(finalPath) elseif #greenLitPaths > 1 then sort(greenLitPaths) local array = greenLitPaths[1] local finalPath = array[1] print(finalPath) --this prints what I expect return(finalPath) --this returns nil. why?????? elseif #greenLitPaths < 1 then if #yellowLitPaths == 1 then local array = yellowLitPaths[1] local finalPath = array[1] print(finalPath) return(finalPath) elseif #yellowLitPaths > 1 then sort(yellowLitPaths) local array = yellowLitPaths[1] local finalPath = array[1] print(finalPath) return(finalPath) end end resetTables() end if given ~= nil then if given.Values.BlockingTrain.Value == nil then findBestPath() end else findBestPath() end end --start the path-choosing process module.initiateChoice = function(train, model) print(train, model) local chooseRoute = selectRoute(train, model) print(chooseRoute) repeat wait() until chooseRoute ~= nil local affected = chooseRoute:FindFirstChild("AffectedPaths") local light = model.Values.Light.Value local status = model.Values.Status status.Value = chooseRoute.Values.Status.Value switchMod.setSwitches(chooseRoute.Switches) light.TrackDisplay.SurfaceGui.TextLabel.Text = chooseRoute.Values.ToTrack.Value module.exist(affected, function(object) module.alertAffected(train, object) end) end
note the lines where I say "this prints what I expect". On this line, I ask to print a member of a table, and it prints what I want it to (an object named Path). However, in the next line, I ask to return the exact same value, yet chooseRoute(variable in initiateChoice) always comes out to nil. This is really puzzling me.