CCOPNET DOCS Zur App

Copnet Docs

Alles, was du für dein Copnet-System brauchst: Einrichtung in Copnet, Rechte, die FiveM-Ressourcen für deinen Server, Exports, Events und die API für eigene Scripts.

Übersicht

Copnet läuft zentral unter https://cop.nexuscase.de – du musst nichts installieren oder hosten. Für deinen Server bekommst du ein eigenes System: eigene Benutzer, Gruppen, Akten, eigener API-Key und ein eigenes Dienstnummern-Präfix (z. B. 0001-2101). Andere Systeme sehen deine Daten nicht.

Erste Schritte

  1. Zugangsdaten bereitlegen: Dienstnummer des System-Admins (z. B. 0001-0000) und das zugehörige Passwort.
  2. Anmelden unter https://cop.nexuscase.de.
  3. API-Key kopieren: App SystemAPI.
  4. FiveM-Ressourcen installieren und den API-Key eintragen (siehe unten und FiveM-Ressourcen).
  5. Gruppen & Benutzer anlegen: Gruppen & Rechte, dann Benutzer.
  6. Optional einrichten: Fivemanage-Key für Beweisfotos, E-Mail-Domain, Abgleich mit deiner FiveM-Datenbank, eigenes Gesetzbuch (Systemeinstellungen).

API-Key eintragen

Der Key kommt in diese drei Dateien – alle werden nur auf dem Server geladen:

copnet-dispatch/config_server.lua · copnet-camera/config_server.lua
Config.ApiKey = "DEIN_API_KEY"
pol-radar/sv_copnet_config.lua
api_key = "DEIN_API_KEY",
💡

Die Adresse https://cop.nexuscase.de ist in allen Ressourcen schon eingetragen (Config.ApiBase, Config.tabletUrl, api_url) – bitte nicht ändern. Du musst nur den API-Key eintragen.

Dein Zugang

  • Der System-Admin (…-0000) hat immer alle Rechte und sieht alle Geheimhaltungsstufen. Er kann nicht gesperrt oder in eine andere Gruppe gesetzt werden.
  • Passwort des System-Admins vergessen oder ändern? Melde dich beim Copnet-Team.
  • Passwörter aller anderen Benutzer setzt du selbst in der App Benutzer (Recht „Benutzer verwalten“).
  • Lege für die Leitung eigene Konten mit einer Admin-Gruppe an, statt den System-Admin-Zugang zu teilen.
  • Beim Aktualisieren der FiveM-Ressourcen deinen API-Key wieder in die neuen Dateien eintragen.
  • Erscheint beim Login „Dieses System ist derzeit gesperrt“, melde dich beim Copnet-Team.

Gruppen & Rechte

Gruppen (Ränge) legst du in der App Benutzer an. Rechte werden pro App vergeben – insgesamt 39 einzelne Rechte.

  • Voraussetzungen werden automatisch gesetzt: „Einträge schreiben“ setzt „Akten ansehen“ mit. Entfernst du „Akten ansehen“, fallen alle Akten-Rechte weg, die darauf aufbauen.
  • Vorlage: Über „Rechte von Gruppe übernehmen …“ kopierst du die Rechte einer anderen Gruppe und passt sie danach frei an.
  • Schnellauswahl: „Nur Lesen“, „Alle“, „Keine“ und ein Schalter pro App.
  • Admin-Gruppen haben automatisch alle Rechte und sehen alle Geheimhaltungsstufen.
  • Wer selbst kein Admin ist, kann nur Gruppen mit Rechten anlegen, die er selbst besitzt.

Rechte nach App

AppRechte
📁 Aktenansehen · anlegen · Personendaten bearbeiten · Einträge schreiben · Einträge anderer bearbeiten · Fahndungen setzen & aufheben · Einträge löschen · Geschwärzte Einträge lesen · Schwärzen & entschwärzen · Akten löschen
🔎 Ermittlungenansehen · eröffnen · bearbeiten (Titel, Beteiligte, Verlauf) · abschließen & wieder öffnen
📸 BeweiseBilder hochladen · Fotos zuordnen · Beweise verwalten (alle sehen, entfernen, löschen)
📝 Einsatzberichteansehen · erstellen · bearbeiten · Geschwärzte lesen · Schwärzen & entschwärzen · löschen
🚨 Dispatchsehen & annehmen · archivieren · löschen
🚔 Fahrzeugregisteransehen · bearbeiten · als gestohlen melden
📢 Ankündigungenschreiben (eigene löschen) · alle verwalten
✉️ E-MailMails schreiben · Verteiler verwalten (empfangen kann jeder)
📅 KalenderTermine erstellen (eigene löschen) · alle Termine verwalten
📜 GesetzbuchGesetze bearbeiten (lesen kann jeder)
📄 VorlagenGlobale Vorlagen verwalten (eigene kann jeder anlegen)
👥 Benutzer & GruppenBenutzer verwalten · Gruppen & Rechte verwalten

