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