Beschreibung
Tretet der Eco Modding Community auf discord bei: https://discord.gg/5BdXErQ
Das Elixr Mods Framework wurde entwickelt, um das Modding für eco einfacher zu machen, Mods kompatibler zu machen und die Möglichkeiten des Servers zu erweitern.
Ab Version 2.1.0 gibt es einige große Änderungen und die hier gefundenen Informationen sind möglicherweise nicht ganz korrekt.
Für die gesamte Dokumentation zum Elixr Mods Framework besuchen Sie bitte diesen Link: https://elixrmods.com/docs/elixr-mods/intro
Der Dokumentationsbereich enthält eine linke Navigationsleiste für alle Bereiche, für die wir eine Dokumentation haben (ich bin noch nicht mit allem außerhalb des em-frameworks fertig, werde es aber tun, wenn ich mehr Dinge veröffentliche) und eine rechte Navigation, die normalerweise für die Seitennavigation verwendet wird, die einzige Ausnahme ist die Einführungsseite, die schnelle Links zu jedem Teil des Frameworks unter EM Framework Namespaces hat, der Rest sind Seitennavigationslinks
Die em-framework Dokumentation ist für Version 2.1.0 aufwärts.
Berechtigungssystem
Während sich unser Berechtigungssystem noch in der Entwicklung befindet, ist dies eine grundlegende Dokumentation zu dem, was wir bisher haben und wird aktualisiert, wenn wir weitere Funktionen hinzufügen:
Die Verwendung des EM-Berechtigungssystems ist einfach,
Was das EM-Berechtigungssystem Ihnen bietet, ist die Möglichkeit, neue Benutzergruppen zu erstellen und ihnen Zugriff auf Befehle zu geben, solange sie in dieser Gruppe sind,
Beispiel,
Joe hat für Ihren Server gespendet, Sie können die Gruppe "VIP" erstellen und Joe zu dieser Gruppe hinzufügen,
Sie können dann dieser Gruppe Befehle zuweisen, die Joe verwenden kann:
Angenommen, Sie haben Teleport-Befehle auf dem Server, dann können Sie den Teleport-Befehl zur Gruppe "VIP" hinzufügen, damit Joe den Teleport-Befehl verwenden kann,
Nutzung für Server-Admins:
Standardmäßig gibt es 2 Benutzergruppen, Admin und Standard, diese 2 Gruppen können nicht gelöscht werden
Wenn der Benutzer bereits ein Admin ist, muss er nicht zur Admin-Gruppe hinzugefügt werden, aber wenn der Benutzer kein Admin ist, können Sie ihn zur Admin-Gruppe hinzufügen und Ihren Admins bestimmte Befehle zuweisen, z.B. Kicken, Mod-basierte Befehle oder was immer Sie möchten
Hier ist eine Liste aller Befehle, die ein Admin/Besitzer im Server verwenden kann:
Befehle, um Gruppen Berechtigungen für Befehle zu geben
Code
"/CommandPermissions grant command, groupname " // Wird verwendet, um Gruppen das Recht zu geben, einen Befehl zu verwenden: Z. B.:
"/CommandPermissions grant fly, VIP" //Damit erhält die Gruppe VIP das Recht, den Befehl /fly zu verwenden
Sie können einem Befehl keine Shortcuts zuweisen, d.h.: ElixrMods Auto door hat einen Shotcut-Befehl: /ad-on
tun: "/CommandPermissions grant ad-on, VIP" wird nicht funktionieren
"/CommandPermissions revoke command, groupname" // Wird verwendet, um einer Gruppe die Berechtigung für einen Befehl zu entziehen: Z.B.:
"/CommandPermissions revoke fly, VIP" // Nimmt der VIP-Gruppe die Möglichkeit, den Befehl /fly zu verwenden
Sie können keine Shortcodes verwenden, wenn Sie einen Befehl widerrufen, z. B.: "/CommandPermissions revoke ad-on, VIP" wird nicht funktionieren
"/CommandPermissions setbehaviour admin/user, true/false" //Dies wird verwendet, um Admins oder Benutzern den Standardzugriff auf ihre Standardbefehle zu ermöglichen:
D.h.:
"/CommandPermissions setbehaviour admin, false" // bedeutet, dass jeder Benutzer, der zum Admin gemacht wurde, keinen Zugriff mehr auf Admin-Befehle hat und Sie müssen die Verwendung von Admin-Befehlen über eine Gruppe zuweisen, z. B.: Gruppe Admin.
"/CommandPermissions setbehaviour user, false" // bedeutet, dass jeder Benutzer, der nicht in einer Gruppe oder einem Admin ist, keinen Befehl verwenden kann, ohne in einer Gruppe zu sein
Mehr anzeigen
Shortcuts:
Code
"/Befehl erteilen, Gruppenname"
"/revoke-command Befehl, Gruppenname"
"/behaviour-command admin/user, true/false"
Das "Kommando" in den Befehlen ist jedes Kommando im eco-Spiel, egal ob es von einem Mod oder einem Core-Kommando registriert wurde!
Befehle zum Erstellen von Gruppen und Hinzufügen von Benutzern zu Gruppen
Code
"/groups addgroup groupname" // Wird verwendet, um eine neue Gruppe zu erstellen
"/groups deletegroup groupname" // wird verwendet, um eine erstellte Gruppe zu löschen
"/groups listgroups" // listet alle Gruppen auf, die Sie auf dem Server haben
"/groups grouppermissions groupname" // listet alle Berechtigungen der benannten Gruppe auf "/groups addusertogroup username, groupname" // fügt einen Benutzer zu einer ausgewählten Gruppe hinzu oder erstellt eine Gruppe und fügt den Benutzer dann zu dieser hinzu
"/groups removeuserfromgroup username, groupname" // entfernt einen Benutzer aus dieser Gruppe, wenn die Gruppe nicht existiert, wird dies angezeigt
"/groups forcesave" //zwingt das Gruppensystem, alles zu speichern, falls ein Speichern fehlschlägt
Alle Befehle, die einen Benutzernamen verwenden, unterscheiden zwischen Groß- und Kleinschreibung, also stellen Sie sicher, dass Ihre Namensgebung korrekt ist, sonst wird es sagen, dass der Benutzer nicht existiert
Kurzbefehle:
Code
"/grp-add groupname"
"/grp-del groupname"
"/grp-list"
"/grp-perms gruppenname"
"/grp-adduser benutzername, gruppenname"
"/grp-remuser benutzername, gruppenname"
"/grp-fs"
Struktur der Konfigurationsdatei - Wenn Sie diese Datei nicht bearbeiten möchten, verwenden Sie bitte einfach die Befehle im Spiel - zu finden in Configs/Mods
ElixrMods-GroupsDate.json
Code
{
"Groups": [
{
"GroupName": "groupname", // Der Name der jeweiligen Gruppe
"GroupUsers": [
{
"Name": "Benutzername", // Der Benutzername der Person, die der Gruppe hinzugefügt wurde
"SlgID": "slgid", // ihre slgid, falls vorhanden
"SteamID": "steamid" // ihre Steamid, falls vorhanden
}
], // Jeder Benutzer in dieser Gruppe
"Permissions": [ //jeder Befehl, auf den diese Gruppe Zugriff hat
{
"$type": "Eco.EM.Permissions.ChatCommandAdapter, em-framework", //dies nicht bearbeiten
"Bezeichner": "Command" //Befehlsname
},
{
"$type": "Eco.EM.TP.TeleportConfig, em-tp-9", //Dies ist eine benutzerdefinierte Konfiguration für einen anderen Mod, der das Gruppensystem verwendet.
"MaxTeleports": 30, // Konfigurationseinstellung
"CalorieCost": 250, //Konfigurationseinstellung
"CooldownSeconds": 15, // Konfig-Einstellung
"Expiry": 15, //Konfigurationseinstellung
}
]
}
],
"AllUsers": [ // Jeder Benutzer, der sich am Server anmeldet
{
"Name": "UserName", // Ihr Benutzername
"SlgID": "slgid", //Seine SLG-ID - Kann leer sein, wenn slg id nicht vorhanden
"SteamID": "steam64id", //Ihre Steam-ID - Kann leer sein, wenn steamid nicht vorhanden ist
}
]
}
Mehr anzeigen
Für Modder:
Es gibt nicht viel, was Sie tun müssen, um unser Berechtigungssystem nutzen zu können,
Um die Verwendung des Berechtigungssystems zu erzwingen, können Sie Folgendes tun:
Beim Erstellen eines Chat-Befehls setzen Sie folgendes:
Code
[ChatBefehl("Beschreibung", "Shortcut", ChatAuthorizationLevel.Admin)]
[ChatSubCommand("Command Parent", "Description", "shortcut", ChatAuthorizationLevel.Admin)]
Durch das Einstellen der Befehle zur Verwendung durch Admins können Serverbesitzer diese Befehle jeder Gruppe zuweisen und den Benutzern in dieser Gruppe erlauben, diese Befehle zu verwenden, unabhängig davon, ob es sich um Befehle auf Admin-Ebene handelt. Das bedeutet auch, dass ein Benutzer in einer Gruppe sein muss, um diese Befehle zu verwenden
Wenn Sie sie wie folgt einstellen:
Code
[ChatBefehl("Beschreibung", "Abkürzung", ChatAuthorizationLevel.User oder Leer lassen)]
[ChatSubCommand("Command Parent", "Description", "shortcut", ChatAuthorizationLevel.User or Leave Blank)]
Jeder Benutzer kann dann den Befehl verwenden, es sei denn, der Eigentümer des Servers schaltet aus, dass Benutzer Benutzerbefehle verwenden können. Dies kann jedoch zu Problemen mit Benutzern führen, die den Befehl /? verwenden, um Hilfe bei einer Liste von grundlegenden Befehlen zu erhalten, die sie normalerweise verwenden könnten.
Erweiterbarkeit:
Modder können das Berechtigungssystem auch mit eigenen Befehlen für andere Funktionen erweitern. Dazu müssen Sie unsere em-framework.dll referenzieren und können damit einige der folgenden Dinge tun:
Code
namespace Eco.EM.Groups
[ChatSubCommand("CommandPermissions" //Damit wird Ihr Befehl zu einem Unterbefehl unseres Berechtigungssystems und kann verwendet werden: /permissions yourcommand,
"Ihre Befehlsbeschreibung", "Ihre Befehlsverknüpfung IE: Statt /CommandPermissions yourcommand können Sie /yourcommand verwenden", ChatAuthorizationLevel.Admin // dies erzwingt, dass der Befehl vom Berechtigungssystem verwendet werden kann und verhindert, dass nicht autorisierte Benutzer den Befehl verwenden, Admins erhalten standardmäßig Zugriff darauf)]
Zusätzliche Informationen
Dies ist der verwendende Haken.
using Eco.EM.Groups;
Code
GroupsManager.API.GetGroup(string group, bool true/false); //Dies liefert eine Gruppe, wenn sie nicht existiert, geben Sie an, ob die Gruppe erstellt werden soll oder nicht
GroupsManager.API.AllGroups(); //So werden alle verfügbaren Gruppen ermittelt
GroupsManager.API.UserPermitted(User user, permssion) //Dies holt alle Gruppen, in denen der Benutzer ist und prüft, ob eine dieser Gruppen die Berechtigung hat, die Befehle zu verwenden
Benutzerfreundlichkeit:
public static void yourfunction(string groupName)
{
Group group = GroupsManager.API.GetGroup(groupName); // Weisen Sie group einer var zu, um die Suche nach Gruppen zu vereinfachen
}
GroupsManager.API.SaveData(); // Wird verwendet, um Ihre gruppenbasierte Konfiguration in der Gruppendatei zu speichern, was nützlich ist, wenn Sie möchten, dass eine Gruppe bestimmte Einstellungen haben kann
Benutzungen (umfasst den Dateimanager und die Chat-Basis):
Code
Eco.EM verwenden;
Dateimanager:
Code
FileManager.ReadFromFile(Base.SaveLocation, filename); filename können Sie einstellen
FileManager.WriteToFile(datainput, Base.SaveLocation, filename);
Code
Base.SaveLocation = ServerFolder/Configs/Mods
Sie können dies auch mit dem Dateimanager für Ihren eigenen Ordner tun
Code
FileManager.WriteToFile(datainput, Base.SaveLocation + "/Foldername", filename);
FileManager.ReadFromFile(Base.SaveLocation + "/Foldername", filename);
Der Dateimanager legt das Verzeichnis automatisch an, wenn es nicht existiert
Sie können den Dateinamen als String-Konst setzen und diesen verwenden oder einen direkten String verwenden:
Code
const string filename = "MyMod";
FileManager.WriteToFile(datainput, Base.SaveLocation + "/Foldername", filename);
oder
FileManager.WriteToFile(datainput, Base.SaveLocation + "/Foldername", "MyMod");
Wenn Sie die Base.SaveLocation nicht verwenden wollen, können Sie eine eigene verwenden:
Code
FileManager.WriteToFile(datainput, "/Mods/DeinOrdnerHier", Dateiname);
FileManager.ReadFromFile("/Mods/DeinOrdnerHier", Dateiname);
Ich empfehle, den Basisspeicherort zu verwenden, da im Falle, dass der Mods-Ordner gelöscht wird, alle Ihre Konfigurationsdateien sicher bleiben, alle Configs werden im .json-Format gespeichert
Für Configs:
Code
public PluginConfig ConfigName; //Ihre Datenstruktur
public IPluginConfig PluginConfig => ConfigName;
public void LoadConfig() { ConfigName = new PluginConfig(configFileName // const string oder direct string); } public void SaveConfig() { ConfigName.SaveAsync(); }
Es sind eventuell Anpassungen auf Ihrer Seite erforderlich, aber Sie können es so strukturieren, wie Sie möchten
Chat Manager
Hier ist für das Senden von Server-Nachrichten:
Code
public Message( string content ) // für das Senden von serverbasierten Nachrichten ist ebenfalls temporär
public Message( string content, MessageType messageType ) // für das Versenden von serverbasierten Nachrichten, die nicht temporär sind
public Message( string content, User user ) // zum Versenden an den Benutzer ist ebenfalls temporär
public Message( string content, Player player ) //für das Senden an den Player ist ebenfalls temporär
public Message( string content, User user, MessageType messageType ) // zum Senden an den Benutzer ist nicht temporär
public Message( string content, Player player, MessageType messageType ) //für das Senden an den Player ist nicht temporär
public Message( string inhalt, MessageCategory chatCategory, DefaultChatTags defaultChatTags ) // für das Senden von Server-Nachrichten und die Auswahl von Chat-Tags und Chat-Kategorie ist temporär
public Message( string title, string content ) // Server-Benachrichtigungen mit Titel, Nachrichtentyp ist entweder Popup oder Annoucement
Beispiel:
Code
bool Send( Nachricht Nachricht ) //To server or player
internal bool SendToPlayer( Message Message ) // an Spieler und schaltet Nachrichtentyp um: infopanel - Ankündigung, okboxloc - Popup, msglocstr - temp, servermessagetoplayer - perm
internal bool SendToServer( Message Message ) // zum Server als Ankündigung, Popup, temp, perm
ChatBase.Send(new ChatBase.Message(string.Format(Localizer.DoStr(appName + "{0} wurde zu Ihnen teleportiert.")), Requester.Name), Receiver)); // dies verwendet Vars im Text und sendet an einen Benutzer
ChatBase.Send(new ChatBase.Message(string.Format(Localizer.DoStr(appName + "{0} wurde zu Ihnen teleportiert.")), Requester.Name), reciever, ChatBase.MessageType.Type)); // Hier können Sie angeben, ob es sich um ein Popup oder eine Perm-Nachricht handelt usw.
ChatBase.Send(new ChatBase.Message(string.Format(Localizer.DoStr(""), ChatBase.MessageType.Type)); //Dies wird an den Server gesendet
ChatBase.Send(new ChatBase.Message(string.Format(Localizer.DoStr(""), ChatBase.MessageType.Type), user)); //das wird an den Benutzer gesendet
Es kann auch vereinfacht werden:
Code
ChatBase.Send(new ChatBase.Message(Localizer.DoStr("Message")), user)); //Dies sendet an einen Benutzer
ChatBase.Send(new ChatBase.Message(Localizer.DoStr("Message")), user, messagetype)); //Das sendet an einen Benutzer mit einem angegebenen Messagetype wie ein Popup
Es gibt noch mehr zum Custom Chat Manager, aber diese werden alle auf der Website eingebunden, dies sind vorerst nur temporäre Dokumente
Chatmanager Simplified: Einfache Bedienung:
Code
ChatBase.Send(new ChatBase.Message(string content, user, ChatBase.MessageType.Temporary)); //Wird eine temporäre Nachricht an den Benutzer senden
ChatBase.Send(new ChatBase.Message(string content, user, ChatBase.MessageType.Permanent)); // Sendet eine permanente Nachricht an den Benutzer
ChatBase.Send(new ChatBase.Message(string content, user)); //Wird standardmäßig eine temporäre Nachricht an den Benutzer senden
ChatBase.Send(new ChatBase.Message(string title, string content, user)); //Wird ein Info-Panel an einen Benutzer senden
ChatBase.Send(new ChatBase.Message(null | "", string content, user)); //Wird ein Popup Ok-Feld an den Benutzer senden
ChatBase.Send(new ChatBase.Message(string content)); // Sendet eine temporäre Nachricht an alle Online-Benutzer auf dem Server
ChatBase.Send(new ChatBase.Message(string content, ChatBase.MessageType.Permanent)); //Wird eine permanente Nachricht an alle Online-Benutzer auf dem Server senden
ChatBase.Send(new ChatBase.Message(string title, string content)); //Wird eine Infobox an alle Online-Benutzer auf dem Server senden
ChatBase.Send(new ChatBase.Message(null | "", string content)); //Wird eine Popup-OK-Box an alle Online-Benutzer auf dem Server senden
ChatBase.Send(new ChatBase.Message(string content, ChatBase.MessageType.GlobalAnnoucement)); //Sendet eine globale Ankündigung an alle Spieler auf dem Server (oder stellen Sie sich vor, Sie fügen eine neue Benachrichtigung im Benachrichtigungsbereich hinzu), dies ist großartig, um Benachrichtigungen für Offline-Benutzer zu hinterlassen
String Sanitizer
Unser String Sanitizer gibt den gesamten Text .tolower() aus und entfernt die Leerzeichen nach dem ",", so dass Sie Text wie diesen einfach in Befehle einlesen lassen können: /somecommand dies-das-das
Es entfernt die Leerzeichen am Ende und am Anfang von allem, was nach einem Komma steht, um ein genaueres Lesen von Benutzereingaben zu ermöglichen
Zu verwenden: string = Base.Sanitize(string); Beispiel:
Code
public static void somecommand(User user, string setting, string something)
{
something = Base.Sanitize(something);
}
/somecommand Food, Pineapple
wird gelesen als:
Lebensmittel, Ananas
oder
public static void somecommand(User user, string setting, string something, int amount)
{
something = Base.Sanitize(something);
amount = Base.Sanitize(amount); //das ist ein int und wird nicht funktionieren, auch wenn Sie .ToString() so setzen:
Betrag = Base.Sanitize(Betrag.ToString()); // dies wird einen Fehler auslösen, dieser Sanitizer ist für Strings ausgelegt
}
/somecommand Essen, Ananas, 5
wird gelesen als:
Lebensmittel,Ananas, 5
Dies kann bei Konflikten helfen, ähnlich wie bei unserem Gruppensystem. Wir haben es so eingestellt, dass alle Gruppennamen klein geschrieben werden, so dass Sie nicht versehentlich 4 der gleichen Gruppe erstellen, indem Sie unterschiedliche Groß- und Kleinschreibung verwenden: z.B.: Vip, vip, VIp, VIP würden alle als vip zurückgegeben
Unser Sanitizer hilft auch gegen Leerzeichen und verhindert, dass unser Gruppensystem 2 Gruppen mit dem gleichen Namen hinzufügt, von denen eine ein Leerzeichen enthält: z.B.: "vip" " vip", so dass Sie jedes Mal die gleiche Gruppe erhalten
Credits
-
04. Februar, 15:31 UhrVersion 2.1.2
Changelog:
Fixed a bug where admin commands would no longer log to file or log to chat if set in the server config
Moved Folder Structure to the new one
Unzip the zip file into the mods folder, the new em-framework will now be in Mods/Elixr Mods/em-framework.dll
Please ensure you delete all other instances of em-framework from your mods folder to prevent server crashing on boot.
Mod Developers are encouraged to use this folder structure when releasing their mods or just add a referenced link to this mod for others to download, all future updates will use this mod structure, all previous mods that used em-framework 2.1.1 should not break if you update em-framework to 2.1.2 as there where no major changes made in 2.1.2
0 Kommentare