Major improvements, see desc

- Fixed selling same vehicle multiple times
- Fixed selling <no> vehicle
- Major security improvements
- Removed buying vehicle for society
- Code cleanup
- Fixed depopping vehicle not working (not respecting network owner)
This commit is contained in:
ElPumpo
2020-02-08 12:36:18 +01:00
parent 5e6cd29ca8
commit 14fbc69357
11 changed files with 371 additions and 523 deletions
+156 -261
View File
@@ -6,7 +6,7 @@ local CurrentActionData = {}
local IsInShopMenu = false
local Categories = {}
local Vehicles = {}
local LastVehicles = {}
local currentDisplayVehicle
local CurrentVehicleData
ESX = nil
@@ -42,6 +42,16 @@ Citizen.CreateThread(function()
end
end)
function getVehicleLabelFromModel(model)
for k,v in ipairs(Vehicles) do
if v.model == model then
return v.name
end
end
return
end
RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(xPlayer)
ESX.PlayerData = xPlayer
@@ -71,26 +81,33 @@ AddEventHandler('esx_vehicleshop:sendVehicles', function(vehicles)
Vehicles = vehicles
end)
function DeleteShopInsideVehicles()
while #LastVehicles > 0 do
local vehicle = LastVehicles[1]
function DeleteDisplayVehicleInsideShop()
local attempt = 0
ESX.Game.DeleteVehicle(vehicle)
table.remove(LastVehicles, 1)
if currentDisplayVehicle and DoesEntityExist(currentDisplayVehicle) then
while DoesEntityExist(currentDisplayVehicle) and not NetworkHasControlOfEntity(currentDisplayVehicle) and attempt < 100 do
Citizen.Wait(100)
NetworkRequestControlOfEntity(currentDisplayVehicle)
attempt = attempt + 1
end
if DoesEntityExist(currentDisplayVehicle) and NetworkHasControlOfEntity(currentDisplayVehicle) then
ESX.Game.DeleteVehicle(currentDisplayVehicle)
end
end
end
function ReturnVehicleProvider()
ESX.TriggerServerCallback('esx_vehicleshop:getCommercialVehicles', function(vehicles)
local elements = {}
local returnPrice
for i=1, #vehicles, 1 do
returnPrice = ESX.Math.Round(vehicles[i].price * 0.75)
for k,v in ipairs(vehicles) do
local returnPrice = ESX.Math.Round(v.price * 0.75)
local vehicleLabel = getVehicleLabelFromModel(v.vehicle)
table.insert(elements, {
label = ('%s [<span style="color:orange;">%s</span>]'):format(vehicles[i].name, _U('generic_shopitem', ESX.Math.GroupDigits(returnPrice))),
value = vehicles[i].name
label = ('%s [<span style="color:orange;">%s</span>]'):format(vehicleLabel, _U('generic_shopitem', ESX.Math.GroupDigits(returnPrice))),
value = v.vehicle
})
end
@@ -145,7 +162,7 @@ function OpenShopMenu()
if IsModelInCdimage(GetHashKey(Vehicles[i].model)) then
table.insert(vehiclesByCategory[Vehicles[i].category], Vehicles[i])
else
print(('esx_vehicleshop: vehicle "%s" does not exist'):format(Vehicles[i].model))
print(('[esx_vehicleshop] [^3ERROR^7] Vehicle "%s" does not exist'):format(Vehicles[i].model))
end
end
@@ -190,147 +207,58 @@ function OpenShopMenu()
}}, function(data2, menu2)
if data2.current.value == 'yes' then
if Config.EnablePlayerManagement then
ESX.TriggerServerCallback('esx_vehicleshop:buyVehicleSociety', function(hasEnoughMoney)
if hasEnoughMoney then
ESX.TriggerServerCallback('esx_vehicleshop:buyCarDealerVehicle', function(success)
if success then
IsInShopMenu = false
DeleteShopInsideVehicles()
local playerPed = PlayerPedId()
DeleteDisplayVehicleInsideShop()
CurrentAction = 'shop_menu'
CurrentActionMsg = _U('shop_menu')
CurrentActionData = {}
local playerPed = PlayerPedId()
FreezeEntityPosition(playerPed, false)
SetEntityVisible(playerPed, true)
SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos)
menu2.close()
menu.close()
ESX.ShowNotification(_U('vehicle_purchased'))
else
ESX.ShowNotification(_U('broke_company'))
end
end, 'cardealer', vehicleData.model)
end, vehicleData.model)
else
local playerData = ESX.GetPlayerData()
local generatedPlate = GeneratePlate()
if Config.EnableSocietyOwnedVehicles and playerData.job.grade_name == 'boss' then
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'shop_confirm_buy_type', {
title = _U('purchase_type'),
align = 'top-left',
elements = {
{label = _U('staff_type'), value = 'personnal'},
{label = _U('society_type'), value = 'society'}
}}, function(data3, menu3)
ESX.TriggerServerCallback('esx_vehicleshop:buyVehicle', function(success)
if success then
IsInShopMenu = false
menu2.close()
menu.close()
DeleteDisplayVehicleInsideShop()
if data3.current.value == 'personnal' then
ESX.TriggerServerCallback('esx_vehicleshop:buyVehicle', function(hasEnoughMoney)
if hasEnoughMoney then
IsInShopMenu = false
menu3.close()
menu2.close()
menu.close()
DeleteShopInsideVehicles()
ESX.Game.SpawnVehicle(vehicleData.model, Config.Zones.ShopOutside.Pos, Config.Zones.ShopOutside.Heading, function(vehicle)
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
local newPlate = GeneratePlate()
local vehicleProps = ESX.Game.GetVehicleProperties(vehicle)
vehicleProps.plate = newPlate
SetVehicleNumberPlateText(vehicle, newPlate)
if Config.EnableOwnedVehicles then
TriggerServerEvent('esx_vehicleshop:setVehicleOwned', vehicleProps)
end
ESX.ShowNotification(_U('vehicle_purchased'))
end)
FreezeEntityPosition(playerPed, false)
SetEntityVisible(playerPed, true)
else
ESX.ShowNotification(_U('not_enough_money'))
end
end, vehicleData.model)
elseif data3.current.value == 'society' then
ESX.TriggerServerCallback('esx_vehicleshop:buyVehicleSociety', function(hasEnoughMoney)
if hasEnoughMoney then
IsInShopMenu = false
menu3.close()
menu2.close()
menu.close()
DeleteShopInsideVehicles()
ESX.Game.SpawnVehicle(vehicleData.model, Config.Zones.ShopOutside.Pos, Config.Zones.ShopOutside.Heading, function(vehicle)
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
local newPlate = GeneratePlate()
local vehicleProps = ESX.Game.GetVehicleProperties(vehicle)
vehicleProps.plate = newPlate
SetVehicleNumberPlateText(vehicle, newPlate)
TriggerServerEvent('esx_vehicleshop:setVehicleOwnedSociety', playerData.job.name, vehicleProps)
ESX.ShowNotification(_U('vehicle_purchased'))
end)
FreezeEntityPosition(playerPed, false)
SetEntityVisible(playerPed, true)
else
ESX.ShowNotification(_U('broke_company'))
end
end, playerData.job.name, vehicleData.model)
end
end, function(data3, menu3)
menu3.close()
end)
else
ESX.TriggerServerCallback('esx_vehicleshop:buyVehicle', function(hasEnoughMoney)
if hasEnoughMoney then
IsInShopMenu = false
menu2.close()
menu.close()
DeleteShopInsideVehicles()
ESX.Game.SpawnVehicle(vehicleData.model, Config.Zones.ShopOutside.Pos, Config.Zones.ShopOutside.Heading, function(vehicle)
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
local newPlate = GeneratePlate()
local vehicleProps = ESX.Game.GetVehicleProperties(vehicle)
vehicleProps.plate = newPlate
SetVehicleNumberPlateText(vehicle, newPlate)
if Config.EnableOwnedVehicles then
TriggerServerEvent('esx_vehicleshop:setVehicleOwned', vehicleProps)
end
ESX.ShowNotification(_U('vehicle_purchased'))
end)
ESX.Game.SpawnVehicle(vehicleData.model, Config.Zones.ShopOutside.Pos, Config.Zones.ShopOutside.Heading, function(vehicle)
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
SetVehicleNumberPlateText(vehicle, generatedPlate)
FreezeEntityPosition(playerPed, false)
SetEntityVisible(playerPed, true)
else
ESX.ShowNotification(_U('not_enough_money'))
end
end, vehicleData.model)
end
end)
else
ESX.ShowNotification(_U('not_enough_money'))
end
end, vehicleData.model, generatedPlate)
end
else
menu2.close()
end
end, function(data2, menu2)
menu2.close()
end)
end, function(data, menu)
menu.close()
DeleteShopInsideVehicles()
DeleteDisplayVehicleInsideShop()
local playerPed = PlayerPedId()
CurrentAction = 'shop_menu'
@@ -346,22 +274,22 @@ function OpenShopMenu()
local vehicleData = vehiclesByCategory[data.current.name][data.current.value + 1]
local playerPed = PlayerPedId()
DeleteShopInsideVehicles()
DeleteDisplayVehicleInsideShop()
WaitForVehicleToLoad(vehicleData.model)
ESX.Game.SpawnLocalVehicle(vehicleData.model, Config.Zones.ShopInside.Pos, Config.Zones.ShopInside.Heading, function(vehicle)
table.insert(LastVehicles, vehicle)
currentDisplayVehicle = vehicle
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
FreezeEntityPosition(vehicle, true)
SetModelAsNoLongerNeeded(vehicleData.model)
end)
end)
DeleteShopInsideVehicles()
DeleteDisplayVehicleInsideShop()
WaitForVehicleToLoad(firstVehicleData.model)
ESX.Game.SpawnLocalVehicle(firstVehicleData.model, Config.Zones.ShopInside.Pos, Config.Zones.ShopInside.Heading, function(vehicle)
table.insert(LastVehicles, vehicle)
currentDisplayVehicle = vehicle
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
FreezeEntityPosition(vehicle, true)
SetModelAsNoLongerNeeded(firstVehicleData.model)
@@ -374,16 +302,16 @@ function WaitForVehicleToLoad(modelHash)
if not HasModelLoaded(modelHash) then
RequestModel(modelHash)
BeginTextCommandBusyString('STRING')
BeginTextCommandBusyspinnerOn('STRING')
AddTextComponentSubstringPlayerName(_U('shop_awaiting_model'))
EndTextCommandBusyString(4)
EndTextCommandBusyspinnerOn(4)
while not HasModelLoaded(modelHash) do
Citizen.Wait(0)
DisableAllControlActions(0)
end
RemoveLoadingPrompt()
BusyspinnerOff()
end
end
@@ -402,7 +330,6 @@ function OpenResellerMenu()
{label = _U('get_rented_vehicles'), value = 'get_rented_vehicles'},
{label = _U('set_vehicle_owner_sell'), value = 'set_vehicle_owner_sell'},
{label = _U('set_vehicle_owner_rent'), value = 'set_vehicle_owner_rent'},
{label = _U('set_vehicle_owner_sell_society'), value = 'set_vehicle_owner_sell_society'},
{label = _U('deposit_stock'), value = 'put_stock'},
{label = _U('take_stock'), value = 'get_stock'}
}}, function(data, menu)
@@ -417,125 +344,94 @@ function OpenResellerMenu()
elseif action == 'pop_vehicle' then
OpenPopVehicleMenu()
elseif action == 'depop_vehicle' then
DeleteShopInsideVehicles()
if currentDisplayVehicle then
DeleteDisplayVehicleInsideShop()
else
ESX.ShowNotification(_U('no_current_vehicle'))
end
elseif action == 'return_provider' then
ReturnVehicleProvider()
elseif action == 'create_bill' then
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer == -1 or closestDistance > 3.0 then
ESX.ShowNotification(_U('no_players'))
return
end
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'set_vehicle_owner_sell_amount', {
title = _U('invoice_amount')
}, function(data2, menu2)
local amount = tonumber(data2.value)
if closestPlayer ~= -1 and closestDistance < 3 then
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'set_vehicle_owner_sell_amount', {
title = _U('invoice_amount')
}, function(data2, menu2)
local amount = tonumber(data2.value)
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
else
menu2.close()
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer == -1 or closestDistance > 3.0 then
ESX.ShowNotification(_U('no_players'))
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
else
TriggerServerEvent('esx_billing:sendBill', GetPlayerServerId(closestPlayer), 'society_cardealer', _U('car_dealer'), tonumber(data2.value))
end
end
end, function(data2, menu2)
menu2.close()
end)
menu2.close()
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer == -1 or closestDistance > 3.0 then
ESX.ShowNotification(_U('no_players'))
else
TriggerServerEvent('esx_billing:sendBill', GetPlayerServerId(closestPlayer), 'society_cardealer', _U('car_dealer'), tonumber(data2.value))
end
end
end, function(data2, menu2)
menu2.close()
end)
else
ESX.ShowNotification(_U('no_players'))
end
elseif action == 'get_rented_vehicles' then
OpenRentedVehiclesMenu()
elseif action == 'set_vehicle_owner_sell' then
if currentDisplayVehicle then
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer == -1 or closestDistance > 3.0 then
ESX.ShowNotification(_U('no_players'))
else
local newPlate = GeneratePlate()
local vehicleProps = ESX.Game.GetVehicleProperties(LastVehicles[#LastVehicles])
local model = CurrentVehicleData.model
vehicleProps.plate = newPlate
SetVehicleNumberPlateText(LastVehicles[#LastVehicles], newPlate)
TriggerServerEvent('esx_vehicleshop:sellVehicle', model)
TriggerServerEvent('esx_vehicleshop:addToList', GetPlayerServerId(closestPlayer), model, newPlate)
if Config.EnableOwnedVehicles then
TriggerServerEvent('esx_vehicleshop:setVehicleOwnedPlayerId', GetPlayerServerId(closestPlayer), vehicleProps)
ESX.ShowNotification(_U('vehicle_set_owned', vehicleProps.plate, GetPlayerName(closestPlayer)))
else
ESX.ShowNotification(_U('vehicle_sold_to', vehicleProps.plate, GetPlayerName(closestPlayer)))
end
end
elseif action == 'set_vehicle_owner_sell_society' then
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer == -1 or closestDistance > 3.0 then
ESX.ShowNotification(_U('no_players'))
else
ESX.TriggerServerCallback('esx:getOtherPlayerData', function(xPlayer)
local newPlate = GeneratePlate()
local vehicleProps = ESX.Game.GetVehicleProperties(LastVehicles[#LastVehicles])
local model = CurrentVehicleData.model
if closestPlayer ~= -1 and closestDistance < 3 then
local newPlate = GeneratePlate()
local vehicleProps = ESX.Game.GetVehicleProperties(currentDisplayVehicle)
vehicleProps.plate = newPlate
SetVehicleNumberPlateText(LastVehicles[#LastVehicles], newPlate)
TriggerServerEvent('esx_vehicleshop:sellVehicle', model)
TriggerServerEvent('esx_vehicleshop:addToList', GetPlayerServerId(closestPlayer), model, newPlate)
if Config.EnableSocietyOwnedVehicles then
TriggerServerEvent('esx_vehicleshop:setVehicleOwnedSociety', xPlayer.job.name, vehicleProps)
ESX.ShowNotification(_U('vehicle_set_owned', vehicleProps.plate, GetPlayerName(closestPlayer)))
else
ESX.ShowNotification(_U('vehicle_sold_to', vehicleProps.plate, GetPlayerName(closestPlayer)))
end
end, GetPlayerServerId(closestPlayer))
end
elseif action == 'set_vehicle_owner_rent' then
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'set_vehicle_owner_rent_amount', {
title = _U('rental_amount')
}, function(data2, menu2)
local amount = tonumber(data2.value)
if amount == nil then
ESX.ShowNotification(_U('invalid_amount'))
SetVehicleNumberPlateText(currentDisplayVehicle, newPlate)
TriggerServerEvent('esx_vehicleshop:setVehicleOwnedPlayerId', GetPlayerServerId(closestPlayer), vehicleProps, CurrentVehicleData.model, CurrentVehicleData.name)
currentDisplayVehicle = nil
else
menu2.close()
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer == -1 or closestDistance > 5.0 then
ESX.ShowNotification(_U('no_players'))
else
local newPlate = 'RENT' .. string.upper(ESX.GetRandomString(4))
local vehicleProps = ESX.Game.GetVehicleProperties(LastVehicles[#LastVehicles])
local model = CurrentVehicleData.model
vehicleProps.plate = newPlate
SetVehicleNumberPlateText(LastVehicles[#LastVehicles], newPlate)
TriggerServerEvent('esx_vehicleshop:rentVehicle', model, vehicleProps.plate, GetPlayerName(closestPlayer), CurrentVehicleData.price, amount, GetPlayerServerId(closestPlayer))
if Config.EnableOwnedVehicles then
TriggerServerEvent('esx_vehicleshop:setVehicleOwnedPlayerId', GetPlayerServerId(closestPlayer), vehicleProps)
end
ESX.ShowNotification(_U('vehicle_set_rented', vehicleProps.plate, GetPlayerName(closestPlayer)))
end
ESX.ShowNotification(_U('no_players'))
end
end, function(data2, menu2)
menu2.close()
end)
else
ESX.ShowNotification(_U('no_current_vehicle'))
end
elseif action == 'set_vehicle_owner_rent' then
if currentDisplayVehicle then
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer ~= -1 and closestDistance < 3 then
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'set_vehicle_owner_rent_amount', {
title = _U('rental_amount')
}, function(data2, menu2)
local amount = tonumber(data2.value)
if not amount then
ESX.ShowNotification(_U('invalid_amount'))
else
menu2.close()
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
if closestPlayer ~= -1 and closestDistance < 3 then
local newPlate = 'RENT' .. string.upper(ESX.GetRandomString(4))
local model = CurrentVehicleData.model
SetVehicleNumberPlateText(currentDisplayVehicle, newPlate)
TriggerServerEvent('esx_vehicleshop:rentVehicle', model, newPlate, amount, GetPlayerServerId(closestPlayer))
currentDisplayVehicle = nil
else
ESX.ShowNotification(_U('no_players'))
end
end
end, function(data2, menu2)
menu2.close()
end)
else
ESX.ShowNotification(_U('no_players'))
end
else
ESX.ShowNotification(_U('no_current_vehicle'))
end
end
end, function(data, menu)
menu.close()
@@ -550,10 +446,12 @@ function OpenPopVehicleMenu()
ESX.TriggerServerCallback('esx_vehicleshop:getCommercialVehicles', function(vehicles)
local elements = {}
for i=1, #vehicles, 1 do
for k,v in ipairs(vehicles) do
local vehicleLabel = getVehicleLabelFromModel(v.vehicle)
table.insert(elements, {
label = ('%s [MSRP <span style="color:green;">%s</span>]'):format(vehicles[i].name, _U('generic_shopitem', ESX.Math.GroupDigits(vehicles[i].price))),
value = vehicles[i].name
label = ('%s [MSRP <span style="color:green;">%s</span>]'):format(vehicleLabel, _U('generic_shopitem', ESX.Math.GroupDigits(v.price))),
value = v.vehicle
})
end
@@ -563,11 +461,10 @@ function OpenPopVehicleMenu()
elements = elements
}, function(data, menu)
local model = data.current.value
DeleteShopInsideVehicles()
DeleteDisplayVehicleInsideShop()
ESX.Game.SpawnVehicle(model, Config.Zones.ShopInside.Pos, Config.Zones.ShopInside.Heading, function(vehicle)
table.insert(LastVehicles, vehicle)
currentDisplayVehicle = vehicle
for i=1, #Vehicles, 1 do
if model == Vehicles[i].model then
@@ -586,10 +483,12 @@ function OpenRentedVehiclesMenu()
ESX.TriggerServerCallback('esx_vehicleshop:getRentedVehicles', function(vehicles)
local elements = {}
for i=1, #vehicles, 1 do
for k,v in ipairs(vehicles) do
local vehicleLabel = getVehicleLabelFromModel(v.name)
table.insert(elements, {
label = ('%s: %s - <span style="color:orange;">%s</span>'):format(vehicles[i].playerName, vehicles[i].name, vehicles[i].plate),
value = vehicles[i].name
label = ('%s: %s - <span style="color:orange;">%s</span>'):format(v.playerName, vehicleLabel, v.plate),
value = v.name
})
end
@@ -660,10 +559,12 @@ function OpenGetStocksMenu()
local elements = {}
for i=1, #items, 1 do
table.insert(elements, {
label = 'x' .. items[i].count .. ' ' .. items[i].label,
value = items[i].name
})
if items[i].count > 0 then
table.insert(elements, {
label = 'x' .. items[i].count .. ' ' .. items[i].label,
value = items[i].name
})
end
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'stocks_menu', {
@@ -774,7 +675,6 @@ AddEventHandler('esx_vehicleshop:hasEnteredMarker', function(zone)
end
elseif zone == 'GiveBackVehicle' and Config.EnablePlayerManagement then
local playerPed = PlayerPedId()
if IsPedInAnyVehicle(playerPed, false) then
@@ -784,14 +684,11 @@ AddEventHandler('esx_vehicleshop:hasEnteredMarker', function(zone)
CurrentActionMsg = _U('vehicle_menu')
CurrentActionData = {vehicle = vehicle}
end
elseif zone == 'ResellVehicle' then
local playerPed = PlayerPedId()
if IsPedSittingInAnyVehicle(playerPed) then
local vehicle = GetVehiclePedIsIn(playerPed, false)
local vehicle = GetVehiclePedIsIn(playerPed, false)
local vehicleData, model, resellPrice, plate
if GetPedInVehicleSeat(vehicle, -1) == playerPed then
@@ -817,15 +714,12 @@ AddEventHandler('esx_vehicleshop:hasEnteredMarker', function(zone)
plate = plate
}
end
end
elseif zone == 'BossActions' and Config.EnablePlayerManagement and ESX.PlayerData.job ~= nil and ESX.PlayerData.job.name == 'cardealer' and ESX.PlayerData.job.grade_name == 'boss' then
CurrentAction = 'boss_actions_menu'
CurrentActionMsg = _U('shop_menu')
CurrentActionData = {}
end
end)
@@ -842,13 +736,14 @@ AddEventHandler('onResourceStop', function(resource)
if IsInShopMenu then
ESX.UI.Menu.CloseAll()
DeleteShopInsideVehicles()
local playerPed = PlayerPedId()
FreezeEntityPosition(playerPed, false)
SetEntityVisible(playerPed, true)
SetEntityCoords(playerPed, Config.Zones.ShopEntering.Pos)
end
DeleteDisplayVehicleInsideShop()
end
end)
@@ -874,8 +769,8 @@ Citizen.CreateThread(function()
SetBlipScale (blip, 1.0)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(_U('car_dealer'))
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(_U('car_dealer'))
EndTextCommandSetBlipName(blip)
end)
@@ -979,4 +874,4 @@ Citizen.CreateThread(function()
LoadInterior(interiorID)
EnableInteriorProp(interiorID, 'csr_beforeMission') -- Load large window
RefreshInterior(interiorID)
end)
end)