Implemented plate generation from esx_migrate

This commit is contained in:
ElPumpo
2018-07-24 16:20:52 +02:00
parent 1f6cbe9d8d
commit 6a4ccf0cd7
7 changed files with 105 additions and 12 deletions
+3 -3
View File
@@ -1,9 +1,9 @@
root = true
[*]
indent_size = 2
indent_style = space
end_of_line = lf
indent_size = 4
indent_style = tab
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
+2 -1
View File
@@ -2,7 +2,7 @@ resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937'
description 'ESX Vehicle Shop'
version '1.1.0'
version '1.2.0'
server_scripts {
'@mysql-async/lib/MySQL.lua',
@@ -26,5 +26,6 @@ client_scripts {
'locales/fr.lua',
'locales/sv.lua',
'config.lua',
'client/utils.lua',
'client/main.lua'
}
+13 -4
View File
@@ -419,9 +419,13 @@ function OpenResellerMenu ()
if closestPlayer == -1 or closestDistance > 3.0 then
ESX.ShowNotification(_U('no_players'))
else
SetVehicleNumberPlateText(LastVehicles[#LastVehicles], string.upper(ESX.GetRandomString(8)))
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)
@@ -441,10 +445,12 @@ function OpenResellerMenu ()
ESX.ShowNotification(_U('no_players'))
else
ESX.TriggerServerCallback('esx:getOtherPlayerData', function (xPlayer)
SetVehicleNumberPlateText(LastVehicles[#LastVehicles], string.upper(ESX.GetRandomString(8)))
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)
if Config.EnableSocietyOwnedVehicles then
@@ -476,9 +482,12 @@ function OpenResellerMenu ()
if closestPlayer == -1 or closestDistance > 5.0 then
ESX.ShowNotification(_U('no_players'))
else
SetVehicleNumberPlateText(LastVehicles[#LastVehicles], 'RENT' .. string.upper(ESX.GetRandomString(4)))
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))
+69
View File
@@ -0,0 +1,69 @@
local NumberCharset = {}
local Charset = {}
for i = 48, 57 do table.insert(NumberCharset, string.char(i)) end
for i = 65, 90 do table.insert(Charset, string.char(i)) end
for i = 97, 122 do table.insert(Charset, string.char(i)) end
function GeneratePlate()
local generatedPlate
local doBreak = false
while true do
Citizen.Wait(2)
math.randomseed(GetGameTimer())
if Config.PlateUseSpace then
generatedPlate = string.upper(GetRandomLetter(Config.PlateLetters) .. ' ' .. GetRandomNumber(Config.PlateNumbers))
else
generatedPlate = string.upper(GetRandomLetter(Config.PlateLetters) .. GetRandomNumber(Config.PlateNumbers))
end
ESX.TriggerServerCallback('esx_vehicleshop:isPlateTaken', function (isPlateTaken)
if not isPlateTaken then
doBreak = true
end
end, generatedPlate)
if doBreak then
break
end
end
return generatedPlate
end
-- mixing async with sync tasks
function IsPlateTaken(plate)
local callback = 'waiting'
ESX.TriggerServerCallback('esx_vehicleshop:isPlateTaken', function (isPlateTaken)
callback = isPlateTaken
end, plate)
while type(callback) == 'string' do
Citizen.Wait(0)
end
return callback
end
function GetRandomNumber(length)
Citizen.Wait(1)
math.randomseed(GetGameTimer())
if length > 0 then
return GetRandomNumber(length - 1) .. NumberCharset[math.random(1, #NumberCharset)]
else
return ''
end
end
function GetRandomLetter(length)
Citizen.Wait(1)
math.randomseed(GetGameTimer())
if length > 0 then
return GetRandomLetter(length - 1) .. Charset[math.random(1, #Charset)]
else
return ''
end
end
+6
View File
@@ -8,6 +8,12 @@ Config.EnableSocietyOwnedVehicles = false
Config.ResellPercentage = 50
Config.Locale = 'fr'
-- looks like this: 'LLL NNN'
-- The maximum plate length is 8 chars (including spaces & symbols), don't go past it!
Config.PlateLetters = 3
Config.PlateNumbers = 3
Config.PlateUseSpace = true
Config.Zones = {
ShopEntering = {
+3 -3
View File
@@ -40,10 +40,10 @@ Locales['en'] = {
['shop_menu'] = 'press ~INPUT_CONTEXT~ to access the menu',
['the_boss'] = 'boss',
['vehicle_dealer'] = 'vehicle - Car Dealer',
['vehicle_menu'] = 'press ~INPUT_CONTEXT~ to make your vehicle',
['vehicle_menu'] = 'press ~INPUT_CONTEXT~ to give back the rented vehicle',
['vehicle_purchased'] = 'you bought a vehicle',
['vehicle_set_owned'] = 'Vehicle ~y~%s~s~ has been assigned to ~b~%s~s~',
['vehicle_set_rented'] = 'Vehicle ~y~%s~s~ has been rented to ~b~%s~s~',
['vehicle_set_owned'] = 'vehicle ~y~%s~s~ has been assigned to ~b~%s~s~',
['vehicle_set_rented'] = 'vehicle ~y~%s~s~ has been rented to ~b~%s~s~',
['vehicle_sold'] = 'the vehicle has been ~g~sold~s~',
['vehicle_sold_to'] = 'the vehicle with plate ~y~%s~s~ has been sold to ~b~%s~s~',
['wash_money'] = 'money laundering',
+9 -1
View File
@@ -31,7 +31,7 @@ function LoadVehicles()
for j=1, #Categories, 1 do
if Categories[j].name == vehicle.category then
vehicle.categoryLabel = Categories[j].label
break --todo confirm
break
end
end
@@ -371,6 +371,14 @@ ESX.RegisterServerCallback('esx_vehicleshop:getPlayerInventory', function (sourc
cb({ items = items })
end)
ESX.RegisterServerCallback('esx_vehicleshop:isPlateTaken', function (source, cb, plate)
MySQL.Async.fetchAll('SELECT * FROM owned_vehicles WHERE @plate = plate', {
['@plate'] = plate
}, function (result)
cb(result[1] ~= nil)
end)
end)
if Config.EnablePvCommand then
TriggerEvent('es:addGroupCommand', 'pv', 'user', function(source, args, user)
TriggerClientEvent('esx_vehicleshop:openPersonnalVehicleMenu', source)