Benutzer & Dienstnummern

Benutzer legst du in der App Benutzer an: Name, Nummer, Gruppe, Geheimhaltungsstufe und Passwort (ein sicheres Passwort kann generiert werden).

  • Die Dienstnummer besteht aus System-Präfix und Nummer: Präfix 0001 + Nummer 2101 ergibt 0001-2101. Damit melden sich Benutzer an.
  • Sperren beendet sofort alle Anmeldungen des Benutzers.
  • „Auf diesem Gerät angemeldet bleiben“ speichert nur ein widerrufbares Token, nie das Passwort.

Geheimhaltungsstufen

Stufen aufsteigend: OFFENVS-NfDVS-VERTRAULICHGEHEIMSTRENG GEHEIM. Jeder Benutzer hat eine Stufe.

  • Ermittlungen und Akten-Einträge bekommen beim Erstellen eine Stufe – höchstens die eigene.
  • Ermittlungen über der eigenen Stufe sind unsichtbar (auch ihre Beweisfotos).
  • Akten-Einträge über der eigenen Stufe erscheinen als „Verschlusssache“. Titel, Text, Paragrafen und Fotos bleiben verborgen, die Fahndung bleibt sichtbar.
  • Admins sehen alles.

Systemeinstellungen

In der App System (nur für den System-Admin):

BereichWofür
APISystem-API-Key für alle FiveM-Ressourcen. Kann neu erzeugt werden – danach in allen config_server.lua bzw. sv_copnet_config.lua ersetzen.
DatenbankZugang zur Datenbank deines FiveM-Servers und Abgleich. Presets für ESX und QBCore oder eigene Tabellen/Spalten. Übernimmt Personen als Akten und Fahrzeuge ins Fahrzeugregister.
BeweiseFivemanage-API-Key für Beweisfotos (Bilder liegen bei Fivemanage, Copnet speichert nur den Link).
E-MailDomain für interne Adressen, z. B. lspd.govlena.weiss@lspd.gov. Es werden keine echten E-Mails verschickt.
🗄️

Datenbank-Abgleich: Copnet liest deine FiveM-Datenbank über das Internet. Sie muss daher von außen erreichbar sein. Lege dafür einen eigenen Datenbank-Benutzer mit reinen Leserechten an – Copnet schreibt nichts in deine Datenbank.

Ingame-Verknüpfung

Damit Dispatch-Routen, Dienststatus und Kamera-Fotos beim richtigen Benutzer landen, muss der Spieler mit seinem Copnet-Konto verknüpft sein.

  1. Ingame das Tablet öffnen (Standard F6).
  2. Mit Dienstnummer und Passwort anmelden.
  3. Copnet verknüpft den Spieler automatisch über seine FiveM-Lizenz. Die Kachel „Dienststatus“ zeigt danach Job und Dienst an.

Wer das Recht „Benutzer verwalten“ hat, kann Benutzer auch in der App Benutzer mit einem Spieler verknüpfen, der gerade online ist.

🔒

Die Verknüpfung läuft über ein kurzlebiges Token, das Copnet nur für den gerade angemeldeten Benutzer ausstellt. Spieler können keine fremden Konten verknüpfen.

FiveM-Ressourcen

server.cfg

server.cfg
# Framework/Inventar zuerst (z. B. es_extended oder qb-core, ox_inventory)
ensure screenshot-basic
ensure pol-tablet
ensure copnet-dispatch
ensure copnet-camera
ensure pol-radar
⚠️

Ordnernamen nicht ändern. Exports und Events werden über den Ressourcennamen angesprochen, z. B. exports['copnet-dispatch']. Wer umbenennt, muss alle Aufrufe anpassen.

