Spawn: setautospawn error

I’m in the middle of creating a Fivem server but from one day to another I got the error

SCRIPT ERROR: citizen:/scripting/lua/schedular.lua:957: No such export setAutoSpawn in resource spawnmanger

I don’t know what it means I hope someone can help me.

setAutoSpawn not serAutoSpawn

sorry for the typo

but can you still help me i should have read it a second time to avoid mistakes

In your code you have to look for the method that’s giving you the error (setAutoSpawn). If the script that contains it is shipped with your server (default files), then the problem lies elsewhere. If, on the other hand, it’s your script, you’ll have to show us what’s exactly there.

In case it’s not your script, the best bet would be to check the order of starting your resources. Some resource (script) might be ran before your spawnmanager is started. This way the import of setAutoSpawn method doesn’t work, because the script doesn’t exist yet.

In what order should I put the resources I am only using the defaults like this:

ensure mapmanager
ensure sessionmanager
ensure chat
ensure basic-gamemode
ensure hardcap
ensure spawnmanager

But in what order should I put them

Can you search your spawnmanager for the setAutoSpawn method? The file is named spawnmanager.lua and it should look like this:

-- changes the auto-spawn flag
function setAutoSpawn(enabled)
    autoSpawnEnabled = enabled
end

Also you have to check if somewhere at the bottom of the file you have this:

exports("setAutoSpawn", setAutoSpawn)

There is a possibility that you either have no function OR the function is not exported.

– changes the auto-spawn flag
function setAutoSpawn(enabled)
autoSpawnEnabled = enabled
end

This part I do have but that last part I don’t what should I do

Add it where the other exports are. If you don’t have any, just paste it at the end of the file

Thanks that works but a new error appeared

SCRIPT ERROR: citizen:/scripting/lua/schedular.lua:957: No such export forceRespawn in resource spawnmanager

it looks like when I fix something, something new appears

So here’s how my exports look like:

exports("spawnPlayer", spawnPlayer)
exports("addSpawnPoint", addSpawnPoint)
exports("removeSpawnPoint", removeSpawnPoint)
exports("loadSpawns", loadSpawns)
exports("setAutoSpawn", setAutoSpawn)
exports("setAutoSpawnCallback", setAutoSpawnCallback)
exports("forceRespawn", forceRespawn)

I think you either have an old spawnmanager, you installed it in bad way, or there’s a small troll in your PC that caused it :joy: Because I have no idea what other thing might have caused it.

You are wonderful the error is gone just a slight problem I still have 1 error that goes like this

couldn’t load map map.lua: [string “map.lua”]:1: syntax error near ‘<\226>’ (type of fileData: string)

i hope this is the last thing to fix

Try installing the server files once again. I think you might have some old or corrupted files.

Here’s the instruction.

I will need to test this tommorow you will hear from me soon

should I download the last recommended or download the newest?

Recommended are the safest. I’d go with them

you are amazing i can enter my server again

I don’t want to bother you anymore but I’m gone ask one last question. I searched all over the internet about changing the spawn location but I can not find a tutorial or what I changed the spawn location in the hipster map but I still spawn everywhere where I don’t want to spawn, I hope you might know.

i got a new error you might be able to help me with this is it

SCRIPT ERROR: @spawnmanager/spawnmanager.lua:236: attempt to index nil value (local ‘spawn’)

I found where the error is coming from

-- in-memory spawnpoint array for this script execution instance
local spawnPoints = {}

-- auto-spawn enabled flag
local autoSpawnEnabled = false
local autoSpawnCallback

-- support for mapmanager maps
AddEventHandler('getMapDirectives', function(add)
    -- call the remote callback
    add('spawnpoint', function(state, model)
        -- return another callback to pass coordinates and so on (as such syntax would be [spawnpoint 'model' { options/coords }])
        return function(opts)
            local x, y, z, heading

            local s, e = pcall(function()
                -- is this a map or an array?
                if opts.x then
                    x = opts.x
                    y = opts.y
                    z = opts.z
                else
                    x = opts[1]
                    y = opts[2]
                    z = opts[3]
                end

                x = x + 0.0001
                y = y + 0.0001
                z = z + 0.0001

                -- get a heading and force it to a float, or just default to null
                heading = opts.heading and (opts.heading + 0.01) or 0

                -- add the spawnpoint
                addSpawnPoint({
                    x = x, y = y, z = z,
                    heading = heading,
                    model = model
                })

                -- recalculate the model for storage
                if not tonumber(model) then
                    model = GetHashKey(model, _r)
                end

                -- store the spawn data in the state so we can erase it later on
                state.add('xyz', { x, y, z })
                state.add('model', model)
            end)

            if not s then
                Citizen.Trace(e .. "\n")
            end
        end
        -- delete callback follows on the next line
    end, function(state, arg)
        -- loop through all spawn points to find one with our state
        for i, sp in ipairs(spawnPoints) do
            -- if it matches...
            if sp.x == state.xyz[1] and sp.y == state.xyz[2] and sp.z == state.xyz[3] and sp.model == state.model then
                -- remove it.
                table.remove(spawnPoints, i)
                return
            end
        end
    end)
end)


