管理命令 是用户具有一定控制级别的用户可以在聊天窗口中键入的关键字或短语,以触发行动作。该库使用聊天模块,这使得管理员命令在遗产聊天系统上轻松实现。聊天模块在服务器上收听收到的消息,并可以根据所需的任何标准执行行动。
设置
每当 Roblox 地点加载时,它都会检查聊天服务是否为空。如果它未找到需要的组件,地方将插入这些组件的最新版本。这意味着在体验中覆盖或更改这些组件会导致它们无法被更新。
设置管理命令库的第一步是将新的聊天模块添加到聊天服务。本教程中的图书馆负责由聊天模块执行的重型吊装工作,因此您需要添加到聊天服务的唯一对象是一个新的 ModuleScript 。你的模块脚本名称可以是任何东西,但我建议使用类似于 AdminCommands 的直观名称。
实现新命令
而不是实现聊天模块的大部分逻辑,你只需要那些执行大量工作并添加额外功能的图书馆模块。将图书馆添加到模块的最简单的方法是在脚本顶部要求其资产ID。
local AdminCommands = require(1163352238)
该模块返回一个功能表,其中 Run 函数是最重要的一项。图书馆有一个 Run 函数为其聊天模块。重要的是,管理命令返回此 Run 函数到聊天服务。函数以其名称进行索引, Run , 您可以将以下内容返回为如果 Run 是我们管理命令表表示的属性:
return AdminCommands.Run
在这两行代验证码之间,实现自己的命令和任何必要的助助函数。
为了将函数绑定到库中,请使用 BindCommand 函数的 AdminCommands 。当绑定命令时,您需要指定一个包含关键字的表,当发言时,这些关键字会触发命令、需要触发的函数、优先级以及可选的命令描述。如果您未指定权限等级,它将默认为 0。优先级是由 AdminCommands 图书馆用于分配相应权限等级的用户之间的权限层次的数值。当执行命令时,发言者必须有一个权限等级高于或等于命令的权限库Permission Library。
AdminCommands:BindCommand({"keyword1", "keyword2"}, commandName, 1, "Optional description")
要解除绑定,您也可以使用 UnbindCommand 并指定要解除绑定的关键字。
AdminCommands:UnbindCommand({"keyword1"})
整体来说,你的管理命令脚本的内容应该像以关注中/正在关注内容:
local AdminCommands = require(1163352238)
local Utilities = AdminCommands.Utilities
function commandFunction(commandData)
-- 命令代码在这里
-- 如果成功返回真值,否则返回错误值
end
AdminCommands:BindCommand({"keyword1", "keyword2"}, commandFunction, 1, "Optional description")
return AdminCommands.Run
您可能会注意到,示例函数使用了名为 commandData 的参数。该参数是库执行时向所有绑定的管理命令函数传递的表参数。表包含有关命令的有用信息以及发言者和发言者的用户。它具有以下字段:
- 发言者:ChatSpeaker
- 消息:string
- 通道名称:string
- 命令:string
始终期望commandData作为命令函数的参数很重要。例如,如果您有一个名为“爆炸”的命令,需要指定 Player 参数,那么函数将看起来像 explode(命令数据,用户)。
| 函数 | 参数 | 返回 | | --------------- | ------------------------------------------------------------------------------------------------ | ------ | | 命令: |表单功能ID、函数执行函数、最小权限等级数、字符串描述 | bool | | 取消命令:表单功能ID | bool | | 获取命令:表单 |
实用程序
图书馆已经有一些内置的帮助函数,称为“实用程序”,您可以使用。在变量或直接引用中存储管理命令。Utilities。
local Utilities = AdminCommands.Utilities
当前实用功能是:
| 函数 | 参数 | 返回 | | -------------------------- | -------------------------------------------------- | ------ | | 聊天窗口消息: | | | | SendSystemMessage() | 表命令数据, 字符串内容, 表额外数据 | bool | | SendSystemSuccessMessage() | 表命令数据, 字符串内容 | bool | | SendSystemWarningMessage() | 表命令数据, 字符串内容 | bool | | 错误处理器: | | | | NotEnoughSpecified() | 表命令数据 | bool | | IncorrectValueType() | 表命令数据, 字符给出, 字符预期 | | | 数据转换: | | | | 数据转换: | | | | ToTupple(parameter) | string parameter | array | | ToBoolean() | string parameter | bool | | ValidateData() | string expectedType, ...| bool |
示例命令
一个有用的命令将是打印用户可用的所有可选命令列表的命令。这个命令输出每个命令绑定到图书馆以及其几个属性。
-- 打印所有绑定命令的列表
function listCommand(commandData)
Utilities:SendSystemMessage(commandData, "The following commands are available:")
-- 循环通过每个命令并打印它们
for id, command in PublicAPI:GetCommands() do
Utilities:SendSystemMessage(commandData, string.format("%* requires permission %*.", id, command.Permission))
end
return true
end
AdminCommands:BindCommand({"list"}, listCommand, 0, "Prints a list of commands.")
另一个有用的命令允许用户给自己闪光。该命令在发言时需要一个参数,即目标用户的名称。如果用户存在,命令将在该用户的 HumanoidRootPart 中创建一个闪光对象。
-- 给指定玩家的角色闪光
function sparklesCommand(commandData)
-- 如果没有参数提供/发言,错误
if #commandData.Parameters == 0 then
return Utilities:NoPlayerSpecified(commandData)
end
-- 循环通过参数(在每个指定玩家的名称上执行)
for index = 1, #commandData.Parameters do
local parameter = commandData.Parameters[index]
if (parameter == "me" or parameter == "") then parameter = commandData.Speaker.Name end -- 如果参数是我,那么用户必须指向自己
-- 使用助助函数找到玩家的角色并添加闪光点
local character = Utilities:GetCharacter(parameter)
if character then
local sparkles = Instance.new("Sparkles")
sparkles.Parent = character:FindFirstChild("HumanoidRootPart")
Utilities:SendSystemSuccessMessage(commandData, string.format(commandData.Speaker.Name .. "added sparkles to " .. parameter))
else
Utilities:SendSystemErrorMessage(commandData, string.format("%* is not a valid player.", parameter))
return false
end
end
return true
end
AdminCommands:BindCommand({"sparkles"}, sparklesCommand, 1, "Gives the specified player sparkles")
您还可以从创建管理命令教程中包含爆炸命令。这个命令也会将用户的名称作为参数。
-- 验证给定模型是角色,并将爆炸添加到其 HumanoidRootPart 部分
local function makeExplosion(character)
if character and character:FindFirstChild("HumanoidRootPart") then
local explosion = Instance.new("Explosion")
explosion.Position = character.HumanoidRootPart.Position
explosion.Parent = character.HumanoidRootPart
return true
end
return false
end
-- 使指定玩家的角色爆炸
function explodeCommand(commandData)
-- 如果没有参数提供/发言,错误
if #commandData.Parameters == 0 then
return Utilities:NoPlayerSpecified(commandData)
end
for index = 1, #commandData.Parameters do
local parameter = tostring(commandData.Parameters[index])
if (parameter == "me" or parameter == "") then parameter = commandData.Speaker.Name end -- 如果参数是我,那么用户必须指向自己
-- 使用助助函数找到玩家的角色并添加爆炸
local character = Utilities:GetCharacter(parameter)
local success = makeExplosion(character)
if success then
Utilities:sendSystemSuccessMessage(commandData, string.format(commandData.Speaker.Name .. " made" .. parameter .. " explode."))
else
Utilities:SendSystemErrorMessage(commandData, string.format("%* is not a valid player.", parameter))
return false
end
end
return true
end
AdminCommands:BindCommand({"explode"}, explodeCommand, 1, "Makes the specified player explode.")
权限库
如果非管理员尝试发出像这样的命令,其权限等级高于 0,它不会触发。命令系统使用独立的权限库,经验创建者自动获得权限等级 math.huge。管理员可以使用管理命令模块对象上的以下函数添加到您的管理命令模块对象:
SetUserPermission(number requesterUserId, number targetUserId, permissionLevel) -> boolSetGroupRankPermission(number requesterUserId, number targetGroupId, number targetRankId, permissionLevel) -> bool
| 函数 | 参数 | 返回 | | ---------------------------- | ---------------------------------------------------------------------------------- | ------ | | 权限 | | | | GetAdmins() | | 表 | | SetUserPermission() | number requesterUserId, number targetUserId, permissionLevel | bool | | GetUserPermission() | number userId | number | | GetGroupRankPermission() | targetGroupId, targetRankId | int | | GetGroupRankPermission() | targetGroupId, targetRankId | int |
快速启动模块
为了更简单的设置,您还可以使用此 快速启动,它是一个已实现管理命令库的模块。模型是与上述描述相同格式的模块。此外,模块已经包含了一些命令,因此您不需要重新实现。
| 命令/绑定 | 口头参数 | | -------------------------------- | -------------------------------- | | "列表", "命令" | 用户名 | | "闪光" | 用户名 | | "闪光" | 用户名 | | "unforcefield", "unff" | 用户名 | | "爆炸" | 用户名 | | "重生" | 用户名 | | "部分" | 路径 (即,体验。工作区) | | "freeze" | 用户名 | | "unfreeze" | 用户名 | | "add" | 用户名 | | "remove" | 用户名 | | "kick" | 用户名 | | "setuserpermission", "sup" | userId, permission | | "setgrouprankpermission", "sgrp" | groupid, rankId, permission |