Core ConceptsIntermediate

Manual Character Spawning

Full control over character loading and StarterGui/StarterPack replication for games with custom respawn logic.

OwlOnSpawnReadyOwl.SpawnPlrCharacterAutoLoads
ServerScriptService/Services/SpawnService.lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Owl = require(ReplicatedStorage.OwlKnit.Owl)
 
-- > // Requires Players.CharacterAutoLoads = false in Player Settings (Players > properties)
local SpawnService = Owl.CreateService({ Name = "SpawnService" })
 
function SpawnService:OwlInit()
end
 
function SpawnService:OwlStart()
end
 
function SpawnService:OwlOnPlayerAdded(plr: Player)
    -- > // Owl.SpawnPlr loads the character AND replicates StarterGui/StarterPack
    Owl.SpawnPlr(plr)
end
 
function SpawnService:OwlOnSpawnReady(plr: Player, char: Model)
    -- > // Fires once the character exists and the GUI has been replicated
    print(("[SpawnService] %s is ready! Character: %s"):format(plr.Name, char.Name))
end
 
return SpawnService
What's happening here
  • With CharacterAutoLoads disabled, Roblox never spawns a character on its own Owl.SpawnPlr(plr) is what triggers it.
  • OwlOnSpawnReady only fires in this manual-spawn mode with auto-load enabled, use OwlOnCharacterAdded instead.
  • SpawnPlr also replicates StarterGui/StarterPack manually, since disabling auto-load skips Roblox's own replication for both.