Gemeinsame Einstellungen

  • API-Key steht immer in einer serverseitigen Datei (config_server.lua bzw. sv_copnet_config.lua) und wird nie an Spieler ausgeliefert. Die Adresse von Copnet ist dort bereits eingetragen.
  • Polizei-Jobs (Standard { "police" }) steuern, wer Dispatches bekommt und die Kamera nutzen darf. Erkannt werden ESX- und QBCore-Jobs inkl. onduty.

pol-tablet

Öffnet Copnet ingame als Tablet (NUI mit eingebetteter Webseite), spielt eine Tablet-Animation ab und übergibt Dienststatus und Spielerliste an Copnet.

Config config.lua

OptionStandardBeschreibung
Config.tabletUrl"https://cop.nexuscase.de"Adresse der Copnet-App.
Config.key"F6"Standard-Taste (ingame umbelegbar).
Config.scale1.3Größe des Tablets (0.6 – 2.0).
Config.policeJobs{ "police" }Jobs, die als Polizei gelten (Dienststatus).

Befehle & Tasten

BefehlBeschreibung
copnet_tablet_toggleTablet öffnen/schließen, per Tastenbelegung „Copnet Tablet öffnen/schließen“ (Standard F6).
/copnet_tablet_scale 1.2Größe einstellen (0.6 – 2.0), wird pro Spieler gespeichert. Ohne Wert: aktuelle Größe anzeigen.

Events

EventSeiteBeschreibung
copnet:tabletOpenClientTablet öffnen
copnet:tabletCloseClientTablet schließen
copnet:tabletToggleClientÖffnen bzw. schließen

Tablet als Item öffnen

Server – QBCore
local QBCore = exports['qb-core']:GetCoreObject()

QBCore.Functions.CreateUseableItem('police_tablet', function(source)
    TriggerClientEvent('copnet:tabletOpen', source)
end)
Server – ESX
ESX.RegisterUsableItem('police_tablet', function(source)
    TriggerClientEvent('copnet:tabletOpen', source)
end)
Client – aus einem anderen Script
TriggerEvent('copnet:tabletToggle')

Nachrichten zwischen Tablet und Copnet (NUI)

Nur relevant, wenn du das Tablet selbst anpasst. Die Copnet-Seite kommuniziert per postMessage mit dem Tablet-Rahmen:

NachrichtRichtungZweck
copnet-dutyTablet → CopnetJob, Dienst, Polizei ja/nein, Server-ID
copnet-playersTablet → CopnetOnline-Spielerliste (für Verknüpfung)
copnet-userCopnet → TabletLink-Token nach dem Login (Verknüpfung)
copnet-waypointCopnet → TabletWegpunkt setzen (x, y, z)
copnet-request-duty / copnet-request-playersCopnet → TabletDaten anfordern
copnet-close-tabletCopnet → TabletTablet schließen

copnet-dispatch

Schickt Dispatches an Copnet, alarmiert Polizisten im Dienst, synchronisiert Online-Spieler und setzt Routen, die in Copnet angenommen wurden.

Ablauf

  1. Ein Script meldet einen Einsatz (Export oder Event).
  2. Copnet speichert den Dispatch. Alle Polizisten im Dienst bekommen eine Meldung und haben 7 Sekunden, um mit ENTER anzunehmen (setzt Wegpunkt).
  3. In der App Dispatch sehen Beamte alle offenen Einsätze. „Route setzen“ legt den Wegpunkt ingame beim verknüpften Beamten.
  4. Beim Archivieren wird die Route bei allen Beteiligten entfernt.

Config

OptionDateiStandardBeschreibung
Config.ApiKeyconfig_server.luaDein API-Key (System › API)
Config.ApiBaseconfig_server.lua"https://cop.nexuscase.de/api.php"Bereits eingetragen – nicht ändern
Config.PoliceJobsconfig.lua{ "police" }Jobs, die Dispatches bekommen
Config.PlayerSyncIntervalconfig.lua15000Online-Spieler-Abgleich in ms (min. 5000)
Config.DispatchSyncIntervalconfig.lua10000Abgleich des Dispatch-Zählers in ms (min. 5000)
Config.RouteSyncIntervalconfig.lua3000Abruf neuer Routen in ms (min. 2000)
Config.DispatchCooldownconfig.lua10000Mindestabstand zwischen zwei Dispatches eines Spielers (Spam-Schutz, gilt nur für Client-Events)
Config.Debugconfig.luafalseDebug-Ausgaben und Testbefehl /test-dispatch

