我是一名初学者程序员,正在尝试制作一个包含踢、禁止和取消禁止命令的管理系统。在成功禁止的用户上按取消禁止按钮后,它告诉我该用户已被取消禁止,但是当我从被禁止的用户帐户加入游戏时,它仍然显示我已被禁止。
代码:
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
。请帮助我。
我想强调使用实例来存储这样的数据(尤其是零件)的想法是多么糟糕,因为它们可能会以多种方式受到游戏中其他不相关系统的影响。
您应该在脚本中设置一个变量作为表来存储玩家是否被禁止,这也意味着在服务器重新启动时启用禁止保存将是微不足道的。
如下所示:
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)
我看了下,没发现什么问题。我尝试稍微调整一下,尝试一下这段代码,看看它是否有效:
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)