Scripts erweitern und anbinden
Diese Seite richtet sich an Entwickler, die eigene Ressourcen an lexo_core oder die LexoNET Bridge anbinden. Verbindliche Regeln für Leistung, Sicherheit und Aufbau stehen im Script-Standard.
#Aufbau einer Ressource
fx_version 'cerulean',lua54, OneSync.- Offen und anpassbar:
config.lua,locales/*.json,server/adapters/*.lua, bei der Bridgehooks.lua. Die übrige Logik ist über Cfx.re-Escrow geschützt. - Texte als JSON in
locales/de.jsonundlocales/en.json, beide vollständig. - Exports und Events tragen den Ressourcennamen als Präfix.
#Exports von lexo_core (Server)
exports.lexo_core:IsOnDuty(source, job)
exports.lexo_core:SetDuty(source, true)
exports.lexo_core:IsCuffed(source)
exports.lexo_core:SetCuffed(source, false)
exports.lexo_core:GetPlayer(source)
exports.lexo_core:GetSource(identifier)
exports.lexo_core:RemoveBank(source, amount, reason)
exports.lexo_core:SocietyDeposit(job, amount)
exports.lexo_core:Notify(source, text, type)Ereignisse (Server): lexo_core:playerLoaded (source, identifier) und lexo_core:playerDropped (source).
Beispiel: eine eigene Aktion nur für Polizisten im Dienst.
lib.callback.register('meine_ressource:aktion', function(source)
if not exports.lexo_core:IsOnDuty(source, 'police') then return false end
-- Aktion ausführen
return true
end)#Framework-Adapter
Der Zugriff auf ESX liegt gekapselt in server/adapters/esx.lua. Ein weiteres Framework bindest du über einen eigenen Adapter mit denselben Funktionen an und setzt Config.Framework.
#LexoNET Bridge
Die Bridge läuft nur auf dem Server. Ereignisse landen zuerst in der Tabelle lexo_bridge_outbox und werden gelöscht, sobald LexoNET sie bestätigt. Fällt LexoNET aus, geht nichts verloren.
set lexonet_url "https://lexonet.de"
set lexonet_key "lx_live_..."
ensure lexo_bridgeDen Schlüssel immer mit set, nie mit setr, damit er nicht an Clients geht.
#Exports
exports.lexo_bridge:Send('meinmodul.ereignis', { identifier = id, wert = 1 })
exports.lexo_bridge:OnCommand('meinbefehl', function(data) return true, 'ok' end)
exports.lexo_bridge:VehicleUpsert({ plate = 'LX 123', owner = id, model = hash })
exports.lexo_bridge:Identifier(source)- Eigene Ereignistypen tragen ein Präfix je Modul, zum Beispiel
police.odermedic.. - Befehls-Handler dürfen nicht warten. Längere Arbeit in einem eigenen Thread (
CreateThread) erledigen und soforttrueoderfalse, 'grund'zurückgeben.
#Konsole
lexo_status: Verbindung und Größe der Outboxlexo_syncvehicles: einmaliger Abgleich aller Fahrzeuge ausowned_vehicles
#Anpassungen in hooks.lua
Hooks.phone(src): Telefonnummer, Standard lb-phoneHooks.notify(src, message): Benachrichtigung, Standard ox_libHooks.societyDeposit(job, amount): Gutschrift auf das Firmenkonto, Standardsociety_<job>
#Einstellungen
| Einstellung | Standard | Bedeutung |
|---|---|---|
Config.Framework | esx | Adapter |
Config.FlushInterval | 2000 ms | Senden der Ereignisse |
Config.BatchSize | 50 | Ereignisse je Anfrage |
Config.PollInterval | 3000 ms | Abfrage von Befehlen |
Config.VehicleTable | owned_vehicles | Quelle für den Fahrzeug-Abgleich, false = aus |
#Game API
Schnittstelle zwischen Bridge und LexoNET (alle Verbindungen gehen vom Spielserver aus):
| Endpunkt | Zweck |
|---|---|
POST /api/v1/game/events | Ereignisse an LexoNET, bis 50 je Anfrage, Antwort { "accepted": [ids] } |
GET /api/v1/game/commands | offene Befehle abholen |
POST /api/v1/game/commands/ack | Befehle quittieren (ok, result) |
POST /api/v1/game/sync/vehicles | Fahrzeuge in Paketen zu 200, final: true im letzten |
Authentifizierung: Authorization: Bearer <key>, nur HTTPS. Bei 401/403 pausiert die Bridge 60 Sekunden, bei 429 und Störungen verdoppelt sie die Wartezeit bis 60 Sekunden.
Vorhandene Ereignisse: server.started, citizen.online, citizen.offline, job.changed, vehicle.upsert, duty.started, duty.ended, job.staff, police.fine, police.jail, police.release, police.jail_failed.
Vorhandene Befehle: notify, fine, jail, unjail.
#Vor einem Release
resmon 1im Leerlauf und bei Nutzung messen, Werte im Changelog festhalten.- Alle Callbacks auf Typ, Wertebereich, Job, Rang, Dienst, Abstand und Rate-Limit prüfen.
- Neue Einstellungen mit Standardwert, alte bleiben gültig.
- Locales Deutsch und Englisch vollständig.
Unklare Stellen oder fehlende Schritte meldest du im LexoNET-Discord oder als Ticket im Kundenbereich.