-- loads a set of spawn points from a JSON string
function loadSpawns(spawnString)
    -- decode the JSON string
    local data = json.decode(spawnString)

    -- do we have a 'spawns' field?
    if not data.spawns then
        error("no 'spawns' in JSON data")
    end

    -- loop through the spawns
    for i, spawn in ipairs(data.spawns) do
        -- and add it to the list (validating as we go)
        addSpawnPoint(spawn)
    end
end

local spawnNum = 1

function addSpawnPoint(spawn)
    -- validate the spawn (position)
    if not tonumber(spawn.x) or not tonumber(spawn.y) or not tonumber(spawn.z) then
        error("invalid spawn position")
    end

    -- heading
    if not tonumber(spawn.heading) then
        error("invalid spawn heading")
    end

    -- model (try integer first, if not, hash it)
    local model = spawn.model

    if not tonumber(spawn.model) then
        model = GetHashKey(spawn.model)
    end

    -- is the model actually a model?
    if not IsModelInCdimage(model) then
        error("invalid spawn model")
    end

    -- is is even a ped?
    -- not in V?
    --[[if not IsThisModelAPed(model) then
        error("this model ain't a ped!")
    end]]

    -- overwrite the model in case we hashed it
    spawn.model = model

    -- add an index
    spawn.idx = spawnNum
    spawnNum = spawnNum + 1

    -- all OK, add the spawn entry to the list
    table.insert(spawnPoints, spawn)

    return spawn.idx
end

-- removes a spawn point
function removeSpawnPoint(spawn)
    for i = 1, #spawnPoints do
        if spawnPoints[i].idx == spawn then
            table.remove(spawnPoints, i)
            return
        end
    end
end

-- changes the auto-spawn flag
function setAutoSpawn(enabled)
    autoSpawnEnabled = enabled
end

-- sets a callback to execute instead of 'native' spawning when trying to auto-spawn
function setAutoSpawnCallback(cb)
    autoSpawnCallback = cb
    autoSpawnEnabled = true
end

-- function as existing in original R* scripts
local function freezePlayer(id, freeze)
    local player = id
    SetPlayerControl(player, not freeze, false)

    local ped = GetPlayerPed(player)

    if not freeze then
        if not IsEntityVisible(ped) then
            SetEntityVisible(ped, true)
        end

        if not IsPedInAnyVehicle(ped) then
            SetEntityCollision(ped, true)
        end

        FreezeEntityPosition(ped, false)
        --SetCharNeverTargetted(ped, false)
        SetPlayerInvincible(player, false)
    else
        if IsEntityVisible(ped) then
            SetEntityVisible(ped, false)
        end

        SetEntityCollision(ped, false)
        FreezeEntityPosition(ped, true)
        --SetCharNeverTargetted(ped, true)
        SetPlayerInvincible(player, true)
        --RemovePtfxFromPed(ped)

        if not IsPedFatallyInjured(ped) then
            ClearPedTasksImmediately(ped)
        end
    end
end

function loadScene(x, y, z)
	if not NewLoadSceneStart then
		return
	end

    NewLoadSceneStart(x, y, z, 0.0, 0.0, 0.0, 20.0, 0)

    while IsNewLoadSceneActive() do
        networkTimer = GetNetworkTimer()

        NetworkUpdateLoadScene()
    end
end

-- to prevent trying to spawn multiple times
local spawnLock = false

