148 lines
4.4 KiB
Lua
148 lines
4.4 KiB
Lua
|
QBCore = exports['qb-core']:GetCoreObject()
|
||
|
|
||
|
local ActiveVan = -1
|
||
|
local ActiveItems = {}
|
||
|
local LastVan = nil
|
||
|
local totalVans = #Config.Gunvans.vehicles
|
||
|
|
||
|
math.randomseed(os.time())
|
||
|
|
||
|
local function firstLaunch()
|
||
|
if not LastVan then
|
||
|
LastVan = os.time()
|
||
|
end
|
||
|
end
|
||
|
firstLaunch()
|
||
|
|
||
|
|
||
|
--Fordi laver du ActiveItems = Items, så laver den en REFERENCE istedet for at KOPIERE array'et over....
|
||
|
local function deepcopy(orig)
|
||
|
local orig_type = type(orig)
|
||
|
local copy
|
||
|
if orig_type == 'table' then
|
||
|
copy = {}
|
||
|
for orig_key, orig_value in next, orig, nil do
|
||
|
copy[deepcopy(orig_key)] = deepcopy(orig_value)
|
||
|
end
|
||
|
setmetatable(copy, deepcopy(getmetatable(orig)))
|
||
|
else
|
||
|
copy = orig
|
||
|
end
|
||
|
return copy
|
||
|
end
|
||
|
|
||
|
-- #### Spawn Van
|
||
|
local function spawnVan()
|
||
|
if ActiveVan ~= -1 or Config.Debug then
|
||
|
LastVan = os.time()
|
||
|
if Config.perVanItems then
|
||
|
ActiveItems = deepcopy(Config.Gunvans.vehicles[ActiveVan].items)
|
||
|
else
|
||
|
ActiveItems = deepcopy(Config.VanItems)
|
||
|
end
|
||
|
|
||
|
print("Van spawned at Coordinates: " ..
|
||
|
Config.Gunvans.vehicles[ActiveVan].coords.x ..
|
||
|
" " .. Config.Gunvans.vehicles[ActiveVan].coords.y .. " " .. Config.Gunvans.vehicles[ActiveVan].coords.z)
|
||
|
|
||
|
TriggerClientEvent('_hp_gv:client:_spawnVan', -1, ActiveVan)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- #### Delete Van
|
||
|
local function deleteVan()
|
||
|
Citizen.CreateThread(function()
|
||
|
Citizen.Wait(Config.duration * 60000)
|
||
|
ActiveVan = -1
|
||
|
ActiveItems = {}
|
||
|
TriggerClientEvent('_hp_gv:client:_destroyVan', -1)
|
||
|
startCountdown()
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
|
||
|
-- #### Start Van countdown
|
||
|
function startCountdown()
|
||
|
Citizen.CreateThread(function()
|
||
|
Citizen.Wait(Config.minutesBetweenVans * 60000)
|
||
|
ActiveVan = math.random(1, totalVans)
|
||
|
spawnVan()
|
||
|
deleteVan()
|
||
|
end)
|
||
|
|
||
|
end
|
||
|
startCountdown()
|
||
|
|
||
|
-- #### Give Item
|
||
|
local function GiveItem(src, item)
|
||
|
if ActiveItems[item].iAmount <= 0 then
|
||
|
return Config.NotifyEmpty(src, ActiveItems[item].label)
|
||
|
end
|
||
|
|
||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||
|
|
||
|
if Player.Functions.GetMoney('cash') < ActiveItems[item].price then
|
||
|
return Config.NotifyNoMoney(src, ActiveItems[item].label)
|
||
|
end
|
||
|
|
||
|
Player.Functions.RemoveMoney('cash', ActiveItems[item].price, 'Gun Van')
|
||
|
|
||
|
Config.InventoryExport(src, ActiveItems[item].item, 1)
|
||
|
if ActiveItems[item].weaponType == "pistol" then
|
||
|
Config.InventoryExport(src, "pistol_ammo", ActiveItems[item].aAmount)
|
||
|
end
|
||
|
if ActiveItems[item].triggerCops then
|
||
|
Config.EmergencyTrigger()
|
||
|
end
|
||
|
ActiveItems[item].iAmount = ActiveItems[item].iAmount - 1
|
||
|
Config.Notify(src, ActiveItems[item].label)
|
||
|
end
|
||
|
|
||
|
|
||
|
-- #### Debug stuff
|
||
|
if Config.Debug then
|
||
|
QBCore.Commands.Add('gv', '', {}, false, function(source, args)
|
||
|
TriggerClientEvent('_hp_gv:client:_destroyVan', -1)
|
||
|
ActiveVan = math.random(1, totalVans)
|
||
|
spawnVan()
|
||
|
end, Config.Permission)
|
||
|
|
||
|
QBCore.Commands.Add('dgv', '', {}, false, function(source, args)
|
||
|
ActiveVan = -1
|
||
|
ActiveItems = {}
|
||
|
TriggerClientEvent('_hp_gv:client:_destroyVan', -1)
|
||
|
end, Config.Permission)
|
||
|
end
|
||
|
|
||
|
-- #### Server: Give Item
|
||
|
RegisterNetEvent('_hp_gv:server:_giveItem')
|
||
|
AddEventHandler('_hp_gv:server:_giveItem', function(item)
|
||
|
local src = source
|
||
|
local playerPed = GetPlayerPed(src)
|
||
|
local Player = QBCore.Functions.GetPlayer(source)
|
||
|
local playerCoords = GetEntityCoords(playerPed)
|
||
|
local targetCoords = Config.Gunvans.vehicles[ActiveVan].coords
|
||
|
|
||
|
if #(playerCoords - targetCoords) > 5.5 then
|
||
|
Config.LogHandler(Player.PlayerData.citizenid .. " " .. Config.Lang.OutsideRange)
|
||
|
Config.LogHandler("Distance: " .. #(playerCoords - targetCoords) .. " - Max distance: 5.5")
|
||
|
|
||
|
if #(playerCoords - targetCoords) > 10 and Config.DropPlayer then
|
||
|
Config.LogHandler("GunVan | " .. Player.PlayerData.citizenid .. " " .. Config.Lang.OutsideRangeKick)
|
||
|
DropPlayer(src, Config.Lang.OutsideRangeKickPlayer)
|
||
|
end
|
||
|
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if ActiveVan ~= -1 or Config.Debug then
|
||
|
GiveItem(src, item)
|
||
|
else
|
||
|
Config.LogHandler("GunVan | " .. Player.PlayerData.citizenid .. " " .. Config.Lang.OutsideBuyHours)
|
||
|
Config.LogHandler("GunVan | " ..
|
||
|
Config.Lang.TimeUntilNext ..
|
||
|
" " .. Config.minutesBetweenVans * 60 - (os.time() - LastVan) .. " " .. Config.Lang.Seconds)
|
||
|
return
|
||
|
end
|
||
|
end)
|