Roblox 游戏内封禁系统

Roblox In-Game Ban System

我正在尝试制作一个游戏内系统来禁止玩家。我有一个按钮可以触发远程事件,其中包含玩家的名字和一条消息,说明他们被禁止的原因。但是每次我按下按钮,我都会得到这个错误:

ServerScriptService.Event_Handler:21: attempt to call a nil value

我不知道为什么这不起作用,有人可以帮助我了解问题所在吗?

EVENT_HANDLER

local dss = game:GetService("DataStoreService")
local bands = dss:GetDataStore("banDataStore")

BanPlayer.OnServerEvent:Connect(function(player, playertoban, reason)
    local pui = player.UserId
    local success, errormessage = pcall(function()
        bands:SetAsync("Banned-", pui, true)
    end)
    
    if success then
        print("Player Successfuly Banned")
    end
    game.Players:FindFirstChild(playertoban):Kick(reason)
end)

由于您是按姓名搜索球员,因此您可能拼错了姓名。在这种情况下,game.Players:FindFirstChild() 将 return nil。您可以通过在调用 Kick()

之前确保播放器存在来清理此调用

此外,作为旁注,您似乎在禁止调用 BanPlayer RemoteEvent 的玩家,而不是名称存储在 playertoban.

中的玩家
local dss = game:GetService("DataStoreService")
local bands = dss:GetDataStore("banDataStore")

BanPlayer.OnServerEvent:Connect(function(player, playertoban, reason)
    -- check that playertoban is a real player's name
    local bannedPlayer = game.Players:FindFirstChild(playertoban)
    if not bannedPlayer then
        warn("Could not find a player named " .. playertoban)
        return
    end

    -- record their user-id so we can ban them when they rejoin
    local pui = bannedPlayer.UserId
    local success, errormessage = pcall(function()
        bands:SetAsync("Banned-", pui, true)
    end)
    if success then
        print(playertoban .. " Successfully Banned")
    else
        warn(string.format("Failed to ban %s permanently with error : %s", playertoban, errormessage))
    end

    -- remove them from the game
    bannedPlayer:Kick(reason)
end)