-- spawns the current player at a certain spawn point index (or a random one, for that matter)
function spawnPlayer(spawnIdx, cb)
    if spawnLock then
        return
    end

    spawnLock = true

    Citizen.CreateThread(function()
        -- if the spawn isn't set, select a random one
        if not spawnIdx then
            spawnIdx = GetRandomIntInRange(1, #spawnPoints + 1)
        end

        -- get the spawn from the array
        local spawn

        if type(spawnIdx) == 'table' then
            spawn = spawnIdx

            -- prevent errors when passing spawn table
            spawn.x = spawn.x + 0.00
            spawn.y = spawn.y + 0.00
            spawn.z = spawn.z + 0.00

            spawn.heading = spawn.heading and (spawn.heading + 0.00) or 0
        else
            spawn = spawnPoints[spawnIdx]
        end

        if not spawn.skipFade then
            DoScreenFadeOut(500)

            while not IsScreenFadedOut() do
                Citizen.Wait(0)
            end
        end

        -- validate the index
        if not spawn then
            Citizen.Trace("tried to spawn at an invalid spawn index\n")

            spawnLock = false

            return
        end

        -- freeze the local player
        freezePlayer(PlayerId(), true)

        -- if the spawn has a model set
        if spawn.model then
            RequestModel(spawn.model)

            -- load the model for this spawn
            while not HasModelLoaded(spawn.model) do
                RequestModel(spawn.model)

                Wait(0)
            end

            -- change the player model
            SetPlayerModel(PlayerId(), spawn.model)

            -- release the player model
            SetModelAsNoLongerNeeded(spawn.model)
            
            -- RDR3 player model bits
            if N_0x283978a15512b2fe then
				N_0x283978a15512b2fe(PlayerPedId(), true)
            end
        end

        -- preload collisions for the spawnpoint
        RequestCollisionAtCoord(spawn.x, spawn.y, spawn.z)

        -- spawn the player
        local ped = PlayerPedId()

        -- V requires setting coords as well
        SetEntityCoordsNoOffset(ped, spawn.x, spawn.y, spawn.z, false, false, false, true)

        NetworkResurrectLocalPlayer(spawn.x, spawn.y, spawn.z, spawn.heading, true, true, false)

        -- gamelogic-style cleanup stuff
        ClearPedTasksImmediately(ped)
        --SetEntityHealth(ped, 300) -- TODO: allow configuration of this?
        RemoveAllPedWeapons(ped) -- TODO: make configurable (V behavior?)
        ClearPlayerWantedLevel(PlayerId())

        -- why is this even a flag?
        --SetCharWillFlyThroughWindscreen(ped, false)

        -- set primary camera heading
        --SetGameCamHeading(spawn.heading)
        --CamRestoreJumpcut(GetGameCam())

        -- load the scene; streaming expects us to do it
        --ForceLoadingScreen(true)
        --loadScene(spawn.x, spawn.y, spawn.z)
        --ForceLoadingScreen(false)

        local time = GetGameTimer()

        while (not HasCollisionLoadedAroundEntity(ped) and (GetGameTimer() - time) < 5000) do
            Citizen.Wait(0)
        end

        ShutdownLoadingScreen()

        if IsScreenFadedOut() then
            DoScreenFadeIn(500)

            while not IsScreenFadedIn() do
                Citizen.Wait(0)
            end
        end

        -- and unfreeze the player
        freezePlayer(PlayerId(), false)

        TriggerEvent('playerSpawned', spawn)

        if cb then
            cb(spawn)
        end

        spawnLock = false
    end)
end

-- automatic spawning monitor thread, too
local respawnForced
local diedAt

Citizen.CreateThread(function()
    -- main loop thing
    while true do
        Citizen.Wait(50)

        local playerPed = PlayerPedId()

        if playerPed and playerPed ~= -1 then
            -- check if we want to autospawn
            if autoSpawnEnabled then
                if NetworkIsPlayerActive(PlayerId()) then
                    if (diedAt and (math.abs(GetTimeDifference(GetGameTimer(), diedAt)) > 2000)) or respawnForced then
                        if autoSpawnCallback then
                            autoSpawnCallback()
                        else
                            spawnPlayer()
                        end

                        respawnForced = false
                    end
                end
            end

            if IsEntityDead(playerPed) then
                if not diedAt then
                    diedAt = GetGameTimer()
                end
            else
                diedAt = nil
            end
        end
    end
end)

function forceRespawn()
    spawnLock = false
    respawnForced = true
end

exports('spawnPlayer', spawnPlayer)
exports('addSpawnPoint', addSpawnPoint)
exports('removeSpawnPoint', removeSpawnPoint)
exports('loadSpawns', loadSpawns)
exports('setAutoSpawn', setAutoSpawn)
exports('setAutoSpawnCallback', setAutoSpawnCallback)
exports('forceRespawn', forceRespawn)
        if not spawn.skipFade then
            DoScreenFadeOut(500)

            while not IsScreenFadedOut() do
                Citizen.Wait(0)
            end
        end

This is the part of the script that causes the problem

So basically you have a couple of options to fix that.

Playing with the map

First option is to go to the map file and remove all spawn points except the one that you want. Also, please check which map you’re using, because maybe you are not using hipster map after all. So if you want to make it easy and simple, that’s the way.

NOTE: You might have different folder structure (see the left side of the screenshot). but the main idea is to remove all spawnpoints from map.lua file, except the one you want to have. (see right side of the screenshot)

Additional post if you need help still: Spawn script?

Using third-party script

If your server is going to be much more complex and script-heavy, then you might want to use external script to handle the spawn points. When you use ESX for example, it handles the spawnpoints and saves them, so after you rejoin the server, you are on the same spot you were before.

But that’s a totally different and much more complex story, which I won’t be able to help with, because it would take about trilion messages here on the forum. :joy:

Installation of ESX: Installation - ESX Documentation

Creating your own spawner

If you feel adventurous, you might want to create your own script that will handle spawning. Creating such thing could take some time, because firstly you’d have to think a lot how the whole spawning thing works, so I don’t necessarily recommend that if you are new to FiveM mods.

hey it’s me again thanks I got it working after a small while now I am trying to stop NPC’s and NPC cars from spawning I see people talking about scripts they are using but thanks for everything you have done to help me