Spawn With Friends

It can be challenging to locate friends in-experience. The SpawnWithFriends developer module automatically moves spawning players near one of their friends present in the experience. This module can also be configured to teleport a player on command instead of automatically.

Module Usage

Installation

To use the SpawnWithFriends module in an experience:

  1. From the View tab, open the Toolbox and select the Creator Store tab.

    Toolbox toggle button in Studio
  2. Make sure the Models sorting is selected, then click the See All button for Categories.

  3. Locate and click the Dev Modules tile.

  4. Locate the Spawn With Friends module and click it, or drag-and-drop it into the 3D view.

  5. In the Explorer window, move the entire SpawnWithFriends model into ServerScriptService. Upon running the experience, the module will distribute itself to various services and begin running.

Restricted Spawn Areas

This module may result in players spawning in restricted areas like VIP rooms, access-only spaces, etc. To prevent players from teleporting to these areas:

  1. Fill the restricted area with invisible Anchored blocks. Make sure CanCollide, CanTouch, and CanQuery are disabled for all blocks.

    Block filling the entire prison room to prevent players from spawning inside
  2. Using the Tags section of each block's properties, or Studio's Tag Editor, apply the tag RestrictedSpawnArea so that CollectionService detects them.

  3. Paste the following code into a Script within ServerScriptService.

    Script

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local CollectionService = game:GetService("CollectionService")
    local SpawnWithFriends = require(ReplicatedStorage:WaitForChild("SpawnWithFriends"))
    local function validator(playerToTeleport, destinationPlayer, teleportationPoint)
    -- Iterate through all tagged parts
    for _, area in CollectionService:GetTagged("RestrictedSpawnArea") do
    local relativePosition = area.CFrame:PointToObjectSpace(teleportationPoint.Position)
    local size = area.Size
    local inXBounds = relativePosition.X < size.X / 2 and relativePosition.X > -size.X / 2
    local inZBounds = relativePosition.Z < size.Z / 2 and relativePosition.Z > -size.Z / 2
    if inXBounds and inZBounds then
    return false -- Spawn destination is within restricted area; abort teleportation
    end
    end
    return true -- Spawn destination doesn't overlap any restricted area; proceed with teleportation
    end
    SpawnWithFriends.setTeleportationValidator(validator)

API Reference

Functions

configure

configure(config: table)

Overrides default configuration options through the following keys/values in the config table. This function can only be called from a Script.

KeyDescriptionDefault
teleportToFriendOnRespawnIf set to false, teleportation to a friend will only happen manually via teleportToRandomFriend.true
teleportDistanceHow far away players should spawn from each other, measured in studs.5
maxCharacterVelocityCharacters moving faster than this value won't be picked as teleportation candidates, for instance those in moving vehicles.48
bypassFriendshipCheckIf set to true, all players will be candidates for teleportation, not just friends.false
showLogsWhether or not to display log messages in the output.false
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SpawnWithFriends = require(ReplicatedStorage:WaitForChild("SpawnWithFriends"))
SpawnWithFriends.configure({
teleportToFriendOnRespawn = true,
teleportDistance = 5,
maxCharacterVelocity = 48,
bypassFriendshipCheck = false,
showLogs = false
})

teleportToRandomFriend

teleportToRandomFriend(playerToTeleport: Player): boolean

Manually triggers teleportation of a player to one of their friends in the experience. Returns a boolean indicating whether or not teleportation succeeded; failure to teleport can be caused by the absence of friends in the server or the inability to find an unobstructed teleportation point. This function can only be called from a Script.

setTeleportationValidator

setTeleportationValidator(validator: function)

Allows you to perform custom pre-teleportation checks by hooking up a validator callback function. The callback receives three parameters:

ParameterDescription
playerToTeleportReference to the Player that is being teleported.
destinationPlayerReference to the target Player that playerToTeleport is being teleported to.
teleportationPointCFrame where playerToTeleport is teleporting to.

This function and its callback can only be used in a Script and the callback returns a boolean indicating whether teleportation should proceed. For example, the return logic in the following validator function ensures that the spawning player and destination player are on the same team.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SpawnWithFriends = require(ReplicatedStorage:WaitForChild("SpawnWithFriends"))
-- Teleports players only if they are on the same team
local function validator(playerToTeleport, destinationPlayer, teleportationPoint)
return playerToTeleport.Team == destinationPlayer.Team
end
SpawnWithFriends.setTeleportationValidator(validator)