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

Loops inside loops not functioning correctly?

Asked by 7 years ago

I have no clue why this doesn't work for me, but what I have is a loop inside a loop. So, the first loop is to get the children of game.Players and the next loop is to get the children of the backpack of said children, but it doesn't seem to work.

I have placed prints throughout to see what is going wrong, including some pcalls aswell, but nothing has helped. Script Analysis has not worked either.

What gets printed

Loaded.
Loaded
Hasnt messed up yet
Still good!
Checking (x2)
1

The code

print'Loaded'

print'Hasnt messed up yet'

function checkTools()
    print'Checking'
    for i,v in pairs(game.Players:GetChildren()) do
        print'1'
        repeat wait() until v.Backpack      
        for u,x in pairs(v.Backpack:GetChildren()) do
            print'2'    
            if not x:FindFirstChild("Exempt") then
                print'3'
                v:Kick()
                warn"Exploit Detected or this system doesn't really work!"
            end
        end
    end
end

print'Still good!'

game.Players.PlayerAdded:connect(function(player)
    repeat wait() until player.Backpack
    local success,msg = pcall(checkTools)
    if success then
    else
        print(msg)
    end
end)

local success,msg = pcall(checkTools)
if success then
else
    print(msg)
end

for i,v in pairs(game.Players:GetPlayers()) do
    v.Chatted:connect(function(msg)
        if v:GetRankInGroup(3026610) >= 52 then
            if msg == "checkTools" then
                local success,msg = pcall(checkTools)
                if success then
                else
                    print(msg)
                end
            end
        end
    end)
end

while wait(60) do
    local success,msg = pcall(checkTools)
    if success then
    else
        print(msg)
    end
end

Any help is appreciated, thank you.

1 answer

Log in to vote
1
Answered by 7 years ago
Edited 7 years ago

There is no need to do check this way as you can simply use ChildAdded

-- check for bad tools
local function chkTool(obj, plr)
    if obj:IsA('Tool') then
        if not obj:FindFirstChild('Exempt') then
            print('Bad tool', plr)
        end
    end
end

game.Players.PlayerAdded:Connect(function(plr)  
    plr.CharacterAdded:Connect(function(charModel) -- add events when the player spawns
        charModel.ChildAdded:Connect(function(ins) -- for the character
            chkTool(ins, plr)
        end)
        plr:WaitForChild('Backpack').ChildAdded:Connect(function(ins) -- for the backpack
            chkTool(ins, plr)
        end)
    end)
end)

I have not had any problems using your code so I do not know why your code does not seem to work for you.

I hope this helps.

Side notes:-

I would not rely on using a system like this as all I would need to do is add a child named 'Exempt', you could create your own tool giver script so the player cannot add tools themselves. This can be done by storing a list of what tools a player should have and comparing them with what they currently have.

There are a lot of other methods you could use for this kind of task.

Ad

Answer this question