Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- speedcartMaxClients = 10
- raceOngoing = false
- raceEndSchedule = nil
- everyoneDiedSchedule = nil
- if speedcartClients == nil then
- speedcartClients = {}
- end
- function everyoneDiedCheck()
- for i=1,speedcartMaxClients,1 do
- if speedcartMaxClients[i] ~= nil then
- if speedcartMaxClients[i]:getPlayer() ~= nil then
- x,y,z = speedcartMaxClients[i]:getPlayer():getPosition()
- if y > 15 then
- everyoneDiedSchedule = schedule(1000,everyoneDiedCheck)
- return false
- end
- end
- end
- end
- cancel(raceEndSchedule)
- endRace()
- return true
- end
- function getSpeedcartIdx(client)
- clientIdx = -1
- for i=1,speedcartMaxClients,1 do
- if speedcartClient[i] == client then
- clientIdx = i
- break
- end
- end
- if clientIdx == -1 then
- for i=1,speedcartMaxClients,1 do
- if speedcartClient[i] == nil then
- speedcartClient[i] = client
- clientIdx = i
- break
- end
- end
- end
- return clientIdx
- end
- function speedcartSpawnPlayer(client,x,y,z,cancelled)
- if raceOngoing then
- return client,x,y,z,true
- end
- idx = getSpeedcartIdx(client)
- spawnBrick = getNamedBrickIdx("speedcartSpawn" .. idx)
- x,y,z = spawnBrick:getPosition()
- y = y + 2
- return client,x,y,z,cancelled
- end
- registerEventListener("spawnPlayer","speedcartSpawnPlayer")
- function speedcartClientLeave(client)
- clearClientBricks(client)
- idx = getSpeedcartIdx(client)
- if idx ~= -1 then
- speedcartClient[idx] = nil
- end
- return client
- end
- registerEventListener("clientLeave","speedcartClientLeave")
- function speedcartClientPlantBrick(client,x,y,z,isSpecial,specialType,width,length,height,cancelled)
- if raceOngoing then
- cancalled = true
- end
- return client,x,y,z,isSpecial,specialType,width,length,height,cancelled
- end
- registerEventListener("clientPlantBrick","speedcartClientPlantBrick")
- function speedcartClientClickedBrick(client,brick)
- if client:getPlayer() == nil then
- return client,brick
- end
- if brick:getName() == "winBrick" then
- bottomPrintAll("[colour='FFFFFF00']" .. client:getName() .. "[colour='FFFFFFFF'] won the race!",7000)
- cancel(everyoneDiedSchedule)
- cancel(raceEndSchedule)
- schedule(7000,endRace)
- end
- return client,brick
- end
- registerEventListener("clientClickedBrick","speedcartClientClickedBrick")
- function endRace()
- raceOngoing = false
- cancel(everyoneDiedSchedule)
- gateBricks = getNumNamedBricks("gate")
- --I guess internal indicies still start at 0 instead of 1 like Lua tables do
- for i=0,gateBricks-1,1 do
- brick = getNamedBrickIdx("gate",i)
- i:setColliding(true)
- r,g,b,a = i:getColor()
- i:setColor(r,g,b,1)
- end
- clearBuiltVehicles()
- for i=1,speedcartMaxClients,1 do
- if speedcartMaxClients[i] ~= nil then
- speedcartMaxClients[i]:spawnPlayer(0,0,0,false)
- -- Spawn player should teleport a client's player if they already have one
- -- Args don't matter they'll be set in speedcartSpawnPlayer
- end
- end
- end
- function startRace()
- raceOngoing = true
- gateBricks = getNumNamedBricks("gate")
- for i=0,gateBricks-1,1 do
- brick = getNamedBrickIdx("gate",i)
- i:setColliding(false)
- r,g,b,a = i:getColor()
- i:setColor(r,g,b,0)
- end
- for i=1,speedcartMaxClients,1 do
- if speedcartMaxClients[i] ~= nil then
- clearClientBricks(speedcartMaxClients[i])
- end
- end
- everyoneDiedSchedule = schedule(1000,everyoneDiedCheck)
- raceEndSchedule = schedule(1000 * 60 * 5,endRace)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement