Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

End game when a humanoid or humanoids dies?

Asked by 10 years ago

I made a game when 3 separate teams, the assassins, the protector and the target. I made the game length of 120 seconds or 2 minutes. However the goal of the game is either the target gets killed or all the assassins get eliminated. I also set up a CFrame for the lobby where the players would be teleported to when the game ends (4th-5th line)


team1 = CFrame.new(34.6, 3.09, 23.6)--change to where team1 spawns(red team) Note: use Vector3 cordinates team2 = CFrame.new(32, 3.09, -26.6)--change to where team2 spawns(blue team) team3 = CFrame.new(18.2, 0.59, 8.8)-- change to where team3 spawns lobby = CFrame.new(48.6, 169.7, -13)-- change the the position of the lobby(where the players go before/after the game) --weapon = game.Lighting["Sword"]-- change "Sword" to the name of the weapon you want players to have during the game. put the weapon in Lighting.if you want no weapons then remove this line. Maps = {"Map1","Map2","Map3"}-- change Map1,Map2,Map3 to the name of your maps and put them in Lighting. you can add more just add: ,"another map" after Map3 and so on. random = Maps[math.random(1,#Maps)] while true do wait(30)-- how long between games. script.map.Value = random local m = Instance.new("Message") m.Parent = game.Workspace m.Text = "" wait(5) m.Text = random.."" wait(4) g = game.Lighting[script.map.Value]:Clone() g.Parent = game.Workspace g:MakeJoints() m.Text = "Game starting" wait(3) m:remove() --d = weapon:Clone() --c = weapon:Clone() local pplz = game.Players:GetChildren() for i = 1,#pplz do if pplz[i].TeamColor == BrickColor.new("Bright red") and pplz[i] ~= nil and pplz[i].Character:FindFirstChild("Torso") ~= nil then-- change to team1's TeamColor --c.Parent = pplz[i].StarterGear --d.Parent = pplz[i].Backpack pplz[i].Character.Torso.CFrame = team1 --d = weapon:Clone() --c = weapon:Clone() elseif pplz[i].TeamColor == BrickColor.new("Deep blue") and pplz[i] ~= nil and pplz[i].Character:FindFirstChild("Torso") ~= nil then--change to team2's TeamColor pplz[i].Character.Torso.CFrame = team2 --d.Parent = pplz[i].Backpack --c.Parent = pplz[i].StarterGear elseif pplz[i].TeamColor == BrickColor.new("Pastel violet") and pplz[i] ~= nil and pplz[i].Character:FindFirstChild("Torso") ~= nil then--change to team3's TeamColor pplz[i].Character.Torso.CFrame = team3 --d.Parent = pplz[i].Backpack --c.Parent = pplz[i].StarterGear end end wait(120)-- how long each game lasts. local pplz = game.Players:GetChildren() for i = 1,#pplz do if pplz[i] ~= nil and pplz[i].Character:FindFirstChild("Torso") ~= nil then --local clean1 = pplz[i].StarterGear:GetChildren() --clean1[i]:remove() --local clean2 = pplz[i].Backpack:GetChildren() --clean2[i]:remove() pplz[i].Character.Torso.CFrame = lobby end end local m = Instance.new("Message") m.Parent = game.Workspace m.Text = "" wait(4) game.Workspace[script.map.Value]:remove() --m.Text = winner.." has won!" m:remove() end

1 answer

Log in to vote
0
Answered by
1waffle1 2908 Trusted Badge of Merit Moderation Voter Community Moderator
10 years ago

So your goal is to reload everyone's character once someone/everyone dies, I presume. You need to record when all of the targets or all of the assassins have their characters' parents changed, meaning that either they died or they left. To do this you first of all need a list of who these people are, which I can't see provided in the code you pasted.

local targets={}
local assassins={}
-- add the characters of the targets and of the assassins to the corresponding tables
local t=#targets
local a=#assassins
for i,v in ipairs(targets)do
    local con=v.Changed:connect(function(p)
        if p=="Parent"hten
            t=t-1
            if t==0 then
                for _,x in pairs(targets)do
                    x:disconnect()
                end
                for _,x in pairs(assassins)do
                    x:disconnect()
                end
                endgame()
            end
        end
    end)
    targets[i]=con
end
for i,v in ipairs(assassins)do
    local con=v.Changed:connect(function(p)
        if p=="Parent"hten
            a=a-1
            if a==0 then
                for _,x in pairs(targets)do
                    x:disconnect()
                end
                for _,x in pairs(assassins)do
                    x:disconnect()
                end
                endgame()
            end
        end
    end)
    assassins[i]=con
end

After you list the characters of targets and assassins and the endgame function, this code counts the number of players in each list, and subtracts one from that number each time one of the characters' parents is changed, until that number hits 0, where the subtracting is stopped and the game ends.

Ad

Answer this question