Messages
184
Reactions
0
Credits
14
Joined
Aug 2022
Messages
331
Reactions
0
Credits
24
Joined
Jul 2022
Messages
271
Reactions
0
Credits
4
Joined
Jan 2024
ruqeon,
wrote:
-=Stripped Content=-
I shared it under license
I shared it under license
Hey , can you share fix please ?
Messages
51
Reactions
0
Credits
15
Joined
Nov 2021
ruqeon,
wrote:
-=Stripped Content=-
I shared it under license
I shared it under license
Why the credit amount so high lol this gotta be something fire.
Messages
219
Reactions
0
Credits
2
Joined
Dec 2023
Messages
267
Reactions
0
Credits
38
Joined
Dec 2021
Yea see here is the thing first of all hell no I would never pay 50 creds for this,
Second this is on github book for free from the dev.
Second this is on github book for free from the dev.
Messages
553
Reactions
0
Credits
44
Joined
Nov 2022
Messages
109
Reactions
0
Credits
555
Joined
Oct 2023
Messages
172
Reactions
3
Credits
49,546
Joined
Dec 2022
ruqeon,
wrote:
-=Stripped Content=-
I shared it under license
I shared it under license
locked or not? thank you
Messages
41
Reactions
0
Credits
3
Joined
Feb 2024
ruqeon,
wrote:
-=Stripped Content=-
I shared it under license
I shared it under license
nice script man. all working well
Messages
24
Reactions
0
Credits
16
Joined
Apr 2023
Messages
309
Reactions
0
Credits
294
Joined
Apr 2022
Messages
97
Reactions
0
Credits
22
Joined
Dec 2022
Config = {}
-- █▀ █▀▄ ▄▀▄ █▄ ▄█ ██▀ █ █ ▄▀▄ █▀▄ █▄▀
-- █▀ █▀▄ █▀█ █ ▀ █ █▄▄ ▀▄▀▄▀ ▀▄▀ █▀▄ █ █
Config.Core = "ESX" -- "ESX" / "QB-Core"
Config.CoreExport = function()
return exports['qb-core']:GetCoreObject()
end
Config.PlayerLoaded = 'QBCore:Client:OnPlayerLoaded'
[email protected] for QB-Core: 'QBCore:Client:OnPlayerLoaded'
Config.Notification = function(message, type)
if type == "success" then
TriggerEvent('QBCore:Notify', message, 'success', 5000)
elseif type == "error" then
TriggerEvent('QBCore:Notify', message, 'error', 5000)
end
end
Config.Interact = {
Enabled = false,
Open = function(message)
exports["interact"]:Open("E", message) -- Here you can use your TextUI or use my free one - https://github.com/vames-dev/interact
exports['qb-core']:DrawText(message, 'right')
end,
Close = function()
exports["interact"]:Close() -- Here you can use your TextUI or use my free one - https://github.com/vames-dev/interact
exports['qb-core']:HideText()
end,
}
-- ▀█▀ █▀▄ ▄▀▄ █▄ █ ▄▀▀ █ ▄▀▄ ▀█▀ ██▀
-- █ █▀▄ █▀█ █ ▀█ ▄██ █▄▄ █▀█ █ █▄▄
Config.Translate = {
['open_menu'] = "Press ~INPUT_CONTEXT~ to open the menu",
['menu.title'] = {icon = '', label = "Select the type of exam"},
['menu.theory_a'] = {icon = 'far fa-file-alt', label = "Motorcycle theory (%s$)"},
['menu.practical_a'] = {icon = 'fas fa-motorcycle', label = "Motorcycle practical (%s$)"},
['menu.theory_b'] = {icon = 'far fa-file-alt', label = "Car theory (%s$)"},
['menu.practical_b'] = {icon = 'fas fa-car-side', label = "Car practical (%s$)"},
['menu.theory_c'] = {icon = 'far fa-file-alt', label = "Truck theory (%s$)"},
['menu.practical_c'] = {icon = 'fas fa-truck', label = "Truck practical (%s$)"},
['exceeded_speed_limit'] = "You have exceeded the speed limit (%s/%s), the speed limit is %s kmh",
['vehicle_was_damaged'] = "The vehicle was damaged (%s/%s)",
['exceeded_error_limit'] = "You have exceeded the error limit, you must return to the driving school.",
['started_practical'] = "You have started the practical exam, follow the examiners' instructions.",
['complete_theory'] = "Press ~INPUT_CONTEXT~ to complete the theory exam.",
['success_practical'] = "Congratulations, you have obtained your driving license.",
['failed_practical'] = "Unfortunately, you did not manage to obtain a driving license.",
['the_maneuvering_area_is_occupied'] = "The maneuvering area is occupied.", -- Config.CheckIsManeuveringAreaIsOccupied
['not_enough_cash'] = "You do not have enough money for this exam",
['not_enough_cash_and_bank'] = "You do not have enough cash and money in your bank account for this exam",
}
-- █▄ ▄█ ▄▀▄ █ █▄ █ ▄▀▀ ██▀ ▀█▀ ▀█▀ █ █▄ █ ▄▀ ▄▀▀
-- █ ▀ █ █▀█ █ █ ▀█ ▄██ █▄▄ █ █ █ █ ▀█ ▀▄█ ▄██
Config.AccessOnMarker = false -- Do you want to use access to the exam selection menu as E in marker?
Config.UseTarget = true
Config.TargetResource = 'ox_target'
Config.Target = function()
exports[Config.TargetResource]:addBoxZone({
coords = vec(Config.Zones["menu"].coords.x, Config.Zones["menu"].coords.y, Config.Zones["menu"].coords.z+0.35),
size = vec(4.0, 4.0, 4.0),
debug = false,
useZ = true,
rotation = 60,
distance = 9.0,
options = {
{
name = 'driveschoolv2',
event = 'vms_driveschoolv2:openMenu',
icon = 'fa-regular fa-file-lines',
label = "Drive School"
}
}
})
end
Config.UseSoundsUI = true -- Do you want to use interaction sounds in the UI?
Config.EnableBlur = true -- Do you want to blur the background in the game when you have the UI running?
Config.PossibleChargeByBank = true -- if you set it true, when the player does not have enough cash, it will try to take it from his bank account
Config.EnableMaxSpeedLoop = true
Config.MaxSpeedLoopTimeout = 1000 -- if Config.EnableMaxSpeedLoop = true and exceeds the maximum speed, will have 1 second (1000 milliseconds) to reduce the speed, otherwise another error will be charged
Config.MaxSpeed = 50 -- if you don't want a speed limit set nil
Config.SpeedMultiplier = 3.6 -- kmh = 3.6 / mph = 2.236936
Config.MaxDriveErrors = 5 -- How much maximum a player can get bugs for vehicle damage, on 5 will require going back to driving school and failing the test
Config.CheckIsManeuveringAreaIsOccupied = true -- If the maneuvering area is occupied, the practical exam will not start and the player will receive notification about it
Config.Examiner = {
Enabled = true, -- Do you want to use a ped as an examiner who sits with the player in the vehicle?
SpokenCommands = true,
SpokenLanguage = "EN", -- "EN", "DE", "BG", "ES", "FR", "PT"
PedModel = 'ig_fbisuit_01' -- https://wiki.rage.mp/index.php?title=Peds
}
Config.Licenses = {
Theory = {
['A'] = {name = 'theory_a', price = 450, enabled = true},
['B'] = {name = 'theory_b', price = 500, enabled = true},
['C'] = {name = 'theory_c', price = 700, enabled = true}
},
Practical = {
['A'] = {name = 'drive_a', price = 950, enabled = true},
['B'] = {name = 'drive_b', price = 1000, enabled = true},
['C'] = {name = 'drive_c', price = 1500, enabled = true}
}
}
Config.Questions = {
['A'] = {
QuestionsCount = 18, -- Number of all questions for the draw pool
QuestionToAnswer = 18, -- Questions the player will have to answer
NeedAnswersToPass = 12, -- Number of questions a player must answer correctly to pass the theory exam
},
['B'] = {
QuestionsCount = 17,
QuestionToAnswer = 17,
NeedAnswersToPass = 11,
},
['C'] = {
QuestionsCount = 5,
QuestionToAnswer = 5,
NeedAnswersToPass = 3,
},
}
Config.Tasks = {
{label = "Start the engine", id = 1},
{label = "Turn on the headlights", id = 2},
{label = "Go straight ahead", id = 3},
{label = "Park in reverse bias", id = 4},
{label = "Parallel park in front", id = 5},
{label = "Parallel park in reverse", id = 7},
{label = "Leave the maneuvering area", id = 8},
{label = "Take a public road", id = 9},
{label = "Stop before the pedestrian crossing", id = 10},
{label = "Free ride 0.00km / 2.00km", id = 11},
{label = "Return to the driving school", id = 12},
}
Config.Zones = {
["menu"] = {
menuType = "ox_lib", -- "esx_menu_default" / "esx_context" / "qb-menu" / "ox_lib"
menuPosition = 'left', -- only for esx_menu_default and esx_context
coords = vector3(-893.67, -2402.06, 14.125),
marker = {
id = 36, -- https://docs.fivem.net/docs/game-references/markers/
color = {115, 255, 115, 120}, -- R(ed), G(reen), B(lue), A(lpha)
scale = vec(0.65, 0.65, 0.65),
bobUpAndDown = false, -- jumping marker
rotate = true -- rotating marker
},
blip = { -- https://docs.fivem.net/docs/game-references/blips/
sprite = 523,
display = 4,
scale = 0.8,
color = 46,
name = "Driving School"
}
},
["return_vehicle"] = {
coords = vector3(-890.08, -2377.37, 12.94),
marker = {
id = 1, -- https://docs.fivem.net/docs/game-references/markers/
color = {255, 0, 0, 120}, -- R(ed), G(reen), B(lue), A(lpha)
scale = vec(1.5, 1.5, 0.75),
bobUpAndDown = false, -- jumping marker
rotate = true -- rotating marker
},
blip = { -- https://docs.fivem.net/docs/game-references/blips/
sprite = 467,
display = 4,
scale = 1.0,
color = 2,
routeColor = 2,
name = "Return to Drive School"
}
}
}
Config.Practical = {
['Vehicles'] = { -- https://docs.fivem.net/docs/game-references/vehicle-models/
A = 'pcj',
B = 'premier',
C = 'boxville_vms',
},
['Marker'] = { -- https://docs.fivem.net/docs/game-references/markers/
id = 20,
size = vec(0.35, 0.35, 0.35),
rotate = {0.0, 180.0, 0.0},
rgba = {255, 255, 0, 140},
rotataing = true
},
['Blip'] = { -- https://docs.fivem.net/docs/game-references/blips/
sprite = 270,
display = 4,
scale = 0.8,
color = 28,
routeColor = 28,
name = "Point"
},
['SpawnPoint'] = vector4(-723.38, -2210.23, 4.9, 49.79),
}
Config.PracticalTest = { -- if you don't know what each action does, don't touch it to avoid spoiling the exam route
[1] = {
action = function()
if Config.Examiner.SpokenCommands and driveErrors 2.00 then
SendNUIMessage({action = 'updateDriveProgress', count = 2.00, id = 11})
SendNUIMessage({action = 'updateTasks', done = 11})
setBlipToSchool(true)
break
end
end
end
end
},
[12] = {
action = function()
local inRange = false
local shown = false
if Config.Examiner.SpokenCommands and currentExam and (driveErrors = Config.MaxDriveErrors) then
SendNUIMessage({action = 'audioTask', filename = string.lower(Config.Examiner.SpokenLanguage)..'_12.mp3'})
end
while currentExam do
inRange = false
local sleep = true
local myPed = PlayerPedId()
local myVehicle = GetVehiclePedIsIn(myPed, false)
if myVehicle then
local myCoords = GetEntityCoords(myVehicle)
local returnTable = Config.Zones["return_vehicle"]
local distance = #(myCoords - returnTable.coords)
if distance < 25.0 then
sleep = false
DrawMarker(returnTable.marker.id, returnTable.coords.x, returnTable.coords.y, returnTable.coords.z, 0, 0, 0, 0, 0, 0, returnTable.marker.scale, returnTable.marker.color[1], returnTable.marker.color[2], returnTable.marker.color[3], returnTable.marker.color[4], returnTable.marker.bobUpAndDown, false, false, returnTable.marker.rotate, false, false, false)
if distance < 1.5 then
inRange = true
if Config.Core == "ESX" and not Config.Interact.Enabled then
ESX.ShowHelpNotification(Config.Translate['complete_theory'])
end
if IsControlJustPressed(0, 38) then
DeleteVehicle(myVehicle)
if Config.Examiner.Enabled then
DeletePed(examinerPed)
end
setBlipToSchool(false)
SendNUIMessage({action = 'updateTasks', done = 12})
SendNUIMessage({action = 'closeTasks'})
if Config.Interact.Enabled then
Config.Interact.Close()
end
break
end
end
end
if Config.Interact.Enabled then
if inRange and not shown then
shown = true
Config.Interact.Open(Config.Translate['complete_theory'])
elseif not inRange and shown then
shown = false
Config.Interact.Close()
end
end
end
Citizen.Wait(sleep and 1000 or 1)
end
end
},
}[/config]
-- █▀ █▀▄ ▄▀▄ █▄ ▄█ ██▀ █ █ ▄▀▄ █▀▄ █▄▀
-- █▀ █▀▄ █▀█ █ ▀ █ █▄▄ ▀▄▀▄▀ ▀▄▀ █▀▄ █ █
Config.Core = "ESX" -- "ESX" / "QB-Core"
Config.CoreExport = function()
return exports['qb-core']:GetCoreObject()
end
Config.PlayerLoaded = 'QBCore:Client:OnPlayerLoaded'
[email protected] for QB-Core: 'QBCore:Client:OnPlayerLoaded'
Config.Notification = function(message, type)
if type == "success" then
TriggerEvent('QBCore:Notify', message, 'success', 5000)
elseif type == "error" then
TriggerEvent('QBCore:Notify', message, 'error', 5000)
end
end
Config.Interact = {
Enabled = false,
Open = function(message)
exports["interact"]:Open("E", message) -- Here you can use your TextUI or use my free one - https://github.com/vames-dev/interact
exports['qb-core']:DrawText(message, 'right')
end,
Close = function()
exports["interact"]:Close() -- Here you can use your TextUI or use my free one - https://github.com/vames-dev/interact
exports['qb-core']:HideText()
end,
}
-- ▀█▀ █▀▄ ▄▀▄ █▄ █ ▄▀▀ █ ▄▀▄ ▀█▀ ██▀
-- █ █▀▄ █▀█ █ ▀█ ▄██ █▄▄ █▀█ █ █▄▄
Config.Translate = {
['open_menu'] = "Press ~INPUT_CONTEXT~ to open the menu",
['menu.title'] = {icon = '', label = "Select the type of exam"},
['menu.theory_a'] = {icon = 'far fa-file-alt', label = "Motorcycle theory (%s$)"},
['menu.practical_a'] = {icon = 'fas fa-motorcycle', label = "Motorcycle practical (%s$)"},
['menu.theory_b'] = {icon = 'far fa-file-alt', label = "Car theory (%s$)"},
['menu.practical_b'] = {icon = 'fas fa-car-side', label = "Car practical (%s$)"},
['menu.theory_c'] = {icon = 'far fa-file-alt', label = "Truck theory (%s$)"},
['menu.practical_c'] = {icon = 'fas fa-truck', label = "Truck practical (%s$)"},
['exceeded_speed_limit'] = "You have exceeded the speed limit (%s/%s), the speed limit is %s kmh",
['vehicle_was_damaged'] = "The vehicle was damaged (%s/%s)",
['exceeded_error_limit'] = "You have exceeded the error limit, you must return to the driving school.",
['started_practical'] = "You have started the practical exam, follow the examiners' instructions.",
['complete_theory'] = "Press ~INPUT_CONTEXT~ to complete the theory exam.",
['success_practical'] = "Congratulations, you have obtained your driving license.",
['failed_practical'] = "Unfortunately, you did not manage to obtain a driving license.",
['the_maneuvering_area_is_occupied'] = "The maneuvering area is occupied.", -- Config.CheckIsManeuveringAreaIsOccupied
['not_enough_cash'] = "You do not have enough money for this exam",
['not_enough_cash_and_bank'] = "You do not have enough cash and money in your bank account for this exam",
}
-- █▄ ▄█ ▄▀▄ █ █▄ █ ▄▀▀ ██▀ ▀█▀ ▀█▀ █ █▄ █ ▄▀ ▄▀▀
-- █ ▀ █ █▀█ █ █ ▀█ ▄██ █▄▄ █ █ █ █ ▀█ ▀▄█ ▄██
Config.AccessOnMarker = false -- Do you want to use access to the exam selection menu as E in marker?
Config.UseTarget = true
Config.TargetResource = 'ox_target'
Config.Target = function()
exports[Config.TargetResource]:addBoxZone({
coords = vec(Config.Zones["menu"].coords.x, Config.Zones["menu"].coords.y, Config.Zones["menu"].coords.z+0.35),
size = vec(4.0, 4.0, 4.0),
debug = false,
useZ = true,
rotation = 60,
distance = 9.0,
options = {
{
name = 'driveschoolv2',
event = 'vms_driveschoolv2:openMenu',
icon = 'fa-regular fa-file-lines',
label = "Drive School"
}
}
})
end
Config.UseSoundsUI = true -- Do you want to use interaction sounds in the UI?
Config.EnableBlur = true -- Do you want to blur the background in the game when you have the UI running?
Config.PossibleChargeByBank = true -- if you set it true, when the player does not have enough cash, it will try to take it from his bank account
Config.EnableMaxSpeedLoop = true
Config.MaxSpeedLoopTimeout = 1000 -- if Config.EnableMaxSpeedLoop = true and exceeds the maximum speed, will have 1 second (1000 milliseconds) to reduce the speed, otherwise another error will be charged
Config.MaxSpeed = 50 -- if you don't want a speed limit set nil
Config.SpeedMultiplier = 3.6 -- kmh = 3.6 / mph = 2.236936
Config.MaxDriveErrors = 5 -- How much maximum a player can get bugs for vehicle damage, on 5 will require going back to driving school and failing the test
Config.CheckIsManeuveringAreaIsOccupied = true -- If the maneuvering area is occupied, the practical exam will not start and the player will receive notification about it
Config.Examiner = {
Enabled = true, -- Do you want to use a ped as an examiner who sits with the player in the vehicle?
SpokenCommands = true,
SpokenLanguage = "EN", -- "EN", "DE", "BG", "ES", "FR", "PT"
PedModel = 'ig_fbisuit_01' -- https://wiki.rage.mp/index.php?title=Peds
}
Config.Licenses = {
Theory = {
['A'] = {name = 'theory_a', price = 450, enabled = true},
['B'] = {name = 'theory_b', price = 500, enabled = true},
['C'] = {name = 'theory_c', price = 700, enabled = true}
},
Practical = {
['A'] = {name = 'drive_a', price = 950, enabled = true},
['B'] = {name = 'drive_b', price = 1000, enabled = true},
['C'] = {name = 'drive_c', price = 1500, enabled = true}
}
}
Config.Questions = {
['A'] = {
QuestionsCount = 18, -- Number of all questions for the draw pool
QuestionToAnswer = 18, -- Questions the player will have to answer
NeedAnswersToPass = 12, -- Number of questions a player must answer correctly to pass the theory exam
},
['B'] = {
QuestionsCount = 17,
QuestionToAnswer = 17,
NeedAnswersToPass = 11,
},
['C'] = {
QuestionsCount = 5,
QuestionToAnswer = 5,
NeedAnswersToPass = 3,
},
}
Config.Tasks = {
{label = "Start the engine", id = 1},
{label = "Turn on the headlights", id = 2},
{label = "Go straight ahead", id = 3},
{label = "Park in reverse bias", id = 4},
{label = "Parallel park in front", id = 5},
{label = "Parallel park in reverse", id = 7},
{label = "Leave the maneuvering area", id = 8},
{label = "Take a public road", id = 9},
{label = "Stop before the pedestrian crossing", id = 10},
{label = "Free ride 0.00km / 2.00km", id = 11},
{label = "Return to the driving school", id = 12},
}
Config.Zones = {
["menu"] = {
menuType = "ox_lib", -- "esx_menu_default" / "esx_context" / "qb-menu" / "ox_lib"
menuPosition = 'left', -- only for esx_menu_default and esx_context
coords = vector3(-893.67, -2402.06, 14.125),
marker = {
id = 36, -- https://docs.fivem.net/docs/game-references/markers/
color = {115, 255, 115, 120}, -- R(ed), G(reen), B(lue), A(lpha)
scale = vec(0.65, 0.65, 0.65),
bobUpAndDown = false, -- jumping marker
rotate = true -- rotating marker
},
blip = { -- https://docs.fivem.net/docs/game-references/blips/
sprite = 523,
display = 4,
scale = 0.8,
color = 46,
name = "Driving School"
}
},
["return_vehicle"] = {
coords = vector3(-890.08, -2377.37, 12.94),
marker = {
id = 1, -- https://docs.fivem.net/docs/game-references/markers/
color = {255, 0, 0, 120}, -- R(ed), G(reen), B(lue), A(lpha)
scale = vec(1.5, 1.5, 0.75),
bobUpAndDown = false, -- jumping marker
rotate = true -- rotating marker
},
blip = { -- https://docs.fivem.net/docs/game-references/blips/
sprite = 467,
display = 4,
scale = 1.0,
color = 2,
routeColor = 2,
name = "Return to Drive School"
}
}
}
Config.Practical = {
['Vehicles'] = { -- https://docs.fivem.net/docs/game-references/vehicle-models/
A = 'pcj',
B = 'premier',
C = 'boxville_vms',
},
['Marker'] = { -- https://docs.fivem.net/docs/game-references/markers/
id = 20,
size = vec(0.35, 0.35, 0.35),
rotate = {0.0, 180.0, 0.0},
rgba = {255, 255, 0, 140},
rotataing = true
},
['Blip'] = { -- https://docs.fivem.net/docs/game-references/blips/
sprite = 270,
display = 4,
scale = 0.8,
color = 28,
routeColor = 28,
name = "Point"
},
['SpawnPoint'] = vector4(-723.38, -2210.23, 4.9, 49.79),
}
Config.PracticalTest = { -- if you don't know what each action does, don't touch it to avoid spoiling the exam route
[1] = {
action = function()
if Config.Examiner.SpokenCommands and driveErrors 2.00 then
SendNUIMessage({action = 'updateDriveProgress', count = 2.00, id = 11})
SendNUIMessage({action = 'updateTasks', done = 11})
setBlipToSchool(true)
break
end
end
end
end
},
[12] = {
action = function()
local inRange = false
local shown = false
if Config.Examiner.SpokenCommands and currentExam and (driveErrors = Config.MaxDriveErrors) then
SendNUIMessage({action = 'audioTask', filename = string.lower(Config.Examiner.SpokenLanguage)..'_12.mp3'})
end
while currentExam do
inRange = false
local sleep = true
local myPed = PlayerPedId()
local myVehicle = GetVehiclePedIsIn(myPed, false)
if myVehicle then
local myCoords = GetEntityCoords(myVehicle)
local returnTable = Config.Zones["return_vehicle"]
local distance = #(myCoords - returnTable.coords)
if distance < 25.0 then
sleep = false
DrawMarker(returnTable.marker.id, returnTable.coords.x, returnTable.coords.y, returnTable.coords.z, 0, 0, 0, 0, 0, 0, returnTable.marker.scale, returnTable.marker.color[1], returnTable.marker.color[2], returnTable.marker.color[3], returnTable.marker.color[4], returnTable.marker.bobUpAndDown, false, false, returnTable.marker.rotate, false, false, false)
if distance < 1.5 then
inRange = true
if Config.Core == "ESX" and not Config.Interact.Enabled then
ESX.ShowHelpNotification(Config.Translate['complete_theory'])
end
if IsControlJustPressed(0, 38) then
DeleteVehicle(myVehicle)
if Config.Examiner.Enabled then
DeletePed(examinerPed)
end
setBlipToSchool(false)
SendNUIMessage({action = 'updateTasks', done = 12})
SendNUIMessage({action = 'closeTasks'})
if Config.Interact.Enabled then
Config.Interact.Close()
end
break
end
end
end
if Config.Interact.Enabled then
if inRange and not shown then
shown = true
Config.Interact.Open(Config.Translate['complete_theory'])
elseif not inRange and shown then
shown = false
Config.Interact.Close()
end
end
end
Citizen.Wait(sleep and 1000 or 1)
end
end
},
}[/config]
Messages
623
Reactions
0
Credits
191
Joined
Oct 2023
Messages
272
Reactions
0
Credits
386
Joined
Jul 2024