structura foldere
mutat kq- folders in un singur folder [kq]
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
function OnHeistCreated()
|
||||
|
||||
end
|
||||
|
||||
function OnVehicleStartDroppingOff(source, vehEntity)
|
||||
-- Server-side gang check: prevent non-gang members from dropping off stolen vehicles
|
||||
if Config.requireGang and not IsInGang(source) then
|
||||
TriggerClientEvent('kq_carheist:gangCheckFailed', source)
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function OnVehicleDroppedOff(source, vehicle, reward)
|
||||
|
||||
end
|
||||
|
||||
function OnTrackerRemoved(source, coords)
|
||||
|
||||
end
|
||||
|
||||
|
||||
----------------------
|
||||
-- TRACKERS
|
||||
----------------------
|
||||
RegisterServerEvent('kq_carheist:removeTracker')
|
||||
AddEventHandler('kq_carheist:removeTracker', function(vehKey, coords)
|
||||
sellableVehicles[vehKey].tracker = false
|
||||
sellableVehicles[vehKey].trackerCoords = coords
|
||||
TriggerClientEvent('kq_carheist:syncSellableVehicles', -1, sellableVehicles)
|
||||
Citizen.CreateThread(function()
|
||||
Citizen.Wait(Config.tracker.stayOnMapAfterRemovalTime)
|
||||
if sellableVehicles[vehKey] then
|
||||
sellableVehicles[vehKey].trackerCoords = nil
|
||||
end
|
||||
end)
|
||||
|
||||
OnTrackerRemoved(source, coords)
|
||||
end)
|
||||
@@ -0,0 +1,45 @@
|
||||
if Config.esxSettings.enabled then
|
||||
ESX = nil
|
||||
|
||||
if Config.esxSettings.useNewESXExport then
|
||||
ESX = exports['es_extended']:getSharedObject()
|
||||
else
|
||||
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
|
||||
end
|
||||
|
||||
function HasItem(player, item)
|
||||
local xPlayer = ESX.GetPlayerFromId(player)
|
||||
|
||||
return xPlayer.getInventoryItem(item).count >= 1
|
||||
end
|
||||
|
||||
function IsPolice(player)
|
||||
local xPlayer = ESX.GetPlayerFromId(player)
|
||||
if not xPlayer then
|
||||
return false
|
||||
end
|
||||
local job = xPlayer.getJob()
|
||||
|
||||
return Contains(Config.policeJobNames, job.name)
|
||||
end
|
||||
|
||||
function GetPoliceCount()
|
||||
local currentOfficers = 0
|
||||
for _, playerId in ipairs(GetPlayers()) do
|
||||
playerId = tonumber(playerId)
|
||||
if IsPolice(playerId) then
|
||||
currentOfficers = currentOfficers + 1
|
||||
end
|
||||
end
|
||||
return currentOfficers
|
||||
end
|
||||
|
||||
function AddMoney(player, amount)
|
||||
local xPlayer = ESX.GetPlayerFromId(player)
|
||||
if not xPlayer then
|
||||
return false
|
||||
end
|
||||
|
||||
xPlayer.addAccountMoney(Config.esxSettings.moneyAccount, amount)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,57 @@
|
||||
if Config.qbSettings.enabled then
|
||||
if Config.qbSettings.useNewQBExport then
|
||||
QBCore = exports['qb-core']:GetCoreObject()
|
||||
end
|
||||
|
||||
function HasItem(player, item)
|
||||
local xPlayer = QBCore.Functions.GetPlayer(player)
|
||||
|
||||
return xPlayer.Functions.GetItemByName(item)
|
||||
end
|
||||
|
||||
function IsPolice(player)
|
||||
local xPlayer = QBCore.Functions.GetPlayer(player)
|
||||
if not xPlayer then
|
||||
return false
|
||||
end
|
||||
|
||||
local job = xPlayer.PlayerData.job
|
||||
|
||||
return Contains(Config.policeJobNames, job.name)
|
||||
end
|
||||
|
||||
function IsInGang(player)
|
||||
local xPlayer = QBCore.Functions.GetPlayer(player)
|
||||
if not xPlayer then
|
||||
return false
|
||||
end
|
||||
|
||||
local gang = xPlayer.PlayerData.gang
|
||||
if not gang then
|
||||
return false
|
||||
end
|
||||
|
||||
return gang.name ~= nil and gang.name ~= 'none' and gang.name ~= ''
|
||||
end
|
||||
|
||||
function GetPoliceCount()
|
||||
local currentOfficers = 0
|
||||
for _, playerId in ipairs(GetPlayers()) do
|
||||
playerId = tonumber(playerId)
|
||||
if IsPolice(playerId) then
|
||||
currentOfficers = currentOfficers + 1
|
||||
end
|
||||
end
|
||||
return currentOfficers
|
||||
end
|
||||
|
||||
function AddMoney(player, amount)
|
||||
local xPlayer = QBCore.Functions.GetPlayer(player)
|
||||
|
||||
if not xPlayer then
|
||||
return false
|
||||
end
|
||||
|
||||
xPlayer.Functions.AddMoney(Config.qbSettings.moneyAccount, amount)
|
||||
end
|
||||
end
|
||||
Binary file not shown.
@@ -0,0 +1,252 @@
|
||||
if Config.esxSettings.enabled and Config.qbSettings.enabled then
|
||||
print('^1BOTH FRAMEWORKS ENABLED!! MAKE SURE TO ONLY ENABLE ONE FRAMEWORK IN THE CONFIG FILE!')
|
||||
end
|
||||
if not Config.esxSettings.enabled and not Config.qbSettings.enabled then
|
||||
print('^1NO FRAMEWORK ENABLED!! MAKE SURE TO ENABLE ONE FRAMEWORK IN THE CONFIG FILE!')
|
||||
end
|
||||
|
||||
-- Do not remove this!
|
||||
sellableVehicles = {}
|
||||
|
||||
newHeist = {
|
||||
player = nil,
|
||||
truck = nil,
|
||||
trailer = nil,
|
||||
npc = nil,
|
||||
passenger = nil,
|
||||
support = nil,
|
||||
supportEnabled = nil,
|
||||
weaponsEnabled = nil,
|
||||
passengerEnabled = nil,
|
||||
bulletproofTiresEnabled = nil,
|
||||
touches = 0,
|
||||
vehicles = {}
|
||||
}
|
||||
|
||||
heist = {}
|
||||
|
||||
function AttemptCreateHeist()
|
||||
EndHeist()
|
||||
|
||||
heist = json.decode(json.encode(newHeist))
|
||||
|
||||
heist.hash = math.random(1, 99999)
|
||||
|
||||
heist.startLocation = Config.startLocations[math.random(1, #Config.startLocations)]
|
||||
heist.endLocation = heist.startLocation.finish
|
||||
|
||||
local closestPlayer = nil
|
||||
local closestDistance = 99999.9
|
||||
|
||||
for _, playerId in ipairs(GetPlayers()) do
|
||||
playerId = tonumber(playerId)
|
||||
local playerCoords = GetEntityCoords(GetPlayerPed(playerId))
|
||||
|
||||
local distance = GetDistanceBetweenCoords(playerCoords.x, playerCoords.y, playerCoords.z, heist.startLocation.truck.x, heist.startLocation.truck.y, heist.startLocation.truck.z)
|
||||
|
||||
if distance < 120 then
|
||||
return false
|
||||
end
|
||||
|
||||
if closestDistance > distance then
|
||||
closestPlayer = playerId
|
||||
closestDistance = distance
|
||||
end
|
||||
end
|
||||
|
||||
if not closestPlayer then
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
heist.weaponsEnabled = true
|
||||
if math.random(0, 100) > Config.weaponChance then
|
||||
heist.weaponsEnabled = false
|
||||
end
|
||||
|
||||
local odds = 0
|
||||
local eventKey = nil
|
||||
local hit = math.random(0, 100)
|
||||
for k, event in pairs(Config.events) do
|
||||
if event.chance + odds > hit and not eventKey then
|
||||
eventKey = k
|
||||
else
|
||||
odds = odds + event.chance
|
||||
end
|
||||
end
|
||||
if not eventKey then
|
||||
eventKey = math.random(1, #Config.events)
|
||||
end
|
||||
|
||||
heist.event = eventKey
|
||||
local event = Config.events[eventKey]
|
||||
|
||||
local empty = 0
|
||||
for k, slot in pairs(Settings.trailerSlots) do
|
||||
if math.random(0, 100) <= event.vehicleSlotChance or (empty + event.minimumVehicles == #Settings.trailerSlots) then
|
||||
local vehicle = event.vehicles[math.random(1, #event.vehicles)]
|
||||
heist.vehicles[k] = { data = vehicle, vehicle = nil }
|
||||
else
|
||||
empty = empty + 1
|
||||
end
|
||||
end
|
||||
|
||||
heist.passengerEnabled = true
|
||||
if math.random(0, 100) > event.passengerChance then
|
||||
heist.passengerEnabled = false
|
||||
end
|
||||
|
||||
heist.bulletproofTiresEnabled = true
|
||||
if math.random(0, 100) > event.bulletproofTiresChance then
|
||||
heist.bulletproofTiresEnabled = false
|
||||
end
|
||||
|
||||
heist.supportEnabled = true
|
||||
if math.random(0, 100) > event.supportChance then
|
||||
heist.supportEnabled = false
|
||||
end
|
||||
|
||||
heist.player = closestPlayer
|
||||
Debug('starting heist, initiator: ' .. closestPlayer)
|
||||
TriggerClientEvent('kq_carheist:createHeist', closestPlayer, heist)
|
||||
|
||||
OnHeistCreated()
|
||||
return true
|
||||
end
|
||||
|
||||
function EndHeist()
|
||||
DeleteIfExists(heist.truck)
|
||||
DeleteIfExists(heist.trailer)
|
||||
DeleteIfExists(heist.npc)
|
||||
DeleteIfExists(heist.passenger)
|
||||
|
||||
if heist.supportEnabled and heist.support then
|
||||
DeleteIfExists(heist.support.vehicle)
|
||||
for k, ped in pairs(heist.support.peds) do
|
||||
DeleteIfExists(ped)
|
||||
end
|
||||
end
|
||||
|
||||
TriggerClientEvent('kq_carheist:endHeist', -1)
|
||||
|
||||
heist = json.decode(json.encode(newHeist))
|
||||
end
|
||||
|
||||
RegisterServerEvent('kq_carheist:heistCreated')
|
||||
AddEventHandler('kq_carheist:heistCreated', function(syncedHeist)
|
||||
if source ~= heist.player then
|
||||
return
|
||||
end
|
||||
|
||||
heist = syncedHeist
|
||||
|
||||
TriggerClientEvent('kq_carheist:startDriver', -1)
|
||||
TriggerClientEvent('kq_carheist:syncHeist', -1, heist)
|
||||
|
||||
if Config.announceTruckDepartureToPlayers then
|
||||
TriggerClientEvent('kq_carheist:announceHeist', -1, vector3(heist.startLocation.truck.x, heist.startLocation.truck.y, heist.startLocation.truck.z))
|
||||
end
|
||||
end)
|
||||
|
||||
if Config.debug then
|
||||
RegisterCommand('cheist', function(source, args)
|
||||
AttemptCreateHeist()
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
local sleep = 20000
|
||||
if heist.player and heist.truck then
|
||||
sleep = 4000
|
||||
|
||||
local truckCoords = GetEntityCoords(NetworkGetEntityFromNetworkId(heist.truck))
|
||||
local trailerCoords = GetEntityCoords(NetworkGetEntityFromNetworkId(heist.trailer))
|
||||
local ended = false
|
||||
|
||||
Debug('Truck Owner: ' .. NetworkGetEntityOwner(NetworkGetEntityFromNetworkId(heist.truck)))
|
||||
Debug(truckCoords)
|
||||
|
||||
Debug('Trailer Owner: ' .. NetworkGetEntityOwner(NetworkGetEntityFromNetworkId(heist.trailer)))
|
||||
Debug(trailerCoords)
|
||||
|
||||
if not DoesEntityExist(NetworkGetEntityFromNetworkId(heist.truck)) or not DoesEntityExist(NetworkGetEntityFromNetworkId(heist.trailer)) or not DoesEntityExist(NetworkGetEntityFromNetworkId(heist.npc)) then
|
||||
Debug('Ending heist')
|
||||
EndHeist()
|
||||
ended = true
|
||||
end
|
||||
|
||||
if not ended then
|
||||
Debug('Remaining distance: ' .. GetDistanceBetweenCoords(truckCoords.x, truckCoords.y, truckCoords.z, heist.endLocation.x, heist.endLocation.y, heist.endLocation.z))
|
||||
|
||||
if GetDistanceBetweenCoords(truckCoords.x, truckCoords.y, truckCoords.z, heist.endLocation.x, heist.endLocation.y, heist.endLocation.z) < 18.0 and GetDistanceBetweenCoords(trailerCoords.x, trailerCoords.y, trailerCoords.z, heist.endLocation.x, heist.endLocation.y, heist.endLocation.z) < 25.0 then
|
||||
Debug('Truck arrived to its destination. Ending heist')
|
||||
TriggerClientEvent('kq_carheist:truckArrived', -1)
|
||||
EndHeist()
|
||||
end
|
||||
end
|
||||
end
|
||||
Citizen.Wait(sleep)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
Citizen.Wait(30000)
|
||||
while true do
|
||||
if Config.minimumOfficers > 0 then
|
||||
local enough = false
|
||||
while not enough do
|
||||
local currentOfficers = GetPoliceCount()
|
||||
|
||||
if currentOfficers >= Config.minimumOfficers then
|
||||
enough = true
|
||||
else
|
||||
Debug('Couldn\'t start a new heist. Not enough police online')
|
||||
Citizen.Wait(120000)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if heist.player ~= nil and heist.trailer and DoesEntityExist(NetworkGetEntityFromNetworkId(heist.trailer)) and not Config.ignoreDistances then
|
||||
Citizen.Wait(20000)
|
||||
|
||||
local tooClose = true
|
||||
while tooClose do
|
||||
local closestDistance = 99999.9
|
||||
|
||||
for _, playerId in ipairs(GetPlayers()) do
|
||||
playerId = tonumber(playerId)
|
||||
local playerCoords = GetEntityCoords(GetPlayerPed(playerId))
|
||||
|
||||
local trailerCoords = GetEntityCoords(NetworkGetEntityFromNetworkId(heist.trailer))
|
||||
|
||||
local distance = GetDistanceBetweenCoords(playerCoords.x, playerCoords.y, playerCoords.z, trailerCoords.x, trailerCoords.y, trailerCoords.z)
|
||||
|
||||
Debug('Distance: ' .. distance)
|
||||
if closestDistance > distance then
|
||||
closestDistance = distance
|
||||
end
|
||||
end
|
||||
|
||||
if closestDistance > 100.0 then
|
||||
tooClose = false
|
||||
else
|
||||
Debug('Couldn\'t start a new heist. Someone is too near the old trailer')
|
||||
Citizen.Wait(60000)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local success = false
|
||||
while not success do
|
||||
success = AttemptCreateHeist()
|
||||
if not success then
|
||||
Debug('Couldn\'t start a new heist. Someone is too close the spawn location')
|
||||
Citizen.Wait(60000)
|
||||
end
|
||||
end
|
||||
Citizen.Wait(Config.heistSpawnTime * 60000)
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user