- Die Scuba-Lampe funktioniert auch OHNE Scuba-Kleidung am Ped. Meine Annahme
aus esx_scuba, das Licht haenge am Kleidungs-Component 8, trifft hier nicht
zu - Kommentare und README entsprechend korrigiert. Die Meldung beim
Einschalten bleibt als Sicherheitsnetz fuer Ped-Models, bei denen die Native
doch nicht anschlaegt
- engineDepthLimit auf 160 m, ingame gemessen statt konservativ geschaetzt
- damagePerTick ueberall auf 0: Tiefenrausch kostet erstmal nur Sicht, Kontrolle
und Luft, kein Leben. In der letzten Stufe wieder aktivierbar
- .github entfernt: die Workflows kamen aus dem Original, liefen gegen Qbox'
Discord und GitHub-Releases und haetten auf Gitea nur ins Leere gefeuert.
Gelintet wird lokal ueber .tools/lint.mjs
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TESTING.md war nicht filterbar, nicht zuweisbar und haette neben den Issues als
zweite Quelle gedriftet. Jetzt ein Issue pro Testbereich mit Labels (test,
prio:kritisch/mittel/niedrig, ungeprueft), plus bug und doku fuer spaeter.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
GTA toetet selbst ab einer bestimmten Tiefe ueber den Wasserdruck - beim U-Boot
bei rund 150 m mit Implosion ab ~168 m, zu Fuss verliert man ebenfalls Leben.
Dagegen hilft kein Atemgas, das ist die Engine.
Deshalb dafuer nur eine Warnung statt eigener Effekte, konservativ auf 130 m mit
20 m Vorwarnung, beides in config.narcosis. Trimix hoert mit 100 m bewusst
darueber auf; dazwischen liegt die Zone, in der keine Ausruestung mehr hilft.
Der genaue Wert fuer Taucher zu Fuss ist nicht belegt und steht als Testpunkt in
TESTING.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Macht ein Tiefenlimit mechanisch statt zur Absprache - und oeffnet die tiefen
Spots fuer den, der die richtige Flasche dabei hat.
Der Grund fuer die realen 40-45 m ist nicht der Druck, sondern der Stickstoff in
der Pressluft: tiefer wirkt er narkotisch, ab ~56 m wird auch der Sauerstoff
giftig. Wer tiefer will, atmet Trimix, wo Helium einen Teil des Stickstoffs
ersetzt. Genau so umgesetzt:
- maxDepth und gas pro Flasche in config/shared.lua; Pressluft 45 m,
neues diving_tank_trimix 100 m
- Darunter Tiefenrausch in drei Stufen: Bildschirmeffekt, Kamerawackeln,
hoeherer Luftverbrauch, in der letzten Stufe Schaden. Schwellen, Effekte,
Staerken und Schaden komplett in config.narcosis
- Vorwarnung 5 m vor der Grenze, Tiefenanzeige im HUD wird rot und pulsiert
- Effekte werden beim Auftauchen, Ablegen, Tod und Resource-Stop aufgeraeumt
- Auswahlmenue zeigt Gas und Tiefengrenze pro Flasche
- Icon fuer die Trimix-Flasche, violett abgesetzt
Keine Dekompression - auf Wunsch bewusst weggelassen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- hudOnlyUnderwater = false: das HUD ist sichtbar sobald die Ausruestung
angelegt ist, nicht erst unter Wasser. Damit laesst sich der Flaschendruck
am Finimeter ablesen, ohne das Inventar zu oeffnen
- depthDecayEnabled = false: die angegebenen 5/10/15/20 Minuten stimmen damit
exakt und bleiben fuer Spieler berechenbar
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nach Bereichen gruppiert, mit Prioritaet und Kennzeichnung dessen, was ohne
laufendes Spiel gar nicht pruefbar war (Scuba-Lampe, IsHudHidden, Sync zu
zweit). Abgehakt ist nur, was tatsaechlich lief.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die Lampen-Phase im Plan beschrieb noch den DrawSpotLight-Eigenbau, und die
offenen Punkte listeten Unsicherheiten (Prop-Name, Leuchtrichtung), die mit der
Umstellung auf die native Scuba-Lampe hinfaellig sind.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
GTA bringt seit v1493 eine eigene Lampe an der Tauchausruestung mit:
SetEnableScubaGearLight(ped, toggle) 0xEE2476B9EE4A094F
IsScubaGearLightEnabled(ped) 0x88274C11CF0D866D
Die sitzt an der richtigen Stelle, leuchtet in Blickrichtung und braucht weder
Prop noch Offsets noch einen Draw-Thread. Damit faellt der komplette
DrawSpotLight-Aufbau weg: Kegelwerte, Farbe, Schatten, Distanzfilter,
Lichter-Limit, die bone-relative Richtungsrechnung und das Sortieren der
Kandidaten pro Frame. client/light.lua schrumpft von ~110 auf ~55 Zeilen.
Gefunden ueber wobozkyng/esx_scuba.
- Der Flag ist ein lokaler Ped-Zustand, der Statebag bleibt also. Gesetzt wird
er per AddStateBagChangeHandler und zusaetzlich alle 500ms nachgezogen, weil
Peds beim Streaming, Respawn und Model-Wechsel neu erzeugt werden
- Die Lampe haengt an der Scuba-Kleidung (Component 8). Das Outfit wird bewusst
nicht angefasst; wer sie nicht traegt, bekommt beim Einschalten eine Meldung
statt stiller Wirkungslosigkeit
- /divelampcheck sagt, ob das aktuelle Outfit eine Lampe hat
- Prop ist jetzt optional und per Default aus
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Offset und Rotation des Lampen-Props waren hart im Code, und die Rotation
(180, 90, 0) war stumpf von der Maske uebernommen - daher stand die Lampe quer
im Gesicht. d4rk_phone haengt sein Prop mit komplett null Offset und Rotation
an, das ist der bessere Ausgangspunkt.
- lampBone, lampPropOffset, lampPropRotation in die Config; Prop und Licht
haengen jetzt am selben Bone, damit der Strahl aus der Lampe kommt
- lampProp = '' erlaubt, dann nur Licht ohne Prop
- Lichtwerte (Farbe, Reichweite, Helligkeit, Kegel) aus d4rk_phone uebernommen
statt neu geraten; lampShadows wie dort auf false
- /divelamp und /divelight stellen beides im laufenden Spiel ein und geben die
Config-Zeile zum Uebernehmen aus (config.debug)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Eine Flasche ohne gesetzte Metadata - aus dem Shop, per AddItem oder per
Admin-Befehl - wurde in getTankList als 0 gelesen. Anlegen scheiterte damit an
"Diese Tauchflasche ist leer!", man haette also erst eine Kartusche verbrauchen
muessen, um ueberhaupt tauchen zu koennen.
Dazu waren sich die beiden Codepfade uneinig: syncTank hat denselben Fall auf
capacity zurueckfallen lassen, also als voll behandelt.
Beide gehen jetzt ueber readOxygen(), gesteuert von shared.newTanksFull
(default true = neue Flasche ist voll).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
diving_gear und diving_fill stammen aus dem Original (Diving Gear / Diving
Tube), neu sind nur die vier Flaschen. Im Original gab es keine
Sauerstoffflasche als Item - die Luft hing an gar nichts.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
128x128 PNG mit transparentem Hintergrund, aus SVG-Quellen per ImageMagick
(librsvg) erzeugt und damit reproduzierbar statt handgemalt.
- Tauchmaske, quer liegende Pressluft-Kartusche mit Manometer, drei
Einzelflaschen und die Doppelflasche fuer XL
- Laufzeit als Zahl auf dem Farbband: ohne die waren die Einzelflaschen bei
Slot-Groesse nur noch an der Bandfarbe zu unterscheiden, im 56px-Test gar
nicht mehr
- Kartusche bewusst liegend statt hochkant, damit sie sich von den Flaschen
abhebt - die erste Fassung las sich wie eine Flasche mit Download-Pfeil
- client.image faellt weg: ox_inventory laedt <imagepath>/<itemname>.png, und
die Dateien heissen genau wie die Items
gen-icons.mjs schreibt zusaetzlich ein Kontrollblatt (Schachbrett, Slot-Groesse,
klein), mit dem die Icons gegengeprueft wurden.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
HUD-Layout symmetrisch: Tiefe links, Luft-Ring mittig, Druck rechts, Lampe
zentriert darunter. Umgestellt auf Grid, damit die drei Werte garantiert auf
einer Mittelachse sitzen und die Lampen-Leiste ohne Ausgleichs-Margins in einer
zweiten Zeile haengt.
README:
- Drei HUD-Renderings (normal, Warnung, kritisch) als SVG. Keine In-Game-Bilder -
hier laeuft kein GTA -, sondern massstabsgetreu aus denselben Werten wie
style.css erzeugt, per docs/gen-hud-svg.mjs reproduzierbar
- Vollstaendige Config-Referenz fuer client.lua und shared.lua
- Item-Tabelle mit Laufzeit, Fuelldruck, Gewicht, dazu die Metadata-Keys und
warum kein decay gesetzt werden darf
- Installation, Bedienung, Exports, Balancing-Hinweis
- Bekannte Unsicherheiten offen benannt
Item-Snippet mit klarem Copy-Paste-Header. Bewusst keine fertige items.lua zum
Ersetzen: die wuerde die restlichen Items des Servers mitloeschen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Druckanzeige:
- pressure * (Restluft / capacity). Bei konstantem Volumen ist der Druck
proportional zur verbliebenen Gasmenge, die lineare Abbildung stimmt also
- Fuelldruck pro Flasche in config/shared.lua, alle bei 300 bar. Dass die grosse
Flasche denselben Druck zeigt wie die kleine ist gewollt - in echt macht das
Volumen die Laufzeit, nicht der Druck
- Unter config.reservePressure (50 bar) rot: in der Tauchpraxis die Schwelle,
ab der man den Aufstieg einleitet
HUD ausblenden fuer Unterwasser-Screenshots. qbx_core hat selbst keinen
HUD-Toggle, es feuert nur hud:client:* an eine separate HUD-Resource - deshalb
drei voneinander unabhaengige Wege:
- IsHudHidden() folgen, greift bei allem was DisplayHud(false) setzt
- eigene Taste, standardmaessig unbelegt
- Export setHudVisible(bool) / isHudVisible() fuer andere Resources
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>