chore: Luft ohne Flasche 10 s (gemessen), /tauchprobe fuer die Kleidung

maxTimeUnderwater stand auf 50 mit "Vanilla-Verhalten"; auf d4rk-rp sind
es gemessen 10,00 s (/medwasserprobe). /tauchprobe liest, was
SetPedScubaGearVariation an der Kleidung aendert (Maske) und zeigt
Komponente 8 bei einem Drawable (Flasche) - plan-divegear.md Schritt 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
D4rkst3randClaude Opus 5.5 committed 2026-09-28 23:40:24 +02:00
1 parent d59abe8d55
commit 930ff6381f
3 files changed
+120 -2

No files matched your search

+109
View File
@@ -0,0 +1,109 @@
--[[
d4rk_divegear - /tauchprobe: welche Kleidung ist die Tauchmaske?
(plan-divegear.md Schritt 0, 28.09.2026)
Flasche und Maske werden Kleidungsstuecke aus dem Kleiderladen
(d4rk_garment). Dafuer braucht es Komponente, Sammlung und lokalen Index -
je Modell (m/f). Der Katalog hat keine Namen, also wird gemessen:
SetPedScubaGearVariation (0x36C6984C3ED0C911, PED, client) setzt laut
Nativ-Datenbank bei Freemode-Modellen die Tauchmaske. Diese Probe liest
ALLE Komponenten (0-11) und Props (0-7) vorher und nachher und nennt,
was sich geaendert hat - samt Sammlung, lokalem Index und Zahl der
Texturen.
GEGENPROBE: aendert sich gar nichts, steht "UNGUELTIG" da - das Native hat
dann nichts getan, und "keine Maske" waere die falsche Lesart.
DIE FLASCHE setzt das Native bei Freemode NICHT (laut Doku nur bei
player_*-Modellen). Nachgeschlagen, nicht gemessen: maennlich Komponente 8,
Drawable 123. Deshalb liest die Probe mit "flasche [n]" Komponente 8 bei
Drawable n (Vorgabe 123) - ob es die Flasche IST, sieht nur das Auge.
Zurueck zur eigenen Kleidung: /d4rk_anziehen (d4rk_inventory).
]]
local function modell(ped)
local m = GetEntityModel(ped)
if m == `mp_m_freemode_01` then return 'm' end
if m == `mp_f_freemode_01` then return 'f' end
return '?'
end
local function stand(ped)
local t = {}
for c = 0, 11 do
t['c' .. c] = {
art = 'c', id = c,
d = GetPedDrawableVariation(ped, c), tex = GetPedTextureVariation(ped, c),
sammlung = GetPedDrawableVariationCollectionName(ped, c) or 'base',
lokal = GetPedDrawableVariationCollectionLocalIndex(ped, c),
}
end
for p = 0, 7 do
t['p' .. p] = {
art = 'p', id = p,
d = GetPedPropIndex(ped, p), tex = GetPedPropTextureIndex(ped, p),
sammlung = GetPedPropCollectionName(ped, p) or 'base',
lokal = GetPedPropCollectionLocalIndex(ped, p),
}
end
return t
end
local function zeile(ped, e)
local texturen = e.art == 'c' and GetNumberOfPedTextureVariations(ped, e.id, e.d)
or (e.d >= 0 and GetNumberOfPedPropTextureVariations(ped, e.id, e.d) or 0)
return ('%s%-2d global %4d Textur %2d Sammlung %-14s lokal %4d Texturen %d'):format(
e.art, e.id, e.d, e.tex, tostring(e.sammlung ~= '' and e.sammlung or 'base'), e.lokal or -1, texturen or -1)
end
RegisterCommand('tauchprobe', function(_, args)
local ped = PlayerPedId()
print('')
print(('^5=== d4rk_divegear: Tauchprobe (Modell %s) ===^7'):format(modell(ped)))
if args[1] == 'flasche' then
local n = tonumber(args[2]) or 123
SetPedComponentVariation(ped, 8, n, 0, 0)
Wait(300)
local s = stand(ped).c8
print(' Komponente 8 gesetzt auf global ' .. n .. ':')
print(' ' .. zeile(ped, s))
print((' Ist das die Taucherflasche? Ansehen. Andere Nummer: /tauchprobe flasche <n>. '
.. 'Zurueck: /d4rk_anziehen'))
return
end
local vorher = stand(ped)
SetPedScubaGearVariation(ped)
Wait(500)
local nachher = stand(ped)
local anders = 0
for k, n in pairs(nachher) do
local v = vorher[k]
if v.d ~= n.d or v.tex ~= n.tex then
anders = anders + 1
print(' vorher ' .. zeile(ped, v))
print(' nachher ' .. zeile(ped, n))
end
end
if anders == 0 then
print('^1 UNGUELTIG: SetPedScubaGearVariation hat nichts geaendert - keine Aussage.^7')
else
print(('^2 %d Teil(e) geaendert.^7 Zurueck zur eigenen Kleidung: /d4rk_anziehen'):format(anders))
end
lib.notify({ title = 'Tauchprobe', description = 'Ergebnis in F8.', type = 'info' })
end, false)
+8 -2
View File
@@ -9,8 +9,12 @@ return {
--- Intervall des Watchdogs, der prüft ob die Ausrüstung noch am Ped hängt (ms). --- Intervall des Watchdogs, der prüft ob die Ausrüstung noch am Ped hängt (ms).
gearWatchdogIntervalMs = 1000, gearWatchdogIntervalMs = 1000,
--- Sekunden, die der Spieler ohne Ausrüstung unter Wasser überlebt (Vanilla-Verhalten). --- Sekunden Luft ohne Ausruestung - der NORMALWERT dieses Servers.
maxTimeUnderwater = 50.0, --- Stand bis 28.09.2026 auf 50.0 mit "Vanilla-Verhalten". GEMESSEN auf
--- d4rk-rp mit /medwasserprobe (d4rk_medical): 10,00 s an der Oberflaeche.
--- Mit 50 haette jeder nach dem ersten Ablegen fuenfmal so viel Luft - und
--- das Ertrinken (d4rk_medical, Config.Drowning) kaeme viel zu spaet.
maxTimeUnderwater = 10.0,
--- Sekunden, sobald die Flasche leer ist. Bewusst kurz: leer tauchen soll wehtun. --- Sekunden, sobald die Flasche leer ist. Bewusst kurz: leer tauchen soll wehtun.
maxTimeUnderwaterOutOfAir = 1.0, maxTimeUnderwaterOutOfAir = 1.0,
@@ -134,6 +138,8 @@ return {
--- Taste zum An- und Ausschalten. Der Spieler kann sie in den FiveM- --- Taste zum An- und Ausschalten. Der Spieler kann sie in den FiveM-
--- Tastenbelegungen unter "FiveM" umlegen. --- Tastenbelegungen unter "FiveM" umlegen.
--- L ist AUCH das Fahrzeugschloss (d4rk_vehicle, wirkt von aussen bis
--- 6 m) - beide feuern. Bewusst so gelassen, Betreiber 28.09.2026.
lampKey = 'l', lampKey = 'l',
--- Die Lampe ist die spieleigene Scuba-Lampe (SetEnableScubaGearLight, seit --- Die Lampe ist die spieleigene Scuba-Lampe (SetEnableScubaGearLight, seit
+3
View File
@@ -18,6 +18,9 @@ server_script 'server/main.lua'
client_scripts { client_scripts {
'client/main.lua', 'client/main.lua',
'client/light.lua', 'client/light.lua',
-- Messung fuer die Umstellung auf Kleidung (plan-divegear.md Schritt 0).
-- Wird nach der Messung wieder entfernt.
'client/probe.lua',
} }
ui_page 'nui/index.html' ui_page 'nui/index.html'