diff --git a/[esx_addons]/esx_dmvschool/client/main.lua b/[esx_addons]/esx_dmvschool/client/main.lua
index 719cce1c..51264d78 100644
--- a/[esx_addons]/esx_dmvschool/client/main.lua
+++ b/[esx_addons]/esx_dmvschool/client/main.lua
@@ -1,7 +1,3 @@
-local CurrentAction = nil
-local CurrentActionMsg = nil
-local CurrentActionData = nil
-local Licenses = {}
local CurrentTest = nil
local CurrentTestType = nil
local CurrentVehicle = nil
@@ -21,33 +17,28 @@ end
function StartTheoryTest()
CurrentTest = 'theory'
-
SendNUIMessage({
openQuestion = true
})
-
ESX.SetTimeout(200, function()
SetNuiFocus(true, true)
end)
-
-
+ ESX.HideUI()
end
function StopTheoryTest(success)
CurrentTest = nil
-
SendNUIMessage({
openQuestion = false
})
-
SetNuiFocus(false)
-
if success then
TriggerServerEvent('esx_dmvschool:addLicense', 'dmv')
ESX.ShowNotification(TranslateCap('passed_test'))
else
ESX.ShowNotification(TranslateCap('failed_test'))
end
+ ESX.TextUI(TranslateCap('press_open_menu'))
end
function StartDriveTest(type)
@@ -62,7 +53,6 @@ function StartDriveTest(type)
CurrentVehicle = vehicle
LastVehicleHealth = GetEntityHealth(vehicle)
failedTest = false
-
local playerPed = PlayerPedId()
TaskWarpPedIntoVehicle(playerPed, vehicle, -1)
SetVehicleFuelLevel(vehicle, 100.0)
@@ -78,95 +68,74 @@ function StopDriveTest(success)
else
ESX.ShowNotification(TranslateCap('failed_test'))
end
-
CurrentTest = nil
CurrentTestType = nil
end
function SetCurrentZoneType(type)
-CurrentZoneType = type
+ CurrentZoneType = type
end
function OpenDMVSchoolMenu()
- local ownedLicenses = {}
-
- for i=1, #Licenses, 1 do
- ownedLicenses[Licenses[i].type] = true
- end
-
- local elements = {
- {unselectable = true, icon = "fas fa-car", title = TranslateCap("driving_school")}
- }
-
- if not ownedLicenses['dmv'] then
- elements[#elements+1] = {
- icon = "fas fa-car",
- title = (('%s: %s'):format(TranslateCap('theory_test'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['dmv'])))),
- value = "theory_test"
- }
- end
-
- if ownedLicenses['dmv'] then
- if not ownedLicenses['drive'] then
- elements[#elements+1] = {
- icon = "fas fa-car",
- title = (('%s: %s'):format(TranslateCap('road_test_car'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive'])))),
- value = "drive_test",
- type = "drive"
- }
- end
-
- if not ownedLicenses['drive_bike'] then
- elements[#elements+1] = {
- icon = "fas fa-car",
- title = (('%s: %s'):format(TranslateCap('road_test_bike'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive_bike'])))),
- value = "drive_test",
- type = "drive_bike"
- }
- end
-
- if not ownedLicenses['drive_truck'] then
- elements[#elements+1] = {
- icon = "fas fa-car",
- title = (('%s: %s'):format(TranslateCap('road_test_truck'), TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices['drive_truck'])))),
- value = "drive_test",
- type = "drive_truck"
- }
- end
- end
-
- ESX.OpenContext("right", elements, function(menu,element)
- if element.value == "theory_test" then
- ESX.TriggerServerCallback('esx_dmvschool:canYouPay', function(haveMoney)
- if haveMoney then
- ESX.CloseContext()
- StartTheoryTest()
- else
- ESX.ShowNotification(TranslateCap('not_enough_money'))
- end
- end, 'dmv')
- elseif element.value == "drive_test" then
- ESX.TriggerServerCallback('esx_dmvschool:canYouPay', function(haveMoney)
- if haveMoney then
- ESX.CloseContext()
- StartDriveTest(element.type)
- else
- ESX.ShowNotification(TranslateCap('not_enough_money'))
- end
- end, element.type)
- end
- end, function(menu)
- CurrentAction = 'dmvschool_menu'
- CurrentActionMsg = TranslateCap('press_open_menu')
- CurrentActionData = {}
- end)
+ ESX.TriggerServerCallback('esx_license:getLicenses', function(licenses)
+ ESX.HideUI()
+
+ local ownedLicenses = {}
+ for i=1, #licenses do
+ ownedLicenses[licenses[i].type] = true
+ end
+
+ local elements = {
+ { unselectable = true, icon = "fas fa-car", title = TranslateCap("driving_school") }
+ }
+
+ local function addLicenseOption(icon, titleKey, priceKey, value, licType)
+ elements[#elements+1] = {
+ icon = icon,
+ title = (('%s: %s'):format(
+ TranslateCap(titleKey),
+ TranslateCap('school_item', ESX.Math.GroupDigits(Config.Prices[priceKey]))
+ )),
+ value = value,
+ type = licType
+ }
+ end
+
+ if not ownedLicenses['dmv'] then
+ addLicenseOption("fas fa-id-card", "theory", "dmv", "theory", "dmv")
+ else
+ local driveTests = {
+ { icon = "fas fa-car", key = "drive", label = "road_test_car" },
+ { icon = "fas fa-motorcycle", key = "drive_bike", label = "road_test_bike" },
+ { icon = "fas fa-truck", key = "drive_truck", label = "road_test_truck" }
+ }
+ for _, test in ipairs(driveTests) do
+ if not ownedLicenses[test.key] then
+ addLicenseOption(test.icon, test.label, test.key, "drive_test", test.key)
+ end
+ end
+ end
+
+ ESX.OpenContext("right", elements, function(menu, element)
+ ESX.TriggerServerCallback('esx_dmvschool:canYouPay', function(haveMoney)
+ if not haveMoney then
+ return ESX.ShowNotification(TranslateCap('not_enough_money'))
+ end
+ ESX.CloseContext()
+ if element.value == "theory" then
+ StartTheoryTest()
+ else
+ StartDriveTest(element.type)
+ end
+ end, element.type)
+ end, function(menu)
+ ESX.TextUI(TranslateCap('press_open_menu'))
+ end)
+ end, GetPlayerServerId(PlayerId()))
end
RegisterNUICallback('question', function(data, cb)
- SendNUIMessage({
- openSection = 'question'
- })
-
+ SendNUIMessage({openSection = 'question'})
cb()
end)
@@ -181,24 +150,14 @@ RegisterNUICallback('kick', function(data, cb)
end)
AddEventHandler('esx_dmvschool:hasEnteredMarker', function(zone)
- if zone == 'DMVSchool' then
- CurrentAction = 'dmvschool_menu'
- CurrentActionMsg = TranslateCap('press_open_menu')
- CurrentActionData = {}
- end
+ ESX.TextUI(TranslateCap('press_open_menu'))
end)
AddEventHandler('esx_dmvschool:hasExitedMarker', function(zone)
- CurrentAction = nil
ESX.CloseContext()
+ ESX.HideUI()
end)
-RegisterNetEvent('esx_dmvschool:loadLicenses')
-AddEventHandler('esx_dmvschool:loadLicenses', function(licenses)
- Licenses = licenses
-end)
-
--- Create Blips
CreateThread(function()
local blip = AddBlipForCoord(Config.Zones.DMVSchool.Pos.x, Config.Zones.DMVSchool.Pos.y, Config.Zones.DMVSchool.Pos.z)
@@ -213,29 +172,38 @@ CreateThread(function()
EndTextCommandSetBlipName(blip)
end)
--- Display markers
CreateThread(function()
while true do
local sleep = 1500
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
- for k,v in pairs(Config.Zones) do
+ local isInMarker = false
+ local currentZone = nil
+
+ for k, v in pairs(Config.Zones) do
local Pos = vector3(v.Pos.x, v.Pos.y, v.Pos.z)
- if(v.Type ~= -1 and #(coords - Pos) < Config.DrawDistance) then
+ local distance = #(coords - Pos)
+
+ if v.Type ~= -1 and distance < Config.DrawDistance then
sleep = 0
- DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, v.Size.x, v.Size.y, v.Size.z, v.Color.r, v.Color.g, v.Color.b, 100, false, true, 2, false, false, false, false)
+ DrawMarker(v.Type, v.Pos.x, v.Pos.y, v.Pos.z,0.0, 0.0, 0.0, 0, 0.0, 0.0,v.Size.x, v.Size.y, v.Size.z,v.Color.r, v.Color.g, v.Color.b, 100,false, true, 2, false, false, false, false)
+ end
+
+ if distance < v.Size.x then
+ sleep = 0
+ isInMarker = true
+ currentZone = k
end
end
if CurrentTest == 'theory' then
-
sleep = 0
- DisableControlAction(0, 1, true) -- LookLeftRight
- DisableControlAction(0, 2, true) -- LookUpDown
- DisablePlayerFiring(playerPed, true) -- Disable weapon firing
- DisableControlAction(0, 142, true) -- MeleeAttackAlternate
- DisableControlAction(0, 106, true) -- VehicleMouseControlOverride
+ DisableControlAction(0, 1, true)
+ DisableControlAction(0, 2, true)
+ DisablePlayerFiring(playerPed, true)
+ DisableControlAction(0, 142, true)
+ DisableControlAction(0, 106, true)
end
if CurrentTest == 'drive' then
@@ -246,7 +214,6 @@ CreateThread(function()
if DoesBlipExist(CurrentBlip) then
RemoveBlip(CurrentBlip)
end
-
CurrentTest = nil
StopDriveTest(DriveErrors < Config.MaxErrors)
else
@@ -254,18 +221,16 @@ CreateThread(function()
if DoesBlipExist(CurrentBlip) then
RemoveBlip(CurrentBlip)
end
-
CurrentBlip = AddBlipForCoord(Config.CheckPoints[nextCheckPoint].Pos.x, Config.CheckPoints[nextCheckPoint].Pos.y, Config.CheckPoints[nextCheckPoint].Pos.z)
- SetBlipRoute(CurrentBlip, 1)
-
+ SetBlipRoute(CurrentBlip, true)
LastCheckPoint = CurrentCheckPoint
end
-
- local Pos = vector3(Config.CheckPoints[nextCheckPoint].Pos.x,Config.CheckPoints[nextCheckPoint].Pos.y,Config.CheckPoints[nextCheckPoint].Pos.z)
+
+ local Pos = vector3(Config.CheckPoints[nextCheckPoint].Pos.x, Config.CheckPoints[nextCheckPoint].Pos.y, Config.CheckPoints[nextCheckPoint].Pos.z)
local distance = #(coords - Pos)
-
+
if distance <= Config.DrawDistance then
- DrawMarker(1, Config.CheckPoints[nextCheckPoint].Pos.x, Config.CheckPoints[nextCheckPoint].Pos.y, Config.CheckPoints[nextCheckPoint].Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, 1.5, 1.5, 1.5, 102, 204, 102, 100, false, true, 2, false, false, false, false)
+ DrawMarker(1, Pos.x, Pos.y, Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, 1.5, 1.5, 1.5, 102, 204, 102, 100, false, true, 2, false, false, false, false)
end
if distance <= 3.0 then
@@ -273,33 +238,17 @@ CreateThread(function()
CurrentCheckPoint = CurrentCheckPoint + 1
end
end
- end
-
- if CurrentAction then
+ else
sleep = 0
- ESX.ShowHelpNotification(CurrentActionMsg)
-
- if (IsControlJustReleased(0, 38)) and (CurrentAction == 'dmvschool_menu') then
+ if isInMarker and IsControlJustReleased(0, 38) then
OpenDMVSchoolMenu()
- CurrentAction = nil
- end
- end
-
- local isInMarker = false
- local currentZone = nil
-
- for k,v in pairs(Config.Zones) do
- local Pos = vector3(v.Pos.x, v.Pos.y, v.Pos.z)
- if(#(coords - Pos) < v.Size.x) then
- sleep = 0
- isInMarker = true
- currentZone = k
+ ESX.HideUI()
end
end
if (isInMarker and not HasAlreadyEnteredMarker) or (isInMarker and LastZone ~= currentZone) then
HasAlreadyEnteredMarker = true
- LastZone = currentZone
+ LastZone = currentZone
TriggerEvent('esx_dmvschool:hasEnteredMarker', currentZone)
end
@@ -307,17 +256,16 @@ CreateThread(function()
HasAlreadyEnteredMarker = false
TriggerEvent('esx_dmvschool:hasExitedMarker', LastZone)
end
+
Wait(sleep)
end
end)
-
function TestFailedGoToLastCheckPoint()
CurrentCheckPoint = #Config.CheckPoints - 1
failedTest = true
end
--- Speed / Damage control
CreateThread(function()
while true do
local sleep = 1500
@@ -330,12 +278,9 @@ CreateThread(function()
local speed = GetEntitySpeed(vehicle) * Config.SpeedMultiplier
local health = GetEntityHealth(vehicle)
- -- Speed check
for k, v in pairs(Config.SpeedLimits) do
-
if CurrentZoneType == k and speed > v then
DriveErrors += 1
-
if DriveErrors <= Config.MaxErrors then
ESX.ShowNotification(TranslateCap('driving_too_fast', v))
ESX.ShowNotification(TranslateCap('errors', DriveErrors, Config.MaxErrors))
@@ -345,14 +290,12 @@ CreateThread(function()
end
end
- -- Vehicle damage check
if health < LastVehicleHealth then
DriveErrors += 1
if DriveErrors <= Config.MaxErrors then
ESX.ShowNotification(TranslateCap('you_damaged_veh'))
ESX.ShowNotification(TranslateCap('errors', DriveErrors, Config.MaxErrors))
end
-
LastVehicleHealth = health
sleep = 1500
end
@@ -368,5 +311,4 @@ CreateThread(function()
end
Wait(sleep)
end
-end)
-
+end)
\ No newline at end of file
diff --git a/[esx_addons]/esx_dmvschool/fxmanifest.lua b/[esx_addons]/esx_dmvschool/fxmanifest.lua
index 9bd93c57..83e149f5 100644
--- a/[esx_addons]/esx_dmvschool/fxmanifest.lua
+++ b/[esx_addons]/esx_dmvschool/fxmanifest.lua
@@ -15,7 +15,7 @@ server_scripts {
'@es_extended/locale.lua',
'locales/*.lua',
'config.lua',
- 'server/main.lua'
+ 'server/*.lua'
}
client_scripts {
diff --git a/[esx_addons]/esx_dmvschool/locales/de.lua b/[esx_addons]/esx_dmvschool/locales/de.lua
index ad705cc9..72e2d9f8 100644
--- a/[esx_addons]/esx_dmvschool/locales/de.lua
+++ b/[esx_addons]/esx_dmvschool/locales/de.lua
@@ -27,4 +27,7 @@ Locales['de'] = {
['errors'] = 'Fehler: ~r~%s/%s',
['you_damaged_veh'] = 'Du hast das Fahrzeug beschädigt!',
['not_enough_money'] = 'Du hast nicht genug Geld!',
+ ['latestVersion'] = "Du verwendest die neueste Version!",
+ ['needUpdateResource'] = "Du musst die neueste Version herunterladen! Du verwendest derzeit eine veraltete Version!",
+ ['errorGetCurrentVersion'] = "Beim Versuch, die aktuelle Version abzurufen, ist ein Fehler aufgetreten!",
}
diff --git a/[esx_addons]/esx_dmvschool/locales/en.lua b/[esx_addons]/esx_dmvschool/locales/en.lua
index 935fa835..3e6e0289 100644
--- a/[esx_addons]/esx_dmvschool/locales/en.lua
+++ b/[esx_addons]/esx_dmvschool/locales/en.lua
@@ -27,4 +27,8 @@ Locales['en'] = {
['errors'] = 'mistakes: ~r~%s/%s',
['you_damaged_veh'] = 'you damaged the vehicle',
['not_enough_money'] = 'You don\'t have enough money',
+ ['yourVersion'] = "Your version: ",
+ ['latestVersion'] = "You are using the latest version!",
+ ['needUpdateResource'] = "You need download latest version! You are using an old version at the moment!",
+ ['errorGetCurrentVersion'] = "An error occurred while trying to get the current version!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/es.lua b/[esx_addons]/esx_dmvschool/locales/es.lua
index 999b6741..3e6e0289 100644
--- a/[esx_addons]/esx_dmvschool/locales/es.lua
+++ b/[esx_addons]/esx_dmvschool/locales/es.lua
@@ -1,30 +1,34 @@
-Locales['es'] = {
- ['you_paid'] = 'Pagaste %s$ a la autoescuela',
- ['go_next_point'] = '¡Vete al siguiente punto!',
- ['in_town_speed'] = '¡Entraste a la ciudad, presta atención a tu velocidad! Límite de velocidad: %s km/h',
- ['next_point_speed'] = '¡Vete al siguiente punto! Límite de velocidad: %s km/h',
- ['stop_for_ped'] = '~r~Para en el paso de peatones',
- ['good_lets_cont'] = 'Bien, continua',
- ['stop_look_left'] = '~r~Para y mira a la izquierda. Límite de velocidad: %s km/h',
- ['good_turn_right'] = 'Bien, gira a la derecha y sigue la línea',
- ['watch_traffic_lightson'] = '¡Mira el tráfico y enciende las luces!',
- ['stop_for_passing'] = '¡~r~Para para que pasen los vehículos!',
- ['hway_time'] = '¡Es hora de conducir por la autopista! Límite de velocidad: %s km/h',
- ['gratz_stay_alert'] = '¡Estoy impresionado pero no dejes de estar ~r~alerta mientras conduces!',
- ['passed_test'] = 'Has aprobado el examen, ¡Enorabuena!',
- ['failed_test'] = 'Has ~r~suspendido el examen, ¡Más suerte la próxima vez!',
- ['theory_test'] = 'Examen teórico de conducir',
- ['road_test_car'] = 'Examen práctico de conducir',
- ['road_test_bike'] = 'Examen práctico de moto',
- ['road_test_truck'] = 'Examen práctico de camiones',
- ['school_item'] = '%s$',
- ['driving_school'] = 'Escuela de conducción',
- ['press_open_menu'] = 'Pulsa [E] para abrir el menú',
- ['driving_school_blip'] = 'Autoescuela',
- ['driving_test_complete'] = 'Examen de conducir finalizado',
- ['driving_too_fast'] = '¡~r~Estás conduciendo muy rápido, el límite de velocidad actual es: %s km/h!',
+Locales['en'] = {
+ ['you_paid'] = 'you paid $%s to the DMV school',
+ ['go_next_point'] = 'go to the next point!',
+ ['in_town_speed'] = 'entered town, pay attention to your speed! Speed Limit: %s km/h',
+ ['next_point_speed'] = 'go to the next point! Speed Limit: %s km/h',
+ ['stop_for_ped'] = '~r~Stop for the pedestrian crossing',
+ ['good_lets_cont'] = 'Good, continue.',
+ ['stop_look_left'] = '~r~Stop and look left. Speed Limit: %s km/h',
+ ['good_turn_right'] = 'Good, turn right and follow the line',
+ ['watch_traffic_lightson'] = 'watch the traffic and turn on your lights!',
+ ['stop_for_passing'] = '~r~Stop for passing vehicles!',
+ ['hway_time'] = 'it\'s time to drive on the highway! Speed Limit: %s km/h',
+ ['gratz_stay_alert'] = 'i\'m impressed, but don\'t forget to stay ~r~alert whilst driving!',
+ ['passed_test'] = 'you passed the test, congratulations!',
+ ['failed_test'] = 'you ~r~failed the test, better luck next time!',
+ ['theory_test'] = 'theoretical Driving Test',
+ ['road_test_car'] = 'driving Test',
+ ['road_test_bike'] = 'motorcycle Skills Test',
+ ['road_test_truck'] = 'truck Skills Test',
+ ['school_item'] = '$%s',
+ ['driving_school'] = 'driving School',
+ ['press_open_menu'] = 'press [E] to open the menu',
+ ['driving_school_blip'] = 'driving School',
+ ['driving_test_complete'] = 'driving test completed',
+ ['driving_too_fast'] = '~r~You\'re driving too fast, the current speed limit is: %s km/h!',
['test_failed_go_to_start_point'] = '~r~Go to the starting point, because you failed the test!',
- ['errors'] = 'Fallos: ~r~%s / %s',
- ['you_damaged_veh'] = '¡Has dañado el vehículo!',
- ['not_enough_money'] = 'No tienes suficiente dinero'
+ ['errors'] = 'mistakes: ~r~%s/%s',
+ ['you_damaged_veh'] = 'you damaged the vehicle',
+ ['not_enough_money'] = 'You don\'t have enough money',
+ ['yourVersion'] = "Your version: ",
+ ['latestVersion'] = "You are using the latest version!",
+ ['needUpdateResource'] = "You need download latest version! You are using an old version at the moment!",
+ ['errorGetCurrentVersion'] = "An error occurred while trying to get the current version!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/fi.lua b/[esx_addons]/esx_dmvschool/locales/fi.lua
index eea7d747..80a2f58c 100644
--- a/[esx_addons]/esx_dmvschool/locales/fi.lua
+++ b/[esx_addons]/esx_dmvschool/locales/fi.lua
@@ -26,5 +26,9 @@ Locales['fi'] = {
['test_failed_go_to_start_point'] = '~r~Go to the starting point, because you failed the test!',
['errors'] = 'mistakes: ~r~%s/%s',
['you_damaged_veh'] = 'Vahingoitit ajoneuvoa. Aja varovaisemmin...',
- ['not_enough_money'] = 'Sinulla ei ole tarpeeksi rahaa'
+ ['not_enough_money'] = 'Sinulla ei ole tarpeeksi rahaa',
+ ['yourVersion'] = "Versiosi: ",
+ ['latestVersion'] = "Käytät uusinta versiota!",
+ ['needUpdateResource'] = "Sinun täytyy ladata uusin versio! Käytät tällä hetkellä vanhaa versiota!",
+ ['errorGetCurrentVersion'] = "Virhe tapahtui haettaessa nykyistä versiota!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/fr.lua b/[esx_addons]/esx_dmvschool/locales/fr.lua
index 17598071..01e5f21f 100644
--- a/[esx_addons]/esx_dmvschool/locales/fr.lua
+++ b/[esx_addons]/esx_dmvschool/locales/fr.lua
@@ -26,5 +26,9 @@ Locales['fr'] = {
['test_failed_go_to_start_point'] = '~r~Go to the starting point, because you failed the test!',
['errors'] = 'erreurs: ~r~%s/%s',
['you_damaged_veh'] = 'Vous avez endommagé votre véhicule',
- ['not_enough_money'] = 'Tu n\'as pas assez d\'argent'
+ ['not_enough_money'] = 'Tu n\'as pas assez d\'argent',
+ ['yourVersion'] = "Votre version : ",
+ ['latestVersion'] = "Vous utilisez la dernière version !",
+ ['needUpdateResource'] = "Vous devez télécharger la dernière version ! Vous utilisez actuellement une ancienne version !",
+ ['errorGetCurrentVersion'] = "Une erreur s'est produite lors de la récupération de la version actuelle !"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/hu.lua b/[esx_addons]/esx_dmvschool/locales/hu.lua
index 560b362f..e1c7bd1a 100644
--- a/[esx_addons]/esx_dmvschool/locales/hu.lua
+++ b/[esx_addons]/esx_dmvschool/locales/hu.lua
@@ -27,4 +27,8 @@ Locales['hu'] = {
['errors'] = 'Hibapontok: ~r~%s/%s',
['you_damaged_veh'] = 'Összetörted az autót, ez drága lesz.',
['not_enough_money'] = 'Nincs elég pénzed!',
+ ['yourVersion'] = "A verziód: ",
+ ['latestVersion'] = "A legújabb verziót használod!",
+ ['needUpdateResource'] = "Le kell töltened a legújabb verziót! Jelenleg egy régi verziót használsz!",
+ ['errorGetCurrentVersion'] = "Hiba történt az aktuális verzió lekérése közben!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/it.lua b/[esx_addons]/esx_dmvschool/locales/it.lua
index 11dcbd0d..887ae33d 100644
--- a/[esx_addons]/esx_dmvschool/locales/it.lua
+++ b/[esx_addons]/esx_dmvschool/locales/it.lua
@@ -27,4 +27,8 @@ Locales['it'] = {
['errors'] = 'errori: ~r~%s/%s',
['you_damaged_veh'] = 'hai danneggiato il veicolo',
['not_enough_money'] = 'non hai abbastanza soldi',
+ ['yourVersion'] = "La tua versione: ",
+ ['latestVersion'] = "Stai usando l'ultima versione!",
+ ['needUpdateResource'] = "Devi scaricare l'ultima versione! Stai usando una versione vecchia!",
+ ['errorGetCurrentVersion'] = "Si è verificato un errore durante il recupero della versione corrente!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/nl.lua b/[esx_addons]/esx_dmvschool/locales/nl.lua
index 0ab60295..8009e21e 100644
--- a/[esx_addons]/esx_dmvschool/locales/nl.lua
+++ b/[esx_addons]/esx_dmvschool/locales/nl.lua
@@ -27,4 +27,8 @@ Locales['nl'] = {
['errors'] = 'Fouten: ~r~%s/%s',
['you_damaged_veh'] = 'Je hebt het voertuig beschadigd',
['not_enough_money'] = 'Je hebt niet genoeg geld',
+ ['yourVersion'] = "Jouw versie: ",
+ ['latestVersion'] = "Je gebruikt de nieuwste versie!",
+ ['needUpdateResource'] = "Je moet de nieuwste versie downloaden! Je gebruikt momenteel een oude versie!",
+ ['errorGetCurrentVersion'] = "Er is een fout opgetreden bij het ophalen van de huidige versie!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/pl.lua b/[esx_addons]/esx_dmvschool/locales/pl.lua
index f5ea6bce..2e0d44fe 100644
--- a/[esx_addons]/esx_dmvschool/locales/pl.lua
+++ b/[esx_addons]/esx_dmvschool/locales/pl.lua
@@ -26,5 +26,9 @@ Locales['pl'] = {
['test_failed_go_to_start_point'] = '~r~Go to the starting point, because you failed the test!',
['errors'] = 'błędy: ~r~%s/%s',
['you_damaged_veh'] = 'uszkodziłeś auto',
- ['not_enough_money'] = 'Nie masz wystarczająco dużo pieniędzy'
+ ['not_enough_money'] = 'Nie masz wystarczająco dużo pieniędzy',
+ ['yourVersion'] = "Twoja wersja: ",
+ ['latestVersion'] = "Używasz najnowszej wersji!",
+ ['needUpdateResource'] = "Musisz pobrać najnowszą wersję! Obecnie używasz starej wersji!",
+ ['errorGetCurrentVersion'] = "Wystąpił błąd podczas pobierania aktualnej wersji!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/sr.lua b/[esx_addons]/esx_dmvschool/locales/sr.lua
index e3507a50..3ef42819 100644
--- a/[esx_addons]/esx_dmvschool/locales/sr.lua
+++ b/[esx_addons]/esx_dmvschool/locales/sr.lua
@@ -27,4 +27,8 @@ Locales['sr'] = {
['errors'] = 'Greške: ~r~%s/%s',
['you_damaged_veh'] = 'Oštetili ste vozilo',
['not_enough_money'] = 'Nemate dovoljno novca',
+ ['yourVersion'] = "Vaša verzija: ",
+ ['latestVersion'] = "Koristite najnoviju verziju!",
+ ['needUpdateResource'] = "Morate preuzeti najnoviju verziju! Trenutno koristite staru verziju!",
+ ['errorGetCurrentVersion'] = "Došlo je do greške prilikom pokušaja dobavljanja trenutne verzije!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/sv.lua b/[esx_addons]/esx_dmvschool/locales/sv.lua
index 9a72f05b..cb1f2aab 100644
--- a/[esx_addons]/esx_dmvschool/locales/sv.lua
+++ b/[esx_addons]/esx_dmvschool/locales/sv.lua
@@ -27,4 +27,8 @@ Locales['sv'] = {
['errors'] = 'Misstag: ~r~%s/%s',
['you_damaged_veh'] = 'Du skadade fordonet',
['not_enough_money'] = 'Du har inte tillräckligt med pengar',
+ ['yourVersion'] = "Din version: ",
+ ['latestVersion'] = "Du använder den senaste versionen!",
+ ['needUpdateResource'] = "Du måste ladda ner den senaste versionen! Du använder för närvarande en gammal version!",
+ ['errorGetCurrentVersion'] = "Ett fel uppstod när den aktuella versionen försöktes hämtas!"
}
diff --git a/[esx_addons]/esx_dmvschool/locales/tr.lua b/[esx_addons]/esx_dmvschool/locales/tr.lua
index 924f7fb4..62cf86d9 100644
--- a/[esx_addons]/esx_dmvschool/locales/tr.lua
+++ b/[esx_addons]/esx_dmvschool/locales/tr.lua
@@ -27,5 +27,9 @@ Locales['tr'] = {
['errors'] = 'Hatalar: ~r~%s/%s',
['you_damaged_veh'] = 'Araç hasar gördü',
['not_enough_money'] = 'Yeterli paranız yok',
+ ['yourVersion'] = "Sürümünüz: ",
+ ['latestVersion'] = "En son sürümü kullanıyorsunuz!",
+ ['needUpdateResource'] = "En son sürümü indirmeniz gerekiyor! Şu anda eski bir sürüm kullanıyorsunuz!",
+ ['errorGetCurrentVersion'] = "Mevcut sürüm alınmaya çalışılırken bir hata oluştu!"
}
\ No newline at end of file
diff --git a/[esx_addons]/esx_dmvschool/locales/zh-cn.lua b/[esx_addons]/esx_dmvschool/locales/zh-cn.lua
index 549077be..7a45c4e5 100644
--- a/[esx_addons]/esx_dmvschool/locales/zh-cn.lua
+++ b/[esx_addons]/esx_dmvschool/locales/zh-cn.lua
@@ -27,4 +27,8 @@ Locales['zh-cn'] = {
['errors'] = '失误: ~r~%s~s~/~g~%s~s~',
['you_damaged_veh'] = '载具出现受损!',
['not_enough_money'] = '您暂无足够现金',
+ ['yourVersion'] = "你的版本:",
+ ['latestVersion'] = "你正在使用最新版本!",
+ ['needUpdateResource'] = "你需要下载最新版本!你当前使用的是旧版本!",
+ ['errorGetCurrentVersion'] = "尝试获取当前版本时发生错误!"
}
diff --git a/[esx_addons]/esx_dmvschool/server/main.lua b/[esx_addons]/esx_dmvschool/server/main.lua
index d9aade16..f2b5e5df 100644
--- a/[esx_addons]/esx_dmvschool/server/main.lua
+++ b/[esx_addons]/esx_dmvschool/server/main.lua
@@ -10,20 +10,8 @@ ESX.RegisterServerCallback('esx_dmvschool:canYouPay', function(source, cb, type)
end
end)
-AddEventHandler('esx:playerLoaded', function(source)
- TriggerEvent('esx_license:getLicenses', source, function(licenses)
- TriggerClientEvent('esx_dmvschool:loadLicenses', source, licenses)
- end)
-end)
-
RegisterNetEvent('esx_dmvschool:addLicense')
AddEventHandler('esx_dmvschool:addLicense', function(type)
local source = source
-
- TriggerEvent('esx_license:addLicense', source, type, function()
- TriggerEvent('esx_license:getLicenses', source, function(licenses)
- TriggerClientEvent('esx_dmvschool:loadLicenses', source, licenses)
- end)
- end)
-end)
-
+ TriggerEvent('esx_license:addLicense', source, type)
+end)
\ No newline at end of file
diff --git a/[esx_addons]/esx_dmvschool/server/updater.lua b/[esx_addons]/esx_dmvschool/server/updater.lua
new file mode 100644
index 00000000..2a8af32d
--- /dev/null
+++ b/[esx_addons]/esx_dmvschool/server/updater.lua
@@ -0,0 +1,95 @@
+DMV = DMV or {}
+
+DMV.VersionCheckBaseURL = "https://raw.githubusercontent.com/esx-framework/ESX-Legacy-Addons/main/%5Besx_addons%5D/"
+
+function DMV:ErrorHandle(msg)
+ local resourceName = GetCurrentResourceName()
+ print(("[^1ERROR^7] ^3%s^7: %s"):format(resourceName, msg))
+end
+
+function DMV:InfoHandle(msg, color)
+ local resourceName = GetCurrentResourceName()
+ local c = ({green=2, red=1, blue=4})[color] or 3
+ print(("[^9INFO^7] ^3%s^7: ^" .. c .. "%s^7"):format(resourceName, msg))
+end
+
+local function normalizeSemver(v)
+ if type(v) ~= "string" then return nil end
+ local three = v:match("%d+%.%d+%.%d+")
+ if three then return three end
+ local two = v:match("^%d+%.%d+$")
+ if two then return (two .. ".0") end
+ local one = v:match("^%d+$")
+ if one then return (one .. ".0.0") end
+ return nil
+end
+
+VERSION = {
+ Check = function(err, response, headers)
+ local resourceName = GetCurrentResourceName()
+ local currentVersion = GetResourceMetadata(resourceName, "version", 0)
+ if not currentVersion then return end
+
+ local manifestURL = DMV.VersionCheckBaseURL .. resourceName .. "/fxmanifest.lua"
+ DMV:InfoHandle(("Checking manifest from %s"):format(manifestURL), "blue")
+
+ if err ~= 200 or not response then
+ DMV:ErrorHandle(Translate("errorGetCurrentVersion"))
+ return
+ end
+
+ local remoteVersion = response:match('version%s+["\']([%d%.]+)["\']')
+ if not remoteVersion then
+ DMV:ErrorHandle(Translate("errorGetRemoteVersion"))
+ return
+ end
+
+ local latestVersion = normalizeSemver(remoteVersion)
+ currentVersion = normalizeSemver(currentVersion)
+
+ if not latestVersion or not currentVersion then
+ DMV:ErrorHandle(Translate("invalidVersion"))
+ return
+ end
+
+ if currentVersion == latestVersion then
+ DMV:InfoHandle(Translate("latestVersion"), "green")
+ DMV:InfoHandle(("Up to date version (%s)"):format(currentVersion), "green")
+ return
+ end
+
+ local currentVersionSplitted = { string.strsplit(".", currentVersion) }
+ local latestVersionSplitted = { string.strsplit(".", latestVersion) }
+
+ DMV:InfoHandle(Translate("currentVersion") .. latestVersion, "green")
+ DMV:InfoHandle(Translate("yourVersion") .. currentVersion, "blue")
+ DMV:InfoHandle(("Update available: remote %s > local %s"):format(latestVersion, currentVersion), "red")
+
+ for i = 1, #currentVersionSplitted do
+ local current, latest = tonumber(currentVersionSplitted[i]), tonumber(latestVersionSplitted[i])
+ if current ~= latest then
+ if not current or not latest then return end
+ if current < latest then
+ DMV:InfoHandle(Translate("needUpdateResource"), "red")
+ end
+ break
+ end
+ end
+ end,
+
+ RunVersionChecker = function()
+ CreateThread(function()
+ local resourceName = GetCurrentResourceName()
+ local manifestURL = DMV.VersionCheckBaseURL .. resourceName .. "/fxmanifest.lua"
+ PerformHttpRequest(manifestURL, VERSION.Check, "GET")
+ end)
+ end,
+}
+
+AddEventHandler("onResourceStart", function(resourceName)
+ local currentName = GetCurrentResourceName()
+ if resourceName ~= currentName then return end
+
+ Wait(100)
+ VERSION:RunVersionChecker()
+end)
\ No newline at end of file