Lint / Lint Resource (push) Has been cancelled
Der Sauerstoff war eine lokale Client-Variable: nicht persistent, an kein Item gebunden, weg bei Relog. Dazu ergab startingOxygenLevel=100 bei decayRate=1/s genau 100 Sekunden Tauchzeit statt Minuten. Sauerstoff-Logik: - Restsekunden statt Punkte, Verbrauch ueber GetGameTimer-Delta statt gezaehlter Wait(1000) - ein Tick laeuft unter Last laenger als eine Sekunde, was sich ueber einen langen Tauchgang aufsummiert - Float-Vergleiche (oxygenLevel % 10 == 0, == 0) raus, Warnschwellen als config.warnAtSeconds, jede Schwelle einmal pro Tauchgang - Verbrauch steigt mit der Tiefe (1 + tiefe/30, gedeckelt), abschaltbar - Anzeige als mm:ss Flaschen: - Vier Items mit capacity in Sekunden (300/600/900/1200) in config/shared.lua - Restluft in metadata.oxygen, Fuellstand zusaetzlich in metadata.durability, damit der Balken direkt im Inventar-Slot sichtbar ist - Kein decay auf den Items: ox_inventory loescht sonst die leere Flasche - Auswahlmenue beim Anlegen und Auffuellen (entfaellt bei nur einer Flasche) - diving_fill fuellt bis capacity statt auf einen Fixwert, verweigert volle Flaschen und verbraucht sich nur bei Erfolg - items_for_ox_inventory.lua zum Reinkopieren Server: - getTanks/syncTank als Callbacks, Restluft kann nur sinken und nicht schneller als maxDrainPerSecond pro echter Sekunde - SetMetadata ersetzt die Metadata-Tabelle komplett, daher wird der bestehende Inhalt kopiert statt nur oxygen gesetzt Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
70 lines
1.9 KiB
Lua
70 lines
1.9 KiB
Lua
-- Zum Reinkopieren in ox_inventory/data/items.lua
|
|
--
|
|
-- WICHTIG: kein `decay = true` auf den Flaschen. Die durability trägt hier den
|
|
-- Füllstand, und ox_inventory löscht Items mit decay, sobald durability 0 erreicht
|
|
-- (modules/items/server.lua) - die leere Flasche würde also verschwinden statt
|
|
-- auffüllbar zu bleiben.
|
|
--
|
|
-- Die Laufzeiten stehen in config/shared.lua (capacity in Sekunden). Wer die dort
|
|
-- ändert, sollte die Labels hier mitziehen.
|
|
|
|
['diving_gear'] = {
|
|
label = 'Tauchausrüstung',
|
|
weight = 5000,
|
|
stack = false,
|
|
close = true,
|
|
consume = 0,
|
|
description = 'Maske und Tauchanzug. Benutzen zum An- und Ausziehen.',
|
|
client = { image = 'diving_gear.png' }
|
|
},
|
|
|
|
['diving_fill'] = {
|
|
label = 'Pressluft-Kartusche',
|
|
weight = 1000,
|
|
stack = true,
|
|
close = true,
|
|
consume = 0,
|
|
description = 'Füllt eine Tauchflasche wieder auf.',
|
|
client = { image = 'diving_fill.png' }
|
|
},
|
|
|
|
['diving_tank_small'] = {
|
|
label = 'Tauchflasche (5 Min)',
|
|
weight = 4000,
|
|
stack = false,
|
|
close = true,
|
|
consume = 0,
|
|
description = 'Kleine Tauchflasche. Reicht für etwa 5 Minuten.',
|
|
client = { image = 'diving_tank_small.png' }
|
|
},
|
|
|
|
['diving_tank_medium'] = {
|
|
label = 'Tauchflasche (10 Min)',
|
|
weight = 7000,
|
|
stack = false,
|
|
close = true,
|
|
consume = 0,
|
|
description = 'Mittlere Tauchflasche. Reicht für etwa 10 Minuten.',
|
|
client = { image = 'diving_tank_medium.png' }
|
|
},
|
|
|
|
['diving_tank_large'] = {
|
|
label = 'Tauchflasche (15 Min)',
|
|
weight = 10000,
|
|
stack = false,
|
|
close = true,
|
|
consume = 0,
|
|
description = 'Große Tauchflasche. Reicht für etwa 15 Minuten.',
|
|
client = { image = 'diving_tank_large.png' }
|
|
},
|
|
|
|
['diving_tank_xl'] = {
|
|
label = 'Tauchflasche (20 Min)',
|
|
weight = 13000,
|
|
stack = false,
|
|
close = true,
|
|
consume = 0,
|
|
description = 'Doppelflasche für lange Tauchgänge. Reicht für etwa 20 Minuten.',
|
|
client = { image = 'diving_tank_xl.png' }
|
|
},
|