schema.lua
Was das Menü von deinem Script wissen muss. Jeder Eintrag wird beim Anmelden geprüft.
Oberste Ebene
labelstringordernumberabouttable{ summary, details }, steht auf der Seite des Scripts und im ersten Schritt der Einrichtung.sectionstablefieldstableplacestablecodetable{ key, label } für Funktionen in der config.lua. Das Menü zeigt sie, bearbeitet werden sie in der Datei.texttable{ DE = { ... } }, dieselben Beschriftungen in einer anderen Sprache. Fehlendes bleibt Englisch.Seiten
idstringlabelstringgroupstring= 'settings'settings, places, discord oder text. Jede Einstellungsseite ist eine eigene Zeile, die anderen drei sind je eine Zeile mit Reitern.iconstringcsHome, csPin, csStack, csStar, csList, csPeople oder csGear.summarystringintrostringserverbooleanFelder
keystringCart.perItem ist Config.Cart.perItem.sectionstringtypestringapplystringlive, reopen oder restart. Was die Zeile über das Wirksamwerden sagt.label / hint / detailsstringmin / max / step / suffixnumberoptions / optionLabelstableselect und multi.globalstringsetupnumbermorebooleanfoldboolean | 'open'sincestring'2.0.0' markiert ein Feld als neu.whenstring | tableserverbooleanFeldtypen
| type | Wird zu |
|---|---|
text | Textfeld |
number / money | Zahl, mit Bereich und Schritt |
boolean | Schalter |
select / multi | eins aus einer Liste, oder mehrere |
color / rgba | Farbe als Hex, oder mit Deckkraft |
key | Taste, getippt als E oder Left Shift, gespeichert als Control-ID |
coords / vec3 | Position mit Setzen im Spiel, oder drei Zahlen |
list | eine Liste von Werten, of sagt welcher Art |
pairs | Text gegen Text, etwa Fahrzeugklasse gegen Garagentyp |
group | ein Block mit Schalter und Teilen darunter |
rows | eine Tabelle von Einträgen, bis drei Ebenen tief |
type | auf einem Ort: welcher Typ die Vorlage ist |
rules | wer etwas darf: Job, Gruppe, Ace, Export, State Bag, eine Person |
notify | wohin Meldungen gehen, vier Felder |
secret | bleibt auf dem Server, das Fenster sieht nur eine Maske |
typemap | wird angezeigt, aber nie geschrieben |
Tabellen von Einträgen
{ key = 'categories', type = 'rows', label = 'Stock', singular = 'Category',
fields = {
{ key = 'label', type = 'text', label = 'Name', required = true },
{ key = 'items', type = 'rows', label = 'Items', singular = 'Item',
short = { 'name', 'price' },
fields = {
{ key = 'name', type = 'text', label = 'Item', required = true },
{ key = 'price', type = 'money', label = 'Price', min = 0 },
} },
} }short sagt, welche Spalten eine Zeile in Kurzform wie { 'bread', 4 } meint. map liest eine Tabelle wie { police = 2 } als zwei Spalten. Fehlt eins davon, liest das Menü deine Datei als leer. Zurückgeschrieben wird immer eine schlichte Liste, dein Script muss die alten Formen also weiter verstehen.
Abhängige Einstellungen
when = 'Carclear.enabled' -- set, and not false
when = { key = 'Features.repair.enabled', isnt = false }
when = { key = '...', any = { true, 'locked' } }
when = { key = '...', is = true }Gedimmt statt versteckt: Eine verschwundene Zeile nimmt die Idee mit, was das Einschalten bringen würde und eine Seite, deren Länge sich beim Klicken ändert, rutscht unter dem Zeiger weg. Ein when auf einen Schlüssel, den das Schema nicht kennt, wird beim Anmelden abgelehnt.
Wer etwas darf
{ key = 'Features.repair.who', section = 'features', type = 'rules', apply = 'live',
label = 'Who may repair',
when = { key = 'Features.repair.enabled', is = 'locked' } }Eine passende Zeile reicht. Gelesen wird serverseitig mit CsConfig.Allows.
Nur für den Server
| Bedeutung | |
|---|---|
type = 'secret' | nur der Server hat den Wert, nicht einmal das Menü. Ein eigenes Feld, nicht in einer Gruppe oder Tabelle. |
server = true | am Feld: normal bearbeitet, aber nicht an Spieler geschickt |
server = true | an einer Seite: dasselbe für jedes Feld darauf |
Seiten umbenennen
Ein Recht hängt an der ID einer Seite. Benennst du eine um, sag, wohin sie gegangen ist und die Rechte ziehen beim nächsten Start mit. Jeder Umzug steht im Log.
moved = { opening = 'basics', carclear = 'impound' },