Zum Inhalt springen

Server-Dev / Erweiterung

Diese Seite richtet sich an Server-Entwickler, die HM_ELSPlus erweitern oder in andere Scripts integrieren wollen.

  1. Änderungen in config/*.lua oder Fahrzeug-JSON durchführen.
  2. Im Server els_reload_configs ausführen (ohne kompletten Neustart).
  3. Fahrzeug neu spawnen und Funktionen im Spiel testen.
  4. Bei UI-Problemen /els_editor_fix nutzen.

Die Grundkonfiguration liegt in config/sirens.lua. Dort wählst du zwischen zwei Systemen:

Einfachster Modus — nutzt die Standard-FiveM-Sirenen oder WM-Soundpacks.

ELSPlus.SirenSystem = "WM"
ELSPlus.WM = {
defaultTones = { [1]="SIREN_ALPHA", [2]="SIREN_BRAVO", [3]="SIREN_CHARLIE" },
soundset = "DLC_WMSIRENS_SOUNDSET",
audioBank = "DLC_WMSIRENS\\SIRENPACK_ONE"
}
  • defaultTones: die 3 Töne, die standardmäßig auf Taste 1/2/3 liegen.
  • soundset: das GTA-Soundset (muss zum installierten Mod passen).
  • audioBank: die Audiobank die geladen wird (String, keine Table).

Bei OISS werden Sirenen über benannte Presets konfiguriert. Jedes Preset bündelt Soundset, Audiobank, verfügbare Töne und Horn.

ELSPlus.SirenSystem = "ServerSided"
-- Standard-Preset für neue Fahrzeuge (muss in SirenPresets existieren)
ELSPlus.DefaultPreset = "LSPD Modern"
ELSPlus.SirenPresets = {
["LSPD Modern"] = {
soundset = "oiss_ssa_vehaud_lspd_new_soundset",
audioBank = "DLC_SERVERSIDEAUDIO\\OISS_SSA_VEHAUD_LSPD_NEW",
tones = {
"oiss_ssa_vehaud_lspd_new_siren_adam",
"oiss_ssa_vehaud_lspd_new_siren_boy",
"oiss_ssa_vehaud_lspd_new_siren_charles",
"oiss_ssa_vehaud_lspd_new_siren_david",
"oiss_ssa_vehaud_lspd_new_siren_edward",
},
horn = "oiss_ssa_vehaud_lspd_new_horn",
},
["BCSO Modern"] = {
soundset = "oiss_ssa_vehaud_bcso_new_soundset",
audioBank = "DLC_SERVERSIDEAUDIO\\OISS_SSA_VEHAUD_BCSO_NEW",
tones = { ... },
horn = "oiss_ssa_vehaud_bcso_new_horn",
},
-- weitere Presets: LSSD, SAHP, NOOSE, FIB, RHPD, DPPD, LSIA,
-- LSPP, LSFD, LSCOFD, BCFD, SanFire, SAMS, USFS, Sonstige
-- jeweils in Modern und Vintage Varianten
}

Wichtig:

  • Tonnamen sind department-spezifisch! z.B. oiss_ssa_vehaud_lspd_new_siren_adam (nicht oiss_ssa_vehaud_siren_adam).
  • Jedes Preset hat: soundset, audioBank (String), tones (Array aller Töne), horn.
  • Im Editor wählt der Spieler ein Preset nach Name — die passenden Töne werden automatisch angeboten.
  • ELSPlus.DefaultPreset bestimmt, welches Preset neue Fahrzeuge bekommen.
  • Die OISS-Resource muss gestartet sein (Quelle: github.com/fk-1997/Server-Sided-Sounds-and-Sirens).

Abwärtskompatibilität: ELSPlus.ServerSided wird automatisch aus dem DefaultPreset generiert. Alter Code der ELSPlus.ServerSided.soundset oder .defaultTones liest, funktioniert weiterhin.

In der Fahrzeug-JSON kann pro Fahrzeug ein anderes Preset/Töne gesetzt werden:

{
"spawnName": "police2",
"siren": {
"wmTones": [
"oiss_ssa_vehaud_lspd_new_siren_adam",
"oiss_ssa_vehaud_lspd_new_siren_boy",
"oiss_ssa_vehaud_lspd_new_siren_charles"
],
"tonePresets": ["LSPD Modern", "LSPD Modern", "LSPD Modern"],
"range": 500
}
}
  • wmTones: die 1-3 Tonnamen für die Sirenen-Tasten.
  • tonePresets (nur bei OISS): ordnet jedem Slot das Preset zu (damit der Editor weiß, welches Soundset/Bank geladen werden muss).
  • range: Hörweite in Metern.
  • Ältere Configs mit siren.soundset werden ebenfalls noch unterstützt.

Attachment-Templates werden in config/anbauteile.lua definiert.

Typischer Ablauf:

  1. Neues Template unter ELSPlus.Anbauteile anlegen.
  2. model, label, extras definieren.
  3. Optional flashturn = true setzen (Blau/Orange Umschaltung).
  4. Bei flashturn zusätzlich blauExtra und orangeExtra angeben.
  5. Env-Lights (point/spot) je Extra konfigurieren.

Beispielstruktur:

ELSPlus.Anbauteile.meine_kennleuchte = {
model = "my_beacon_model",
label = "Meine Kennleuchte",
flashturn = true,
blauExtra = 2,
orangeExtra = 1,
extras = {
["1"] = {
patterns = { "rapid", "steady" },
envLights = {
{ type = "point", offset = { 0.0, 0.0, 0.4 }, color = { 0, 0, 255 }, range = 5.0, intensity = 2.0 }
}
}
}
}

Die Einstellung ist pro Fahrzeug in der JSON-Config:

{
"spawnName": "police2",
"noFlash": true
}

Verhalten:

  • noFlash: true alleine reicht nicht.
  • Schutz greift, wenn Blaulicht aktiv ist und noFlash aktiv ist.

HM_ELSPlus stellt Exports bereit, die du direkt in Blitzer- oder Radar-Scripts nutzen kannst:

  • IsNoFlashActive(vehicle) -> true, wenn Blaulicht aktiv und NoFlash gesetzt.
  • IsBlueLightActive(vehicle) -> true, wenn Primary-Licht aktiv.
  • IsElsVehicle(vehicle) -> true, wenn Fahrzeug eine ELS/Attachment-Config hat.
  • HasNoFlashConfig(vehicle) -> true, wenn Config noFlash gesetzt hat.

Minimalbeispiel:

local function sollBlitzen(vehicle)
if GetResourceState("HM_ELSPlus") ~= "started" then
return true
end
if exports["HM_ELSPlus"]:IsNoFlashActive(vehicle) then
return false
end
return true
end

Für Diagnose oder eigene Logik kannst du StateBags direkt lesen:

local state = Entity(vehicle).state
local primary = state["els_primary"] == true
local rearWarning = state["els_rearWarning"] == true
local siren1 = state["els_siren_1"] == true

Hinweis: StateBags zeigen den Live-Zustand, aber nicht die gesamte Fahrzeugkonfiguration.

  • /els_config - Editor öffnen
  • /els_editor_fix - UI zurücksetzen
  • /els_env_debug - Env-Light Debug
  • els_reload_configs - Fahrzeug-Configs neu laden
  • els_debug_layouts - Layouts debuggen
  • Schreibrechte auf config/ korrekt setzen (sonst kein Speichern).
  • Bei neuen Attachment-Modellen sicherstellen, dass Assets/Modelle verfügbar sind.
  • Bei ServerSided-Sirenen prüfen, ob Audio-Resource wirklich gestartet ist.
  • Nach strukturellen Änderungen immer mit mehreren Fahrzeugtypen testen (ELS + Attachment).