Un comando de administrador es una palabra clave o frase que un usuario con cierto nivel de control puede escribir en la ventana de chat para activar una acción.Esta biblioteca utiliza módulos de chat, lo que permite una fácil implementación de comandos de administrador en el sistema de chat legado.Los módulos de chat escuchan los mensajes entrantes en el servidor y pueden ejecutar acciones basadas en cualquier criterio deseado.
Configuración
Cada vez que se carga un lugar de Roblox, comprueba si el servicio de chat está vacío.Si no encuentra los componentes que necesita, el lugar insertará la última versión de esos componentes.Esto significa que reemplazar o hacer cambios en estos componentes en una experiencia los impedirá de ser actualizados.
El primer paso para configurar la biblioteca de comandos de administración es agregar un nuevo módulo de chat al servicio de chat.La biblioteca en este tutorial se ocupa del levantamiento pesado realizado por un módulo de chat, por lo que el único objeto que necesita agregar al servicio de chat es un nuevo ModuleScript .El nombre de tu script de módulo puede ser cualquier cosa, pero te sugiero algo intuitivo como AdminCommands .
Implementar nuevos comandos
En lugar de implementar la mayor parte de la lógica del módulo de chat, simplemente requerirá el módulo de biblioteca que realiza la mayor parte del trabajo y agrega funcionalidad adicional.La manera más sencilla de agregar la biblioteca a tu módulo es requerirla por su ID de activo en la parte superior de tu script.
local AdminCommands = require(1163352238)
Este módulo devuelve una tabla de funciones, con la función Run como la más importante.La biblioteca tiene una función Run para su módulo de chat.Es importante que los comandos de administrador devuelvan esta función Run a el servicio de chat.La función se indexa por su nombre, Run , y puedes devolver lo siguiente como si Run fuera una propiedad de nuestra representación de la tabla de comandos de administración:
return AdminCommands.Run
Entre estas dos líneas de código, implementa tus propios comandos y cualquier función auxiliar necesaria.
Para vincular una función a la biblioteca, use la función BindCommand de AdminCommands.Al vincular un comando, necesitarás especificar una tabla de palabras clave que, cuando se hable, activará el comando, la función que se activará, un nivel de prioridad y, opcionalmente, una descripción del comando.Si no especifica un nivel de privilegio, se establecerá por defecto en 0.Los niveles de prioridad son valores numéricos utilizados por la biblioteca AdminCommands para asignar una jerarquía de permisos entre los usuarios con los correspondientes niveles de privilegio concedido.Al ejecutar un comando, el orador debe tener un nivel de privilegio mayor o igual al del comando Biblioteca de permisos.
AdminCommands:BindCommand({"keyword1", "keyword2"}, commandName, 1, "Optional description")
Para desvincularte usarías también UnbindCommand y especificarías una palabra clave para desvincular.
AdminCommands:UnbindCommand({"keyword1"})
En conjunto, el contenido de tu script de comandos de administrador debería parecerse al siguiendo:
local AdminCommands = require(1163352238)
local Utilities = AdminCommands.Utilities
function commandFunction(commandData)
-- Código de comando aquí
-- Devuelve verdadero si tiene éxito y falso de lo contrario
end
AdminCommands:BindCommand({"keyword1", "keyword2"}, commandFunction, 1, "Optional description")
return AdminCommands.Run
Puede notar que la función de ejemplo toma un parámetro llamado commandData .Este parámetro es un argumento de tabla pasado a todas las funciones de comando de administrador vinculadas cuando se ejecuta por la biblioteca.La tabla contiene información útil sobre el comando que se habló y el usuario que lo habló.Tiene los siguientes campos:
- Altavoz: ChatSpeaker
- Mensaje: string
- Nombre del canal: string
- Comando: string
Es importante siempre esperar commandData como un parámetro de funciones de comando.Por ejemplo, si tienes un comando llamado "explode", que requiere un parámetro Player para especificar, la función se parecería a explode(commandData, user).
| Función | Parámetros | Regresar | | --------------- | ------------------------------------------------------------------------------------------------ | ------ | | Comandos: | | | | BindCommand() | table functionIDs, function functionToExecute, número mínimo de permisos de nivel, cadena de descripción | bool | | Desvincular comando() | table functionIDs | bool | | Obtener comandos() | | table |
Útiles
La biblioteca ya tiene algunas funciones de ayuda integradas llamadas Utilidades que puedes usar.Almacenar el comando de administración de Store.Utilities en una variable o referenciarlo directamente.
local Utilities = AdminCommands.Utilities
Las funciones de utilidad actuales son:
| Función | Parámetros | Regresar | | -------------------------- | -------------------------------------------------- | ------ | | Mensajes de la ventana de chat: | | | | Enviar mensaje de sistema() | tabla de datos, contenido de texto, datos adicionales de tabla | bool | | Enviar mensaje de sistema de éxito() | tabla de datos, contenido de texto | bool | | Enviar mensaje de error de sistema() | tabla de datos, contenido de texto | bool | | IncorrectValueType() | tabla de datos, texto dado, texto esperado | | | Errores de conversión de datos: | | | | ToTupple(parametro) | texto del parámetro | array | | ToBoolean() | texto del parámetro | bool | | Validar datos() | texto esperadoTipo | | Búsquedas de objetos: | | | | Enviar mensaje de sistema de éxito() | tabla de datos, contenido de texto | bool | | Enviar mensaje de error de sistema: </paramètres> | tabla de datos, contenido de texto esperado | | Errores de conversión de datos: | | tabla de datos, texto esperadoTipo de mensaje de error: | tabla de datos, contenido de texto esperado | Errores de conversión: | tabla de datos, texto esperado | Errores de conversión: | tabla de datos, texto esperadoTipo de mensaje de error: tabla de datos, texto esperadoTipo de mensaje de error: tabla de datos, texto esperadoTipo de error: tabla de datos, texto esperadoTipo de error: tabla de datos de error: tabla de datos de error: tabla de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de error: tabla de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de datos de| bool |
Comandos de ejemplo
Un comando útil para tener sería uno que imprima una lista de todos los comandos opcionales que los usuarios tienen disponibles.Este comando produce cada comando vinculado a la biblioteca y algunas de sus propiedades.
-- Imprime una lista de todos los comandos vinculados
function listCommand(commandData)
Utilities:SendSystemMessage(commandData, "The following commands are available:")
-- Iterar a través de cada comando y imprimirlo
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.")
Otro comando útil permite a los usuarios darles destellos.Este comando requiere un parámetro cuando se habla: el nombre del usuario objetivo.Si el usuario existe, el comando creará un objeto Sparkles en el HumanoidRootPart de ese usuario.
-- Da destellos al personaje de un jugador especificado
function sparklesCommand(commandData)
-- Error si no se dan o hablan parámetros
if #commandData.Parameters == 0 then
return Utilities:NoPlayerSpecified(commandData)
end
-- Repetir a través de los parámetros (ejecutar en el nombre de cada jugador dado)
for index = 1, #commandData.Parameters do
local parameter = commandData.Parameters[index]
if (parameter == "me" or parameter == "") then parameter = commandData.Speaker.Name end -- Si el parámetro es yo, entonces el usuario debe estar refiriéndose a sí mismo
-- Usa una función auxiliar para encontrar el personaje del jugador y agregar los destellos
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")
También puedes incluir un comando de explosión del tutorial de Crear comando de administrador. Este comando también toma el nombre de un usuario como parámetro.
-- Verifica que el modelo dado es un Personaje y agrega una explosión a su 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
-- Hace que el personaje de un jugador específico explote
function explodeCommand(commandData)
-- Error si no se dan o hablan parámetros
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 -- Si el parámetro es yo, entonces el usuario debe estar refiriéndose a sí mismo
-- Usa una función auxiliar para encontrar el personaje del jugador y agregar la explosión
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.")
Permitir biblioteca
Si un no administrador intenta hablar un comando como este, que tiene un nivel de permiso más alto que 0, no se activará.El sistema de comandos usa una biblioteca de permisos separada, a la que al creador de la experiencia se le otorga automáticamente el nivel de permiso math.huge.Los administradores se pueden agregar usando las siguientes funciones en el objeto de comando de administración:
SetUserPermission(number requesterUserId, number targetUserId, permissionLevel) -> boolSetGroupRankPermission(number requesterUserId, number targetGroupId, number targetRankId, permissionLevel) -> bool
| Función | Parámetros | Regresar | | ---------------------------- | ---------------------------------------------------------------------------------- | ------ | | Permiso | | | | GetAdmins() | | tabla | | SetUserPermission() | número requerente de usuario, número objetivo de usuario, nivel de permiso | bool | | GetUserPermission() | número de usuario | número | | GetGroups() | | tabla | | SetGroupRankPermission() | número requerente de usuario, número objetivo de usuario, nivel de permiso | bool | | GetGroupRankPermission() | número de grupo | número |
Módulo de inicio rápido
Para una configuración más sencilla, también puedes usar este Inicio rápido, que es un módulo que ya ha implementado la biblioteca de comandos de administrador.El modelo es un módulo con el mismo formato como se describe anteriormente.Además, el módulo tiene algunos comandos ya incluidos para que no tengas que volver a implementarlos.
| Comando/vinculación | Parámetro hablado | | -------------------------------- | -------------------------------- | | "list", "commands" | nombre de usuario | | "sparkles" | nombre de usuario | | "sparkles" | nombre de usuario | | "unforcefield", "unff" | nombre de usuario | | "explode" | nombre de usuario | | "respawn" | nombre de usuario | | "part" | Camino (es decir,experiencia.Workspace) | | "freeze" | nombre de usuario | | "unfreeze" | nombre de usuario | | "añadir" | nombre de usuario | | "eliminar" | nombre de usuario | | "explusar" | nombre de usuario | | "setuserpermission", "sup" | identificación de grupo, permiso | | "setgrouprankpermission", "sgrp" | grupo, rango, permiso |