Competition

Run Settings
LanguageLua
Language Version
Run Command
print("Competition show!"); -- BFDI:R SB EDITION -- CONSTANTS local DEFAULT_TYPEWRITER_DELAY = 3 local CODENAME = "BFDI:R" local VERSION = "v1" -- local LSB = false -- print(CODENAME.." "..VERSION) -- local instN = Instance.new local create = function(c, par) return function(t) t = t or {} local inst = instN(c) if inst:IsA("GuiObject") then inst.BackgroundColor3 = Color3.new(1,1,1) end if inst:IsA("TextLabel") or inst:IsA("TextBox") then inst.Font = "SourceSans" end for i, v in t do inst[i] = v end if par and not t.Parent then inst.Parent = par end return inst end end local clone = function(c, par) return function(t) t = t or {} local inst = c:Clone() for i, v in t do inst[i] = v end if par and not t.Parent then inst.Parent = par end return inst end end function safeDestroy(i) if i == nil then return end pcall(game.Destroy,i) end function lerp(a, b, t) return a + (b - a) * t end function loadurlstring(rawurl) local HttpService = game:GetService("HttpService") return loadstring(HttpService:GetAsync(rawurl)) end local players = game:GetService'Players' local HttpService = game:GetService'HttpService' local inGame = {} local inShow = {} local plrDatas = {} -- INSTANCES local RIG = players:CreateHumanoidModelFromDescription(create("HumanoidDescription", script){ TorsoColor = BrickColor.Blue().Color, HeadColor = BrickColor.White().Color, LeftArmColor = BrickColor.White().Color, RightArmColor = BrickColor.White().Color, LeftLegColor = BrickColor.White().Color, RightLegColor = BrickColor.White().Color, }, "R6") -- LISTS local MakeLobby = loadstring(HttpService:GetAsync"http://coolaf.com/run/snippets/h70e617rl4/raw/lobby.lua")() local ChallengeList = loadstring(HttpService:GetAsync("http://coolaf.com/run/snippets/h8psgwrkrd/raw/maps.lua"))() local Objectifier = loadstring(HttpService:GetAsync("http://coolaf.com/run/snippets/h8ozoc3omc/raw/standalone.lua"))() -- LIBRARIES -- SIGNAL LIBRARY local Signal = loadurlstring("https://gist.githubusercontent.com/stravant/b75a322e0919d60dde8a0316d1f09d2f/raw/f6a8900676185457211ec25d22d681c20ee792cb/GoodSignal.lua")() -- MODULES -- FAKEPLAYER local FPlayers = {FakePlayerCount = 0, _FPlrs = {}} do local Players = game:GetService("Players") --- FPlayer Class --- local _FPlayer = {} function _FPlayer.__newindex(t, i, v) if i == "Character" then local cons = rawget(t, "_cons") if cons.charNet then cons.charNet:Disconnect() end safeDestroy(t.Character) rawset(t, i, v) if not v then return end cons.charNet = v.AncestryChanged:Connect(function() for i, v in v:GetChildren() do if v:IsA("BasePart") and v:CanSetNetworkOwnership() then v:SetNetworkOwner(nil) end end end) t.CharacterAdded:Fire(v) return end rawset(t, i, v) end --------------------- function FPlayers.new() FPlayers.FakePlayerCount = FPlayers.FakePlayerCount + 1 local data = { Backpack = create("Folder")(), PlayerGui = create("Folder")(), Character = nil, CharacterAdded = Signal.new(), UserId = -FPlayers.FakePlayerCount, Name = "FakePlayer"..FPlayers.FakePlayerCount, DisplayName = "FakePlayer"..FPlayers.FakePlayerCount, ClassName = "Player", _cons = {} } local c data.CharacterAdded:Connect(function(v) if c then c:Destroy() end c = v end) function data:IsA(class) return class == self.ClassName end function data:LoadCharacter() if c then c:Destroy() end self.Character = RIG:Clone() self.Character.Parent = script c = self.Character end data = setmetatable(data, _FPlayer) FPlayers._FPlrs[-data.UserId] = data data:LoadCharacter() return data end function FPlayers:IsFake(plr) return self._FPlrs[-plr.UserId] ~= nil end function FPlayers:GetPlayerFromCharacter(char) for i, v in self._FPlrs do if v.Character == char then return v end end return Players:GetPlayerFromCharacter(char) end end -- PLAYER DATA MODULE local plrData = { ufeList = {} } function plrData.initData(plr) local data = { player = plr, team = "", inGame = false, cons = {}, voting = false, VotingStarted = Signal.new(), VotingStopped = Signal.new(), } data.VotingStarted:Connect(function() print("voting engage ") data.voting = true end) plrDatas[plr.UserId] = data return data end function plrData.unload(plr) local data = plrData.getData(plr) for i, v in data.cons do v:Disconnect() end end function plrData.getData(plr) return plrDatas[plr.UserId] end plrData.get = plrData.getData -- MUSIC MODULE local music = {id = "", vol = 1, volMult = 1} local musicData = { intermission = "rbxassetid://76235338866803", sweeper = "rbxassetid://1846476088", lobby1 = "rbxassetid://121281026041996", lobby2 = "", lobby3 = "" } function music:update(snd) local resetPos = false if snd.SoundId ~= self.id then resetPos = true end snd.SoundId = self.id snd.Volume = self.vol * self.volMult if resetPos then snd.TimePosition = 0 end end function music:updateAll() for _, v in plrDatas do local gui = v.gui local mus = gui:FindFirstChild'Mus' if mus then self:update(mus) end end end function music:play(name) local data = musicData[name] or "" self.id = data self.volMult = 1 self:updateAll() end function music:fadeout(length) length = length or 1 local id = self.id local a = 0 task.spawn(function() while a < length do a += task.wait() if id ~= self.id then break end self.volMult = lerp(self.volMult, 0, a/length) self:updateAll() end if id ~= self.id then return end self:play("") end) end -- TIMER MODULE local timer = { text = "Hi", visible = false, renders = {} } function timer:render(box) local data = box data.Visible = self.visible data.PlaceholderText = tostring(self.text) end function timer:connect(box) local data = box table.insert(self.renders, data) self:render(data) end function timer:renderAll() for i, v in self.renders do if not v:IsDescendantOf(game) then table.remove(self.renders, i) else self:render(v) end end end function timer:set(text) self.text = text self:renderAll() end function timer:setVisible(b) self.visible = b self:renderAll() end -- HINT MODULE local hint = { text = "Hi", maxVis = -1, visStart = 0, charName = nil, tC = nil, renders = {}, } function hint:render(box) local data = box local tbox = data[1] local charbox = data[2] local charN = data[3] charN.PlaceholderText = tostring(self.charName) tbox.MaxVisibleGraphemes = self.maxVis + self.visStart tbox.PlaceholderText = self.text tbox.Visible = self.charName == nil and self.text ~= "" charbox.MaxVisibleGraphemes = self.maxVis + self.visStart charbox.PlaceholderText = self.text charbox.Visible = self.charName ~= nil and self.text ~= "" end function hint:connect(hTBox, charBox, charNBox) local data = {hTBox, charBox, charNBox} table.insert(self.renders, data) self:render(data) end function hint:renderAll() for i, v in self.renders do if not v[1]:IsDescendantOf(game) then table.remove(self.renders, i) else self:render(v) end end end function hint:set(text, doRender) self.text = text if doRender then self:renderAll() end end function hint:hide() self.text = "" self:renderAll() end function hint:typewriter(text, fps, del, charname, hide, add) if text == "" then self:set(text, true) end fps = fps or 30 local tLength = #text local tTime = tLength / fps self.visStart = add and #self.text or 0 if add then self:set(self.text..text) else self:set(text) end self.charName = charname if self.tC and coroutine.status(self.tC) ~= 'dead' then coroutine.close(self.tC) end self.tC = task.spawn(function() local a = 0 while a < tTime do a += task.wait() self.maxVis = math.floor((a / tTime) * tLength) self:renderAll() end self.maxVis = -1 if hide then local delayTime = del ~= true and del or DEFAULT_TYPEWRITER_DELAY task.wait(tTime + delayTime) self:hide() end end) if del and not hide then del = del == true and DEFAULT_TYPEWRITER_DELAY or del task.wait(tTime + del) end return tTime end -- VOTING local voting = { immune = {}, votes = {}, voters = {}, ufe = {}, voteList = {}, names = {}, tiebreaker = false, voted = false } function voting:upForEliminate(plr) local icon if FPlayers:IsFake(plr) then icon = "rbxassetid://8508980527" else icon = ("rbxthumb://asset=AvatarHeadShot&id=&s&w=352&h=352"):format(plr.UserId) end local display = plr.DisplayName local char = plr.Character local hum if char:FindFirstChildOfClass'Humanoid' then hum = char:FindFirstChildOfClass'Humanoid' end if hum then display = hum.DisplayName end table.insert(self.ufe, {plr, icon, display, plr.UserId, char}) end function voting:begin(plrs) self.voted = false for i, v in plrs do local display = v.DisplayName local char = v.Character local hum if char and char:FindFirstChildOfClass'Humanoid' then hum = char:FindFirstChildOfClass'Humanoid' end if hum then display = hum.DisplayName end self.names[v.UserId] = display local plrData = plrData.get(v) table.insert(self.voters, v) if not self:hasImmunity(v) then self:upForEliminate(v) end end for i, v in self.voters do local data = plrData.get(v) data.VotingStarted:Fire(self.ufe) end end function voting:stop() table.clear(plrData.ufeList) for i, v in self.voters do local data = plrData.get(v) data.VotingStopped:Fire() end end function voting:hasImmunity(plr) return table.find(self.immune, plr) ~= nil end function voting:immunity(plr) table.insert(self.immune, plr) end function voting:vote(userId, voter) local t = self.votes[userId] if not t then self.votes[userId] = {} t = self.votes[userId] end table.insert(t, voter.UserId) end function voting:getList() local list = {} local voteds = {} Random.new():Shuffle(self.ufe) for i, v in self.ufe do local plr = v[1] local char = v[5] local display = v[3] local userId = v[4] local votes = 0 if self.votes[userId] then for i, v in self.votes[userId] do if table.find(voteds, v) then continue end table.insert(voteds, v) votes += 1 end end table.insert(list, { votes, plr, display, char }) end self.voteList = list self:sort() self.tiebreaker = false local highest for i, v in self.voteList do if not highest or highest[1] < v[1] then highest = v end end for i, v in self.voteList do if highest ~= v and highest and highest[1] == v[1] then self.tiebreaker = true end end for i, v in self.voteList do if v == highest and not self.tiebreaker then v[5] = true end end return list end function voting:sort() table.sort(self.voteList, function(a, b) return a[1] < b[1] end) end function voting:reset() table.clear(self.names) table.clear(self.immune) table.clear(self.votes) table.clear(self.voteList) table.clear(self.voters) end -- GUI MODULE local gui = {} local guiTemp = create("ScreenGui"){ Parent = script, IgnoreGuiInset = true, ResetOnSpawn = false, DisplayOrder = -4 } create"Sound"{ Name = "Mus", Looped = true, Playing = true, Volume = 1, Parent = guiTemp } do local hint = create"TextBox"{ Text = "", Interactable = false, TextScaled = true, PlaceholderText = "1234567890 hi", PlaceholderColor3 = Color3.new(), Size = UDim2.new(1,0,0.1,0), Name = "Hint", Parent = guiTemp } local timerhint = create"TextBox"{ Text = "", Interactable = false, TextScaled = true, PlaceholderText = "1234567890 hi", PlaceholderColor3 = Color3.new(), Size = UDim2.new(0.25,0,0.1,0), AnchorPoint = Vector2.new(0.5, 0), Position = UDim2.new(0.5, 0, 0.05, 0), Name = "Timer", Parent = guiTemp } local charhint = create"TextBox"{ Text = "", Interactable = false, TextScaled = true, PlaceholderText = "1234567890 hi", PlaceholderColor3 = Color3.new(), Size = UDim2.new(0.6,0,0.085,0), AnchorPoint = Vector2.xAxis/2 + Vector2.yAxis, Position = UDim2.new(0.5,0,0.775,0), Name = "HintChar", Parent = guiTemp, Visible = false } create"TextBox"{ Text = "", Interactable = false, TextScaled = true, PlaceholderText = "Announcer", PlaceholderColor3 = Color3.new(), Size = UDim2.new(0.2,0,0.45,0), AnchorPoint = Vector2.yAxis, Position = UDim2.new(0,0,0,0), Name = "Char", Parent = charhint } -- Voting local voting = create("Frame", guiTemp){ Name = "Voting", Size = UDim2.new(0.5,0,0.6,0), Position = UDim2.new(0.5,0,0.5,0), AnchorPoint = Vector2.one/2, Visible = false } local button = create("TextButton", voting){ Name = "Button", Size = UDim2.new(1,0,0.25,0), BackgroundTransparency = 1, TextTransparency = 1 } local list = create("ScrollingFrame", voting){ ScrollingDirection = "Y", CanvasSize = UDim2.new(1,0,2,0), Size = UDim2.new(1,0,1,0), AutomaticCanvasSize = "Y", Name = "List" } create("ImageLabel", button){ Size = UDim2.new(0.25,0,1,0), Name = "Icon", Interactable = false } create("TextBox", button){ AnchorPoint = Vector2.new(1,0), Size = UDim2.new(0.75,0,1,0), Position = UDim2.new(1,0,0,0), Name = "Display", Text = "", PlaceholderColor3 = Color3.new(), TextScaled = true, Interactable = false, } create("UIListLayout", list){ FillDirection = "Vertical" } end function gui:load(plrData) local player = plrData.player local gui = guiTemp:Clone() timer:connect(gui.Timer) hint:connect(gui.Hint, gui.HintChar, gui.HintChar.Char) music:update(gui.Mus) plrData.gui = gui gui.Parent = player.PlayerGui local voteFrame = gui.Voting local voteTemp = voteFrame.Button voteTemp.Visible = false local buttons = {} local function beginVoting() plrData.voting = true voteFrame.Visible = true print(voteFrame.Visible) for i, v in buttons do safeDestroy(v) end for i, v in voting.ufe do local button = voteTemp:Clone() button.Icon.Image = v[2] button.Visible = true button.Display.PlaceholderText = v[3] button.Parent = voteFrame.List button.MouseButton1Click:Connect(function() voting:vote(v[4], player) plrData.voting = false voteFrame.Visible = false end) end end if plrData.voting then beginVoting() end plrData.cons.votingUI = plrData.VotingStarted:Connect(beginVoting) plrData.cons.votingStop = plrData.VotingStopped:Connect(function() voteFrame.Visible = false plrData.voting = false end) plrData.cons.gui = gui.AncestryChanged:Connect(function() plrData.cons.votingUI:Disconnect() plrData.cons.votingStop:Disconnect() plrData.cons.gui:Disconnect() safeDestroy(gui) self:load(plrData) end) end -- HOST MODEL local host = {model = nil, name = "Announcer"} function host:load(cf) if self.model then safeDestroy(self.model) end local model = create"Model"{} local part = create"Part"{ Anchored = true, Size = Vector3.new(2,3,2), Name = "HumanoidRootPart", Parent = model } model.PrimaryPart = part create"Decal"{ Parent = part, Texture = "rbxassetid://77626118113724" } self.model = model model:PivotTo(cf) model.Parent = script return model end -- MOVEMENT local movement = {} function movement:_getChar(plr) local char = plr and plr:IsA("Player") and plr.Character or plr if not char then return end return char, char:FindFirstChildOfClass'Humanoid' end function movement:_baseUpdate(humanoid, base, add, mult, disabled, prop) if disabled then humanoid[prop] = 0 return end humanoid[prop] = (base + add) * mult end function movement:_createBase(humanoid, prop) for i, v in humanoid:GetChildren() do if v.Name:find(prop) then v:Destroy() end end local base = create("NumberValue", humanoid){ Name = prop.."Base", Value = humanoid[prop] } local add = create("NumberValue", humanoid){ Name = prop.."Add", Value = 0 } local mult = create("NumberValue", humanoid){ Name = prop.."Mult", Value = 1 } local disabled = create("BoolValue", humanoid){ Name = prop.."Disabled", Value = false } add.Changed:Connect(function(v) self:_baseUpdate(humanoid, base.Value, v, mult.Value, disabled.Value, prop) end) base.Changed:Connect(function(v) self:_baseUpdate(humanoid, v, add.Value, mult.Value, disabled.Value, prop) end) mult.Changed:Connect(function(v) self:_baseUpdate(humanoid, base.Value, add.Value, v, disabled.Value, prop) end) disabled.Changed:Connect(function(v) self:_baseUpdate(humanoid, base.Value, add.Value, mult.Value, v, prop) end) end function movement:initMove(plr) local char, humanoid = self:_getChar(plr) if not humanoid then return end self:_createBase(humanoid, "WalkSpeed") self:_createBase(humanoid, "JumpPower") end function movement:_setBase(plr, prop, type, value, operator) local char, humanoid = self:_getChar(plr) if not humanoid then return end if operator == "+" then humanoid[prop..type].Value += value elseif operator == "-" then humanoid[prop..type].Value -= value else humanoid[prop..type].Value = value end end function movement:setSpeed(plr, speed) movement:_setBase(plr, "WalkSpeed", "Base", speed, "=") end function movement:addSpeed(plr, speed) movement:_setBase(plr, "WalkSpeed", "Add", speed, "+") end function movement:multiplerSpeed(plr, speed) movement:_setBase(plr, "WalkSpeed", "Mult", speed, "+") end function movement:disableSpeed(plr, bool) movement:_setBase(plr, "WalkSpeed", "Disabled", bool, "=") end function movement:setJumpPower(plr, power) movement:_setBase(plr, "JumpPower", "Base", power, "=") end function movement:addJumpPower(plr, power) movement:_setBase(plr, "JumpPower", "Add", power, "+") end function movement:multiplerJumpPower(plr, power) movement:_setBase(plr, "JumpPower", "Mult", power, "+") end function movement:disableJumpPower(plr, bool) movement:_setBase(plr, "JumpPower", "Disabled", bool, "=") end function movement:toggle(plr, bool) self:disableSpeed(plr, not bool) self:disableJumpPower(plr, not bool) end function movement:moveTo(plr, cf) local char, humanoid = self:_getChar(plr) if not humanoid then return end char:PivotTo(cf) end -- GAME STATE local gameState = { hint = hint, host = host, timer = timer, movement = movement, music = music, voting = voting, contestPos = CFrame.new(6000,0,0), lobbyPos = CFrame.new(-6000,0,0), gameType = "ffa", ongoing = false } -- DIALOG local dialog = {} function dialog:say(who, text, delayTime, hideAfter, add) local charName = tostring(who) if who == host then charName = host.name elseif who:IsA("Player") then local name = who.DisplayName local hum = who.Character and who.Character:FindFirstChildOfClass("Humanoid") if hum then name = hum.DisplayName end charName = name end hint:typewriter(text, 30, delayTime, who ~= nil and charName, hideAfter, add) end -- LOBBY local lobby = MakeLobby(gameState.lobbyPos) -- SHOW MODULE local show = { contestants = {} } function show:start() host:load(lobby:GetPivot()*CFrame.new(0,4,0)) for i, v in inGame do table.insert(self.contestants, v) task.spawn(function() Objectifier.objectify(v.Character, v) movement:initMove(v.Character) plrData.getData(v).refChar = v.Character:Clone() end) end hint:typewriter("") task.wait(1) end -- CHALLENGE LOADER local startQuotes = { "Go!", "Begin." } local challenge = {current = nil, players = {}, characters = {}} function challenge:loadChallenge(name) local chosen = ChallengeList[name] if not chosen then return end music:fadeout(2.5) task.wait(1) math.randomseed(tick()) self.players = table.clone(show.contestants) table.clear(self.characters) for i, v in self.players do self.characters[v] = v.Character end chosen = chosen(self, gameState) self.current = chosen chosen.teleport() chosen.dialog(hint, gameState) hint:set("",true) for i = 3, 1, -1 do hint:set(hint.text..`{i}, `, true) task.wait(1) end hint:typewriter(startQuotes[math.random(#startQuotes)], nil, 3, gameState.host.name, true) chosen.start() local winners, extra while true do winners, extra = chosen.loop(task.wait()) if winners then break end end chosen.ended(winners, extra) task.wait(5) for i, v in challenge.characters do movement:moveTo(v, lobby:GetPivot()*CFrame.new(0,4,0)) end end -- STATES local notVotedQuotes = { "Contestants, you should vote someone out", "Come on, guys... Vote someone out.", "I haven't received a vote..." } local states = {} function states:_musicLobby() music:play("lobby"..math.random(1,1)) end function states:preVote() self:_musicLobby() hint:hide() timer:setVisible(true) for i = 30, 0, -1 do timer:set(i, true) task.wait(1) end timer:setVisible(false) end function states:voting(players) local function eliminate() end music:fadeout(2.5) task.wait(1) local cas = lobby.CakeAtStake local stand = cas.Stand players = players or show.contestants local rotation = math.pi/(#players) local current = CFrame.identity local radius = stand.Size.X for i, v in players do movement:toggle(v, false) movement:moveTo(v, stand.CFrame * CFrame.new(0, 3, 0) * current * CFrame.new(0,0,radius)) current *= CFrame.Angles(0, rotation, 0) end host:load(stand.CFrame*CFrame.new(0,4,0)) task.wait(1) dialog:say(host, "Welcome to Cake at Stake.", true) dialog:say(host, "You will have to vote someone out.", true) dialog:say(host, "Let's vote", 2) voting:begin(show.contestants) local begin local notVoted = 0 local function voteRandom() dialog:say(host, "Alright then.", 1.5) math.randomseed(os.time()) dialog:say(host, "I choose... ", math.random(3,5)) local eliminated = voting.ufe[math.random(#voting.ufe)] eliminated[5] = true local display = eliminated[3] dialog:say(host, display..".", 3) dialog:say(host, display..", you have been eliminated.") end function begin() timer:setVisible(true) for i = 30, 0, -1 do timer:set(i) task.wait(1) end timer:setVisible(false) voting:stop() if not voting.voted then notVoted += 1 if not notVoted == 4 then notVoted = true return end dialog:say(host, notVotedQuotes[math.random(#notVotedQuotes)], 3, true) if notVoted == 2 then dialog:say(host, "If you don't vote someone out, I will eliminate one of you randomly.", 2, true) end begin() return end dialog:say(host, "Alright, I have gathered the votes", true) end begin() if not notVoted then voteRandom() eliminate() return end dialog:say(host, "If you get a prize, that means you're safe.", true) if #voting.immune > 0 then hint:set("",true) for i, v in voting.immune do local name = voting.names[v.UserId] hint:set(hint.text..name..", ", true) task.wait(0.25) end task.wait(0.25) dialog:say(host, "has immunity, so they get a prize.", 3) task.wait(0.5) end local list = voting:getList() -- Vote fakeout local safeLast = math.random(1,2) == 1 for i, v in list do local votes = v[1] local display = v[3] local nextVotes = list[i+1] if safeLast and nextVotes and nextVotes[5] then dialog:say(host, ("%s..."):format(display),1.5) dialog:say(host, (" is safe with %s votes."):format(votes),2,false,true) elseif v[5] and safeLast then dialog:say(host, ("%s is eliminated with %s votes."):format(display, votes),3,true) elseif v[5] then dialog:say(host, ("%s..."):format(display),1.5) dialog:say(host, (" is eliminated with %s votes."):format(votes),3,true,true) else dialog:say(host, ("%s is safe with %s votes."):format(display, votes),2) end end if voting.tiebreaker then dialog:say(host, "Seems like we have a tiebreaker.") end eliminate() end -- JOIN MODULE local enter = {} function enter.join(plr) if table.find(inGame, plr) then return end table.insert(inGame, plr) local data = plrData.initData(plr) data.cons['refRespawn'] = plr.CharacterAdded:Connect(function(char) math.randomseed(os.time()) if char:GetAttribute("R") or not data.refChar then return end char:Destroy() local clone = data.refChar:Clone() clone:SetAttribute("R", true) plr.Character = clone clone.Parent = workspace movement:initMove(clone) movement:moveTo(plr, lobby:GetPivot()*CFrame.new(0,4,0)) end) gui:load(data) movement:moveTo(plr, lobby:GetPivot()*CFrame.new(0,4,0)) end function enter.leave(plr) if not table.find(inGame, plr) then return end local index = table.find(inGame, plr) table.remove(inGame, index) plrData.unload(plr) end -- CMD LISTEN local ready = false function listen(plr) plr.Chatted:Connect(function(m) if m:sub(1,3) == "/e " then m = m:sub(4) end if m == "-join" then enter.join(plr) end if m == "-leave" then enter.leave(plr) end if plr ~= owner then return end if m == "-r" then ready = true end if m == "-t" then hint:typewriter"test sentence" end if m == "-tc" then hint:typewriter("hello hi hey",nil,false,plr.DisplayName) end if m == "-f" then enter.join(FPlayers.new()) end end) end for i, v in players:GetPlayers() do listen(v) end players.PlayerAdded:Connect(listen) -- GAME LOOP host:load(owner.Character.HumanoidRootPart.CFrame) --enter.join(owner) music:play"intermission" hint:typewriter("Waiting for players..") local dialog = true if dialog then create("Dialog", host.model.PrimaryPart){ InitialPrompt = "Chat -join to join the competition (this is unfinished, game loop is not complete but do you want to test? do -join to test)" } end --enter.join(FPlayers.new()) repeat task.wait() until ready show:start() challenge:loadChallenge("sweeper") states:preVote() states:voting()
print("Lobby model!") local create = function(c, par) return function(t) local inst = Instance.new(c) for i, v in t do if i == "Parent" then par = v continue end inst[i] = v end if par then inst.Parent = par end return inst end end local clone = function(c, par) return function(t) local inst = c:Clone() for i, v in t do if i == "Parent" then par = v continue end inst[i] = v end if par then inst.Parent = par end return inst end end return function(cf) local map = create("Model"){ } local grass = create("Part", map){ Size = Vector3.new(600,20,600), Anchored = true, Color = Color3.fromRGB(96,206,30), CFrame = CFrame.new(0,-25,0), TopSurface = "Smooth", BottomSurface = "Smooth" } local texture = create("Texture", grass){ Texture = "rbxassetid://119553462081348", Face = "Top" } local cakeAtStake = create("Model", map){ Name = "CakeAtStake" } do local stand = create("Part", cakeAtStake){ Size = Vector3.new(48, 4, 48), Anchored = true, CFrame = CFrame.new(40,-13,0), Name = "Stand" } end map:PivotTo(cf) map.Parent = script return map end
Editor Settings
Theme
Key bindings
Full width
Lines