forked from Simnation/Main
83 lines
No EOL
2.5 KiB
Lua
83 lines
No EOL
2.5 KiB
Lua
QBCore = exports['qb-core']:GetCoreObject()
|
|
|
|
Player = nil
|
|
local npcHandle = nil
|
|
local isNPCSpawned = false
|
|
|
|
Citizen.CreateThread(function()
|
|
while Player == nil do
|
|
Player = exports['qb-core']:GetPlayerData()
|
|
Wait(0)
|
|
end
|
|
end)
|
|
|
|
-- Funktion zum Spawnen des NPCs
|
|
function SpawnGuardNPC(npc)
|
|
-- Ped Model laden
|
|
RequestModel(npc.model)
|
|
local timeout = 0
|
|
while not HasModelLoaded(npc.model) and timeout < 100 do
|
|
timeout = timeout + 1
|
|
print("Warte auf Model-Load...")
|
|
Wait(100)
|
|
end
|
|
|
|
if not HasModelLoaded(npc.model) then
|
|
print("Model konnte nicht geladen werden!")
|
|
return
|
|
end
|
|
print("Model erfolgreich geladen, erstelle NPC...")
|
|
|
|
-- NPC erstellen
|
|
npcHandle = CreatePed(4, npc.model, npc.spawn.x, npc.spawn.y, npc.spawn.z, npc.spawn.w, false, true)
|
|
if not DoesEntityExist(npcHandle) then
|
|
print("NPC konnte nicht erstellt werden!")
|
|
return
|
|
end
|
|
|
|
print("NPC erfolgreich erstellt mit Handle: " .. tostring(npcHandle))
|
|
-- NPC Eigenschaften setzen
|
|
SetEntityAsMissionEntity(npcHandle, true, true)
|
|
SetPedDefaultComponentVariation(npcHandle)
|
|
--[[ SetEntityAsMissionEntity(npcHandle, true, true)
|
|
SetBlockingOfNonTemporaryEvents(npcHandle, true)
|
|
SetPedDiesWhenInjured(npcHandle, false)
|
|
SetPedCanPlayAmbientAnims(npcHandle, true)
|
|
SetPedCanRagdollFromPlayerImpact(npcHandle, false)
|
|
SetEntityInvincible(npcHandle, true)
|
|
FreezeEntityPosition(npcHandle, true) ]]
|
|
|
|
-- Optional: Animation für den NPC
|
|
TaskStartScenarioInPlace(npcHandle, "WORLD_HUMAN_GUARD_STAND", 0, true)
|
|
|
|
isNPCSpawned = true
|
|
end
|
|
|
|
-- Funktion zum Entfernen des NPCs
|
|
function RemoveGuardNPC()
|
|
if DoesEntityExist(npcHandle) then
|
|
DeleteEntity(npcHandle)
|
|
isNPCSpawned = false
|
|
end
|
|
end
|
|
|
|
-- Hauptthread zum Überprüfen der Spieler-Position
|
|
CreateThread(function()
|
|
while true do
|
|
local playerPed = PlayerPedId()
|
|
local playerCoords = GetEntityCoords(playerPed)
|
|
|
|
for k, v in pairs(Config.Zonen) do
|
|
local dist = #(playerCoords - vector3(v.NPC.spawn.x, v.NPC.spawn.y, v.NPC.spawn.z))
|
|
local spawnDistance = v.NPC.distance
|
|
|
|
if dist < spawnDistance and not isNPCSpawned then
|
|
SpawnGuardNPC(v.NPC)
|
|
elseif dist > spawnDistance and isNPCSpawned then
|
|
RemoveGuardNPC()
|
|
end
|
|
end
|
|
|
|
Wait(1000) -- Überprüfung jede Sekunde
|
|
end
|
|
end) |