FVS-PC
Fraktions- & Unternehmens-PC-System. PCs sind feste Monitore in der Welt — Zugang nur für Mitglieder des zugeordneten Jobs/der Fraktion, Login passwortlos über automatische Spieler-Erkennung. Mit DevStore, Apps, Firmen-Verwaltung und optionalem USB-Hack-Verbrechen.
Überblick
Ein PC ist ein ausgewählter Monitor in der Welt. Spieler stellen sich davor, drücken
E und werden – sofern ihr Job/Grade Zugang hat – automatisch eingeloggt.
users-Tabelle.Voraussetzungen
job / job_grade (ESX-Standard).tablet-license.devhive.app erreichen.Config.PC.tabletResource ('sh_fvs_tablet').
0 · Build.BAT / build.sh ausführen
Einmalig die Build-Dateien ausführen. Damit werden die benötigten Node.js-Abhängigkeiten installiert.
1 · SQL installieren
mysql -u DEIN_USER -p DEINE_DB < sh_fvs_pc/sql/fvs_pc.sql
fvspcschema kann es jederzeit manuell nachgezogen werden.
2 · server.cfg
ensure oxmysql ensure sh_fvs_pc # NUI-DevTools nur auf Test-Servern: setr ui_useNuiDevTools "true" # ----- Admin-Rechte (ACE) ----- add_ace group.admin fvs.pc.admin allow
3 · Config & Job-Anbindung
In sh_fvs_pc/shared/config.lua – die wichtigsten Werte:
| Key | Standard | Bedeutung |
|---|---|---|
Config.PC.interactKey | 38 (E) | Taste zum Nutzen des PCs |
Config.PC.interactDistance | 2.0 | Reichweite in Metern |
Config.PC.adminAce | 'fvs.pc.admin' | ACE-Recht für /fvspc… |
Config.PC.companyModeMinGrade | 95 | Grade ab dem der Unternehmensmodus öffnet |
Config.PC.managementMinGrade | 95 | Grade für den Verwaltungs-PC |
Config.PC.tabletResource | 'sh_fvs_tablet' | Lizenz-Quelle, falls PC keine eigene hat |
Config.DeviceIdPrefix | 'PC' | Präfix der Terminal-IDs |
Config.PlayerIdentifier | 'char' | Bindung (char = multichar) |
Job-System (Config.Jobs)
Der PC liest Job & Grade direkt aus der users-Tabelle. Standard-Spalten:
job, job_grade, identifier. Ausgestempelte werden über
offDutyPrefix = 'off_' erkannt (z. B. off_police zählt als
police), unemployed erhält keinen Zugang.
4 · PC-Terminal anlegen
/fvspcadd <job> [job2 ...] [grade:N] [label:Name]
Legt an deiner aktuellen Position ein Terminal an. Zugriff erhalten die angegebenen Jobs (optional ab grade:N).
/fvspcmaster # nächstgelegenes Terminal als Verwaltungs-PC (Toggle)
/fvspclist # alle Terminals auflisten
5 · Lizenz
Ist das Tablet bereits lizenziert, übernimmt der PC die Lizenz automatisch. Andernfalls eine eigene Lizenz in der Server-Konsole setzen:
pcfvs setlicense FVSOS:Ab12Cd34Ef56Gh78Ij90 pcfvs status pcfvs showurls
POST /admin/licenses) – siehe FVS-Tablet · Lizenz.
Leitstelle / LiveMap (optional)
Die Leitstelle-App (Leaflet-Karte) zeigt alle Dienstfahrzeuge der eigenen Fraktion live auf einer Karte. Am PC-Terminal ist sie job-gated (das Terminal selbst ist bereits job-beschränkt). Installiert wird sie über den DevStore.
Der Server-Tracker nutzt GetAllVehicles() + Entity-Natives – ohne OneSync bleibt die Karte leer.
sh_fvs_pc/web/public/map/{z}/{x}/{y}.png
Alternativ in web/src/lib/leitstelle.ts die Konstante TILE_URL auf eine CDN-/Server-URL setzen.
cd sh_fvs_pc/web npm install npm run build
Im DevStore die App Leitstelle installieren. Test ohne UI:
/leitstelle # abonnieren /fvsunits # Einheiten-Liste
Config.Leitstelle (enabled, tickMs,
requireGpsMeta, Duty-Resolver) ist identisch zum Tablet – Details siehe
FVS-Tablet · Leitstelle.
CCTV-Überwachung
Komplettes Kamera-Überwachungssystem: Kameras als Items platzieren, vorhandene Map-Kameras
importieren, live über die CCTV-App beobachten – inklusive Sabotage (Blackout)
und Alarm. Die gesamte Ingame-Logik läuft im PC-Script (sh_fvs_pc);
das Tablet zeigt nur die App. Standardmäßig auf den Job police beschränkt.
Kamera-Items (4 Stufen)
| Item | Stufe | Qualität | Besonderheit |
|---|---|---|---|
cctv_cam_low | Low | low | – |
cctv_cam_sd | SD | sd | – |
cctv_cam_high | High | hd | – |
cctv_cam_360 | 360° | hd | Rundumsicht |
Beim Benutzen öffnet sich das Platzier-Tool: Mausrad/Pfeiltasten wechselt die Prop-Variante, [E] platziert (verbraucht 1 Item), [ESC] bricht ab.
🟦 ox_inventory — data/items.lua
['cctv_cam_low'] = { label = 'Überwachungskamera (Low)', weight = 250, stack = true, close = true }, ['cctv_cam_sd'] = { label = 'Überwachungskamera (SD)', weight = 250, stack = true, close = true }, ['cctv_cam_high'] = { label = 'Überwachungskamera (HD)', weight = 300, stack = true, close = true }, ['cctv_cam_360'] = { label = 'Überwachungskamera (360°)', weight = 350, stack = true, close = true },
🟩 ESX Legacy / core_inventory — DB items-Tabelle
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('cctv_cam_low', 'Überwachungskamera (Low)', 250, 0, 1), ('cctv_cam_sd', 'Überwachungskamera (SD)', 250, 0, 1), ('cctv_cam_high', 'Überwachungskamera (HD)', 300, 0, 1), ('cctv_cam_360', 'Überwachungskamera (360°)',350, 0, 1);
RegisterUsableItem /
QBCore CreateUseableItem). Bei ox_inventory genügt die Item-Definition.
Datenbank
Die Tabelle fvs_cctv_cameras legt der PC beim Start automatisch an und rüstet fehlende
Spalten (z. B. is360) selbst nach. Für eine manuelle Migration liegt
sql/migrations/002_cctv_items_is360.sql bei.
Map-Kameras importieren
In der Nähe vorhandener Kamera-Props stehen und ausführen (ACE command.cctvimport):
/cctvimport # Standard-Radius (150 m) /cctvimport 300 # eigener Radius
Qualität und 360° werden automatisch erkannt; bereits vorhandene Kameras werden übersprungen.
Wichtige Config (Config.Cctv)
| Key | Standard | Bedeutung |
|---|---|---|
jobs | { 'police' } | Jobs, die die App sehen/nutzen dürfen |
manageJobs | { 'police' } | Jobs, die Kameras platzieren/entfernen dürfen |
importAdminAce | 'command.cctvimport' | ACE für den Map-Import |
adjustAce | 'command.cctvadjust' | ACE für den Kamera-Justier-Modus |
blackout.adminCommand | 'cctvblackout' | Befehl für manuellen Blackout |
blackout.cutItem | 'hacking_device' | Item zum Kappen der Kabel |
alarm.enabled | true | Alarm bei Sabotage |
nightvision.enabled | true | Nachtsicht (HD-Kameras, 21–6 Uhr) |
Admin-Befehle
| Befehl | ACE | Wirkung |
|---|---|---|
/cctvimport [radius] | command.cctvimport | Vorhandene Map-Kameras importieren |
/cctvblackout [minuten] | command.cctvblackout | Kameras manuell ausschalten (Blackout) |
hacking_device benötigt – ggf. in deinem Inventar anlegen.
USB-Hack (optional)
Ein mehrstufiges Eindring-Verbrechen: rohen USB-Stick beschaffen → an einem festen Rig
entschlüsseln → am Ziel-Terminal hacken. Erfolg gibt eine zeitlich begrenzte
Eindringling-Sitzung. Steuerung über Config.Hack.
| Key | Standard | Bedeutung |
|---|---|---|
Config.Hack.enabled | true | Hack-System an/aus |
Config.Hack.itemName | 'usb_hack' | Inventar-Item (roher USB-Stick) |
Config.Hack.sessionDuration | 240 | Sekunden Zugriff nach erfolgreichem Hack |
Config.Hack.alertJob | 'police' | Job, das den Alarm + Blip erhält |
Config.Hack.minCops | 2 / 3 / 4 | Mindest-Cops im Dienst je Phase |
usb_hack in deinem
Inventar existieren. Die festen Entschlüsselungs-Rigs werden per Admin-Befehl
(ACE fvs.pc.admin) in der Welt platziert.
Befehlsliste
fvs.pc.admin und laufen
über die Server-Konsole (ohne /) oder F8/Chat (mit /).
Terminal-Verwaltung
| Befehl | Beschreibung |
|---|---|
fvspcadd <job> [grade:N] [label:Name] | Terminal an aktueller Position anlegen |
fvspcremove | Nächstgelegenes Terminal (≤3 m) entfernen |
fvspcunlock | Sperre des nächstgelegenen Terminals aufheben |
fvspcmaster | Terminal als Verwaltungs-PC markieren (Toggle) |
fvspclist | Alle angelegten Terminals auflisten |
fvspcwhoami | Diagnose: Identifier des Spielers + users-Treffer |
fvspcschema | DB-Schema manuell einspielen |
Lizenz / FVS (pcfvs)
| Befehl | Beschreibung |
|---|---|
pcfvs setlicense XXXX:YYYY | Lizenz setzen + verifizieren + speichern |
pcfvs status | Lizenz-Status anzeigen |
pcfvs verify | Bestehende Lizenz neu verifizieren |
pcfvs showkey | Gespeicherten License-Key anzeigen |
pcfvs showurls | Geladene URLs anzeigen |
pcfvs clear | Lizenz entfernen |