2026-04-14 15:54:53 +02:00

91 lines
3.2 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================
-- MercyV | mercyv_helmet Client
-- ============================================================
-- Logik:
-- • Beim Besteigen eines Motorrads wird der Head-Prop (Slot 0)
-- VOR dem GTA-Auto-Helm gespeichert und danach wiederhergestellt.
-- • Hatte der Spieler keinen Helm → Auto-Helm wird entfernt.
-- • Hatte der Spieler einen Kleidungsladen-Helm → bleibt exakt erhalten.
-- • Beim Absteigen wird der Helm-Zustand NICHT verändert.
-- ============================================================
local savedPropIndex = -1
local savedPropTexture = 0
local isOnBike = false
-- ── Hilfsfunktionen ─────────────────────────────────────────
local function IsBike(vehicle)
local class = GetVehicleClass(vehicle)
for _, v in ipairs(Config.BikeClasses) do
if class == v then return true end
end
return false
end
local function DebugPrint(msg)
if Config.Debug then
print('^3[mercyv_helmet]^7 ' .. tostring(msg))
end
end
local function SaveHeadProp(ped)
savedPropIndex = GetPedPropIndex(ped, 0)
savedPropTexture = GetPedPropTextureIndex(ped, 0)
DebugPrint('Head-Prop gespeichert → Index: ' .. savedPropIndex .. ' | Textur: ' .. savedPropTexture)
end
local function RestoreHeadProp(ped)
SetPedHelmet(ped, false)
if savedPropIndex == -1 then
-- Kein manueller Helm vorhanden → GTA-Auto-Helm entfernen
ClearPedProp(ped, 0)
DebugPrint('Kein manueller Helm → Auto-Helm entfernt.')
else
-- Spieler hatte einen gekauften Helm → exakt wiederherstellen
SetPedPropIndex(ped, 0, savedPropIndex, savedPropTexture, true)
DebugPrint('Manueller Helm wiederhergestellt → Index: ' .. savedPropIndex)
end
end
-- ── Event: Einsteigen ────────────────────────────────────────
AddEventHandler('baseevents:enteredVehicle', function(vehicle, seat)
if not IsBike(vehicle) then return end
local ped = PlayerPedId()
SaveHeadProp(ped)
-- GTA setzt den Helm mit kleiner Verzögerung intern →
-- wir stellen den gespeicherten Zustand nach jedem Delay wieder her
for _, delay in ipairs(Config.RemoveDelays) do
SetTimeout(delay, function()
RestoreHeadProp(ped)
end)
end
end)
-- ── Sicherheitsschleife ──────────────────────────────────────
-- Hält das GTA-Auto-Helm-Flag dauerhaft deaktiviert.
-- Berührt KEINE manuell gesetzten Props (SetPedHelmet ≠ ClearPedProp).
CreateThread(function()
while true do
Wait(Config.LoopInterval)
local ped = PlayerPedId()
local vehicle = GetVehiclePedIsIn(ped, false)
local onBike = vehicle ~= 0 and IsBike(vehicle)
if onBike then
SetPedHelmet(ped, false)
isOnBike = true
elseif isOnBike then
-- Abgestiegen → Helm-Zustand wird bewusst nicht verändert
DebugPrint('Bike verlassen Helm-Zustand unberührt.')
isOnBike = false
end
end
end)