Erweitern¶
Das Addon ist darauf ausgelegt, dass andere Server und Addons es ohne Änderungen am Addon selbst erweitern.
Lege eine .lua-Datei in lua/tadmin_ext/ (im Addon oder in einem eigenen Addon mit demselben Ordner). Sie wird automatisch geladen:
- ohne Präfix oder
sh_: gemeinsam (Server und Client) sv_: nur Servercl_: nur Client- Dateien, die mit
_beginnen, werden übersprungen (_example.luaist ein Beispiel zum Umbenennen).
Ein Befehl¶
TAdmin.RegisterCommand{
name = "hello",
category = "Spaß",
help = "Begrüße einen Spieler",
default = "moderator", -- niedrigster Rang, der das Recht beim ersten Mal bekommt
args = {
{ name = "target", type = "player" },
{ name = "text", type = "text", optional = true, default = "Hallo" },
},
run = function(ctx, target, text) -- läuft nur auf dem Server
ctx:Announce("{A} grüßt {T}: " .. text, { T = target })
end,
}
Das Recht hello entsteht automatisch, der Befehl erscheint im Menü mit fertigem Formular und im Chat als !hello.
Argumenttypen¶
| Typ | Wert |
|---|---|
player |
genau ein Spieler (Immunität wird geprüft) |
players |
ein oder mehrere Spieler (Immunität je Ziel) |
steamid |
SteamID64, auch Offline-Spieler per Name |
number |
Zahl, mit min und max |
time |
Dauer in Minuten (30m, 2h, 7d) |
string |
ein Wort |
text |
der Rest der Eingabe |
rank |
ein Rang |
bool |
ja/nein |
choice |
Auswahl aus choices = { ... } |
map |
vorhandene Karte |
Kontext (ctx)¶
| Aufruf | Wirkung |
|---|---|
ctx.actor |
der Ausführende (NULL für die Konsole) |
ctx:Announce(text, vars) |
Meldung an alle (je nach notify_mode), {A} Ausführender, {T} Ziel |
ctx:Reply(key, vars) |
private Antwort |
ctx:Fail(key, vars) |
bricht mit Fehlermeldung ab |
Weitere Felder der Definition: aliases, perm, immune, playerOnly, silent, noLog.
Rechte und Einstellungen¶
TAdmin.RegisterPerm("mein.recht", "Beschreibung", "Kategorie", "admin")
TAdmin.RegisterSetting("mein_wert", 10, "number", "Beschreibung", { category = "Mein Addon", min = 0, max = 100 })
TAdmin.HasPerm(ply, "mein.recht")
TAdmin.GetSetting("mein_wert")
Einstellungen erscheinen automatisch im Menü und werden synchronisiert. Typen: bool, number, string, choice.
Eine Menü-Seite¶
if CLIENT then
TAdmin.Menu.AddTab{
id = "mein", title = "Mein Tab", icon = "star", perm = "mein.recht", order = 95,
html = [[<div class="page-head"><div><h1>Mein Tab</h1></div></div>
<div class="card"><div class="card-body" id="inhalt">...</div></div>]],
js = [[
TA.request('meindaten', {}, function (d) {
root.querySelector('#inhalt').textContent = JSON.stringify(d);
});
]],
}
end
if SERVER then
TAdmin.Requests.meindaten = {
perm = "mein.recht",
run = function(ply, params) return { zeit = os.time() } end,
}
end
In js stehen die Hilfen der Seite bereit (h(), btn(), toast(), modal(), cmdDialog(name, preset), lua.run(zeile)). Verfügbare Icons: users terminal lock alert flag shield file sliders search x check plus trash refresh pin copy user star chevron left. Die Klassen (card, btn, badge, table, ...) entsprechen dem Web-Panel.
Ereignisse (Hooks)¶
| Hook | Wann |
|---|---|
TAdmin_Loaded |
alles geladen |
TAdmin_PreCommand(actor, cmd, tokens) |
vor einem Befehl, false blockiert |
TAdmin_PostCommand(actor, cmd, tokens) |
nach einem Befehl |
TAdmin_PlayerBanned(steamid64, minutes, reason, actor) |
nach einem Ban |
TAdmin_PlayerUnbanned(steamid64, actor) |
nach einem Unban |
TAdmin_RankChanged(ply, alt, neu) |
Rang eines Spielers ändert sich |
TAdmin_SettingChanged(key, value) |
Einstellung geändert |
TAdmin_CanChat(ply, text) |
vor jeder Chatnachricht, false blockiert |
TAdmin_ReportCreated(ply, text) |
neuer Report-Fall |
TAdmin_Synced (Client) |
Ränge und Rechte vom Server empfangen |
Weitere Funktionen¶
TAdmin.AddBan(sid, name, ip, minuten, grund, actor)
TAdmin.BanPlayer(ply, minuten, grund, actor)
TAdmin.AddWarn(sid, name, grund, actor)
TAdmin.SetUserRank(sid, rang, minuten, name)
TAdmin.Log(actor, "aktion", "text")
TAdmin.SendMsg(spieler, { Color(...), "Text" })
TAdmin.Announce(text, von, sekunden, spieler) -- Server: Ankündigung senden (spieler leer = alle)
TAdmin.ShowAnnouncement(von, text, sekunden) -- Client: Karte anzeigen
Eigenes Ankündigungs-System¶
Ankündigungen (!announce und aus dem Panel) lassen sich komplett ersetzen.
Client: eigene Darstellung
-- lua/tadmin_ext/cl_meine_ankuendigung.lua
TAdmin.SetAnnouncer(function(d) -- d.from, d.text, d.secs, d.label
MeineBenachrichtigung(d.text, d.secs)
-- nichts zurückgeben = erledigt, false = Standardkarte zeigen
end)
Alternativ per Hook: hook.Add("TAdmin_ShowAnnouncement", "id", function(d) ... return true end).
TAdmin.SetAnnouncer(nil) stellt die Standardkarte wieder her.
Server: eigener Versand
hook.Add("TAdmin_PreAnnounce", "meins", function(text, von, sekunden, spieler)
MeinNetzwerk(text)
return true -- verhindert die Standard-Ankündigung
end)
Aufrufen kannst du die Ankündigung jederzeit mit TAdmin.Announce("Text").
Eigene Sprache¶
TAdmin.AddLang("fr", { ["ui.tab.players"] = "Joueurs", ... })
TAdmin.SettingDefs.language.choices[#TAdmin.SettingDefs.language.choices + 1] = "fr"
Fehlende Schlüssel fallen auf Englisch zurück.