Dispatch senden

Export Server

Lua
exports['copnet-dispatch']:SendDispatch(payload)

Event vom Client oder Server

Lua
-- Client: Absender wird automatisch auf den Spielernamen gesetzt, Cooldown aktiv
TriggerServerEvent('copnet:dispatch', payload)

-- Server: ohne Cooldown, created_by frei wählbar
TriggerEvent('copnet:dispatch', payload)

Payload

FeldTypBeschreibung
titlestringTitel, max. 180 Zeichen (Standard „Dispatch“)
messagestringBeschreibung, max. 2000 Zeichen (alternativ info)
codestringFunkcode, z. B. 10-90 (max. 40)
streetstringStraße/Ort (max. 180)
coordsvector3 / tablevector3(x, y, z) oder { x = , y = , z = } – alternativ einzeln x, y, z
created_bystringAbsender (nur serverseitig wirksam, max. 120)
💡

Ohne Koordinaten kann der Dispatch angezeigt, aber keine Route gesetzt werden.

Events an Polizisten Client

EventDatenBeschreibung
copnet:dispatchAlert{ id, title, message, code, street, x, y, z, coords }Neuer Dispatch (nur Polizei im Dienst)
copnet:dispatchCountcountAnzahl offener Dispatches
copnet:dispatchRoute{ id, dispatch_id, x, y, z }Route setzen (aus Copnet angefordert)
copnet:dispatchClearRoute{ id, dispatch_id }Route entfernen (z. B. nach Archivieren)

Eigene Scripts können auf diese Events hören, z. B. für ein eigenes HUD:

Client
AddEventHandler('copnet:dispatchAlert', function(data)
    print(('Neuer Einsatz: %s (%s)'):format(data.title, data.street or '?'))
end)

Befehle & Tasten

BefehlBeschreibung
copnet_accept_dispatchLetzten Dispatch annehmen, Taste „Copnet Dispatch annehmen“ (Standard ENTER, 7 Sekunden Zeit)
/test-dispatchTest-Dispatch an der eigenen Position – nur mit Config.Debug = true

Interne Server-Events

Werden von Tablet und Client genutzt und prüfen selbst, ob der Spieler Polizist im Dienst ist:

  • copnet:ackDispatch – Dispatch als angenommen markieren ({ id })
  • copnet:requestPlayerList – Online-Spielerliste für das Tablet
  • copnet:linkOfficer – Spieler mit Copnet-Konto verknüpfen (nur mit Link-Token)

Dispatch-Beispiele

Ladenraub (Server-Script)

server.lua
-- z. B. im Raub-Script, wenn der Überfall startet
local function alarmPolice(src, storeName)
    local coords = GetEntityCoords(GetPlayerPed(src))
    exports['copnet-dispatch']:SendDispatch({
        title = 'Ladenraub',
        message = ('Stiller Alarm ausgelöst: %s'):format(storeName),
        code = '10-90',
        street = storeName,
        coords = coords,
        created_by = 'Alarmanlage'
    })
end

Schüsse gemeldet (Client-Script)

client.lua
local function reportShots()
    local coords = GetEntityCoords(PlayerPedId())
    local streetHash = GetStreetNameAtCoord(coords.x, coords.y, coords.z)
    TriggerServerEvent('copnet:dispatch', {
        title = 'Schüsse gemeldet',
        message = 'Anwohner melden Schüsse in der Umgebung.',
        code = '10-71',
        street = GetStreetNameFromHashKey(streetHash),
        coords = { x = coords.x, y = coords.y, z = coords.z }
    })
end

Notruf-Befehl /911

server.lua
RegisterCommand('911', function(source, args)
    local text = table.concat(args, ' ')
    if text == '' then return end
    exports['copnet-dispatch']:SendDispatch({
        title = 'Notruf 911',
        message = text,
        code = '911',
        created_by = GetPlayerName(source),
        coords = GetEntityCoords(GetPlayerPed(source))
    })
end, false)

Anderes Dispatch-System weiterleiten

Wenn schon ein anderes Dispatch-Script läuft, leite dessen Meldungen serverseitig zusätzlich an Copnet weiter – dort, wo das Script seinen Alarm erzeugt:

