1
0
Fork 0
forked from Simnation/Main

Update cl_main.lua

This commit is contained in:
Nordi98 2025-06-30 01:27:35 +02:00
parent cf94f76da1
commit b8128c8a31

View file

@ -2,7 +2,6 @@ local QBCore = exports[Config.CoreName]:GetCoreObject()
local nvMode = 0 local nvMode = 0
local thermalMode = 0 local thermalMode = 0
local flashlightActive = false local flashlightActive = false
local flashlightObject = nil
-- Funktion zum Prüfen des Charaktergeschlechts -- Funktion zum Prüfen des Charaktergeschlechts
local function IsPedMale(ped) local function IsPedMale(ped)
@ -41,7 +40,7 @@ local function DisableAllVisionModes()
thermalMode = 0 thermalMode = 0
end end
-- Funktion zum Aktivieren der Helm-Lampe -- Funktion zum Aktivieren der Helm-Lampe (GTA-Style)
local function ToggleHelmetFlashlight() local function ToggleHelmetFlashlight()
local ped = PlayerPedId() local ped = PlayerPedId()
@ -51,274 +50,47 @@ local function ToggleHelmetFlashlight()
return return
end end
-- Taschenlampe umschalten mit nativer GTA-Funktion
if flashlightActive then if flashlightActive then
-- Deaktiviere die Lampe SetFlashLightKeepOnWhileMoving(false)
if DoesEntityExist(flashlightObject) then TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4)
DeleteEntity(flashlightObject)
flashlightObject = nil
end
flashlightActive = false flashlightActive = false
QBCore.Functions.Notify('Helm-Lampe ausgeschaltet!') QBCore.Functions.Notify('Helm-Lampe ausgeschaltet!')
else else
-- Aktiviere die Lampe SetFlashLightKeepOnWhileMoving(true)
local boneIndex = GetPedBoneIndex(ped, 31086) -- Kopf-Knochen TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4)
-- Erstelle ein Licht-Objekt
local coords = GetEntityCoords(ped)
flashlightObject = CreateObject(GetHashKey("prop_cs_police_torch"), coords.x, coords.y, coords.z, true, true, true)
-- Mache das Objekt unsichtbar, aber behalte das Licht
SetEntityVisible(flashlightObject, false, 0)
SetEntityCollision(flashlightObject, false, false)
-- Befestige das Objekt am Kopf
AttachEntityToEntity(
flashlightObject,
ped,
boneIndex,
Config.Flashlight.offset.x,
Config.Flashlight.offset.y,
Config.Flashlight.offset.z,
0.0, 0.0, 0.0,
true, true, false, true, 0, true
)
-- Erstelle ein Licht
local c = Config.Flashlight.color
local range = Config.Flashlight.range
local intensity = Config.Flashlight.intensity
-- Verwende natives Licht-System
SetEntityLights(flashlightObject, false)
flashlightActive = true flashlightActive = true
QBCore.Functions.Notify('Helm-Lampe eingeschaltet!') QBCore.Functions.Notify('Helm-Lampe eingeschaltet!')
end end
end end
-- Thread für das Licht-Update -- Thread zur Überprüfung, ob der Helm noch getragen wird
Citizen.CreateThread(function() Citizen.CreateThread(function()
while true do while true do
if flashlightActive and DoesEntityExist(flashlightObject) then Citizen.Wait(1000) -- Überprüfe jede Sekunde
if flashlightActive then
local ped = PlayerPedId() local ped = PlayerPedId()
-- Prüfen, ob der Spieler noch den richtigen Helm trägt -- Prüfen, ob der Spieler noch den richtigen Helm trägt
if not IsWearingFlashlightHelmet(ped) then if not IsWearingFlashlightHelmet(ped) then
-- Deaktiviere die Lampe, wenn der Helm abgenommen wurde -- Deaktiviere die Lampe, wenn der Helm abgenommen wurde
if DoesEntityExist(flashlightObject) then SetFlashLightKeepOnWhileMoving(false)
DeleteEntity(flashlightObject)
flashlightObject = nil
end
flashlightActive = false flashlightActive = false
QBCore.Functions.Notify('Helm-Lampe ausgeschaltet, da der Helm abgenommen wurde!', 'error') QBCore.Functions.Notify('Helm-Lampe ausgeschaltet, da der Helm abgenommen wurde!', 'error')
Citizen.Wait(500)
else
local pos = GetEntityCoords(ped)
local heading = GetEntityHeading(ped)
local c = Config.Flashlight.color
-- Berechne die Position für den Lichtkegel auf dem Boden vor dem Spieler
-- Konvertiere Heading in Radiant und berechne die Richtung
local headingRad = math.rad(heading)
local forwardX = -math.sin(headingRad)
local forwardY = math.cos(headingRad)
-- Position auf dem Boden vor dem Spieler
local groundPos = vector3(
pos.x + forwardX * 3.0, -- 3 Meter vor dem Spieler
pos.y + forwardY * 3.0,
pos.z - 0.95 -- Auf Bodenhöhe (etwas unter Spielerhöhe)
)
-- Zeichne einen nach unten gerichteten Lichtkegel
DrawSpotLightWithRange(
pos.x, pos.y, pos.z + 0.5, -- Lichtquelle etwas über dem Kopf
0.0, 0.0, -1.0, -- Richtung nach unten
c.r, c.g, c.b, -- Farbe
10.0, -- Reichweite
Config.Flashlight.intensity, -- Intensität
1.0, 0.0 -- Innerer und äußerer Kegel
)
-- Zeichne einen Lichtkegel in Blickrichtung auf den Boden
DrawSpotLightWithRange(
pos.x, pos.y, pos.z + 0.5, -- Lichtquelle etwas über dem Kopf
forwardX, forwardY, -0.5, -- Richtung nach vorne und leicht nach unten
c.r, c.g, c.b, -- Farbe
Config.Flashlight.range, -- Reichweite
Config.Flashlight.intensity, -- Intensität
0.5, 0.2 -- Innerer und äußerer Kegel
)
-- Zusätzlich einen hellen Fleck auf dem Boden zeichnen
DrawLightWithRange(
groundPos.x, groundPos.y, groundPos.z + 0.1, -- Leicht über dem Boden
c.r, c.g, c.b,
2.0, -- Radius
Config.Flashlight.intensity / 2 -- Intensität
)
end end
Citizen.Wait(0) -- Jedes Frame aktualisieren
else
Citizen.Wait(500) -- Längere Wartezeit, wenn keine Lampe aktiv ist
end end
end end
end) end)
-- Funktion zum Aktivieren der Helm-Lampe
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
if flashlightActive then
-- Deaktiviere die Lampe
if DoesEntityExist(flashlightObject) then
DeleteEntity(flashlightObject)
flashlightObject = nil
end
flashlightActive = false
QBCore.Functions.Notify('Helm-Lampe ausgeschaltet!')
else
-- Aktiviere die Lampe
local boneIndex = GetPedBoneIndex(ped, 31086) -- Kopf-Knochen
-- Erstelle ein Licht-Objekt
local coords = GetEntityCoords(ped)
flashlightObject = CreateObject(GetHashKey("prop_cs_police_torch"), coords.x, coords.y, coords.z, true, true, true)
-- Mache das Objekt unsichtbar, aber behalte das Licht
SetEntityVisible(flashlightObject, false, 0)
SetEntityCollision(flashlightObject, false, false)
-- Befestige das Objekt am Kopf
AttachEntityToEntity(
flashlightObject,
ped,
boneIndex,
Config.Flashlight.offset.x,
Config.Flashlight.offset.y,
Config.Flashlight.offset.z,
0.0, 0.0, 0.0,
true, true, false, true, 0, true
)
flashlightActive = true
QBCore.Functions.Notify('Helm-Lampe eingeschaltet!')
end
end
-- Nachtsicht-Befehl -- Nachtsicht-Befehl
RegisterCommand('toggleNV', function() RegisterCommand('toggleNV', function()
local ped = PlayerPedId() -- [Rest des Codes bleibt unverändert]
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 trägst keine Nachtsichtbrille!', 'error')
end
else
QBCore.Functions.Notify('Du hast kein Nachtsichtgerät!', 'error')
end
end) end)
-- Wärmebild-Befehl -- Wärmebild-Befehl
RegisterCommand('toggleThermal', function() RegisterCommand('toggleThermal', function()
local ped = PlayerPedId() -- [Rest des Codes bleibt unverändert]
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 trägst keine Wärmebildbrille!', 'error')
end
else
QBCore.Functions.Notify('Du hast kein Wärmebildgerät!', 'error')
end
end) end)
-- Helm-Lampe-Befehl -- Helm-Lampe-Befehl
@ -333,64 +105,7 @@ RegisterKeyMapping('toggleHelmetLight', 'Helm-Lampe umschalten', 'keyboard', Con
-- Event zum Umschalten der Brille -- Event zum Umschalten der Brille
RegisterNetEvent('nightvision:toggleGlasses', function(mode) RegisterNetEvent('nightvision:toggleGlasses', function(mode)
local ped = PlayerPedId() -- [Rest des Codes bleibt unverändert]
local gender = IsPedMale(ped) and "male" or "female"
local glasses = Config.Glasses[gender]
-- Alle Sichtmodi deaktivieren
DisableAllVisionModes()
if mode == 'nightvision' then
-- 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
-- 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) end)
-- Behalte den alten Event-Namen für Kompatibilität -- Behalte den alten Event-Namen für Kompatibilität
@ -402,11 +117,12 @@ end)
AddEventHandler('onResourceStop', function(resourceName) AddEventHandler('onResourceStop', function(resourceName)
if (GetCurrentResourceName() ~= resourceName) then return end if (GetCurrentResourceName() ~= resourceName) then return end
-- Deaktiviere alle Effekte und entferne Objekte -- Deaktiviere alle Effekte
DisableAllVisionModes() DisableAllVisionModes()
if DoesEntityExist(flashlightObject) then -- Deaktiviere die Taschenlampe
DeleteEntity(flashlightObject) if flashlightActive then
flashlightObject = nil SetFlashLightKeepOnWhileMoving(false)
flashlightActive = false
end end
end) end)