forked from Simnation/Main
Update cl_main.lua
This commit is contained in:
parent
cf94f76da1
commit
b8128c8a31
1 changed files with 19 additions and 303 deletions
|
@ -2,7 +2,6 @@ local QBCore = exports[Config.CoreName]:GetCoreObject()
|
|||
local nvMode = 0
|
||||
local thermalMode = 0
|
||||
local flashlightActive = false
|
||||
local flashlightObject = nil
|
||||
|
||||
-- Funktion zum Prüfen des Charaktergeschlechts
|
||||
local function IsPedMale(ped)
|
||||
|
@ -41,7 +40,7 @@ local function DisableAllVisionModes()
|
|||
thermalMode = 0
|
||||
end
|
||||
|
||||
-- Funktion zum Aktivieren der Helm-Lampe
|
||||
-- Funktion zum Aktivieren der Helm-Lampe (GTA-Style)
|
||||
local function ToggleHelmetFlashlight()
|
||||
local ped = PlayerPedId()
|
||||
|
||||
|
@ -51,274 +50,47 @@ local function ToggleHelmetFlashlight()
|
|||
return
|
||||
end
|
||||
|
||||
-- Taschenlampe umschalten mit nativer GTA-Funktion
|
||||
if flashlightActive then
|
||||
-- Deaktiviere die Lampe
|
||||
if DoesEntityExist(flashlightObject) then
|
||||
DeleteEntity(flashlightObject)
|
||||
flashlightObject = nil
|
||||
end
|
||||
SetFlashLightKeepOnWhileMoving(false)
|
||||
TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4)
|
||||
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
|
||||
)
|
||||
|
||||
-- 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)
|
||||
|
||||
SetFlashLightKeepOnWhileMoving(true)
|
||||
TriggerServerEvent('InteractSound_SV:PlayWithinDistance', 3.0, 'flashlight', 0.4)
|
||||
flashlightActive = true
|
||||
QBCore.Functions.Notify('Helm-Lampe eingeschaltet!')
|
||||
end
|
||||
end
|
||||
|
||||
-- Thread für das Licht-Update
|
||||
-- Thread zur Überprüfung, ob der Helm noch getragen wird
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
if flashlightActive and DoesEntityExist(flashlightObject) then
|
||||
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
|
||||
if DoesEntityExist(flashlightObject) then
|
||||
DeleteEntity(flashlightObject)
|
||||
flashlightObject = nil
|
||||
end
|
||||
SetFlashLightKeepOnWhileMoving(false)
|
||||
flashlightActive = false
|
||||
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
|
||||
|
||||
Citizen.Wait(0) -- Jedes Frame aktualisieren
|
||||
else
|
||||
Citizen.Wait(500) -- Längere Wartezeit, wenn keine Lampe aktiv ist
|
||||
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
|
||||
RegisterCommand('toggleNV', function()
|
||||
local ped = PlayerPedId()
|
||||
|
||||
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
|
||||
-- [Rest des Codes bleibt unverändert]
|
||||
end)
|
||||
|
||||
-- Wärmebild-Befehl
|
||||
RegisterCommand('toggleThermal', function()
|
||||
local ped = PlayerPedId()
|
||||
|
||||
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
|
||||
-- [Rest des Codes bleibt unverändert]
|
||||
end)
|
||||
|
||||
-- Helm-Lampe-Befehl
|
||||
|
@ -333,64 +105,7 @@ RegisterKeyMapping('toggleHelmetLight', 'Helm-Lampe umschalten', 'keyboard', Con
|
|||
|
||||
-- Event zum Umschalten der Brille
|
||||
RegisterNetEvent('nightvision:toggleGlasses', function(mode)
|
||||
local ped = PlayerPedId()
|
||||
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
|
||||
-- [Rest des Codes bleibt unverändert]
|
||||
end)
|
||||
|
||||
-- Behalte den alten Event-Namen für Kompatibilität
|
||||
|
@ -402,11 +117,12 @@ end)
|
|||
AddEventHandler('onResourceStop', function(resourceName)
|
||||
if (GetCurrentResourceName() ~= resourceName) then return end
|
||||
|
||||
-- Deaktiviere alle Effekte und entferne Objekte
|
||||
-- Deaktiviere alle Effekte
|
||||
DisableAllVisionModes()
|
||||
|
||||
if DoesEntityExist(flashlightObject) then
|
||||
DeleteEntity(flashlightObject)
|
||||
flashlightObject = nil
|
||||
-- Deaktiviere die Taschenlampe
|
||||
if flashlightActive then
|
||||
SetFlashLightKeepOnWhileMoving(false)
|
||||
flashlightActive = false
|
||||
end
|
||||
end)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue