diff --git a/README.md b/README.md index 511abf1..caa286d 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,8 @@ 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 | +| `engineWarnBeforeMeters` | `20.0` | Vorwarnung davor | | `stages` | 3 Stufen | Pro Stufe: `over` (Meter unter der Grenze), `timecycle` + `strength`, `shake` + `shakeIntensity`, `drainFactor`, `damagePerTick` | **HUD** @@ -235,6 +237,17 @@ Effekte, Stärke, Verbrauchsaufschlag, Schaden. `enabled = false` schaltet es ga > Die `timecycle`-Namen sind Spiel-Effekte, keine Natives. Existiert einer nicht, > passiert einfach nichts — dann einen anderen eintragen. +### 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. + +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. + ## Exports ```lua diff --git a/TESTING.md b/TESTING.md index 1dd1f2e..ec4272d 100644 --- a/TESTING.md +++ b/TESTING.md @@ -70,6 +70,10 @@ kommt, in `config/client.lua` unter `narcosis.stages` einen anderen eintragen.* - [ ] ❓ 🟡 Sterben im Tiefenrausch → Effekte weg, kein Timecycle bleibt hängen - [ ] ❓ 🟡 `ensure d4rk_divegear` im Tiefenrausch → Effekte weg - [ ] 🟢 Auswahlmenü zeigt Gas und Tiefengrenze pro Flasche +- [ ] ❓ 🟡 Auf ~110 m → Warnung „Lebensgefahr! Ab 130 m zerdrückt dich der + Wasserdruck." *Das ist die Engine-Grenze, dagegen hilft keine Flasche* +- [ ] ❓ 🟢 Prüfen, ab welcher Tiefe GTA tatsächlich Leben abzieht, und + `engineDepthLimit` darauf einstellen - [ ] 🟢 `narcosis.enabled = false` → nichts davon passiert ## 6 · HUD diff --git a/client/main.lua b/client/main.lua index 9bde106..04c1393 100644 --- a/client/main.lua +++ b/client/main.lua @@ -59,6 +59,7 @@ end local narcosisStage = 0 local narcosisWarned = false local narcosisDamageBuffer = 0.0 +local engineDepthWarned = false --- Wie weit die aktuelle Tiefe unter der Grenze der getragenen Flasche liegt. --- @return number Meter unterhalb der Grenze, negativ solange alles gut ist @@ -251,6 +252,7 @@ local function removeGear(outOfAir, immediateSync) warned = {} narcosisWarned = false narcosisDamageBuffer = 0.0 + engineDepthWarned = false deleteGear() disableScuba(outOfAir) @@ -457,6 +459,19 @@ end local function updateNarcosis(elapsed) if not config.narcosis.enabled then return end + -- Die Engine tötet ab einer bestimmten Tiefe über den Wasserdruck. Dagegen hilft + -- kein Atemgas, deshalb warnt das hier unabhängig von der Flasche. + local engineWarnAt = config.narcosis.engineDepthLimit - config.narcosis.engineWarnBeforeMeters + + if currentDepth >= engineWarnAt then + if not engineDepthWarned then + engineDepthWarned = true + exports.qbx_core:Notify(locale('error.crush_depth', math.floor(config.narcosis.engineDepthLimit)), 'error') + end + else + engineDepthWarned = false + end + local over = getDepthOverLimit() local stages = config.narcosis.stages local stage = 0 diff --git a/config/client.lua b/config/client.lua index 6b99b53..78fad58 100644 --- a/config/client.lua +++ b/config/client.lua @@ -73,6 +73,15 @@ return { --- Wie viele Meter *vor* der Grenze schon gewarnt wird. warnBeforeMeters = 5.0, + --- 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, + engineWarnBeforeMeters = 20.0, + --- Stufen, sobald die Grenze überschritten ist. `over` = Meter unterhalb --- der maxDepth der Flasche. Es gilt jeweils die höchste erreichte Stufe, --- die Reihenfolge muss also aufsteigend sein. diff --git a/locales/de.json b/locales/de.json index 0725166..9c9dd67 100644 --- a/locales/de.json +++ b/locales/de.json @@ -7,7 +7,8 @@ "tank_empty": "Diese Tauchflasche ist leer!", "tank_already_full": "Diese Tauchflasche ist bereits voll!", "out_of_air": "Deine Luft ist alle! Sofort auftauchen!", - "no_lamp_on_outfit": "Deine Tauchausrüstung hat keine Lampe." + "no_lamp_on_outfit": "Deine Tauchausrüstung hat keine Lampe.", + "crush_depth": "Lebensgefahr! Ab %d m zerdrückt dich der Wasserdruck." }, "success": { "took_out": "Du hast deine Ausrüstung abgelegt!", diff --git a/locales/en.json b/locales/en.json index 98faa5d..fc88375 100644 --- a/locales/en.json +++ b/locales/en.json @@ -7,7 +7,8 @@ "tank_empty": "This air tank is empty!", "tank_already_full": "This air tank is already full!", "out_of_air": "You're out of air! Surface now!", - "no_lamp_on_outfit": "Your diving suit doesn't have a lamp." + "no_lamp_on_outfit": "Your diving suit doesn't have a lamp.", + "crush_depth": "Danger! Below %d m the water pressure will crush you." }, "success": { "took_out": "You've taken your gear off!",