Ein Admin-Befehl ist ein Schlüsselwort oder eine Phrase, die ein Benutzer mit einem bestimmten Kontrolllevel in das Chat-Fenster eingeben kann, um eine Actionauszulösen.Diese Bibliothek verwendet Chat-Module, die eine einfache Umsetzung von Admin-Befehlen auf dem veralteten Chat-System ermöglichen.Chat-Module hören auf eingehende Nachrichten auf dem Server und können Aktionen ausführen, basierend auf welchen Kriterien auch immer gewünscht wird.
Einrichten
Jedes Mal, wenn ein Roblox-Ort geladen wird, prüft er, ob der Chat-Service leer ist.Wenn es die Komponenten nicht findet, die es benötigt, wird der Ort die neueste Version dieser Komponenten einfügen.Das bedeutet, dass das Überschreiben oder Ändern dieser Komponenten in einem Erlebnis verhindern wird, dass sie aktualisiert werden.
Der erste Schritt beim Aufbau der Admin-Befehlsbibliothek besteht darin, ein neues Chat-Modul zum Chat-Service hinzuzufügen.Die Bibliothek in diesem Tutorial kümmert sich um das schwere Heben, das von einem Chat-Modul durchgeführt wird, sodass das einzige Objekt, das Sie zum Chat-Service hinzufügen müssen, ein neues ModuleScript ist.Der Name deines Modulskripts kann alles sein, aber ich schlage etwas Intuitives wie AdminCommands vor.
Implementiere neue Befehle
Anstatt die meiste Chat-Modul-Logik zu implementieren, benötigen Sie einfach das Bibliotheksmodul, das den Großteil der Arbeit erledigt und zusätzliche Funktionen hinzufügt.Die einfachste Möglichkeit, die Bibliothek in Ihr Modul einzufügen, besteht darin, sie durch ihre Asset-ID oben in Ihrem Skript, das. PL: die Skriptszu erfordern.
local AdminCommands = require(1163352238)
Dieses Modul gibt eine Tabelle von Funktionen zurück, mit der Run Funktion als die wichtigste.Die Bibliothek hat eine Run Funktion für ihr Chat-Modul.Es ist wichtig, dass Adminbefehle diese Run an den Chat-Service zurückgeben.Die Funktion wird durch ihren Namen indexiert, Run , und Sie können das Folgende zurückgeben, als ob Run eine Eigenschaft unserer AdminCommands-Tabellenvertretung wäre:
return AdminCommands.Run
Zwischen diesen beiden Codesimplementieren Sie Ihre eigenen Befehle und alle notwendigen Hilfsfunktionen.
Um eine Funktion an die Bibliothek zu binden, verwende die BindCommand Funktion von AdminCommands.Wenn du ein Befehl bindest, musst du eine Tabelle von Schlüsselwörtern angeben, die, wenn sie gesprochen werden, den Befehl auslösen, die Funktion, die ausgelöst wird, einen Stufeund optional eine Beschreibung des Befehls.Wenn du kein Privilegienlevel angibst, wird es standardmäßig auf 0 gesetzt.Prioritätsstufen sind numerische Werte, die die AdminCommands Bibliothek verwendet, um eine Hierarchie von Berechtigungen unter Benutzern mit entsprechenden Privilegien zuzuweisen.Wenn ein Befehl ausgeführt wird, muss der Lautsprecher ein Privilegierungslevel haben, das größer oder gleich dem des Befehls ist Berechtigungs-Bibliothek.
AdminCommands:BindCommand({"keyword1", "keyword2"}, commandName, 1, "Optional description")
Um dich zu entbinden, würdest du ebenfalls UnbindCommand verwenden und ein Schlüsselwort zum Entbinden angeben.
AdminCommands:UnbindCommand({"keyword1"})
Insgesamt sollte der Inhalt deines AdminCommands-Skripts wie gefolgte Profileaussehen:
local AdminCommands = require(1163352238)
local Utilities = AdminCommands.Utilities
function commandFunction(commandData)
-- Befehlscode hier
-- Gibt wahr zurück, wenn erfolgreich und falsch, ansonsten
end
AdminCommands:BindCommand({"keyword1", "keyword2"}, commandFunction, 1, "Optional description")
return AdminCommands.Run
Sie können bemerken, dass die Beispielfunktion einen Parameter namens commandData nimmt.Dieser Parameter ist ein Tabellenargument, das an alle gebundenen Admin-Befehl-Funktionen weitergegeben wird, wenn die Bibliothek ausgeführt wird.Der Tabelle enthält nützliche Informationen über das Befehl, der gesprochen wurde, und den Benutzer, der ihn gesprochen hat.Es hat die folgenden Felder:
- Lautsprecher: ChatSpeaker
- Nachricht: string
- ChannelName: string
- Befehl: string
Es ist wichtig, immer commandData als Parameter von Befehlsfunktionen zu erwarten.Wenn du zum Beispiel einen Befehl namens "explode" hast, der einen Player 参数 erfordert, der angegeben werden muss, würde die Funktion wie folgt aussehen: explode(commandData, user).
| Funktion | Parameter | Rückgabe | | --------------- | ------------------------------------------------------------------------------------------------ | ------ | | Befehle: | Beschreibung der Funktion, Beschreibung der Funktion zum Ausführen, Minimaler Berechtigungslevel, Zeichenbeschreibung | bool | | Entfernen von Befehlen() | Tabelle Funktions-IDs, Funktionsfunktion zum Ausführen, Minimaler Berechtigungslevel, Zeichenbeschreibung | bool | | Beenden von Befehlen() | Tabelle Funktions-IDs | bool | | BindCommand() | tabellen Funktions-IDs, Funktionsfunktion zum Ausführen, Minimaler Berechtigungslevel, Zeichenbeschreibung | bool | | UnbindCommand() | Tabelle Funktions-IDs | bool | | GetCommands() | | Tabelle |
Utilitys
Die Bibliothek hat bereits einige eingebaute Hilfsfunktionen namens Utilities, die Sie verwenden können.Lagere AdminCommand.Utilities in einer Variable oder referenziere sie direkt.
local Utilities = AdminCommands.Utilities
Aktuelle Utilitätsfunktionen sind:
| Funktion | Parameter | Rückgabe | | -------------------------- | -------------------------------------------------- | ------ | | Chat-Fenster-Nachrichten: | | | | SendSystemMessage() | tabellenbefehlData, Zeicheninhalt, tabellenextraData | bool | | SendSystemSuccessMessage() | tabellenbefehlData, Zeicheninhalt | bool | | SendSystemWarningMessage() | tabellenbefehlData, Zeicheninhalt | bool | | NoPlayerSpecified() | tabellenbefehlData | bool | | IncorrectValueType() | tabellenbefehlData, string gegeben, string erwartet | | | Objekt-Abfragen: | | | | ToTupple(Parameter) | string Parameter | array | | ToBoolean() | string Parameter | bool | | ValidateData() | string expectedType, ...| bool |
Beispielbefehle
Ein nützlicher Befehl, den man haben möchte, wäre einer, der eine Liste aller optionalen Befehle druckt, die Benutzer zur Verfügung haben.Dieser Befehl gibt jedes Befehl aus, das mit der Bibliothek verbunden ist, und einige seiner Eigenschaften.
-- Gibt eine Liste aller gebundenen Befehle aus
function listCommand(commandData)
Utilities:SendSystemMessage(commandData, "The following commands are available:")
-- Iteriere durch jedes Befehl und drucke ihn aus
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.")
Ein weiterer hilfreicher Befehl ermöglicht es Benutzern, sich Funkeln zu geben.Dieser Befehl erfordert einen Parameter, wenn er gesprochen wird - den Namen des anvisierten Benutzers.Wenn der Benutzer existiert, erstellt das Kommando ein Funkeln-Objekt im HumanoidRootPart dieses Benutzers.
-- Verleiht dem Charakter eines angegebenen Spieler:inFunkeln
function sparklesCommand(commandData)
-- Fehler, wenn keine Parameter angegeben/gesprochen werden
if #commandData.Parameters == 0 then
return Utilities:NoPlayerSpecified(commandData)
end
-- Schleife durch die Parameter (ausführen auf dem Namen jedes angegebenen Spieler:in)
for index = 1, #commandData.Parameters do
local parameter = commandData.Parameters[index]
if (parameter == "me" or parameter == "") then parameter = commandData.Speaker.Name end -- Wenn der Parameter ich bin, muss der Benutzer sich auf sich selbst beziehen
-- Verwende eine Hilfsfunktion, um den Charakter des Spieler:inzu finden und die Funkeln hinzuzufügen
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")
Du kannst auch einen Explosionsbefehl aus dem Tutorial "Ein Admin-Befehl erstellen" einfügen. Dieser Befehl nimmt auch den Namen eines Benutzers als Parameter.
-- Überprüft, dass das angegebene Modell ein Charakter ist, und fügt eine Explosion zu seiner HumanoidRootPart hinzu
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
-- Lässt den Charakter eines bestimmten Spieler:inexplodieren
function explodeCommand(commandData)
-- Fehler, wenn keine Parameter angegeben/gesprochen werden
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 -- Wenn der Parameter ich bin, muss der Benutzer sich auf sich selbst beziehen
-- Verwende eine Hilfsfunktion, um den Charakter des Spieler:inzu finden und die Explosion hinzuzufügen
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.")
Bibliothek der Berechtigungen
Wenn ein Nicht-Admin versucht, einen Befehl wie diesen auszusprechen, der ein höheres Berechtigungslevel als 0 hat, wird er nicht ausgelöst.Das Befehlssystem verwendet eine separate Berechtigungs库, für die dem Ersteller der Erfahrung automatisch die Berechtigungsstufe math.huge erteilt wird.Admins können hinzugefügt werden, indem die folgenden Funktionen auf Ihrem AdminCommands-Modul-Objekt verwendet werden:
SetUserPermission(number requesterUserId, number targetUserId, permissionLevel) -> boolSetGroupRankPermission(number requesterUserId, number targetGroupId, number targetRankId, permissionLevel) -> bool
| Funktion | Parameter | Rückgabe | | ---------------------------- | ---------------------------------------------------------------------------------- | ------ | | Berechtigung | | | | GetAdmins() | | Tabelle | | SetUserPermission() | number requesterUserId, number targetGroupNameId, permissionLevel | bool | | GetUserPermission() | number userId | number | | GetGroupRankPermission() | number requesterUserId, number targetGroupId, number targetRankId, permissionLevel | bool | | GetGroupRankPermission() | targetGroupId, targetRankId | int |
Schnellstart-Modul
Für einfachere Einrichtung kannst du auch diesen Schnellstart verwenden, der ein Modul ist, das die Admin-Befehls-Bibliothek bereits implementiert hat.Das Modell ist ein Modul mit dem gleichen Format wie oben beschrieben.Darüber hinaus enthält das Modul bereits einige Befehle, sodass Sie nicht erneut implementieren müssen.
| Befehl/Bindung | Gesprochener Parameter | | -------------------------------- | -------------------------------- | | "list", "commands" | Benutzername | | "sparkles" | Benutzername | | "sparkles" | Benutzername | | "unforcefield", "unff" | Benutzername | | "explode" | Benutzername | | "part" | Weg (z.B.Erlebnis.Arbeitsbereich) | | "freeze" | Benutzername | | "unfreeze" | Benutzername | | "hinzufügen" | Benutzername | | "entfernen" | Benutzername | | "kicken" | Benutzername | | "setuserpermission", "sup" | BenutzerID, Berechtigung | | "setgrouprankpermission", "sgrp" | GruppeID, RangID, Berechtigung |