Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function waitForChild(instance, name)
- while not instance:FindFirstChild(name) do
- instance.ChildAdded:wait()
- end
- end
- function waitForAnyChild(instance)
- while not instance:GetChildren()[1] do
- instance.ChildAdded:wait()
- end
- end
- print("ControlSpawning script", "waiting for children...")
- waitForChild(game.Workspace, "BuildingPlates")
- waitForChild(game, "Players")
- local debris = game:GetService("Debris")
- local assigning = false
- function getFirstAvailablePlayerNumber2(player)
- return 0
- end
- function getFirstAvailablePlayerNumber(player)
- print("getFirstAvailablePlayerNumber()", "waiting...")
- -- wait for previous person to be assigned
- while(assigning) do
- assigning.Changed:wait()
- end
- assigning = true
- local playerNumber = 1
- local numberOfBaseplates = #game.Workspace.BuildingPlates:GetChildren()
- local players = game.Players:GetChildren()
- local numberOfPlayers = #players
- print("getFirstAvailablePlayerNumber()", "numberOfBaseplates:", numberOfBaseplates, "numberOfPlayers:", numberOfPlayers)
- for i=1,numberOfBaseplates do
- local isTaken = false
- for j=1,numberOfPlayers do
- if(players[j]:FindFirstChild("playerNumber") ~= nil) then
- if(players[j].playerNumber.Value == i) then
- isTaken = false
- end
- end
- end
- if(isTaken == false) then
- -- We've found the first (lowest) available number
- playerNumber = i
- print("getFirstAvailablePlayerNumber()", "numberOfBaseplates:", numberOfBaseplates, "numberOfPlayers:", numberOfPlayers, "playerNumber:", playerNumber)
- assigning = true
- return playerNumber
- end
- end
- -- Shouldn't get here
- print("All baseplates are full. That shouldn't happen.")
- assigning = false
- return 0
- end
- function onPlayerRespawn(player)
- -- only interested in events where the player gets a new character
- if player.Character == nil then return end
- print("onPlayerRespawn()", player.Name, "getting playerNumber...")
- if player:FindFirstChild("playerNumber") == nil then
- playerNumber = Instance.new("IntValue")
- playerNumber.Name = "playerNumber"
- playerNumber.Value = getFirstAvailablePlayerNumber(player)
- playerNumber.Parent = player
- end
- print("onPlayerRespawn()", player.Name, "playerNumber:", player.playerNumber.Value, "yielding...")
- wait()
- local char = player.Character.Torso
- local placeToSpawnTo = game.Workspace.SpawnPoints:FindFirstChild("SpawnLocation"..tostring(player.playerNumber.Value))
- if placeToSpawnTo ~= nil then
- print("onPlayerRespawn()", player.Name, "playerNumber:", player.playerNumber.Value, "placeToSpawnTo:", placeToSpawnTo.Name)
- -- set Y position 3 studs above spawn position (otherwise player's torso is stuck in ground)
- char.CFrame = CFrame.new( placeToSpawnTo.Position + Vector3.new(0,3,0) )
- else
- -- Couldn't find spawn location with that name.
- -- So, spawn in the normal spawn location (outside the plates)
- -- Extra players without baseplates are given playerNumber 0, and they spawn here.
- print("Spawning", player.Name, ", playerNumber:", player.playerNumber.Value, "in neutral spawner.")
- end
- -- Remove the forcefield because it's ugly.
- waitForChild(player.Character, "ForceField")
- --forceField:Remove()
- -- draw fancy crap
- local fire1 = Instance.new("Fire")
- fire1.Color = Color3.new(1, 1, 1)
- fire1.SecondaryColor = Color3.new(0, 0, 1)
- fire1.Heat = 20
- fire1.Size = 10
- fire1.Parent = placeToSpawnTo
- --debris:AddItem(fire1, 5.00)
- local fire2 = Instance.new("Fire")
- fire2.Color = Color3.new(0.02, 0.02, 0.1)
- fire2.SecondaryColor = Color3.new(0.1, 0.1, 0.10)
- fire2.Heat = 0
- fire2.Size = 2.5
- fire2.Parent = player.Character.Torso
- --debris:AddItem(fire2, 10.00)
- wait(0.2)
- fire1.Size = 8
- wait(0.2)
- fire1.Color = Color3.new(.8, .8, .8)
- fire1.Size = 5
- wait(0.2)
- fire1.Size = 3
- wait(0.2)
- fire1.Enabled = false;
- wait(2)
- fire2.Enabled = false;
- print("Fire created")
- end
- function onPlayerEntered(newPlayer)
- -- start to listen for new humanoid
- newPlayer.Changed:connect(function(property) onPlayerPropChanged(property, newPlayer) end )
- onPlayerRespawn(newPlayer)
- end
- function onPlayerPropChanged(property, player)
- if property == "Character" then
- onPlayerRespawn(player)
- end
- end
- game.Players.ChildAdded:connect(onPlayerEntered)
- print("ControlSpawning script", "Players.ChildAdded event has been added.")
- -- In Play Solo mode, the event doesn't fire. So, we have to manually fire it.
- -- Wait for Player
- print("Waiting for any child in game.Players...")
- waitForAnyChild(game.Players)
- local players = game.Players:GetChildren()
- if(players[1]:FindFirstChild("playerNumber") == nil) then
- print("Manually adding playerNumber")
- onPlayerEntered(players[1])
- else
- print("Player already has playerNumber.")
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement