diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index bdd0da1..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -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 diff --git a/README.md b/README.md index 1eac12a..c4cec6b 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/client/light.lua b/client/light.lua index 568d4d1..796bc68 100644 --- a/client/light.lua +++ b/client/light.lua @@ -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 diff --git a/client/main.lua b/client/main.lua index 04c1393..766226c 100644 --- a/client/main.lua +++ b/client/main.lua @@ -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 diff --git a/config/client.lua b/config/client.lua index 78fad58..e19ac22 100644 --- a/config/client.lua +++ b/config/client.lua @@ -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