为什么我无法解封玩家?

问题描述 投票:0回答:2

我是一名初学者程序员,正在尝试制作一个包含踢、禁止和取消禁止命令的管理系统。在成功禁止的用户上按取消禁止按钮后,它告诉我该用户已被取消禁止,但是当我从被禁止的用户帐户加入游戏时,它仍然显示我已被禁止。

代码:

game.Players.PlayerAdded:Connect(function(plr)
    local ng = game.Workspace:FindFirstChild(plr.Name .. " / Banned")
    if ng:IsA("WedgePart") then
        plr:Kick("Banned")
        print(plr.Name .. " tried to join while banned")
    end
end)


script.Parent["Kick/Ban"].OnServerEvent:Connect(function(plr, plrname, reason, kb)
    if game.Players:FindFirstChild(plrname) then
        local target = game.Players:FindFirstChild(plrname)
        if kb == "Kick" then
            if reason ~= "" then
                target:Kick(reason)
            elseif reason == "" then
                target:Kick()
            end
        elseif kb == "Ban" then
            local part = Instance.new("WedgePart")

            print(target.Name .. " has been banned")

            part.Parent = game.Workspace
            part.Name = target.Name .. " / Banned"
            part.CanCollide = false
            part.Transparency = 1
            part.Anchored = true
            
            target:Kick("Banned")
        elseif kb == "Unban" then
            local tn = plrname .. " / Banned"
            local part2 = game.Workspace:FindFirstChildOfClass("WedgePart")

            while part2 do
                if part2.Name:lower() == tn:lower() then
                    part2:Destroy()
                    print(target.Name .. " has been unbanned")
                    break
                end
                part2 = game.Workspace:FindFirstChildOfClass("WedgePart", part2)
            end

            if not part2 then
                print(target.Name .. " is not banned")
            end
        end
    end
end)

尝试向人工智能寻求帮助,但一无所获。我认为主要问题在于

game.Players.PlayerAdded
。请帮助我。

lua roblox
2个回答
0
投票

我想强调使用实例来存储这样的数据(尤其是零件)的想法是多么糟糕,因为它们可能会以多种方式受到游戏中其他不相关系统的影响。

您应该在脚本中设置一个变量作为表来存储玩家是否被禁止,这也意味着在服务器重新启动时启用禁止保存将是微不足道的。

如下所示:


local bannedPlayers = {}

game.Players.PlayerAdded:Connect(function(plr)
    if bannedPlayers[plr.Name] then
        plr:Kick("Banned")
        print(plr.Name .. " tried to join while banned")
    end
end)


script.Parent["Kick/Ban"].OnServerEvent:Connect(function(plr, plrname, reason, kb)
    if game.Players:FindFirstChild(plrname) then
        local target = game.Players:FindFirstChild(plrname)
        if kb == "Kick" then
            if reason ~= "" then
                target:Kick(reason)
            elseif reason == "" then
                target:Kick()
            end
        elseif kb == "Ban" then
            print(target.Name .. " has been banned")

            bannedPlayers[plrname] = reason
            target:Kick("Banned")
        elseif kb == "Unban" then
            if bannedPlayers[plrname] then
                bannedPlayers[plrname] = nil
                print(target.Name .. " has been unbanned")
            else
                print(target.Name .. " is not banned")
            end
        end
    end
end)

0
投票

我看了下,没发现什么问题。我尝试稍微调整一下,尝试一下这段代码,看看它是否有效:

script.Parent["Kick/Ban"].OnServerEvent:Connect(function(plr, plrname, 
reason, kb)
    if game.Players:FindFirstChild(plrname) then
        local target = game.Players:FindFirstChild(plrname)
        if kb == "Kick" then
            if reason ~= "" then
                target:Kick(reason)
            elseif reason == "" then
                target:Kick()
            end
        elseif kb == "Ban" then
            local part = Instance.new("WedgePart")

            print(target.Name .. " has been banned")

            part.Parent = game.Workspace
            part.Name = target.Name .. " / Banned"
            part.CanCollide = false
            part.Transparency = 1
            part.Anchored = true
        
            target:Kick("Banned")
        elseif kb == "Unban" then
            local tn = plrname .. " / Banned"
            local part2 = game.Workspace:FindFirstChild(tn)

            if part2 then
                part2:Destroy()
                print(target.Name .. " has been unbanned")
            else
                print(target.Name .. " is not banned")
            end
        end
    end
end)
© www.soinside.com 2019 - 2024. All rights reserved.