Hello, i need make this scipt to work like, i have 2 routes and need make to server choose in random routes. I tryed but didnt worked
server
local vehicles = get( "vehicles" ) or { "Bus" } -- load the civilian vehicles that'll automatically trigger the delivery mission if being entered
local max_earnings = tonumber( get( "earnings" ) ) or 7
local delay = tonumber( get( "delay" ) ) or 5
-- put it in a for us better format
local vehicles2 = { }
for key, value in ipairs( vehicles ) do
local model = getVehicleModelFromName( value )
if model then
vehicles2[ model ] = true
else
outputDebugString( "Vehicle '" .. tostring( value ) .. " does not exist." )
end
end
vehicles = vehicles2
vehicles2 = nil
local function isJobVehicle( vehicle )
return vehicle and vehicles[ getElementModel( vehicle ) ] and not exports.vehicles:getOwner( vehicle ) or false
end
--
local p = { }
local function advanceRoute( player, earnings )
if p[ player ] and p[ player ].route and p[ player ].checkpoint then
local cp = p[ player ].checkpoint + 1
local c = p[ player ].route[ cp ]
local n = p[ player ].route[ cp + 1 ]
if c then
if p[ player ].route[ p[ player ].checkpoint ] then
if p[ player ].route[ p[ player ].checkpoint ].stop and earnings and earnings > 0 then
exports.players:giveMoney( player, earnings )
end
if p[ player ].route[ p[ player ].checkpoint ].hint then
triggerClientEvent( player, "gui:hint", player, "Darbs: Autobusa vadītājs", p[ player ].route[ p[ player ].checkpoint ].hint )
end
end
if not n then
-- last checkpoint
triggerClientEvent( player, getResourceName( resource ) .. ":set", player, c.x, c.y, c.z, c.stop and true )
else
triggerClientEvent( player, getResourceName( resource ) .. ":set", player, c.x, c.y, c.z, c.stop and true, n.x, n.y, n.z, n.stop and true )
end
else
if earnings then
exports.players:giveMoney( player, earnings * 3 )
end
triggerClientEvent( player, getResourceName( resource ) .. ":set", player )
p[ player ] = nil
return false
end
p[ player ].checkpoint = cp
return true
end
end
local function newRoute( player )
p[ player ].vehicleOnResourceStart = nil
local route = math.random( #routes )
p[ player ].route = routes[ route ]
p[ player ].checkpoint = 0
advanceRoute( player )
end
addEventHandler( "onVehicleEnter", root,
function( player, seat )
if seat == 0 and isJobVehicle( source ) then
if not p[ player ] then
p[ player ] = { }
end
if not p[ player ].route then
newRoute( player )
else
triggerClientEvent( player, getResourceName( resource ) .. ":show", player )
end
end
end
)
--
addEventHandler( "onResourceStart", resourceRoot,
function( )
if not routes or routes == 0 then
cancelEvent( )
return
end
--
setElementData( resourceRoot, "delay", delay )
--
for key, value in ipairs( getElementsByType( "player" ) ) do
local vehicle = getPedOccupiedVehicle( value )
if vehicle and getPedOccupiedVehicleSeat( value ) == 0 and isJobVehicle( vehicle ) then
p[ value ] = { vehicleOnResourceStart = vehicle }
end
end
setTimer(
function( )
for key, value in pairs( p ) do
p[ key ].vehicleOnResourceStart = nil
end
end, 10000, 1
)
end
)
addEvent( getResourceName( resource ) .. ":ready", true )
addEventHandler( getResourceName( resource ) .. ":ready", root,
function( )
if source == client then
if p[ source ] and getPedOccupiedVehicle( source ) == p[ source ].vehicleOnResourceStart and getPedOccupiedVehicleSeat( source ) == 0 then
newRoute( source )
end
end
end
)
--
addEvent( getResourceName( resource ) .. ":complete", true )
addEventHandler( getResourceName( resource ) .. ":complete", root,
function( )
if source == client then
local vehicle = getPedOccupiedVehicle( source )
if p[ source ] and p[ source ].route and isJobVehicle( vehicle ) and getPedOccupiedVehicleSeat( source ) == 0 then
-- distance check
if not p[ source ].route[ p[ source ].checkpoint ].stop or getDistanceBetweenPoints2D( p[ source ].route[ p[ source ].checkpoint ].x, p[ source ].route[ p[ source ].checkpoint ].y, getElementPosition( vehicle ) ) < 5 then
local health = math.min( 1000, getElementHealth( vehicle ) )
if health > 350 then
-- calculate earnings based on vehicle health
local earnings = p[ source ].route[ p[ source ].checkpoint ].stop and math.ceil( ( health - 350 ) / 650 * max_earnings ) or 0
-- get a checkpoint
advanceRoute( source, earnings )
end
end
end
end
end
)
addEventHandler( "onCharacterLogout", root,
function( )
if p[ source ] and p[ source ].route then
triggerClientEvent( source, getResourceName( resource ) .. ":set", source )
end
p[ source ] = nil
end
)
addEventHandler( "onPlayerQuit", root,
function( )
p[ source ] = nil
end
)
--
addEventHandler( "onVehicleStartEnter", root,
function( player, seat )
if seat == 0 and isJobVehicle( source ) and "job-" .. tostring( exports.players:getJob( player ) ) ~= getResourceName( resource ) then
outputChatBox( "((Jūs varat dabūt šo darbu domē. ))", player, 255, 0, 0 )
cancelEvent( )
end
end
)
--
function introduce( player )
triggerClientEvent( player, getResourceName( resource ) .. ":introduce", player )
end
client
local localPlayer = getLocalPlayer( )
local position = nil
local marker = nil
local blip = nil
local blip2 = nil
local wait = false
local screenX, screenY = guiGetScreenSize( )
function drawWaitingText( )
-- check if we still need to wait
local vehicle = getPedOccupiedVehicle( localPlayer )
if vehicle then
if getElementHealth( vehicle ) <= 350 then
text = "Salabo transportlīdzekli!"
elseif wait and wait ~= 0 then
local diff = wait - getTickCount( )
if diff >= 0 then
text = ( "Lūudzu uzgaidi %.1f sekundes" ):format( diff / 1000 )
else
triggerServerEvent( getResourceName( resource ) .. ":complete", localPlayer )
wait = 0
end
end
-- draw the text
dxDrawText( text, 4, 4, screenX, screenY, tocolor( 0, 0, 0, 255 ), 1, "pricedown", "center", "center" )
dxDrawText( text, 0, 0, screenX, screenY, tocolor( 255, 255, 255, 255 ), 1, "pricedown", "center", "center" )
end
end
--
local function hide( )
if isElement( blip ) then
destroyElement( blip )
end
blip = nil
if isElement( blip2 ) then
destroyElement( blip2 )
end
blip2 = nil
if isElement( marker ) then
destroyElement( marker )
end
marker = nil
if wait then
wait = false
removeEventHandler( "onClientRender", root, drawWaitingText )
end
end
local function show( )
hide( )
if position then
-- in lack of a more detailed close-location (aka we use the entrance), use large markers
marker = createMarker( position.x, position.y, position.z, "checkpoint", 3, position.stop and 0 or 255, 255, 0, 63 )
if marker then
blip = createBlipAttachedTo( marker, 0, 2, position.stop and 0 or 255, 255, 0, 255 )
end
if position.nx and position.ny and position.nz then
blip2 = createBlip( position.nx, position.ny, position.nz, 0, 1, position.nstop and 0 or 255, 255, 0, 255 )
end
end
end
addEvent( getResourceName( resource ) .. ":show", true )
addEventHandler( getResourceName( resource ) .. ":show", localPlayer, show )
addEvent( getResourceName( resource ) .. ":set", true )
addEventHandler( getResourceName( resource ) .. ":set", localPlayer,
function( x, y, z, stop, nx, ny, nz, nstop )
if x and y and z then
position = { x = x, y = y, z = z, stop = stop, nx = nx, ny = ny, nz = nz, nstop = nstop }
show( )
else
position = nil
hide( )
end
end
)
addEventHandler( "onClientPlayerVehicleExit", localPlayer, hide )
addEventHandler( "onClientResourceStart", resourceRoot,
function( )
triggerServerEvent( getResourceName( resource ) .. ":ready", localPlayer )
end
)
addEventHandler( "onClientMarkerHit", resourceRoot,
function( element, matching )
if matching and element == localPlayer then
if position.stop then
if not wait then
wait = getTickCount( ) + getElementData( resourceRoot, "delay" ) * 1000
addEventHandler( "onClientRender", root, drawWaitingText )
end
else
triggerServerEvent( getResourceName( resource ) .. ":complete", localPlayer )
end
end
end
)
addEventHandler( "onClientMarkerLeave", resourceRoot,
function( element, matching )
if matching and element == localPlayer then
wait = false
removeEventHandler( "onClientRender", root, drawWaitingText )
exports.gui:hint( "Darbs: autobusa vadītājs", "Ne tik ātri, visi vadītāji steidzas, bet tomēr jums vajadzētu apstāties pieturā un pagaidit kamēr visi iekāps, labi?", 3 )
end
end
)
routes
routes =
{
{
points = {
{ x=1786.4242, y=-1826.6605, z=13.2578, stop = true, hint = "Tas ir vienkārši, Sekojiet maršrutam līdz sasniegsiet pieturu." }, -- Line B - Unity Station
{ x=1692.6863, y=-1786.1617, z=13.2578 },
{ x=1622.8982, y=-1729.7705, z=13.2578 },
{ x=1511.22, y=-1730.45, z=13.38, hint = "Piebremzē! Šeit ir pietura, jums vajag mazliet uzgaidīt pieturā. Ja kāds pasažieris iekāps jūs saņemsiet vēl papildus naudu." },
{ x=1479.47, y=-1730.19, z=13.43, stop = true }, -- Line B - Dome
{ x=1386.1307, y=-1790.0061, z=13.2578 },
{ x=1315.9840, y=-1813.5928, z=13.2578, stop = true }, -- Line B - DMV Parking lot
{ x=1314.8202, y=-1612.5717, z=13.2578 },
{ x=1311.2075, y=-1393.3401, z=13.1649 },
{ x=1172.6312, y=-1391.6152, z=13.2680, stop = true }, -- Line B - Verona Mall & All Saints Hospital
{ x=1094.3251, y=-1397.5109, z=13.3907 },
{ x=1051.4287, y=-1478.5181, z=13.2604 },
{ x=945.8153, y=-1569.5757, z=13.2599 },
{ x=851.2404, y=-1594.5028, z=13.2656, stop = true }, -- Line B - The Book Emporium, Panopticom Street
{ x=807.7176, y=-1710.5044, z=13.2578 },
{ x=721.8978, y=-1752.9287, z=14.3011 },
{ x=497.7910, y=-1713.9375, z=11.7183 },
{ x=389.0097, y=-1769.4656, z=5.2738 },
{ x=279.3954, y=-1731.9656, z=3.8864 },
{ x=166.9234, y=-1732.3812, z=4.3330, stop = true }, -- Line B - Marina
{ x=129.8073, y=-1590.6311, z=10.6169 },
{ x=250.6921, y=-1441.2704, z=13.3181 },
{ x=430.0234, y=-1340.8903, z=14.7877 },
{ x=566.9686, y=-1243.5836, z=17.1045, stop = true }, -- Line B - LS Bank & Grotti Cars
{ x=694.3098, y=-1159.7479, z=15.2229 },
{ x=793.1010, y=-1087.7249, z=24.2165 },
{ x=914.3346, y=-1150.2599, z=23.6295 },
{ x=966.4662, y=-1109.5269, z=23.5672, stop = true }, -- Line B - Cemetery, Chinatown
{ x=1014.1530, y=-1041.9336, z=31.3178 },
{ x=1087.7499, y=-985.4448, z=39.8135 },
{ x=1123.4528, y=-959.4127, z=42.4109, stop = true }, -- Line B - Towing Company, Vinewood
{ x=1247.4594, y=-940.7812, z=42.3700 },
{ x=1359.0907, y=-962.5912, z=33.5578 },
{ x=1338.9242, y=-1257.6052, z=13.2578, stop = true }, -- Line B - Ammunation, St Lawrence Boulevard
{ x=1378.0623, y=-1408.4714, z=13.2625 },
{ x=1446.7334, y=-1488.1488, z=13.2474 },
{ x=1491.1194, y=-1595.8290, z=13.2578, stop = true },-- Line B - Pershing Square
{ x=1641.6776, y=-1595.0366, z=13.3093 },
{ x=1824.8560, y=-1589.3691, z=13.2342, stop = true }, -- Line B - Los Santos Prison
{ x=1853.2986, y=-1435.3317, z=13.2694 },
{ x=1898.0497, y=-1263.3184, z=13.2656 },
{ x=1997.3551, y=-1263.7026, z=23.6953, stop = true }, -- Line B - Glen Park
{ x=2073.4783, y=-1153.3698, z=23.5872 },
{ x=2156.9390, y=-1120.7407, z=25.2352, stop = true }, -- Line B - Jefferson
{ x=2275.7930, y=-1150.2113, z=26.6136 }, -- Line B - Checkpoint
{ x=2367.9003, y=-1198.2988, z=27.4296 },
{ x=2424.5244, y=-1259.7255, z=23.8313, stop = true }, -- Line B - Pig Pen, Little Moscow
{ x=2545.7128, y=-1259.2089, z=41.5131 },
{ x=2671.6074, y=-1259.0888, z=52.7319 },
{ x=2720.1142, y=-1343.4140, z=46.0086 },
{ x=2720.3349, y=-1483.5966, z=30.2812, stop = true }, -- Line B - LST&R
{ x=2679.4746, y=-1456.6191, z=30.3829 },
{ x=2580.1777, y=-1441.6611, z=34.7777 },
{ x=2393.9287, y=-1418.9638, z=23.8359 },
{ x=2339.9394, y=-1431.5703, z=23.8281 },
{ x=2339.8457, y=-1608.7333, z=21.4545 },
{ x=2293.0876, y=-1655.1001, z=14.6454, stop = true }, -- Line B - Ten Green Bottles
{ x=2213.9907, y=-1721.2064, z=13.2413 },
{ x=2114.6150, y=-1749.9012, z=13.2812 },
{ x=1922.5245, y=-1748.6918, z=13.2578, stop = true }, -- Line B - Idlewood Gas
{ x=1817.8397, y=-1803.7924, z=13.0905, stop = true } -- Line B - Unity Station (End Of service)
}
},
{
points = {
{ x=1825.5222, y=-1819.0747, z=13.4037, stop = true }, -- LineA - Unity Station
{ x=1847.2609, y=-1754.3463, z=13.3751 },
{ x=1922.6714, y=-1755.9180, z=13.3752, stop = true}, -- LineA - Idlewood Gas
}
}
}