SpawnLocation
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
SpawnLocations oder "Spawns" bestimmen, wo ein Player Respawns entsteht, wenn sie sterben.Sie können konfiguriert werden, um nur bestimmten Spielern zu erlauben, jedes Spawn zu verwenden, indem Teams verwendet wird.Sie kontrollieren auch, wie ForceFields für neu gespawnten Spieler eingerichtet sind.
SpawnLocations können als Kontrollpunkte verwendet werden, wie in einem Hindernisparcours, indem die EigenschaftenSpawnLocation.AllowTeamChangeOnTouch verwendet wird, so dass, wenn ein Spieler es berührt, er das Team des Spawnlocations wechselt.In diesem Fall sollte nur der erste auf Wahr gesetzt werden, sonst starten Spieler nicht am ersten Kontrollpunkt.
Beachten Sie, wenn ein SpawnLocation zum Workspace in Studio hinzugefügt wird, mit SpawnLocation.Neutral auf false gesetzt, wird ein Team erstellt, das entspricht SpawnLocation.TeamColor wenn es noch nicht existiert.Dieses Verhalten tritt nicht auf, wenn Spawns im Spiel mit einem Script erstellt werden oder wenn die Eigenschaften von SpawnLocation geändert werden, nachdem sie bereits hinzugefügt wurden.Es wird empfohlen, dass Entwickler ihre Teams immer manuell einrichten und sich nicht auf dieses Verhalten verlassen.
Regeln erstellen
Es gibt mehrere Regeln, die für einen bestimmten SpawnLocation ins Spiel kommen, wenn ein Spieler respawniert:
- Wenn SpawnLocation.Neutral auf false gesetzt ist, wird nur Players mit Player.TeamColor übereinstimmendem SpawnLocation.TeamColor respawnen darüber
- Wenn SpawnLocation.Neutral auf wahr gesetzt ist, kann jeder Spieler unabhängig von SpawnLocation.TeamColor darüber spawnen
- Wenn mehrere geeignete Spawns für einen Player verfügbar sind, wird ein zufälliges ausgewählt
- Spieler erscheinen an verschiedenen Punkten über einem Spawnort, aber derzeit können sie immer noch über einander erscheinen, wenn sie direkt nach dem anderen erscheinen
Siehe auch:
- Wenn du konfigurieren möchtest, wie lange es dauert, bis ein Spieler wieder erscheint, schau dir die Eigenschaft RespawnTime Eigenschaften
Code-Beispiele
This sample demonstrates how SpawnLocations can be used to make a checkpoint system. Typically this would be done Studio and not in Lua, but this example serves as a comprehensive example of what Team and SpawnLocation properties need to be used to achieve this setup.
local Teams = game:GetService("Teams")
-- create start team (AutoAssignable = true)
local startTeam = Instance.new("Team")
startTeam.Name = "Start"
startTeam.AutoAssignable = true
startTeam.TeamColor = BrickColor.new("White")
startTeam.Parent = Teams
-- create checkpoint teams (Autoassignable = false), ensuring all TeamColors are unique
local team1 = Instance.new("Team")
team1.Name = "Checkpoint 1"
team1.AutoAssignable = false
team1.TeamColor = BrickColor.new("Bright blue")
team1.Parent = Teams
local team2 = Instance.new("Team")
team2.Name = "Checkpoint 2"
team2.AutoAssignable = false
team2.TeamColor = BrickColor.new("Bright green")
team2.Parent = Teams
local team3 = Instance.new("Team")
team3.Name = "Checkpoint 2"
team3.AutoAssignable = false
team3.TeamColor = BrickColor.new("Bright red")
team3.Parent = Teams
-- create spawns
local startSpawn = Instance.new("SpawnLocation")
startSpawn.Anchored = true
startSpawn.Size = Vector3.new(5, 1, 5)
startSpawn.Neutral = false
startSpawn.AllowTeamChangeOnTouch = false
startSpawn.TeamColor = startTeam.TeamColor
startSpawn.BrickColor = startTeam.TeamColor
startSpawn.Parent = game.Workspace
local team1Spawn = Instance.new("SpawnLocation")
team1Spawn.Anchored = true
team1Spawn.Size = Vector3.new(5, 1, 5)
team1Spawn.Neutral = false
team1Spawn.AllowTeamChangeOnTouch = true
team1Spawn.TeamColor = team1.TeamColor
team1Spawn.BrickColor = team1.TeamColor
team1Spawn.Parent = game.Workspace
local team2Spawn = Instance.new("SpawnLocation")
team2Spawn.Anchored = true
team2Spawn.Size = Vector3.new(5, 1, 5)
team2Spawn.Neutral = false
team2Spawn.AllowTeamChangeOnTouch = true
team2Spawn.TeamColor = team2.TeamColor
team2Spawn.BrickColor = team2.TeamColor
team2Spawn.Parent = game.Workspace
local team3Spawn = Instance.new("SpawnLocation")
team3Spawn.Anchored = true
team3Spawn.Size = Vector3.new(5, 1, 5)
team3Spawn.Neutral = false
team3Spawn.AllowTeamChangeOnTouch = true
team3Spawn.TeamColor = team3.TeamColor
team3Spawn.BrickColor = team3.TeamColor
team3Spawn.Parent = game.Workspace
-- position spawns
startSpawn.CFrame = CFrame.new(0, 0.5, 0)
team1Spawn.CFrame = CFrame.new(10, 0.5, 0)
team2Spawn.CFrame = CFrame.new(20, 0.5, 0)
team3Spawn.CFrame = CFrame.new(30, 0.5, 0)
Zusammenfassung
Eigenschaften
Ermöglicht es einem Player, dem Team beizutreten, indem er die SpawnLocation berührt.Wenn auf wahr gesetzt, wenn ein Player Zeichen mit dem SpawnLocation in Kontakt kommt, wird das Player.TeamColor des Spieler:inauf SpawnLocation.TeamColor gesetzt.
Die Länge der Zeit, in Sekunden, die ein ForceField auf einen Player Zeichenspawn angewendet wird, der sich bei diesem SpawnLocation befindet.Wenn die Dauer null ist, wird die ForceField nie erstellt und es werden keine Instance.DescendantAdded oder Instance.ChildAdded Ereignisse ausgelöst.
Legt fest, ob oder nicht der SpawnLocation aktiviert ist.Wenn deaktivierte Spieler nicht am SpawnLocation spawnen können und die Funktion "AllowTeamChangeOnTouch" deaktiviert ist.
Ob oder nicht ein SpawnLocation mit einem bestimmten Team verbunden ist.Das bedeutet, dass jede Player, von jeder Team, auf ihr spawnen kann, wenn diese Eigenschaft auf wahr gesetzt ist.
Legt fest, zu welchem Team der SpawnLocation gehört.Wenn die Eigenschaft SpawnLocation.Neutral falsch ist, kann nur Players mit derselben Player.TeamColor wie die Teamfarbe des Spawns dort spawnen.
Legt die Gesamtform des Objekts fest.
Bestimmt, ob ein Teil durch die Physik unbewegbar ist.
Die anguläre Geschwindigkeit der Montagemaschine des Teils.
Das Zentrum der Masse der Montagemaschine des Teils im Platz.
Die lineare Geschwindigkeit der Montagemaschine des Teils.
Die Gesamtmenge der Montagemaske des Teils.
Eine Referenz auf den Wurzelteil der Montagemaschine.
Bestimmt, ob das Teil physisch mit der Audio-Simulation interagieren wird, ähnlich wie CastShadow für Beleuchtung.
Bestimmt die Art der Oberfläche für die Rückseite eines Teils.
Bestimmt die Art der Oberfläche für das untere Gesicht eines Teils.
Bestimmt die Farbe eines Teils.
Bestimmt die Position und Ausrichtung des BasePart in der Welt.
Bestimmt, ob ein Teil mit anderen Teilen kollidieren kann.
Bestimmt, ob das Teil während räumlicher Abfrageoperationen berücksichtigt wird.
Bestimmt, ob Touched und TouchEnded Ereignisse auf der Seite abgefeuert werden.
Bestimmt, ob ein Teil einen Schatten wirft oder nicht.
Beschreibt die Weltposition, in der sich das Zentrum der Masse eines Teils befindet.
Beschreibt den Namen der Gruppeeines Teils.
Bestimmt die Farbe eines Teils.
Zeigt die aktuellen physischen Eigenschaften des Teils an.
Bestimmt mehrere physische Eigenschaften eines Teils.
Wird verwendet, um aerodynamische Kräfte auf Teilen und Montagemaschinen zu aktivieren oder zu deaktivieren.
Die tatsächliche physische Größe des BasePart als von der Physik-Engine betrachtet.
Bestimmt die Art der Oberfläche für das Vordergesicht eines Teils.
Bestimmt die Art der Oberfläche für das linke Gesicht eines Teils.
Legt einen Multiplikator für BasePart.Transparency fest, der nur für den lokalen Client sichtbar ist.
Bestimmt, ob ein Teil in Studio auswählbar ist.
Beschreibt die Masse des Teils, das Produkt seiner Dichte und Größe.
Bestimmt, ob das Teil zur Gesamtmenge oder zur Inertie seines steifen Körpers beiträgt.
Bestimmt die Textur und die Standardphysikalischen Eigenschaften eines Teils.
Der Name von MaterialVariant.
Beschreibt die Rotation des Teils in der Welt.
Gibt den Versatz des Drehpunkts des Teils von seinem CFrame an.
Beschreibt die Position des Teils in der Welt.
Zeit seit dem letzten aufgezeichneten Physik-Update.
Bestimmt, wie viel ein Teil die Skybox widerspiegelt.
Beschreibt die kleinste Änderung in der Größe, die von der Resize()-Methode zulässig ist.
Beschreibt die Gesichter, auf denen ein Teil skaliert werden kann.
Bestimmt die Art der Oberfläche für die richtige Seite eines Teils.
Die Hauptregel bei der Bestimmung des Wurzelteils einer Montagemaschine.
Die Rotation des Teils in Grad für die drei Achsen.
Bestimmt die Dimensionen eines Teils (Länge, Breite, Höhe).
Bestimmt die Art der Oberfläche für die Vorderseite eines Teils.
Bestimmt, wie viel ein Teil durchgesehen werden kann (das Gegenteil der Part-Opazität).
Methoden
Methoden von BasePart übernommenWenden Sie einen angulären Impuls auf die Montagemaschine an.
Wenden Sie einen Impuls auf die Montagemaschine im Montagemodus center of mass an.
Wenden Sie einen Impuls auf die Montagemaschine an an der angegebenen Position.
Gibt zurück, ob die Teile miteinander kollidieren können.
Überprüft, ob Sie das Netzwerkbesitz eines Teils festlegen können.
Gibt eine Tabelle von Teilen zurück, die mit dem Objekt durch eine starre Verbindung verbunden sind.
Gib alle Gelenke oder Einschränkungen zurück, die mit diesem Teil verbunden sind.
Gibt den Wert der Mass Eigenschaftenzurück.
Gibt den aktuellen Spieler zurück, der der Netzwerkbesitzer dieses Teils ist, oder nil im Falle des Servers.
Gibt wahr zurück, wenn die SpielEngine das Netzwerkbesitzer automatisch für diesen Teil entscheidet.
Gibt das Basisteil einer Montagemaschine von Teilen zurück.
Gibt eine Tabelle aller BasePart.CanCollide Teile zurück, die sich mit diesem Teil überlappen.
Gibt die lineare Geschwindigkeit der Montagemaschine des Teils an der angegebenen Position in Bezug auf dieses Teil zurück.
Gibt wahr zurück, wenn das Objekt mit einem Teil verbunden ist, das es an einer Stelle hält (z. B. ein Anchored Teil), sonst gibt es false zurück.
Ändert die Größe eines Objekts genau wie mit dem Tool.
Setzt den angegebenen Spieler als Netzwerkbesitzer für dieses und alle verbundenen Teile.
Lässt die SpielEngine dynamisch entscheiden, wer die Physik des Teils handhabt (einer der Clients oder der Server).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Erstellt eine neue IntersectOperation aus der überlappenden Geometrie des Teils und der anderen Teile in dem angegebenen Array.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Erstellt ein neues UnionOperation vom Teil, minus die Geometrie, die von den Teilen im angegebenen Array besetzt wird.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Erstellt ein neues UnionOperation vom Teil plus die Geometrie, die von den Teilen im angegebenen Array besetzt wird.
Holt den Pivot eines PVInstance .
Verwandelt die PVInstance zusammen mit all ihren Nachkommen PVInstances, so dass der Pivot jetzt an der angegebenen CFrame position ist.
Ereignisse
Ereignisse von BasePart übernommenFeuert, wenn ein Teil aufgrund einer physischen Bewegung aufhört, ein anderes Teil zu berühren.
Feuert, wenn ein Teil aufgrund einer physischen Bewegung einen anderen Teil berührt.
Eigenschaften
AllowTeamChangeOnTouch
Ermöglicht es einem Player, dem Team beizutreten, indem er die SpawnLocation berührt.Wenn auf wahr gesetzt, wenn ein Player Zeichen mit dem SpawnLocation in Kontakt kommt, wird das Player.TeamColor des Spieler:inauf SpawnLocation.TeamColor gesetzt.Player.Neutral wird auch auf kontaktierengesetzt auf SpawnLocation.Neutral, was bedeutet, dass ein Spieler auch neutral werden kann, indem er einen Spawn-Ort berührt.
Dies wird nicht funktionieren, wenn SpawnLocation.Enabled auf false gesetzt ist.
Checkpoints erstellen
Diese Funktion wird oft verwendet, um Kontrollpunkte in Hindernisläufen oder ähnlichen Spielen zu erstellen.
Code-Beispiele
This sample demonstrates how SpawnLocations can be used to make a checkpoint system. Typically this would be done Studio and not in Lua, but this example serves as a comprehensive example of what Team and SpawnLocation properties need to be used to achieve this setup.
local Teams = game:GetService("Teams")
-- create start team (AutoAssignable = true)
local startTeam = Instance.new("Team")
startTeam.Name = "Start"
startTeam.AutoAssignable = true
startTeam.TeamColor = BrickColor.new("White")
startTeam.Parent = Teams
-- create checkpoint teams (Autoassignable = false), ensuring all TeamColors are unique
local team1 = Instance.new("Team")
team1.Name = "Checkpoint 1"
team1.AutoAssignable = false
team1.TeamColor = BrickColor.new("Bright blue")
team1.Parent = Teams
local team2 = Instance.new("Team")
team2.Name = "Checkpoint 2"
team2.AutoAssignable = false
team2.TeamColor = BrickColor.new("Bright green")
team2.Parent = Teams
local team3 = Instance.new("Team")
team3.Name = "Checkpoint 2"
team3.AutoAssignable = false
team3.TeamColor = BrickColor.new("Bright red")
team3.Parent = Teams
-- create spawns
local startSpawn = Instance.new("SpawnLocation")
startSpawn.Anchored = true
startSpawn.Size = Vector3.new(5, 1, 5)
startSpawn.Neutral = false
startSpawn.AllowTeamChangeOnTouch = false
startSpawn.TeamColor = startTeam.TeamColor
startSpawn.BrickColor = startTeam.TeamColor
startSpawn.Parent = game.Workspace
local team1Spawn = Instance.new("SpawnLocation")
team1Spawn.Anchored = true
team1Spawn.Size = Vector3.new(5, 1, 5)
team1Spawn.Neutral = false
team1Spawn.AllowTeamChangeOnTouch = true
team1Spawn.TeamColor = team1.TeamColor
team1Spawn.BrickColor = team1.TeamColor
team1Spawn.Parent = game.Workspace
local team2Spawn = Instance.new("SpawnLocation")
team2Spawn.Anchored = true
team2Spawn.Size = Vector3.new(5, 1, 5)
team2Spawn.Neutral = false
team2Spawn.AllowTeamChangeOnTouch = true
team2Spawn.TeamColor = team2.TeamColor
team2Spawn.BrickColor = team2.TeamColor
team2Spawn.Parent = game.Workspace
local team3Spawn = Instance.new("SpawnLocation")
team3Spawn.Anchored = true
team3Spawn.Size = Vector3.new(5, 1, 5)
team3Spawn.Neutral = false
team3Spawn.AllowTeamChangeOnTouch = true
team3Spawn.TeamColor = team3.TeamColor
team3Spawn.BrickColor = team3.TeamColor
team3Spawn.Parent = game.Workspace
-- position spawns
startSpawn.CFrame = CFrame.new(0, 0.5, 0)
team1Spawn.CFrame = CFrame.new(10, 0.5, 0)
team2Spawn.CFrame = CFrame.new(20, 0.5, 0)
team3Spawn.CFrame = CFrame.new(30, 0.5, 0)
Duration
Die Länge der Zeit, in Sekunden, die ein ForceField auf einen Player Zeichenspawn angewendet wird, der sich bei diesem SpawnLocation befindet.Wenn die Dauer null ist, wird die ForceField nie erstellt und es werden keine Instance.DescendantAdded oder Instance.ChildAdded Ereignisse ausgelöst.
Dieser Standardwert dieser Eigenschaft ist 10 Sekunden.
Die Dauerfunktion ermöglicht es Entwicklern, leicht Players Schutz vor "Spawn-Kills" zu geben, die für Spieler frustrierend sein können.Beachten Sie, dass ForceFields nur Benutzer vor Explosions und Waffen schützt, die Humanoid:TakeDamage() verwenden, um Schaden zu verursachen oder sonst nach einem ForceField zu suchen.
Code-Beispiele
This sample will create a neutral SpawnLocation in the Workspace that'll give players spawning a ForceField for 20 seconds.
local spawnLocation = Instance.new("SpawnLocation")
spawnLocation.Anchored = true
spawnLocation.Size = Vector3.new(5, 1, 5)
spawnLocation.Neutral = true -- anyone can spawn here
spawnLocation.Duration = 20
spawnLocation.Parent = workspace
Enabled
Legt fest, ob das SpawnLocation aktiviert ist oder nicht. Wenn Spieler deaktiviert sind, können sie nicht am SpawnLocation spawnen, und die SpawnLocation.AllowTeamChangeOnTouch Funktionalität ist deaktiviert.
Diese Eigenschaft bietet die bequemste Möglichkeit, Players zu verhindern, dass sie bei einem Spawn entstehen.
Beachten Sie, dass das Teamwechsel auf Berührung mit der Verwendung von SpawnLocation.AllowTeamChangeOnTouch deaktiviert ist, wenn Enabled auf false gesetzt ist, andere berührte Ereignisse mit der Verwendung von BasePart.Touched werden jedoch weiterhin initiieren.
Code-Beispiele
The following sample will create a SpawnLocation in the Workspace that will become semi-transparent when it is disabled.
local spawnLocation = Instance.new("SpawnLocation")
spawnLocation.Anchored = true
spawnLocation.Size = Vector3.new(5, 1, 5)
spawnLocation.Neutral = true -- anyone can spawn here
spawnLocation.Enabled = true
spawnLocation.Parent = workspace
local function onEnabledChanged()
spawnLocation.Transparency = spawnLocation.Enabled and 0 or 0.5
end
spawnLocation:GetPropertyChangedSignal("Enabled"):Connect(onEnabledChanged)
task.wait(5)
spawnLocation.Enabled = false -- transparency = 0.5
Neutral
Ob oder nicht ein Spawn mit einem bestimmten Team verbunden ist.Das bedeutet, dass jede Player, von jeder Team, auf ihr spawnen kann, wenn diese Eigenschaft auf wahr gesetzt ist.
Wenn Neutral auf false gesetzt ist, können nur Spieler, deren Player.TeamColor gleich SpawnLocation.TeamColor ist, die SpawnLocation verwenden.
Wenn SpawnLocation.AllowTeamChangeOnTouch wahr ist, wird Player.Neutral bei Kontakt mit dem Spawn auf diese Eigenschaft festgelegt.
Code-Beispiele
This sample demonstrates how SpawnLocations can be used to make a checkpoint system. Typically this would be done Studio and not in Lua, but this example serves as a comprehensive example of what Team and SpawnLocation properties need to be used to achieve this setup.
local Teams = game:GetService("Teams")
-- create start team (AutoAssignable = true)
local startTeam = Instance.new("Team")
startTeam.Name = "Start"
startTeam.AutoAssignable = true
startTeam.TeamColor = BrickColor.new("White")
startTeam.Parent = Teams
-- create checkpoint teams (Autoassignable = false), ensuring all TeamColors are unique
local team1 = Instance.new("Team")
team1.Name = "Checkpoint 1"
team1.AutoAssignable = false
team1.TeamColor = BrickColor.new("Bright blue")
team1.Parent = Teams
local team2 = Instance.new("Team")
team2.Name = "Checkpoint 2"
team2.AutoAssignable = false
team2.TeamColor = BrickColor.new("Bright green")
team2.Parent = Teams
local team3 = Instance.new("Team")
team3.Name = "Checkpoint 2"
team3.AutoAssignable = false
team3.TeamColor = BrickColor.new("Bright red")
team3.Parent = Teams
-- create spawns
local startSpawn = Instance.new("SpawnLocation")
startSpawn.Anchored = true
startSpawn.Size = Vector3.new(5, 1, 5)
startSpawn.Neutral = false
startSpawn.AllowTeamChangeOnTouch = false
startSpawn.TeamColor = startTeam.TeamColor
startSpawn.BrickColor = startTeam.TeamColor
startSpawn.Parent = game.Workspace
local team1Spawn = Instance.new("SpawnLocation")
team1Spawn.Anchored = true
team1Spawn.Size = Vector3.new(5, 1, 5)
team1Spawn.Neutral = false
team1Spawn.AllowTeamChangeOnTouch = true
team1Spawn.TeamColor = team1.TeamColor
team1Spawn.BrickColor = team1.TeamColor
team1Spawn.Parent = game.Workspace
local team2Spawn = Instance.new("SpawnLocation")
team2Spawn.Anchored = true
team2Spawn.Size = Vector3.new(5, 1, 5)
team2Spawn.Neutral = false
team2Spawn.AllowTeamChangeOnTouch = true
team2Spawn.TeamColor = team2.TeamColor
team2Spawn.BrickColor = team2.TeamColor
team2Spawn.Parent = game.Workspace
local team3Spawn = Instance.new("SpawnLocation")
team3Spawn.Anchored = true
team3Spawn.Size = Vector3.new(5, 1, 5)
team3Spawn.Neutral = false
team3Spawn.AllowTeamChangeOnTouch = true
team3Spawn.TeamColor = team3.TeamColor
team3Spawn.BrickColor = team3.TeamColor
team3Spawn.Parent = game.Workspace
-- position spawns
startSpawn.CFrame = CFrame.new(0, 0.5, 0)
team1Spawn.CFrame = CFrame.new(10, 0.5, 0)
team2Spawn.CFrame = CFrame.new(20, 0.5, 0)
team3Spawn.CFrame = CFrame.new(30, 0.5, 0)
TeamColor
Die Eigenschaft TeamColor legt fest, zu welchem Team die SpawnLocation gehört.Wenn die Eigenschaft SpawnLocation.Neutral falsch ist, kann nur Players mit derselben Player.TeamColor wie die Teamfarbe des Spawns dort spawnen.
Wenn SpawnLocation.AllowTeamChangeOnTouch wahr ist, wird Player.Neutral bei Kontakt mit dem Spawn auf diese Eigenschaft festgelegt.
Code-Beispiele
This sample demonstrates how SpawnLocations can be used to make a checkpoint system. Typically this would be done Studio and not in Lua, but this example serves as a comprehensive example of what Team and SpawnLocation properties need to be used to achieve this setup.
local Teams = game:GetService("Teams")
-- create start team (AutoAssignable = true)
local startTeam = Instance.new("Team")
startTeam.Name = "Start"
startTeam.AutoAssignable = true
startTeam.TeamColor = BrickColor.new("White")
startTeam.Parent = Teams
-- create checkpoint teams (Autoassignable = false), ensuring all TeamColors are unique
local team1 = Instance.new("Team")
team1.Name = "Checkpoint 1"
team1.AutoAssignable = false
team1.TeamColor = BrickColor.new("Bright blue")
team1.Parent = Teams
local team2 = Instance.new("Team")
team2.Name = "Checkpoint 2"
team2.AutoAssignable = false
team2.TeamColor = BrickColor.new("Bright green")
team2.Parent = Teams
local team3 = Instance.new("Team")
team3.Name = "Checkpoint 2"
team3.AutoAssignable = false
team3.TeamColor = BrickColor.new("Bright red")
team3.Parent = Teams
-- create spawns
local startSpawn = Instance.new("SpawnLocation")
startSpawn.Anchored = true
startSpawn.Size = Vector3.new(5, 1, 5)
startSpawn.Neutral = false
startSpawn.AllowTeamChangeOnTouch = false
startSpawn.TeamColor = startTeam.TeamColor
startSpawn.BrickColor = startTeam.TeamColor
startSpawn.Parent = game.Workspace
local team1Spawn = Instance.new("SpawnLocation")
team1Spawn.Anchored = true
team1Spawn.Size = Vector3.new(5, 1, 5)
team1Spawn.Neutral = false
team1Spawn.AllowTeamChangeOnTouch = true
team1Spawn.TeamColor = team1.TeamColor
team1Spawn.BrickColor = team1.TeamColor
team1Spawn.Parent = game.Workspace
local team2Spawn = Instance.new("SpawnLocation")
team2Spawn.Anchored = true
team2Spawn.Size = Vector3.new(5, 1, 5)
team2Spawn.Neutral = false
team2Spawn.AllowTeamChangeOnTouch = true
team2Spawn.TeamColor = team2.TeamColor
team2Spawn.BrickColor = team2.TeamColor
team2Spawn.Parent = game.Workspace
local team3Spawn = Instance.new("SpawnLocation")
team3Spawn.Anchored = true
team3Spawn.Size = Vector3.new(5, 1, 5)
team3Spawn.Neutral = false
team3Spawn.AllowTeamChangeOnTouch = true
team3Spawn.TeamColor = team3.TeamColor
team3Spawn.BrickColor = team3.TeamColor
team3Spawn.Parent = game.Workspace
-- position spawns
startSpawn.CFrame = CFrame.new(0, 0.5, 0)
team1Spawn.CFrame = CFrame.new(10, 0.5, 0)
team2Spawn.CFrame = CFrame.new(20, 0.5, 0)
team3Spawn.CFrame = CFrame.new(30, 0.5, 0)