From f2061ae0f4dfcb9c5cfc8660acb504574ebfa28f Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Mon, 30 Jun 2025 21:37:12 +0200 Subject: [PATCH] ed --- .../[tools]/thommie-nightvision/cl_main.lua | 340 +++++++----------- .../[tools]/thommie-nightvision/config.lua | 21 -- .../[tools]/thommie-nightvision/sv_main.lua | 11 +- 3 files changed, 140 insertions(+), 232 deletions(-) diff --git a/resources/[tools]/thommie-nightvision/cl_main.lua b/resources/[tools]/thommie-nightvision/cl_main.lua index 7b584bd29..1cc9a5b69 100644 --- a/resources/[tools]/thommie-nightvision/cl_main.lua +++ b/resources/[tools]/thommie-nightvision/cl_main.lua @@ -1,7 +1,6 @@ local QBCore = exports[Config.CoreName]:GetCoreObject() local nvMode = 0 local thermalMode = 0 -local flashlightActive = false -- Funktion zum Prüfen des Charaktergeschlechts local function IsPedMale(ped) @@ -16,17 +15,6 @@ local function IsWearingGlasses(ped, glassesConfig) return currentDrawable == glassesConfig.drawable and currentTexture == glassesConfig.texture end --- Funktion zum Prüfen, ob der Spieler den richtigen Helm trägt -local function IsWearingFlashlightHelmet(ped) - local gender = IsPedMale(ped) and "male" or "female" - local helmetConfig = Config.FlashlightHelmet[gender] - - local currentDrawable = GetPedPropIndex(ped, 0) -- 0 ist der Index für Helme - local currentTexture = GetPedPropTextureIndex(ped, 0) - - return currentDrawable == helmetConfig.drawable and currentTexture == helmetConfig.texture -end - -- Funktion zum Setzen einer Brille aus der Konfiguration local function SetGlasses(ped, glassesConfig) SetPedPropIndex(ped, 1, glassesConfig.drawable, glassesConfig.texture, true) @@ -40,213 +28,175 @@ local function DisableAllVisionModes() thermalMode = 0 end --- Funktion zum Aktivieren der Helm-Lampe (GTA-Style) -local function ToggleHelmetFlashlight() - local ped = PlayerPedId() - - -- Prüfen, ob der Spieler den richtigen Helm trägt - if not IsWearingFlashlightHelmet(ped) then - QBCore.Functions.Notify('Du trägst keinen Helm mit Lampe!', 'error') - return - end - - -- Taschenlampe umschalten mit nativer GTA-Funktion - if flashlightActive then - SetFlashLightKeepOnWhileMoving(false) - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4) - flashlightActive = false - QBCore.Functions.Notify('Helm-Lampe ausgeschaltet!') - else - SetFlashLightKeepOnWhileMoving(true) - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4) - flashlightActive = true - QBCore.Functions.Notify('Helm-Lampe eingeschaltet!') - end -end - --- Thread zur Überprüfung, ob der Helm noch getragen wird -Citizen.CreateThread(function() - while true do - Citizen.Wait(1000) -- Überprüfe jede Sekunde - - if flashlightActive then - local ped = PlayerPedId() - - -- Prüfen, ob der Spieler noch den richtigen Helm trägt - if not IsWearingFlashlightHelmet(ped) then - -- Deaktiviere die Lampe, wenn der Helm abgenommen wurde - SetFlashLightKeepOnWhileMoving(false) - flashlightActive = false - QBCore.Functions.Notify('Helm-Lampe ausgeschaltet, da der Helm abgenommen wurde!', 'error') - end - end - end -end) - -- Nachtsicht-Befehl RegisterCommand('toggleNV', function() local ped = PlayerPedId() - local gender = IsPedMale(ped) and "male" or "female" - -- Check if player has the item - QBCore.Functions.TriggerCallback('QBCore:HasItem', function(hasItem) - if hasItem then - -- Check if player is wearing the correct glasses if enabled - if Config.CheckHelmet then - local glassesConfig = Config.Glasses[gender] - - if nvMode == 0 then - -- Enable nightvision - if IsWearingGlasses(ped, glassesConfig.up) then - SetGlasses(ped, glassesConfig.nvDown) - SetNightvision(true) - nvMode = 1 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Nachtsicht aktiviert') - else - QBCore.Functions.Notify('Du trägst nicht die richtige Brille!', 'error') - end - else - -- Disable nightvision - SetGlasses(ped, glassesConfig.up) - SetNightvision(false) - nvMode = 0 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Nachtsicht deaktiviert') - end - else - -- No helmet check, just toggle nightvision - if nvMode == 0 then - SetNightvision(true) - nvMode = 1 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Nachtsicht aktiviert') - else - SetNightvision(false) - nvMode = 0 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Nachtsicht deaktiviert') + if QBCore.Functions.HasItem(Config.NVItem) then + local gender = IsPedMale(ped) and "male" or "female" + local glasses = Config.Glasses[gender] + + -- Prüfen, ob der Spieler eine der Brillen trägt + local canToggle = not Config.CheckHelmet + if Config.CheckHelmet then + if IsWearingGlasses(ped, glasses.up) or IsWearingGlasses(ped, glasses.nvDown) then + canToggle = true + end + end + + if canToggle then + -- Deaktiviere zuerst Wärmebild, falls aktiv + if thermalMode > 0 then + SetSeethrough(false) + thermalMode = 0 + -- Wenn die Wärmebildbrille getragen wird, klappe sie hoch + if IsWearingGlasses(ped, glasses.thermalDown) then + SetGlasses(ped, glasses.up) end end + + -- Nachtsicht-Modus umschalten + if nvMode == 0 then + -- Wenn die Brille hochgeklappt ist, klappe sie runter + if IsWearingGlasses(ped, glasses.up) then + SetGlasses(ped, glasses.nvDown) + end + QBCore.Functions.Notify('Nachtsicht aktiviert!') + SetNightvision(true) + nvMode = 1 + else + -- Wenn die Brille runtergeklappt ist, klappe sie hoch + if IsWearingGlasses(ped, glasses.nvDown) then + SetGlasses(ped, glasses.up) + end + QBCore.Functions.Notify('Nachtsicht deaktiviert!') + SetNightvision(false) + nvMode = 0 + end else - QBCore.Functions.Notify('Du hast kein Nachtsichtgerät!', 'error') + QBCore.Functions.Notify('Du trägst keine Nachtsichtbrille!', 'error') end - end, Config.NVItem) + else + QBCore.Functions.Notify('Du hast kein Nachtsichtgerät!', 'error') + end end) -- Wärmebild-Befehl RegisterCommand('toggleThermal', function() local ped = PlayerPedId() - local gender = IsPedMale(ped) and "male" or "female" - -- Check if player has the item - QBCore.Functions.TriggerCallback('QBCore:HasItem', function(hasItem) - if hasItem then - -- Check if player is wearing the correct glasses if enabled - if Config.CheckHelmet then - local glassesConfig = Config.Glasses[gender] - - if thermalMode == 0 then - -- Enable thermal vision - if IsWearingGlasses(ped, glassesConfig.up) then - SetGlasses(ped, glassesConfig.thermalDown) - SetSeethrough(true) - thermalMode = 1 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Wärmebild aktiviert') - else - QBCore.Functions.Notify('Du trägst nicht die richtige Brille!', 'error') - end - else - -- Disable thermal vision - SetGlasses(ped, glassesConfig.up) - SetSeethrough(false) - thermalMode = 0 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Wärmebild deaktiviert') - end - else - -- No helmet check, just toggle thermal vision - if thermalMode == 0 then - SetSeethrough(true) - thermalMode = 1 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Wärmebild aktiviert') - else - SetSeethrough(false) - thermalMode = 0 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Wärmebild deaktiviert') + if QBCore.Functions.HasItem(Config.ThermalItem) then + local gender = IsPedMale(ped) and "male" or "female" + local glasses = Config.Glasses[gender] + + -- Prüfen, ob der Spieler eine der Brillen trägt + local canToggle = not Config.CheckHelmet + if Config.CheckHelmet then + if IsWearingGlasses(ped, glasses.up) or IsWearingGlasses(ped, glasses.thermalDown) then + canToggle = true + end + end + + if canToggle then + -- Deaktiviere zuerst Nachtsicht, falls aktiv + if nvMode > 0 then + SetNightvision(false) + nvMode = 0 + -- Wenn die Nachtsichtbrille getragen wird, klappe sie hoch + if IsWearingGlasses(ped, glasses.nvDown) then + SetGlasses(ped, glasses.up) end end + + -- Wärmebild-Modus umschalten + if thermalMode == 0 then + -- Wenn die Brille hochgeklappt ist, klappe sie runter + if IsWearingGlasses(ped, glasses.up) then + SetGlasses(ped, glasses.thermalDown) + end + QBCore.Functions.Notify('Wärmebild aktiviert!') + SetSeethrough(true) + thermalMode = 1 + else + -- Wenn die Brille runtergeklappt ist, klappe sie hoch + if IsWearingGlasses(ped, glasses.thermalDown) then + SetGlasses(ped, glasses.up) + end + QBCore.Functions.Notify('Wärmebild deaktiviert!') + SetSeethrough(false) + thermalMode = 0 + end else - QBCore.Functions.Notify('Du hast kein Wärmebildgerät!', 'error') + QBCore.Functions.Notify('Du trägst keine Wärmebildbrille!', 'error') end - end, Config.ThermalItem) -end) - --- Helm-Lampe-Befehl -RegisterCommand('toggleHelmetLight', function() - ToggleHelmetFlashlight() + else + QBCore.Functions.Notify('Du hast kein Wärmebildgerät!', 'error') + end end) -- Tastenbelegungen registrieren RegisterKeyMapping('toggleNV', 'Nachtsicht umschalten', 'keyboard', Config.NVKey) RegisterKeyMapping('toggleThermal', 'Wärmebild umschalten', 'keyboard', Config.ThermalKey) -RegisterKeyMapping('toggleHelmetLight', 'Helm-Lampe umschalten', 'keyboard', Config.FlashlightKey) -- Event zum Umschalten der Brille RegisterNetEvent('nightvision:toggleGlasses', function(mode) local ped = PlayerPedId() local gender = IsPedMale(ped) and "male" or "female" - local glassesConfig = Config.Glasses[gender] + local glasses = Config.Glasses[gender] + + -- Alle Sichtmodi deaktivieren + DisableAllVisionModes() if mode == 'nightvision' then - -- Check if player has the item - QBCore.Functions.TriggerCallback('QBCore:HasItem', function(hasItem) - if hasItem then - if nvMode == 0 then - -- Enable nightvision - SetGlasses(ped, glassesConfig.nvDown) - SetNightvision(true) - nvMode = 1 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Nachtsicht aktiviert') - else - -- Disable nightvision - SetGlasses(ped, glassesConfig.up) - SetNightvision(false) - nvMode = 0 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Nachtsicht deaktiviert') - end - else - QBCore.Functions.Notify('Du hast kein Nachtsichtgerät!', 'error') - end - end, Config.NVItem) + -- Wenn keine der konfigurierten Brillen getragen wird, setze hochgeklappte Version auf + if not (IsWearingGlasses(ped, glasses.up) or + IsWearingGlasses(ped, glasses.nvDown) or + IsWearingGlasses(ped, glasses.thermalDown)) then + SetGlasses(ped, glasses.up) + QBCore.Functions.Notify('Nachtsichtbrille aufgesetzt!') + -- Wenn hochgeklappte Brille getragen wird, klappe sie runter und aktiviere Nachtsicht + elseif IsWearingGlasses(ped, glasses.up) then + SetGlasses(ped, glasses.nvDown) + QBCore.Functions.Notify('Nachtsicht aktiviert!') + SetNightvision(true) + nvMode = 1 + -- Wenn runtergeklappte Nachtsichtbrille getragen wird, klappe sie hoch und deaktiviere Nachtsicht + elseif IsWearingGlasses(ped, glasses.nvDown) then + SetGlasses(ped, glasses.up) + QBCore.Functions.Notify('Nachtsicht deaktiviert!') + nvMode = 0 + -- Wenn Wärmebildbrille getragen wird, wechsle zu Nachtsichtbrille + elseif IsWearingGlasses(ped, glasses.thermalDown) then + SetGlasses(ped, glasses.nvDown) + QBCore.Functions.Notify('Nachtsicht aktiviert!') + SetNightvision(true) + nvMode = 1 + end elseif mode == 'thermal' then - -- Check if player has the item - QBCore.Functions.TriggerCallback('QBCore:HasItem', function(hasItem) - if hasItem then - if thermalMode == 0 then - -- Enable thermal vision - SetGlasses(ped, glassesConfig.thermalDown) - SetSeethrough(true) - thermalMode = 1 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Wärmebild aktiviert') - else - -- Disable thermal vision - SetGlasses(ped, glassesConfig.up) - SetSeethrough(false) - thermalMode = 0 - TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'nightvision', 0.25) - QBCore.Functions.Notify('Wärmebild deaktiviert') - end - else - QBCore.Functions.Notify('Du hast kein Wärmebildgerät!', 'error') - end - end, Config.ThermalItem) + -- Wenn keine der konfigurierten Brillen getragen wird, setze hochgeklappte Version auf + if not (IsWearingGlasses(ped, glasses.up) or + IsWearingGlasses(ped, glasses.nvDown) or + IsWearingGlasses(ped, glasses.thermalDown)) then + SetGlasses(ped, glasses.up) + QBCore.Functions.Notify('Wärmebildbrille aufgesetzt!') + -- Wenn hochgeklappte Brille getragen wird, klappe sie runter und aktiviere Wärmebild + elseif IsWearingGlasses(ped, glasses.up) then + SetGlasses(ped, glasses.thermalDown) + QBCore.Functions.Notify('Wärmebild aktiviert!') + SetSeethrough(true) + thermalMode = 1 + -- Wenn runtergeklappte Wärmebildbrille getragen wird, klappe sie hoch und deaktiviere Wärmebild + elseif IsWearingGlasses(ped, glasses.thermalDown) then + SetGlasses(ped, glasses.up) + QBCore.Functions.Notify('Wärmebild deaktiviert!') + thermalMode = 0 + -- Wenn Nachtsichtbrille getragen wird, wechsle zu Wärmebildbrille + elseif IsWearingGlasses(ped, glasses.nvDown) then + SetGlasses(ped, glasses.thermalDown) + QBCore.Functions.Notify('Wärmebild aktiviert!') + SetSeethrough(true) + thermalMode = 1 + end end end) @@ -254,17 +204,3 @@ end) RegisterNetEvent('nightvision:toggleHelmet', function() TriggerEvent('nightvision:toggleGlasses', 'nightvision') end) - --- Cleanup beim Ressource-Stop -AddEventHandler('onResourceStop', function(resourceName) - if (GetCurrentResourceName() ~= resourceName) then return end - - -- Deaktiviere alle Effekte - DisableAllVisionModes() - - -- Deaktiviere die Taschenlampe - if flashlightActive then - SetFlashLightKeepOnWhileMoving(false) - flashlightActive = false - end -end) diff --git a/resources/[tools]/thommie-nightvision/config.lua b/resources/[tools]/thommie-nightvision/config.lua index 159c20d42..3028bfe24 100644 --- a/resources/[tools]/thommie-nightvision/config.lua +++ b/resources/[tools]/thommie-nightvision/config.lua @@ -6,7 +6,6 @@ Config.ThermalItem = 'thermalvision' -- Item needed to use thermal vision Config.CheckHelmet = true -- Check if player has the appropriate glasses Config.NVKey = 'N' -- Key for nightvision Config.ThermalKey = 'M' -- Key for thermal vision -Config.FlashlightKey = 'L' -- Key for helmet flashlight -- Glasses configuration with drawables and textures Config.Glasses = { @@ -40,23 +39,3 @@ Config.Glasses = { } } --- Flashlight configuration -Config.Flashlight = { - color = {r = 255, g = 255, b = 255}, -- Farbe des Lichts (weiß) - range = 15.0, -- Reichweite des Lichts (reduziert für realistischeren Effekt) - intensity = 10.0, -- Intensität des Lichts - offset = {x = 0.0, y = 0.3, z = 0.0} -- Position des Lichts relativ zum Kopf -} - - --- Helm-Konfiguration für die Lampe -Config.FlashlightHelmet = { - male = { - drawable = 117, -- ID des Helms mit Lampe (männlich) - texture = 0 -- Textur des Helms mit Lampe (männlich) - }, - female = { - drawable = 283, -- ID des Helms mit Lampe (weiblich) - texture = 1 -- Textur des Helms mit Lampe (weiblich) - } -} diff --git a/resources/[tools]/thommie-nightvision/sv_main.lua b/resources/[tools]/thommie-nightvision/sv_main.lua index dbcdd354b..df9359dc9 100644 --- a/resources/[tools]/thommie-nightvision/sv_main.lua +++ b/resources/[tools]/thommie-nightvision/sv_main.lua @@ -3,13 +3,6 @@ local QBCore = exports[Config.CoreName]:GetCoreObject() QBCore.Functions.CreateUseableItem(Config.NVItem, function(source, item) local Player = QBCore.Functions.GetPlayer(source) if Player.Functions.GetItemByName(item.name) then - TriggerClientEvent('nightvision:toggleGlasses', source, 'nightvision') + TriggerClientEvent('nightvision:toggleHelmet', source) end -end) - -QBCore.Functions.CreateUseableItem(Config.ThermalItem, function(source, item) - local Player = QBCore.Functions.GetPlayer(source) - if Player.Functions.GetItemByName(item.name) then - TriggerClientEvent('nightvision:toggleGlasses', source, 'thermal') - end -end) +end) \ No newline at end of file