如何修复Roblox免费模型封禁脚本,实现按玩家ID封禁?
修复Roblox按玩家ID封禁的脚本问题
原脚本失效的核心原因:
- 封禁列表混合了字符串格式的用户名与数字格式的用户ID,但代码仅尝试将玩家对象转为字符串(即用户名)去匹配列表,导致数字ID无法被识别。
- 代码使用大量晦涩的语法糖堆叠逻辑,结构混乱,难以定位问题。
以下是重构后的清晰版本,同时支持用户名和用户ID封禁:
-- 清晰版封禁脚本 local Players = game:GetService("Players") -- 封禁列表:支持用户名(字符串)和用户ID(数字) local banlist = { "Roblox", "Builderman", 4697369149 -- 现在可正常生效 } local function isBanned(player) -- 检查用户名是否在封禁列表 if table.find(banlist, player.Name) then return true end -- 检查用户ID是否在封禁列表 if table.find(banlist, player.UserId) then return true end return false end local function handlePlayerAdded(player) if isBanned(player) then player:Kick("你已被封禁!") print(string.format("已封禁玩家:%s(ID:%d)", player.Name, player.UserId)) end end -- 监听新玩家加入 Players.PlayerAdded:Connect(handlePlayerAdded) -- 处理已在服务器中的玩家 for _, player in ipairs(Players:GetPlayers()) do handlePlayerAdded(player) end
关键改进说明:
- 用规范的
game:GetService("Players")替代原脚本的game:FindService"Players",避免语法歧义。 - 拆分逻辑为
isBanned函数,分别检查玩家的Name(用户名)和UserId(用户ID)是否在封禁列表中,覆盖两种封禁场景。 - 替换原脚本晦涩的语法堆叠,改用直白的函数调用与循环,便于后续维护和问题排查。
- 同时处理新加入的玩家和已在服务器中的玩家,避免遗漏封禁对象。
原脚本失效细节:
原脚本中table.find(banlist,tostring(({...})[#{...}]))这一行,是将玩家对象直接转为字符串(结果为玩家用户名),再去匹配封禁列表。但你添加的4697369149是数字类型的用户ID,与用户名字符串无法匹配,因此脚本无法触发封禁逻辑。
内容的提问来源于stack exchange,提问作者user15611379
相关产品推荐
相关产品推荐

