1
0
Fork 0
forked from Simnation/Main
Main/resources/[tools]/thommie-nightvision/cl_main.lua

271 lines
11 KiB
Lua
Raw Normal View History

2025-06-29 23:58:18 +02:00
local QBCore = exports[Config.CoreName]:GetCoreObject()
2025-06-30 00:40:05 +02:00
local nvMode = 0
local thermalMode = 0
2025-06-30 01:04:56 +02:00
local flashlightActive = false
2025-06-29 23:58:18 +02:00
2025-06-30 00:25:08 +02:00
-- Funktion zum Prüfen des Charaktergeschlechts
local function IsPedMale(ped)
return GetEntityModel(ped) == `mp_m_freemode_01`
end
2025-06-30 00:51:12 +02:00
-- Funktion zum Vergleichen der aktuellen Brille mit einer Konfigurationsbrille
local function IsWearingGlasses(ped, glassesConfig)
local currentDrawable = GetPedPropIndex(ped, 1)
local currentTexture = GetPedPropTextureIndex(ped, 1)
return currentDrawable == glassesConfig.drawable and currentTexture == glassesConfig.texture
end
2025-06-30 01:04:56 +02:00
-- 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
2025-06-30 00:51:12 +02:00
-- Funktion zum Setzen einer Brille aus der Konfiguration
local function SetGlasses(ped, glassesConfig)
SetPedPropIndex(ped, 1, glassesConfig.drawable, glassesConfig.texture, true)
end
2025-06-30 00:40:05 +02:00
-- Funktion zum Deaktivieren aller Sichtmodi
local function DisableAllVisionModes()
SetNightvision(false)
SetSeethrough(false)
nvMode = 0
thermalMode = 0
end
2025-06-30 01:27:35 +02:00
-- Funktion zum Aktivieren der Helm-Lampe (GTA-Style)
2025-06-30 01:04:56 +02:00
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
2025-06-30 01:27:35 +02:00
-- Taschenlampe umschalten mit nativer GTA-Funktion
2025-06-30 01:04:56 +02:00
if flashlightActive then
2025-06-30 01:27:35 +02:00
SetFlashLightKeepOnWhileMoving(false)
TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4)
2025-06-30 01:04:56 +02:00
flashlightActive = false
QBCore.Functions.Notify('Helm-Lampe ausgeschaltet!')
else
2025-06-30 01:27:35 +02:00
SetFlashLightKeepOnWhileMoving(true)
TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4)
2025-06-30 01:04:56 +02:00
flashlightActive = true
QBCore.Functions.Notify('Helm-Lampe eingeschaltet!')
end
end
2025-06-30 01:27:35 +02:00
-- Thread zur Überprüfung, ob der Helm noch getragen wird
2025-06-30 01:04:56 +02:00
Citizen.CreateThread(function()
while true do
2025-06-30 01:27:35 +02:00
Citizen.Wait(1000) -- Überprüfe jede Sekunde
if flashlightActive then
2025-06-30 01:04:56 +02:00
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
2025-06-30 01:27:35 +02:00
SetFlashLightKeepOnWhileMoving(false)
2025-06-30 01:04:56 +02:00
flashlightActive = false
QBCore.Functions.Notify('Helm-Lampe ausgeschaltet, da der Helm abgenommen wurde!', 'error')
end
end
end
end)
2025-06-30 00:40:05 +02:00
-- Nachtsicht-Befehl
2025-06-29 23:58:18 +02:00
RegisterCommand('toggleNV', function()
2025-06-30 21:31:12 +02:00
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')
end
end
else
QBCore.Functions.Notify('Du hast kein Nachtsichtgerät!', 'error')
end
end, Config.NVItem)
2025-06-30 00:40:05 +02:00
end)
-- Wärmebild-Befehl
RegisterCommand('toggleThermal', function()
2025-06-30 21:31:12 +02:00
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')
end
end
else
QBCore.Functions.Notify('Du hast kein Wärmebildgerät!', 'error')
end
end, Config.ThermalItem)
2025-06-29 23:58:18 +02:00
end)
2025-06-30 00:25:08 +02:00
2025-06-30 01:04:56 +02:00
-- Helm-Lampe-Befehl
RegisterCommand('toggleHelmetLight', function()
ToggleHelmetFlashlight()
end)
2025-06-30 00:40:05 +02:00
-- Tastenbelegungen registrieren
RegisterKeyMapping('toggleNV', 'Nachtsicht umschalten', 'keyboard', Config.NVKey)
RegisterKeyMapping('toggleThermal', 'Wärmebild umschalten', 'keyboard', Config.ThermalKey)
2025-06-30 01:04:56 +02:00
RegisterKeyMapping('toggleHelmetLight', 'Helm-Lampe umschalten', 'keyboard', Config.FlashlightKey)
2025-06-29 23:58:18 +02:00
2025-06-30 00:40:05 +02:00
-- Event zum Umschalten der Brille
RegisterNetEvent('nightvision:toggleGlasses', function(mode)
2025-06-30 21:31:12 +02:00
local ped = PlayerPedId()
local gender = IsPedMale(ped) and "male" or "female"
local glassesConfig = Config.Glasses[gender]
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)
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)
end
2025-06-29 23:58:18 +02:00
end)
2025-06-30 00:25:08 +02:00
-- Behalte den alten Event-Namen für Kompatibilität
RegisterNetEvent('nightvision:toggleHelmet', function()
2025-06-30 00:40:05 +02:00
TriggerEvent('nightvision:toggleGlasses', 'nightvision')
2025-06-30 00:25:08 +02:00
end)
2025-06-30 01:04:56 +02:00
-- Cleanup beim Ressource-Stop
AddEventHandler('onResourceStop', function(resourceName)
if (GetCurrentResourceName() ~= resourceName) then return end
2025-06-30 01:27:35 +02:00
-- Deaktiviere alle Effekte
2025-06-30 01:04:56 +02:00
DisableAllVisionModes()
2025-06-30 01:27:35 +02:00
-- Deaktiviere die Taschenlampe
if flashlightActive then
SetFlashLightKeepOnWhileMoving(false)
flashlightActive = false
2025-06-30 01:04:56 +02:00
end
end)