Hooks
Mitreden, bevor eine Station aufgeht oder jemand bezahlt wird.
Ein Hook ist eine Funktion von dir, die die Station aufruft, bevor sie entscheidet. Sie darf Nein sagen und das ist der Unterschied zu einem Event: das läuft erst hinterher und kann nichts mehr aufhalten.
| Hook | Läuft | Bekommt |
|---|---|---|
canOpen | Bevor eine Station aufgeht, bei jeder Aktualisierung der Liste und erneut vor jeder Wiederbelebung. | source, stationId |
canRevive | Nachdem das Ziel geprüft wurde und bevor Geld fließt. | source, stationId, targetId, price, account |
price ist der Betrag, wie er wirklich abgebucht würde, mit Sanitäter-Gebühr und Faktor darin und account ist 'cash' oder 'bank'.
Nichts oder true zurückgeben heißt erlauben. false heißt ablehnen, mit einem Satz dahinter, wenn der Spieler wissen soll, warum. Der Satz wird ihm wörtlich angezeigt: Das ist die einzige Stelle, an der eine Meldung von dir bei ihm landet und cs_revivestation hat dafür keine Zeile in locales/, weil es deine Regel nicht kennt.
exports.cs_revivestation:RegisterHook('canRevive', function(src, station, target)
if IsInJail(target) then
return false, 'Diese Person steht unter Bewachung.'
end
end)exports.cs_revivestation:RegisterHook('canRevive', function(src, station, target)
local left = Timeout.left(target)
if left > 0 then
return false, ('Noch %d Sekunden Wartezeit.'):format(left)
end
end)exports.cs_revivestation:RegisterHook('canOpen', function(src, station)
if station ~= NIGHT_STATION then return end
if not Shift.isNight() then
return false, 'Die Nachtaufnahme hat noch geschlossen.'
end
end)| Export | Gibt zurück | Beschreibung |
|---|---|---|
RegisterHook(name, fn) | number / nil | Registriert einen Hook und gibt eine ID zurück. nil, wenn der Name keiner der beiden oben ist. |
RemoveHook(id) | boolean | Nimmt ihn wieder weg. |
Ein Hook läuft in der Anfrage, auf die der Spieler wartet. Ein Hook, der eine Sekunde braucht, macht jede Wiederbelebung eine Sekunde lang. canOpen läuft zusätzlich bei jeder Aktualisierung der offenen Liste, also standardmäßig alle drei Sekunden. Halte ihn kurz und warte darin nicht auf eine Datenbank oder eine HTTP-Antwort.
Ein Hook gehört der Resource, die ihn registriert hat und wird fallen gelassen, wenn die stoppt. Ein Neustart deines Scripts kann also keinen toten Hook hinterlassen, der ab dann bei jeder Wiederbelebung einen Fehler wirft. Wirft ein Hook eine Exception, steht sie mit dem Namen deiner Resource in der Konsole und die Wiederbelebung läuft weiter, als hätte er nichts gesagt.