Files
d4rk_divegear/config/client.lua
T
D4rkst3randClaude Opus 5 d9643620ff
Lint / Lint Resource (push) Has been cancelled
feat(light): gesyncte Tauchlampe
Licht ist in GTA nie synchronisiert - DrawSpotLight zeichnet nur lokal fuer den
aktuellen Frame. "Gesynct" heisst deshalb: der Zustand wird als Statebag
repliziert und jeder Client zeichnet die Lampen aller Taucher in seiner Naehe
selbst. Muster uebernommen aus d4rk_phone (Statebag, adaptives Polling,
Distanzfilter).

client/light.lua ist ein reiner Renderer ohne gemeinsamen Zustand mit main.lua -
er kommt mit dem Statebag allein aus und kennt weder Ausruestung noch Flasche.

- Richtung ueber zwei bone-relative Punkte am Kopf-Bone statt ueber
  GetEntityForwardVector: beim Tauchen liegt der Ped waagerecht im Wasser, der
  Entity-Forward wuerde stur horizontal leuchten. Die Offsets von
  GetPedBoneCoords sind laut Native-Doku "relative to the bone's rotation",
  die Differenz zweier solcher Punkte enthaelt also den Pitch
- Toggle per lib.addKeybind, Standard L, vom Spieler umlegbar
- Distanzfilter und Limit auf die naechsten N Lampen, Schatten abschaltbar
- Prop-Model wird vorher mit IsModelValid geprueft: lib.requestModel wirft bei
  ungueltigen Models einen Error, der sonst die ganze Ausruestung lahmlegt
- Lampen-Status im HUD

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 23:56:40 +02:00

83 lines
3.3 KiB
Lua

return {
putOnSuitTimeMs = 5000,
takeOffSuitTimeMs = 5000,
refillTankTimeMs = 5000,
--- Sekunden Luft, die pro echter Sekunde verbraucht werden (vor dem Tiefenfaktor).
decayRate = 1.0,
--- Intervall des Watchdogs, der prüft ob die Ausrüstung noch am Ped hängt (ms).
gearWatchdogIntervalMs = 1000,
--- Sekunden, die der Spieler ohne Ausrüstung unter Wasser überlebt (Vanilla-Verhalten).
maxTimeUnderwater = 50.0,
--- Sekunden, sobald die Flasche leer ist. Bewusst kurz: leer tauchen soll wehtun.
maxTimeUnderwaterOutOfAir = 1.0,
--- Ausrüstung beim Tod abnehmen. Die Flasche bleibt mit ihrer Restluft im Inventar.
removeGearOnDeath = true,
--- Restsekunden, bei denen gewarnt wird. Jede Schwelle löst einmal pro Tauchgang aus.
warnAtSeconds = { 60, 30, 10 },
--- Verbrauch steigt mit der Tiefe: faktor = 1 + tiefe / depthDecayReference.
--- Macht die großen Flaschen erst sinnvoll. Auf false = konstanter Verbrauch,
--- dann stimmen die 5/10/15/20 Minuten exakt.
depthDecayEnabled = true,
depthDecayReference = 30.0,
maxDecayFactor = 4.0,
--- NUI-HUD mit Luft und Tiefe. Auf false bleibt die Ausrüstung voll nutzbar,
--- nur ohne Anzeige.
hudEnabled = true,
--- Update-Intervall des HUD (ms). 250 = 4 Updates pro Sekunde, reicht für eine
--- ruhige Anzeige ohne unnötigen NUI-Traffic.
hudUpdateIntervalMs = 250,
--- Ab dieser Tiefe wird die Tiefenanzeige eingefärbt (Meter).
deepWarningDepth = 25.0,
---------------------------------------------------------------------------
-- Taschenlampe
---------------------------------------------------------------------------
--- Taste zum An- und Ausschalten. Der Spieler kann sie in den FiveM-
--- Tastenbelegungen unter "FiveM" umlegen.
lampKey = 'l',
--- Prop am Kopf. Rein optisch - das Licht selbst hängt nicht daran.
--- Ist das Model ungültig, wird nur das Licht gezeichnet und eine Warnung
--- ins Log geschrieben. Alternativen: siehe forge.plebmasters.de/objects
lampProp = 'prop_cs_police_torch',
--- Position des Lichts relativ zum Kopf-Bone (bone-relativ, nicht Weltkoordinaten).
lampOffset = vec3(0.0, 0.15, 0.0),
--- Richtung des Lichtkegels, ebenfalls bone-relativ. Leuchtet der Kegel in die
--- falsche Richtung, hier die Achse tauschen oder das Vorzeichen drehen -
--- welche lokale Achse des Kopf-Bones nach vorne zeigt, hängt am Skelett.
lampDirection = vec3(0.0, 1.0, 0.0),
--- Lichtfarbe als { r, g, b }, 0-255. Leicht kühl für Unterwasser.
lampColour = { 225, 245, 255 },
lampDistance = 30.0, -- Reichweite in Metern
lampBrightness = 6.0, -- Helligkeit
lampRoundness = 1.0, -- Weichzeichnung des Kegelrands
lampRadius = 14.0, -- Öffnungswinkel
lampFalloff = 1.5, -- Abfall zum Rand hin
--- Schatten kosten deutlich Performance. Auf false wird DrawSpotLight statt
--- DrawSpotLightWithShadow benutzt - sieht flacher aus, läuft aber spürbar besser.
lampShadows = true,
--- Ab dieser Entfernung werden fremde Lampen nicht mehr gezeichnet (Meter).
lampDrawDistance = 45.0,
--- Wie viele Lampen gleichzeitig gezeichnet werden. Die nächstgelegenen
--- gewinnen. Schützt vor Frame-Einbrüchen bei Gruppentauchgängen.
lampMaxLights = 4,
}