server.lua
-- Beispiel: vorhandene Funktion, die einen Alarm erzeugt
local function onAlert(alert)
    -- … bisheriger Code des Dispatch-Scripts …
    exports['copnet-dispatch']:SendDispatch({
        title = alert.title,
        message = alert.description,
        code = alert.code,
        street = alert.street,
        coords = alert.coords
    })
end
⚠️

Die Feldnamen des anderen Scripts (alert.title usw.) sind nur Beispiele – passe sie an das jeweilige Script an.

copnet-camera

Polizeikamera für Beweisfotos. Fotos werden über den Server an Copnet geschickt, bei Fivemanage gespeichert und erscheinen in der App Beweise des verknüpften Beamten.

📋

Voraussetzungen: screenshot-basic läuft, in Copnet ist unter System › Beweise ein Fivemanage-Key eingetragen und der Spieler ist verknüpft.

Config

OptionStandardBeschreibung
Config.Inventory"ox""ox", "qb", "esx", "custom" oder "none"
Config.ItemName"police_camera"Name des Items
Config.Command"polizeikamera"Zusätzlicher Befehl, leer = aus
Config.PoliceOnly / PoliceJobstrue / { "police" }Nur Polizei im Dienst
Config.ImageQuality0.85JPG-Qualität 0.1 – 1.0
Config.Cooldown3000Mindestabstand zwischen Fotos (ms)
Config.MinFov / MaxFov10.0 / 70.0Zoombereich (Sichtfeld in Grad)
Config.ApiKeyDein API-Key in config_server.lua (Config.ApiBase ist bereits eingetragen)

Item anlegen

ox_inventory/data/items.lua
['police_camera'] = {
    label = 'Polizeikamera',
    weight = 800,
    stack = false,
    consume = 0,
    server = { export = 'copnet-camera.useCamera' }
},
qb-core/shared/items.lua
police_camera = { name = 'police_camera', label = 'Polizeikamera', weight = 800, type = 'item', image = 'police_camera.png', unique = true, useable = true, shouldClose = true, description = 'Kamera für Beweisfotos' },
ESX (SQL)
INSERT INTO items (name, label, weight) VALUES ('police_camera', 'Polizeikamera', 1);
Eigenes Inventar (Config.Inventory = "custom")
-- serverseitig beim Benutzen des Items
exports['copnet-camera']:OpenCamera(source)
-- oder
TriggerEvent('copnet-camera:use', source)

Exports & Events

NameArtBeschreibung
OpenCamera(source)Server-ExportKamera beim Spieler öffnen (prüft Polizei-Job)
useCameraServer-ExportFür ox_inventory (server.export)
copnet-camera:useServer-EventTriggerEvent('copnet-camera:use', source)
copnet-camera:openClient-EventÖffnet den Kamera-Modus (ohne Job-Prüfung – besser OpenCamera nutzen)
copnet-camera:notifyClient-EventMeldung in der Kamera-Oberfläche (message, kind)

Bedienung

TasteAktion
E oder LinksklickFoto aufnehmen
MausradZoom
Backspace, Esc oder RechtsklickKamera beenden

Als Beschreibung wird automatisch die Straße gespeichert. In Copnet lassen sich Fotos danach beschreiben, freigeben und in Akten oder Ermittlungen auswählen. Standardmäßig zeigt die App die letzten 2 Stunden.

pol-radar

Radar und Kennzeichenleser (basiert auf Wraith ARS 2X). Copnet liefert eine BOLO-Liste: Fahrzeuge, die gestohlen gemeldet sind oder deren Halter zur Fahndung steht. Der Kennzeichenleser sperrt bei einem Treffer automatisch.

Copnet-Anbindung sv_copnet_config.lua

sv_copnet_config.lua
COPNET_RADAR = {
    enabled = true,
    api_url = 'https://cop.nexuscase.de/api.php?action=vehicleList&flagged=1', -- nicht ändern
    api_key = 'DEIN_API_KEY',
    interval = 120000 -- alle 2 Minuten abrufen
}

Tasten (Standard)

BefehlTasteBeschreibung
radar_remoteF5Fernbedienung öffnen
radar_fr_ant / radar_bk_antNum 8 / Num 5Antenne vorne/hinten sperren
radar_fr_cam / radar_bk_camNum 9 / Num 6Kennzeichenleser vorne/hinten sperren

