DarkRP-Jobs, richtig gemacht

Wo Jobs wirklich hingehören, was jedes Feld tut, und die fünf Fehler, die einen Abend kosten. Inklusive dem, der einen Job ohne jede Fehlermeldung überschreibt.

5 Minuten Lesezeit

DarkRP wird konfiguriert, indem man Lua bearbeitet, und der mit Abstand häufigste Weg, einen Server kaputtzumachen, ist das falsche Lua zu bearbeiten. Dieser Guide behandelt, wo Jobs wirklich hingehören, was jedes Feld tut, und die Fehler, die genau die Meldungen erzeugen, an denen du sonst einen Abend verbringst.

Bearbeite niemals DarkRP selbst

Der Gamemode bringt einen Ordner namens darkrpmodification mit. Dort gehören deine Änderungen hin.

garrysmod/addons/darkrpmodification/lua/darkrp_customthings/    jobs.lua    entities.lua    shipments.lua    doorgroups.lua    ...

Bearbeite gamemodes/darkrp direkt, und dein Werk wird vom nächsten Update gelöscht. Bearbeite darkrpmodification, und es überlebt, denn ein DarkRP-Update fasst dieses Addon nie an.

Wenn du darkrpmodification nicht hast, installiere es vor allem anderen. Es ist ein eigener Download, getrennt von DarkRP, und den Gamemode "nur bis ich es richtig installiere" zu bearbeiten ist die Art, wie Leute ein Wochenende verlieren.

Die Form eines Jobs

Ein Job ist ein Aufruf von DarkRP.createJob, zugewiesen an eine TEAM_-Globale:

TEAM_POLICE = DarkRP.createJob("Police Officer", {    color = Color(25, 25, 170, 255),    model = {"models/player/police.mdl", "models/player/police_fem.mdl"},    description = [[Keep the peace and arrest criminals.]],    weapons = {"arrest_stick", "unarrest_stick", "stunstick", "weaponchecker"},    command = "policeofficer",    max = 4,    salary = 65,    admin = 0,    vote = true,    hasLicense = true,    candemote = true,    category = "Civil Protection",})

Der DarkRP-Job-Generator schreibt dir das, inklusive der Whitelist-Variante, und er lässt dich keinen TEAM_-Namen erzeugen, der keine gültige Lua-Globale ist. Trotzdem lohnt es sich, das zu verstehen, denn du wirst ständig die Jobs anderer Leute lesen.

Wofür jedes Feld tatsächlich da ist

FeldBedeutung
colorDie Farbe im Scoreboard und über dem Kopf.
modelEin String, oder eine Table. Eine Table gibt Spielern die Wahl.
descriptionWird im F4-Menü angezeigt. Lange Klammern, keine Anführungszeichen.
weaponsSpawn-Loadout, nach Waffenklasse.
commandWird als /policeofficer getippt. Nur Buchstaben und Ziffern.
max0 heißt unbegrenzt. 4 heißt vier gleichzeitig.
salaryWird in jedem Payday-Intervall ausgezahlt.
admin0 jeder, 1 Admins, 2 Superadmins.
voteOb Spieler den Job hineinwählen.
hasLicenseDarf Waffenscheine ausstellen.
candemoteOb dieser Job per Abstimmung demoted werden kann.

Waffenklassen werden nicht geraten: die Liste der Waffenklassen ist jede Klasse, die das Spiel registriert, und sie sagt dir, welche davon nur existieren, wenn Half-Life: Source gemountet ist.

Die fünf Fehler, die einen Abend kosten

1. Zwei Jobs teilen sich einen TEAM-Namen

TEAM_POLICE = DarkRP.createJob("Police Officer", { ... })TEAM_POLICE = DarkRP.createJob("Police Chief", { ... })

Der zweite überschreibt den ersten stillschweigend. Kein Fehler, ein fehlender Job, und eine verwirrende Stunde. Jeder Job braucht seine eigene Globale.

2. Ein ]] in einer description

description = [[Guard the vault [[loot]] and stay alert.]],

Der String endet beim ersten ]], und alles danach wird zu Syntax, mit der der Parser nichts anfangen kann. Nimm [==[ ... ]==], wenn der Text Klammern enthält, oder vermeide sie.

3. Ein Modell, das nicht gemountet ist

Ein Job, der auf ein Modell zeigt, das dein Server nicht hat, spawnt Spieler als Fehlerzeichen. Die Playermodel-Liste ist jedes Modell, das Garry's Mod standardmäßig registriert; alles andere muss in einem Addon liegen, das tatsächlich auf dem Server installiert ist, nicht nur auf deinem eigenen Client.

4. Bearbeiten, während der Server läuft

DarkRP liest diese Dateien beim Start. jobs.lua auf einem laufenden Server zu speichern ändert nichts, bis er neu startet, weshalb "mein Job taucht nicht auf" meistens mit einem Neustart beantwortet wird.

5. Ein command mit Leerzeichen oder Bindestrich

command = "police officer",

command wird zu einem Chat-Befehl. Leerzeichen, Bindestriche und Umlaute machen ihn kaputt. Buchstaben und Ziffern, sonst nichts.

Wenn ein Job nicht erscheint, lies die Serverkonsole beim Start, statt zu raten. DarkRP gibt für alles, was es nicht laden konnte, einen klaren Fehler mit Datei und Zeile aus.

Kategorien, damit das F4-Menü keine Wand ist

Ab etwa zehn Jobs braucht das Menü Gruppierung. Eine Kategorie wird einmal erstellt und danach über ihren Namen referenziert:

DarkRP.createCategory{    name = "Civil Protection",    categorises = "jobs",    startExpanded = true,    color = Color(25, 25, 170, 255),    canSee = fp{fn.Id, true},    sortOrder = 101,}

Das Feld category eines Jobs muss exakt zu name passen, Groß- und Kleinschreibung inklusive. Eine Abweichung wirft keinen Fehler; der Job landet einfach in der Standardgruppe. Der Kategorie-Generator hält sie konsistent.

Einen Job whitelisten

Zwei Wege, und sie sind nicht gleichwertig.

Die eingebaute Whitelist ist customCheck, ausgeführt wenn jemand versucht, den Job zu nehmen:

customCheck = function(ply)    return table.HasValue({"vip", "admin", "superadmin"}, ply:GetUserGroup())end,CustomCheckFailMsg = "This job is reserved for VIP members.",

Setz immer CustomCheckFailMsg. Ohne sie wird der Spieler ohne Erklärung abgewiesen und fragt stattdessen dich.

Das Feld admin ist einfacher, aber gröber: admin = 1 beschränkt den Job auf Admins, ohne Meldung und ohne Platz für einen Donator-Rang.

Wenn die Jobs stehen

  • Door Groups, damit nur die Polizei das PD besitzen kann. Beachte, dass die Funktion die Globale AddDoorGroup ist, kein DarkRP.create-Aufruf.
  • Agendas, der Zieltext, den ein Boss für sein Team schreibt.
  • Shipments und Entities für das, was der Gun Dealer verkauft.
  • Demote Groups, damit ein Demote aus einem Polizei-Job auch die anderen sperrt.

Die in diesem Guide benutzten Tools