forked from Rob7n/MM-Security-Guards
-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.lua
105 lines (83 loc) · 3.29 KB
/
script.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
-------------------------------------------------------------------- CREATE PEDS -------------------------------------------------------------------
function IsNearby(playerCoords, pedCoords)
return #(playerCoords - vector3(pedCoords.x, pedCoords.y, pedCoords.z)) <= Config.SpawnDistance
end
Citizen.CreateThread(function()
while true do
local playerCoords = GetEntityCoords(PlayerPedId())
for _, pedGroup in ipairs(Config.Peds) do
for _, location in ipairs(pedGroup.locations) do
local nearby = IsNearby(playerCoords, location)
local spawned = location.handle and DoesEntityExist(location.handle)
if nearby and not spawned then
local model = GetHashKey(pedGroup.model)
local pedType = pedGroup.pedType or 4
if IsModelInCdimage(model) then
RequestModel(model)
while not HasModelLoaded(model) do
Citizen.Wait(0)
end
local npc = CreatePed(pedType, model, location.x, location.y, location.z, location.heading, false, false)
SetModelAsNoLongerNeeded(model)
FreezeEntityPosition(npc, true) --Set to true to freeze peds
SetEntityInvincible(npc, false) --Set to true to make ped immortal
SetBlockingOfNonTemporaryEvents(npc, true) --Set to false to let npc react to environment
if pedGroup.scenario then
TaskStartScenarioInPlace(npc, pedGroup.scenario, 0, true)
elseif pedGroup.animation then
local blendInSpeed = pedGroup.animation.blendInSpeed or 1.0
local blendOutSpeed = pedGroup.animation.blendOutSpeed or 1.0
local duration = pedGroup.animation.duration or -1
local flag = pedGroup.animation.flag or 1
local playbackRate = pedGroup.animation.playbackRate or 1.0
if DoesAnimDictExist(pedGroup.animation.dict) then
RequestAnimDict(pedGroup.animation.dict)
while not HasAnimDictLoaded(pedGroup.animation.dict) do
Citizen.Wait(0)
end
TaskPlayAnim(npc, pedGroup.animation.dict, pedGroup.animation.name, blendInSpeed, blendOutSpeed, duration, flag, playbackRate, 0, 0, 0)
RemoveAnimDict(pedGroup.animation.dict)
else
print('Unknown animation dictionary: ' .. pedGroup.animation.dict)
end
elseif pedGroup.canPlayAmbientAnims then
SetPedCanPlayAmbientAnims(npc, true)
end
if pedGroup.weapons then
for _, weapon in ipairs(pedGroup.weapons) do
local ammo
if weapon.minAmmo and weapon.maxAmmo then
ammo = math.random(weapon.minAmmo, weapon.maxAmmo)
else
ammo = weapon.ammo
end
GiveWeaponToPed(npc, GetHashKey(weapon.name), ammo, true, false)
end
end
if pedGroup.defaultWeapon then
SetCurrentPedWeapon(npc, GetHashKey(pedGroup.defaultWeapon), true)
end
location.handle = npc
else
print('Invalid model: ' .. pedGroup.model)
end
elseif not nearby and spawned then
DeletePed(location.handle)
location.handle = nil
end
end
end
Citizen.Wait(1000)
end
end)
AddEventHandler('onResourceStop', function(resourceName)
if GetCurrentResourceName() == resourceName then
for _, pedGroup in ipairs(Config.Peds) do
for _, location in ipairs(pedGroup.locations) do
if DoesEntityExist(location.handle) then
DeletePed(location.handle)
end
end
end
end
end)