91 lines
3.2 KiB
Lua
91 lines
3.2 KiB
Lua
-- ============================================================
|
||
-- 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)
|