Events

  • wk:copnet:updateBolos Client – der Server verteilt die BOLO-Liste an alle.
  • wk:copnet:requestBolos Server – Client fordert die aktuelle Liste an.
  • TogglePlateLock(clientId, cam, beepAudio, boloAudio) Server-Export – Kennzeichenleser sperren (cam = "front" oder "rear").

Alle Exports & Events

NameRessourceArtZweck
SendDispatch(payload)copnet-dispatchExportDispatch senden
copnet:dispatchcopnet-dispatchServer-EventDispatch senden (Client oder Server)
copnet:dispatchAlertcopnet-dispatchClient-EventNeuer Dispatch an Polizei
copnet:dispatchCountcopnet-dispatchClient-EventAnzahl offener Dispatches
copnet:dispatchRoutecopnet-dispatchClient-EventRoute setzen
copnet:dispatchClearRoutecopnet-dispatch, pol-tabletClient-EventRoute entfernen
copnet:ackDispatchcopnet-dispatchServer-EventDispatch annehmen (intern)
copnet:requestPlayerListcopnet-dispatchServer-EventSpielerliste fürs Tablet (intern)
copnet:playerListpol-tabletClient-EventSpielerliste empfangen (intern)
copnet:linkOfficercopnet-dispatchServer-EventKonto verknüpfen (intern)
copnet:tabletOpen / Close / Togglepol-tabletClient-EventTablet steuern
OpenCamera(source)copnet-cameraExportKamera öffnen
useCameracopnet-cameraExportox_inventory-Item
copnet-camera:usecopnet-cameraServer-EventKamera öffnen
copnet-camera:open / notifycopnet-cameraClient-EventKamera-Oberfläche
TogglePlateLock(...)pol-radarExportKennzeichenleser sperren
wk:copnet:updateBolospol-radarClient-EventBOLO-Liste aus Copnet

API für Server-Scripts

Eigene Server-Scripts können Copnet direkt ansprechen – mit dem System-API-Key. Alle Antworten sind JSON: { "ok": true, … } bzw. { "ok": false, "error": "…" }.

Adressehttps://cop.nexuscase.de/api.php?action=<aktion>
MethodePOST mit JSON-Body (Content-Type: application/json)
AnmeldungHeader X-API-Key: <dein Key>
Fehler401 Key fehlt/ungültig · 400 ungültige Eingabe · 404 nicht gefunden · 500 Server-/Datenbankfehler
Lua – Beispiel mit PerformHttpRequest
local API_BASE = 'https://cop.nexuscase.de/api.php'
local API_KEY  = 'DEIN_API_KEY' -- nur serverseitig!

local function copnet(action, payload, cb)
    PerformHttpRequest(API_BASE .. '?action=' .. action, function(status, body)
        local ok, data = pcall(json.decode, body or '')
        if cb then cb(status, ok and data or nil) end
    end, 'POST', json.encode(payload or {}), {
        ['Content-Type'] = 'application/json',
        ['X-API-Key'] = API_KEY
    })
end

copnet('dispatchStats', {}, function(status, data)
    if data and data.ok then print('Offene Dispatches: ' .. data.count) end
end)

Aktionen mit API-Key

AktionParameterAntwort
dispatchCreatetitle*, message, code, street, x/y/z oder coords, created_by{ ok, id }
dispatchStats{ ok, count, max_id } (offene Dispatches)
dispatchAcknowledgeid*, ack_by_name{ ok }
dispatchRouteList{ ok, routes: [{ id, dispatch_id, server_id, license, x, y, z, action }] }
dispatchRouteConsumeid*{ ok } – Route als ausgeliefert markieren
onlinePlayersSyncplayers: [{ id, name, identifiers, job, onduty, isPolice }]{ ok }
vehicleListURL: &flagged=1 (nur gestohlen/Fahndung) oder &q= (Suche){ ok, vehicles: [{ plate, model, color, stolen, first_name, last_name, has_wanted, … }] }
evidenceIngameUploadidentifiers*, image* (Data-URI JPG/PNG/WebP, max. 10 MB), description{ ok, id, officer }
officerLinklink_token*, game_identifier, identifiers{ ok } – nur mit Link-Token aus Copnet

* Pflichtfeld

🔐

