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 |
|
| `enabled` | `true` | Komplett abschaltbar |
|
||||||
| `warnBeforeMeters` | `5.0` | Vorwarnung so viele Meter vor der Grenze |
|
| `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 |
|
| `engineWarnBeforeMeters` | `20.0` | Vorwarnung davor |
|
||||||
| `stages` | 3 Stufen | Pro Stufe: `over` (Meter unter der Grenze), `timecycle` + `strength`, `shake` + `shakeIntensity`, `drainFactor`, `damagePerTick` |
|
| `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**
|
**HUD**
|
||||||
|
|
||||||
| Option | Default | Bedeutung |
|
| Option | Default | Bedeutung |
|
||||||
@@ -239,14 +243,12 @@ Effekte, Stärke, Verbrauchsaufschlag, Schaden. `enabled = false` schaltet es ga
|
|||||||
|
|
||||||
### Die Grenze der Engine
|
### Die Grenze der Engine
|
||||||
|
|
||||||
Unabhängig von allem hier tötet **GTA selbst** ab einer bestimmten Tiefe über den
|
Unabhängig von allem hier ist bei **160 m** Schluss — das macht GTA selbst über den
|
||||||
Wasserdruck — beim U-Boot liegt die Grenze bei rund 150 m mit Implosion ab ~168 m,
|
Wasserdruck, dagegen hilft kein Atemgas. Ingame gemessen.
|
||||||
zu Fuß verliert man ebenfalls Leben. Dagegen hilft kein Atemgas, das ist die
|
|
||||||
Engine und nicht dieses Script.
|
|
||||||
|
|
||||||
Deshalb gibt es dafür nur eine Warnung (`engineDepthLimit`, konservativ auf 130 m),
|
Deshalb gibt es dafür nur eine Warnung (`engineDepthLimit`, 20 m vorher). Trimix
|
||||||
und Trimix hört mit 100 m bewusst darüber auf. Der Bereich zwischen den beiden ist
|
hört mit 100 m bewusst darüber auf; dazwischen liegt die Zone, in der es zwar
|
||||||
die Zone, in der keine Ausrüstung mehr hilft.
|
ungemütlich wird, aber noch nichts tödlich ist.
|
||||||
|
|
||||||
## Exports
|
## Exports
|
||||||
|
|
||||||
@@ -272,11 +274,11 @@ IsScubaGearLightEnabled(ped) -- 0x88274C11CF0D866D
|
|||||||
Die sitzt an der richtigen Stelle, leuchtet in Blickrichtung und braucht weder
|
Die sitzt an der richtigen Stelle, leuchtet in Blickrichtung und braucht weder
|
||||||
Prop noch Offsets noch einen Draw-Thread.
|
Prop noch Offsets noch einen Draw-Thread.
|
||||||
|
|
||||||
> **Voraussetzung:** Die Lampe hängt an der echten **Scuba-Kleidung** des Peds
|
Sie funktioniert **auch ohne Scuba-Kleidung** am Ped — ingame bestätigt. Der
|
||||||
> (Component 8). Trägt der Spieler die nicht, tut die Native nichts. Diese
|
Hinweis in [esx_scuba](https://github.com/wobozkyng/esx_scuba), das Licht hänge am
|
||||||
> Resource fasst das Outfit bewusst **nicht** an — das gehört ins Kleidungs-System.
|
Kleidungs-Component, trifft hier also nicht zu. Das Outfit wird nicht angefasst.
|
||||||
> Beim Einschalten ohne passendes Outfit gibt es eine Meldung statt stiller Wirkungslosigkeit.
|
Sollte die Native bei einem Ped-Model doch nicht anschlagen, gibt es beim
|
||||||
> Mit `debug = true` sagt `/divelampcheck`, ob das aktuelle Outfit eine Lampe hat.
|
Einschalten eine Meldung, und `/divelampcheck` (mit `debug = true`) sagt es direkt.
|
||||||
|
|
||||||
Der Flag ist ein **lokaler** Ped-Zustand und wird nicht von selbst repliziert.
|
Der Flag ist ein **lokaler** Ped-Zustand und wird nicht von selbst repliziert.
|
||||||
Deshalb läuft der Zustand über einen Statebag
|
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
|
## 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
|
```bash
|
||||||
node ../.tools/lint.mjs # Lua-Lint, CfxLua-tauglich
|
node ../.tools/lint.mjs # Lua-Lint, CfxLua-tauglich
|
||||||
node ../.tools/nui-preview.mjs nui # HUD im Browser anschauen
|
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
|
-- Die sitzt an der richtigen Stelle, leuchtet in Blickrichtung und braucht weder
|
||||||
-- Prop noch Offsets noch einen eigenen Draw-Thread.
|
-- Prop noch Offsets noch einen eigenen Draw-Thread.
|
||||||
--
|
--
|
||||||
-- WICHTIG: Die Lampe hängt an der echten Scuba-Kleidung des Peds (Component 8).
|
-- Sie funktioniert auch ohne Scuba-Kleidung am Ped - ingame bestätigt. Der
|
||||||
-- Trägt der Spieler die nicht, tut die Native nichts - dieses Script fasst das
|
-- Hinweis in wobozkyng/esx_scuba, das Licht haenge am Kleidungs-Component, gilt
|
||||||
-- Outfit bewusst nicht an.
|
-- fuer diesen Fall also nicht.
|
||||||
--
|
--
|
||||||
-- Der Flag ist ein lokaler Ped-Zustand und wird nicht von selbst repliziert.
|
-- 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
|
-- 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.
|
-- Lokal sofort setzen statt auf den Abgleich-Thread zu warten.
|
||||||
SetEnableScubaGearLight(cache.ped, state)
|
SetEnableScubaGearLight(cache.ped, state)
|
||||||
|
|
||||||
-- Die Spiel-Lampe hängt an der Scuba-Kleidung (Component 8). Fehlt die, tut
|
-- Sicherheitsnetz: die Native greift normalerweise auch ohne Scuba-Kleidung,
|
||||||
-- die Native nichts - ohne Hinweis sieht das nach einem kaputten Keybind aus.
|
-- 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
|
if state and notifyIfUnavailable and not IsScubaGearLightEnabled(cache.ped) then
|
||||||
exports.qbx_core:Notify(locale('error.no_lamp_on_outfit'), 'error')
|
exports.qbx_core:Notify(locale('error.no_lamp_on_outfit'), 'error')
|
||||||
end
|
end
|
||||||
|
|||||||
+7
-8
@@ -76,10 +76,8 @@ return {
|
|||||||
--- Tiefe, ab der das Spiel selbst den Spieler über den Wasserdruck tötet.
|
--- Tiefe, ab der das Spiel selbst den Spieler über den Wasserdruck tötet.
|
||||||
--- Dagegen hilft keine Flasche - das ist die Engine, nicht dieses Script.
|
--- Dagegen hilft keine Flasche - das ist die Engine, nicht dieses Script.
|
||||||
--- Deshalb hier nur eine Warnung, kein eigener Effekt.
|
--- Deshalb hier nur eine Warnung, kein eigener Effekt.
|
||||||
--- Referenz: das U-Boot geht bis ~150 m und implodiert ab ~168 m; zu Fuß
|
--- 160 m ist ingame gemessen: darunter ist Schluss.
|
||||||
--- verliert man ebenfalls Leben, sobald es zu tief wird. Der Wert ist
|
engineDepthLimit = 160.0,
|
||||||
--- bewusst konservativ - notfalls anpassen.
|
|
||||||
engineDepthLimit = 130.0,
|
|
||||||
engineWarnBeforeMeters = 20.0,
|
engineWarnBeforeMeters = 20.0,
|
||||||
|
|
||||||
--- Stufen, sobald die Grenze überschritten ist. `over` = Meter unterhalb
|
--- Stufen, sobald die Grenze überschritten ist. `over` = Meter unterhalb
|
||||||
@@ -114,7 +112,9 @@ return {
|
|||||||
over = 20.0,
|
over = 20.0,
|
||||||
timecycle = 'drug_wobbly', strength = 1.0,
|
timecycle = 'drug_wobbly', strength = 1.0,
|
||||||
shake = 'DRUNK_SHAKE', shakeIntensity = 0.8,
|
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 -
|
--- v1493). Sie sitzt an der richtigen Stelle und leuchtet in Blickrichtung -
|
||||||
--- deshalb gibt es hier weder Offsets noch Farb- und Kegelwerte.
|
--- deshalb gibt es hier weder Offsets noch Farb- und Kegelwerte.
|
||||||
---
|
---
|
||||||
--- ACHTUNG: Sie hängt an der echten Scuba-Kleidung des Peds (Component 8).
|
--- Sie funktioniert auch ohne Scuba-Kleidung am Ped (ingame bestätigt), das
|
||||||
--- Trägt der Spieler die nicht, passiert nichts. Diese Resource fasst das
|
--- Outfit wird also nicht angefasst.
|
||||||
--- Outfit bewusst nicht an - das macht bei Bedarf das Kleidungs-System.
|
|
||||||
|
|
||||||
--- Wie oft der Lampen-Zustand auf die Peds in der Nähe nachgezogen wird (ms).
|
--- 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
|
--- Nötig, weil Peds beim Streaming, Respawn und Model-Wechsel neu erzeugt
|
||||||
|
|||||||
Reference in New Issue
Block a user