fix: Erkenntnisse aus dem Ingame-Test
- 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>
This commit is contained in:
@@ -1,31 +0,0 @@
|
||||
name: Lint
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- '**.lua'
|
||||
- '.github/workflows/lint.yml'
|
||||
pull_request_target:
|
||||
paths:
|
||||
- '**.lua'
|
||||
- '.github/workflows/lint.yml'
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint Resource
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
- name: Lint
|
||||
uses: iLLeniumStudios/fivem-lua-lint-action@v2
|
||||
with:
|
||||
capture: "junit.xml"
|
||||
args: "-t --formatter JUnit"
|
||||
extra_libs: ox_lib+mysql+qblocales+qbox+qbox_playerdata+qbox_lib
|
||||
- name: Generate Lint Report
|
||||
if: always()
|
||||
uses: mikepenz/action-junit-report@v4
|
||||
with:
|
||||
report_paths: "**/junit.xml"
|
||||
check_name: Linting Report
|
||||
fail_on_failure: false
|
||||
@@ -169,10 +169,14 @@ FiveM* umlegbar.
|
||||
|---|---|---|
|
||||
| `enabled` | `true` | Komplett abschaltbar |
|
||||
| `warnBeforeMeters` | `5.0` | Vorwarnung so viele Meter vor der Grenze |
|
||||
| `engineDepthLimit` | `130.0` | Tiefe, ab der **das Spiel selbst** über den Wasserdruck tötet — dagegen hilft keine Flasche |
|
||||
| `engineDepthLimit` | `160.0` | Tiefe, ab der **das Spiel selbst** Schluss macht — ingame gemessen, dagegen hilft keine Flasche |
|
||||
| `engineWarnBeforeMeters` | `20.0` | Vorwarnung davor |
|
||||
| `stages` | 3 Stufen | Pro Stufe: `over` (Meter unter der Grenze), `timecycle` + `strength`, `shake` + `shakeIntensity`, `drainFactor`, `damagePerTick` |
|
||||
|
||||
`damagePerTick` steht überall auf `0` — Tiefenrausch kostet also erstmal nur Sicht,
|
||||
Kontrolle und Luft, kein Leben. Wer es härter will, setzt es in der letzten Stufe
|
||||
auf z.B. `2`.
|
||||
|
||||
**HUD**
|
||||
|
||||
| Option | Default | Bedeutung |
|
||||
@@ -239,14 +243,12 @@ Effekte, Stärke, Verbrauchsaufschlag, Schaden. `enabled = false` schaltet es ga
|
||||
|
||||
### Die Grenze der Engine
|
||||
|
||||
Unabhängig von allem hier tötet **GTA selbst** ab einer bestimmten Tiefe über den
|
||||
Wasserdruck — beim U-Boot liegt die Grenze bei rund 150 m mit Implosion ab ~168 m,
|
||||
zu Fuß verliert man ebenfalls Leben. Dagegen hilft kein Atemgas, das ist die
|
||||
Engine und nicht dieses Script.
|
||||
Unabhängig von allem hier ist bei **160 m** Schluss — das macht GTA selbst über den
|
||||
Wasserdruck, dagegen hilft kein Atemgas. Ingame gemessen.
|
||||
|
||||
Deshalb gibt es dafür nur eine Warnung (`engineDepthLimit`, konservativ auf 130 m),
|
||||
und Trimix hört mit 100 m bewusst darüber auf. Der Bereich zwischen den beiden ist
|
||||
die Zone, in der keine Ausrüstung mehr hilft.
|
||||
Deshalb gibt es dafür nur eine Warnung (`engineDepthLimit`, 20 m vorher). Trimix
|
||||
hört mit 100 m bewusst darüber auf; dazwischen liegt die Zone, in der es zwar
|
||||
ungemütlich wird, aber noch nichts tödlich ist.
|
||||
|
||||
## Exports
|
||||
|
||||
@@ -272,11 +274,11 @@ IsScubaGearLightEnabled(ped) -- 0x88274C11CF0D866D
|
||||
Die sitzt an der richtigen Stelle, leuchtet in Blickrichtung und braucht weder
|
||||
Prop noch Offsets noch einen Draw-Thread.
|
||||
|
||||
> **Voraussetzung:** Die Lampe hängt an der echten **Scuba-Kleidung** des Peds
|
||||
> (Component 8). Trägt der Spieler die nicht, tut die Native nichts. Diese
|
||||
> Resource fasst das Outfit bewusst **nicht** an — das gehört ins Kleidungs-System.
|
||||
> Beim Einschalten ohne passendes Outfit gibt es eine Meldung statt stiller Wirkungslosigkeit.
|
||||
> Mit `debug = true` sagt `/divelampcheck`, ob das aktuelle Outfit eine Lampe hat.
|
||||
Sie funktioniert **auch ohne Scuba-Kleidung** am Ped — ingame bestätigt. Der
|
||||
Hinweis in [esx_scuba](https://github.com/wobozkyng/esx_scuba), das Licht hänge am
|
||||
Kleidungs-Component, trifft hier also nicht zu. Das Outfit wird nicht angefasst.
|
||||
Sollte die Native bei einem Ped-Model doch nicht anschlagen, gibt es beim
|
||||
Einschalten eine Meldung, und `/divelampcheck` (mit `debug = true`) sagt es direkt.
|
||||
|
||||
Der Flag ist ein **lokaler** Ped-Zustand und wird nicht von selbst repliziert.
|
||||
Deshalb läuft der Zustand über einen Statebag
|
||||
@@ -287,6 +289,9 @@ Respawn und Model-Wechsel neu erzeugt werden und den Flag dabei verlieren.
|
||||
|
||||
## Entwicklung
|
||||
|
||||
Es gibt bewusst keine CI: die Workflows aus dem Original liefen gegen Qbox'
|
||||
Discord und GitHub-Releases, und Linting passiert lokal vor dem Commit.
|
||||
|
||||
```bash
|
||||
node ../.tools/lint.mjs # Lua-Lint, CfxLua-tauglich
|
||||
node ../.tools/nui-preview.mjs nui # HUD im Browser anschauen
|
||||
|
||||
+3
-3
@@ -9,9 +9,9 @@ local config = require 'config.client'
|
||||
-- Die sitzt an der richtigen Stelle, leuchtet in Blickrichtung und braucht weder
|
||||
-- Prop noch Offsets noch einen eigenen Draw-Thread.
|
||||
--
|
||||
-- WICHTIG: Die Lampe hängt an der echten Scuba-Kleidung des Peds (Component 8).
|
||||
-- Trägt der Spieler die nicht, tut die Native nichts - dieses Script fasst das
|
||||
-- Outfit bewusst nicht an.
|
||||
-- Sie funktioniert auch ohne Scuba-Kleidung am Ped - ingame bestätigt. Der
|
||||
-- Hinweis in wobozkyng/esx_scuba, das Licht haenge am Kleidungs-Component, gilt
|
||||
-- fuer diesen Fall also nicht.
|
||||
--
|
||||
-- Der Flag ist ein lokaler Ped-Zustand und wird nicht von selbst repliziert.
|
||||
-- Deshalb wie vorher der Umweg über den Statebag: jeder Client setzt den Flag für
|
||||
|
||||
+3
-2
@@ -204,8 +204,9 @@ local function setLamp(state, notifyIfUnavailable)
|
||||
-- Lokal sofort setzen statt auf den Abgleich-Thread zu warten.
|
||||
SetEnableScubaGearLight(cache.ped, state)
|
||||
|
||||
-- Die Spiel-Lampe hängt an der Scuba-Kleidung (Component 8). Fehlt die, tut
|
||||
-- die Native nichts - ohne Hinweis sieht das nach einem kaputten Keybind aus.
|
||||
-- Sicherheitsnetz: die Native greift normalerweise auch ohne Scuba-Kleidung,
|
||||
-- aber falls sie bei einem Ped-Model doch nicht anschlägt, ist eine Meldung
|
||||
-- besser als ein scheinbar kaputter Keybind.
|
||||
if state and notifyIfUnavailable and not IsScubaGearLightEnabled(cache.ped) then
|
||||
exports.qbx_core:Notify(locale('error.no_lamp_on_outfit'), 'error')
|
||||
end
|
||||
|
||||
+7
-8
@@ -76,10 +76,8 @@ return {
|
||||
--- Tiefe, ab der das Spiel selbst den Spieler über den Wasserdruck tötet.
|
||||
--- Dagegen hilft keine Flasche - das ist die Engine, nicht dieses Script.
|
||||
--- Deshalb hier nur eine Warnung, kein eigener Effekt.
|
||||
--- Referenz: das U-Boot geht bis ~150 m und implodiert ab ~168 m; zu Fuß
|
||||
--- verliert man ebenfalls Leben, sobald es zu tief wird. Der Wert ist
|
||||
--- bewusst konservativ - notfalls anpassen.
|
||||
engineDepthLimit = 130.0,
|
||||
--- 160 m ist ingame gemessen: darunter ist Schluss.
|
||||
engineDepthLimit = 160.0,
|
||||
engineWarnBeforeMeters = 20.0,
|
||||
|
||||
--- Stufen, sobald die Grenze überschritten ist. `over` = Meter unterhalb
|
||||
@@ -114,7 +112,9 @@ return {
|
||||
over = 20.0,
|
||||
timecycle = 'drug_wobbly', strength = 1.0,
|
||||
shake = 'DRUNK_SHAKE', shakeIntensity = 0.8,
|
||||
drainFactor = 3.0, damagePerTick = 2
|
||||
-- Schaden bewusst auf 0: erstmal nur Effekte und höherer
|
||||
-- Verbrauch. Auf z.B. 2 setzen, wenn es härter sein soll.
|
||||
drainFactor = 3.0, damagePerTick = 0
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -135,9 +135,8 @@ return {
|
||||
--- v1493). Sie sitzt an der richtigen Stelle und leuchtet in Blickrichtung -
|
||||
--- deshalb gibt es hier weder Offsets noch Farb- und Kegelwerte.
|
||||
---
|
||||
--- ACHTUNG: Sie hängt an der echten Scuba-Kleidung des Peds (Component 8).
|
||||
--- Trägt der Spieler die nicht, passiert nichts. Diese Resource fasst das
|
||||
--- Outfit bewusst nicht an - das macht bei Bedarf das Kleidungs-System.
|
||||
--- Sie funktioniert auch ohne Scuba-Kleidung am Ped (ingame bestätigt), das
|
||||
--- Outfit wird also nicht angefasst.
|
||||
|
||||
--- Wie oft der Lampen-Zustand auf die Peds in der Nähe nachgezogen wird (ms).
|
||||
--- Nötig, weil Peds beim Streaming, Respawn und Model-Wechsel neu erzeugt
|
||||
|
||||
Reference in New Issue
Block a user