Der API-Key gibt Zugriff auf Dispatches, Fahrzeuge und Spielerdaten deines Systems. Verwende ihn nur in serverseitigen Dateien – niemals in client_script, shared_script oder NUI.

Fehlerbehebung

No such export useCamera in resource copnet-camera

ox_inventory findet die Kamera-Ressource nicht.

  1. Steht ensure copnet-camera in der server.cfg? Beim Start muss [copnet-camera] gestartet … in der Konsole stehen.
  2. Heißt der Ordner genau copnet-camera? Sonst in items.lua den echten Ordnernamen verwenden.
  3. Nach Änderungen an items.lua den Server bzw. ox_inventory neu starten.
  4. restart copnet-camera in der Server-Konsole zeigt Fehler beim Laden direkt an.
„Kein API-Key gesetzt – bitte config_server.lua ausfüllen“

In config_server.lua (Dispatch, Kamera) bzw. sv_copnet_config.lua (Radar) den API-Key aus Copnet › System › API eintragen und die Ressource neu starten.

Dispatches kommen ingame nicht an
  • Ist der Spieler im Polizei-Job (Config.PoliceJobs) und im Dienst?
  • Ist in config_server.lua der richtige Config.ApiKey eingetragen und Config.ApiBase unverändert (https://cop.nexuscase.de/api.php)?
  • Config.Debug = true setzen – die Server-Konsole zeigt dann jede API-Antwort, z. B. 401 Ungültiger API-Key.
  • Mit /test-dispatch (nur im Debug-Modus) einen Test auslösen.
„Route setzen“ in Copnet tut ingame nichts
  • Der Beamte muss verknüpft und online sein.
  • Der Dispatch braucht Koordinaten.
  • copnet-dispatch fragt Routen alle Config.RouteSyncInterval ms ab (Standard 3 Sekunden).
Tablet bleibt leer oder lädt nicht
  • Config.tabletUrl muss auf die Copnet-App zeigen und per HTTPS erreichbar sein.
  • Die Seite im normalen Browser öffnen und prüfen, ob sie lädt.
Kamera öffnet sich, aber es entsteht kein Foto
  • screenshot-basic fehlt oder läuft nicht (Meldung in der Server-Konsole und ingame).
  • „Bild-Upload ist noch nicht eingerichtet“: In Copnet › System › Beweise den Fivemanage-Key eintragen.
  • „Spieler ist mit keinem Copnet-Konto verknüpft“: Einmal ingame im Tablet anmelden.
„Keine Berechtigung für diese Aktion.“

Der Gruppe fehlt das passende Recht. In der App Benutzer › Gruppen die Rechte der jeweiligen App prüfen. Die Suche im Rechte-Dialog hilft, z. B. „Fahndung“.

Radar erkennt gesuchte Fahrzeuge nicht
  • COPNET_RADAR.enabled = true und API-Key prüfen, api_url unverändert lassen.
  • Die Liste wird nur alle interval ms geladen (Standard 2 Minuten).
  • Das Fahrzeug muss in Copnet als gestohlen markiert sein oder sein Halter muss eine Fahndung haben.
„Zu viele Fehlversuche“ beim Login

Nach mehreren falschen Passwörtern wird der Login kurz gesperrt. Einige Minuten warten. Ein Admin kann das Passwort in der App Benutzer neu setzen. Für das Passwort des System-Admins melde dich beim Copnet-Team.

Sicherheit

  • API-Key nur in serverseitigen Dateien, nie in client_script, shared_script oder NUI und nie öffentlich teilen. Wurde er geleakt: in Copnet › System › API neu erzeugen und in allen Ressourcen ersetzen.
  • System-Admin-Zugang nicht teilen – für die Leitung eigene Admin-Konten anlegen.
  • Rechte sparsam vergeben: „Benutzer verwalten“ und „Gruppen & Rechte verwalten“ nur für die Leitung.
  • Ausgeschiedene Mitglieder sperren (App Benutzer) – das beendet sofort alle ihre Anmeldungen.
  • Eigene Web-Tools, die mit einer Copnet-Anmeldung arbeiten, müssen den Header X-Requested-With mitschicken (Schutz gegen fremde Seiten). FiveM-Scripts mit API-Key betrifft das nicht.
  • Copnet ist für Roleplay gedacht – keine echten personenbezogenen Daten eintragen.