diff --git a/[esx_addons]/esx_vehicleshop/client/main.lua b/[esx_addons]/esx_vehicleshop/client/main.lua
index 357869f6..e6065b83 100644
--- a/[esx_addons]/esx_vehicleshop/client/main.lua
+++ b/[esx_addons]/esx_vehicleshop/client/main.lua
@@ -1,42 +1,28 @@
local HasAlreadyEnteredMarker, IsInShopMenu = false, false
local CurrentAction, CurrentActionMsg, LastZone, currentDisplayVehicle, CurrentVehicleData
local CurrentActionData, Vehicles, Categories = {}, {}, {}
+local VehiclesByModel = {}
+local vehiclesByCategory = {}
function getVehicleFromModel(model)
- for i = 1, #Vehicles do
- local vehicle = Vehicles[i]
- if vehicle.model == model then
- return vehicle
- end
- end
+ return VehiclesByModel[model]
end
-function getVehicles()
- ESX.TriggerServerCallback('esx_vehicleshop:getCategories', function(categories)
- Categories = categories
- end)
-
- ESX.TriggerServerCallback('esx_vehicleshop:getVehicles', function(vehicles)
- Vehicles = vehicles
- end)
-end
-
-AddEventHandler("onResourceStart", getVehicles)
-
function PlayerManagement()
- if Config.EnablePlayerManagement then
- if ESX.PlayerData.job.name == 'cardealer' then
- Config.Zones.ShopEntering.Type = 1
+ if not Config.EnablePlayerManagement then
+ return
+ end
- if ESX.PlayerData.job.grade_name == 'boss' then
- Config.Zones.BossActions.Type = 1
- end
+ if ESX.PlayerData.job.name ~= 'cardealer' then
+ Config.Zones.ShopEntering.Type = -1
+ Config.Zones.BossActions.Type = -1
+ Config.Zones.ResellVehicle.Type = -1
+ return
+ end
+ Config.Zones.ShopEntering.Type = 1
- else
- Config.Zones.ShopEntering.Type = -1
- Config.Zones.BossActions.Type = -1
- Config.Zones.ResellVehicle.Type = -1
- end
+ if ESX.PlayerData.job.grade_name == 'boss' then
+ Config.Zones.BossActions.Type = 1
end
end
@@ -45,21 +31,35 @@ AddEventHandler('esx:playerLoaded', function(xPlayer)
ESX.PlayerData = xPlayer
PlayerManagement()
- getVehicles()
+ TriggerServerEvent("esx_vehicleshop:getVehiclesAndCategories")
end)
-RegisterNetEvent('esx_vehicleshop:sendCategories')
-AddEventHandler('esx_vehicleshop:sendCategories', function(categories)
- Categories = categories
-end)
-
-RegisterNetEvent('esx_vehicleshop:sendVehicles')
-AddEventHandler('esx_vehicleshop:sendVehicles', function(vehicles)
+RegisterNetEvent('esx_vehicleshop:updateVehiclesAndCategories', function(vehicles, categories, vehiclesByModel)
Vehicles = vehicles
+ Categories = categories
+
+ VehiclesByModel = vehiclesByModel
+
+ table.sort(Vehicles, function(a, b)
+ return a.name < b.name
+ end)
+
+ for _, vehicle in ipairs(Vehicles) do
+ if IsModelInCdimage(joaat(vehicle.model)) then
+ local category = vehicle.category
+
+ if not vehiclesByCategory[category] then
+ vehiclesByCategory[category] = {}
+ end
+
+ table.insert(vehiclesByCategory[category], vehicle)
+ else
+ print(('[^3WARNING^7] Ignoring vehicle ^5%s^7 due to invalid Model'):format(vehicle.model))
+ end
+ end
end)
-
-RegisterNetEvent('esx:setJob') AddEventHandler('esx:setJob', PlayerManagement)
+RegisterNetEvent('esx:setJob', PlayerManagement)
function DeleteDisplayVehicleInsideShop()
local attempt = 0
@@ -81,7 +81,7 @@ function ReturnVehicleProvider()
ESX.TriggerServerCallback('esx_vehicleshop:getCommercialVehicles', function(vehicles)
local elements = {}
- for k,v in ipairs(vehicles) do
+ for k, v in ipairs(vehicles) do
local returnPrice = ESX.Math.Round(v.price * 0.75)
local vehicleLabel = getVehicleFromModel(v.vehicle).label
@@ -135,28 +135,9 @@ function OpenShopMenu()
SetEntityVisible(playerPed, false)
SetEntityCoords(playerPed, Config.Zones.ShopInside.Pos)
- local vehiclesByCategory = {}
local elements = {}
local firstVehicleData = nil
- for i=1, #Categories, 1 do
- vehiclesByCategory[Categories[i].name] = {}
- end
-
- for i=1, #Vehicles, 1 do
- if IsModelInCdimage(joaat(Vehicles[i].model)) then
- table.insert(vehiclesByCategory[Vehicles[i].category], Vehicles[i])
- else
- print(('[^3WARNING^7] Ignoring vehicle ^5%s^7 due to invalid Model'):format(Vehicles[i].model))
- end
- end
-
- for k,v in pairs(vehiclesByCategory) do
- table.sort(v, function(a, b)
- return a.name < b.name
- end)
- end
-
for i=1, #Categories, 1 do
local category = Categories[i]
local categoryVehicles = vehiclesByCategory[category.name]
@@ -439,7 +420,7 @@ function OpenPopVehicleMenu()
local vehicleLabel = getVehicleFromModel(v.vehicle).label
table.insert(elements, {
- label = ('%s [MSRP %s]'):format(vehicleLabel, TranslateCap('generic_shopitem', ESX.Math.GroupDigits(v.price))),
+ label = ('%s [%s]'):format(vehicleLabel, TranslateCap('generic_shopitem', ESX.Math.GroupDigits(v.price))),
value = v.vehicle
})
end
@@ -630,21 +611,18 @@ function OpenPutStocksMenu()
end)
end
-AddEventHandler('esx_vehicleshop:hasEnteredMarker', function(zone)
+function hasEnteredMarker(zone)
if zone == 'ShopEntering' then
-
- if Config.EnablePlayerManagement then
- if ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'cardealer' then
- CurrentAction = 'reseller_menu'
- CurrentActionMsg = TranslateCap('shop_menu')
- CurrentActionData = {}
- end
- else
+ if not Config.EnablePlayerManagement then
CurrentAction = 'shop_menu'
CurrentActionMsg = TranslateCap('shop_menu')
CurrentActionData = {}
end
-
+ if ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'cardealer' then
+ CurrentAction = 'reseller_menu'
+ CurrentActionMsg = TranslateCap('shop_menu')
+ CurrentActionData = {}
+ end
elseif zone == 'GiveBackVehicle' and Config.EnablePlayerManagement then
local playerPed = PlayerPedId()
@@ -696,15 +674,15 @@ AddEventHandler('esx_vehicleshop:hasEnteredMarker', function(zone)
CurrentActionMsg = TranslateCap('shop_menu')
CurrentActionData = {}
end
-end)
+end
-AddEventHandler('esx_vehicleshop:hasExitedMarker', function(zone)
+function hasExitedMarker(zone)
if not IsInShopMenu then
ESX.UI.Menu.CloseAll()
end
ESX.HideUI()
CurrentAction = nil
-end)
+end
AddEventHandler('onResourceStop', function(resource)
if resource == GetCurrentResourceName() then
@@ -736,8 +714,8 @@ if Config.EnablePlayerManagement then
end
-- Create Blips
-CreateThread(function()
- if Config.Blip.show then
+if Config.Blip.show then
+ CreateThread(function()
local blip = AddBlipForCoord(Config.Zones.ShopEntering.Pos)
SetBlipSprite (blip, Config.Blip.Sprite)
@@ -748,8 +726,8 @@ CreateThread(function()
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(TranslateCap('car_dealer'))
EndTextCommandSetBlipName(blip)
- end
-end)
+ end)
+end
-- Enter / Exit marker events & Draw Markers
CreateThread(function()
@@ -777,12 +755,12 @@ CreateThread(function()
if (isInMarker and not HasAlreadyEnteredMarker) or (isInMarker and LastZone ~= currentZone) then
HasAlreadyEnteredMarker, LastZone = true, currentZone
LastZone = currentZone
- TriggerEvent('esx_vehicleshop:hasEnteredMarker', currentZone)
+ hasEnteredMarker(currentZone)
end
if not isInMarker and HasAlreadyEnteredMarker then
HasAlreadyEnteredMarker = false
- TriggerEvent('esx_vehicleshop:hasExitedMarker', LastZone)
+ hasExitedMarker(LastZone)
end
if letSleep then