From bfe1d8ee2da3dfc06596bd967ef667ca21755627 Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Tue, 29 Sep 2026 00:16:48 +0200 Subject: [PATCH] fix: GTA nimmt Flasche und Maske nicht mehr selbst ab (Flag 409) Gemessen mit /tauchprobe beobachten: beim Wechsel "schwimmt" -> nein verschwanden Komponente 8 (global 123) und Prop 1 gleichzeitig, bei ausgeschaltetem Tauchgeraet; die Items blieben in den Slots. CPED_CONFIG_FLAG_DisableTakeOffScubaGear = 409 (nachgeschlagen) am Spieler-Ped, nach jedem Ped-Wechsel neu, beim Stoppen ab. /tauchprobe beobachten zeigt die Flagge mit an. Co-Authored-By: Claude Opus 5.5 (1M context) --- client/main.lua | 27 +++++++++++++++++++++++++ client/probe.lua | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/client/main.lua b/client/main.lua index 1bdcbe2..3b7c17b 100644 --- a/client/main.lua +++ b/client/main.lua @@ -327,6 +327,8 @@ end exports('setHudVisible', setHudVisible) exports('isHudVisible', function() return not hudHidden end) +-- Fuer /tauchprobe beobachten (client/probe.lua): ist das Tauchgeraet aktiv? +exports('geraetAktiv', function() return currentGear.enabled == true end) --- Pflegt die geglättete Tiefe und schiebt den Zustand ins NUI. --- Läuft auch über Wasser weiter, weil getDecayFactor die Tiefe braucht - nur die @@ -672,8 +674,33 @@ lib.onCache('ped', function(ped) end end) +--[[ + GTA NIMMT FLASCHE UND MASKE SELBST AB - gemessen am 29.09.2026 mit + /tauchprobe beobachten (Betreiber): im Moment, in dem "schwimmt" auf nein + springt (flaches Wasser, Boden unter den Fuessen), verschwanden Komponente 8 + (global 123 = GTAs Taucherflasche) und Prop 1 gleichzeitig - bei + ausgeschaltetem Tauchgeraet, also nicht durch diesen Code. Die Items lagen + weiter in ihren Slots. + + CPED_CONFIG_FLAG_DisableTakeOffScubaGear = 409 (NACHGESCHLAGEN in der + SetPedConfigFlag-Doku der Nativ-Datenbank) schaltet das ab. Bei uns zieht + nur das Inventar aus. Gesetzt am Spieler-Ped, nach jedem Ped-Wechsel neu + (onCache-Parameter, nicht cache.ped), beim Stoppen wieder ab - sonst + bliebe sie ohne diese Resource stehen. +]] +local ABNEHMEN_AUS = 409 + +CreateThread(function() + SetPedConfigFlag(PlayerPedId(), ABNEHMEN_AUS, true) +end) + +lib.onCache('ped', function(ped) + SetPedConfigFlag(ped, ABNEHMEN_AUS, true) +end) + AddEventHandler('onResourceStop', function(resource) if resource ~= GetCurrentResourceName() then return end + SetPedConfigFlag(cache.ped, ABNEHMEN_AUS, false) syncTank(true) setLamp(false) diff --git a/client/probe.lua b/client/probe.lua index 769d1b7..82cfee3 100644 --- a/client/probe.lua +++ b/client/probe.lua @@ -62,9 +62,60 @@ local function zeile(ped, e) e.art, e.id, e.d, e.tex, tostring(e.sammlung ~= '' and e.sammlung or 'base'), e.lokal or -1, texturen or -1) end +--[[ + /tauchprobe beobachten [sekunden] - 29.09.2026. Betreiber: "bei der + taucherfalsche haben wir das problem er zieht sie aus wenn er an land ist". + + Schreibt JEDE Aenderung an Flasche (Komponente 8) und Maske (Prop 1) mit + Zeit, Wasserzustand und ob das Tauchgeraet aktiv ist - damit man sieht, + WANN sie verschwindet (Wasser verlassen? Tauchgeraet aus? Neuanziehen?), + statt es zu raten. Alle 10 s eine Lebenszeile, damit Stille nicht wie + "keine Aenderung" aussieht, wenn die Probe gar nicht laeuft. +]] +local function beobachten(sekunden) + local ende = GetGameTimer() + sekunden * 1000 + local start = GetGameTimer() + local letzt, lebenszeichen = nil, 0 + + print(('^5=== Tauchprobe beobachten, %d s ===^7'):format(sekunden)) + print(' t Flasche (c8) Maske (p1) Wasser Schwimmt Unten Geraet Flag409') + + while GetGameTimer() < ende do + local ped = PlayerPedId() + local c8 = ('%s:%d (g%d t%d)'):format(GetPedDrawableVariationCollectionName(ped, 8) or 'base', + GetPedDrawableVariationCollectionLocalIndex(ped, 8) or -1, GetPedDrawableVariation(ped, 8), GetPedTextureVariation(ped, 8)) + local p1 = ('%s:%d (g%d t%d)'):format(GetPedPropCollectionName(ped, 1) or 'base', + GetPedPropCollectionLocalIndex(ped, 1) or -1, GetPedPropIndex(ped, 1), GetPedPropTextureIndex(ped, 1)) + local function jn(x) return (x == true or x == 1) and 'j' or 'n' end + local okA, aktiv = pcall(function() return exports.d4rk_divegear:geraetAktiv() end) + local zeile = ('%-29s %-29s %s %s %s %s %s'):format(c8, p1, jn(IsEntityInWater(ped)), + jn(IsPedSwimming(ped)), jn(IsPedSwimmingUnderWater(ped)), okA and jn(aktiv) or '?', + jn(GetPedConfigFlag(ped, 409, true))) + local t = (GetGameTimer() - start) / 1000 + + if zeile ~= letzt then + print((' %5.1f %s'):format(t, zeile)) + letzt = zeile + elseif t - lebenszeichen >= 10 then + print((' %5.1f (unveraendert)'):format(t)) + lebenszeichen = t + end + + Wait(250) + end + + print('^5=== Tauchprobe beobachten: Ende ===^7') +end + RegisterCommand('tauchprobe', function(_, args) local ped = PlayerPedId() + if args[1] == 'beobachten' then + CreateThread(function() beobachten(tonumber(args[2]) or 120) end) + lib.notify({ title = 'Tauchprobe', description = 'Beobachte - Ausgabe in F8.', type = 'info' }) + return + end + print('') print(('^5=== d4rk_divegear: Tauchprobe (Modell %s) ===^7'):format(modell(ped)))