Shalom,
Wonder how I may add two types of spawn for a specific team. What I mean?
Example: Add a ground spawner and air spawner to the Police Officer team, so in the first spawner will have a list of ground cars (LS Police, Police Ranger, Enforcer, etc), the second one will have a list of air vehicles (such as Police Maverick, Shamal, Seasparrow etc).
At these scripts I'm able to add vehicles to a job spawner (team), but not 2 genre of vehicles in diferents spawners.
Client
local sx, sy = guiGetScreenSize ( )
local rsx, rsy = sx / 1280, sy / 1024
local window = guiCreateWindow( ( sx / 2 - ( rsx*354 ) / 2 ), ( sy / 2 - (rsy*400) / 2 ), (rsx*354), (rsy*400), "Spawners", false)
local vehList = guiCreateGridList((rsx*9), (rsy*26), (rsx*335), (rsy*315), false, window)
local btnSpawn = guiCreateButton((rsx*13), (rsy*346), (rsx*149), (rsy*43), "Spawn", false, window)
local btnClose = guiCreateButton((rsx*195), (rsy*346), (rsx*149), (rsy*43), "Cancel", false, window)
guiWindowSetSizable(window, false)
guiSetVisible ( window, false )
guiGridListAddColumn(vehList, "Vehicle", 0.9)
local marker = nil
addEvent ( "NGSpawners:ShowClientSpawner", true )
addEventHandler ( "NGSpawners:ShowClientSpawner", root, function ( cars, mrker )
if ( wasEventCancelled ( ) ) then
return
end
if ( not guiGetVisible ( window ) ) then
bindKey ( "space", "down", spawnClickingFunctions )
showCursor ( true )
guiSetVisible ( window, true )
guiGridListClear ( vehList )
addEventHandler ( 'onClientMarkerLeave', mrker, closeWindow )
marker = mrker
job = getElementData ( marker, "NGVehicles:JobRestriction" )
guiGridListSetItemText ( vehList, guiGridListAddRow ( vehList ), 1, "Free Vehicles", true, true )
for i, v in ipairs ( cars ) do
local name = getVehicleNameFromModel ( v )
local row = guiGridListAddRow ( vehList )
guiGridListSetItemText ( vehList, row, 1, name, false, false )
guiGridListSetItemData ( vehList, row, 1, v )
end
if ( exports.NGVIP:isPlayerVIP ( ) ) then
local level = exports.NGVIP:getVipLevelFromName ( getElementData ( localPlayer, "VIP" ) )
if ( level and level > 0 and VipVehicles [ level ] and #VipVehicles [ level ] > 0 ) then
guiGridListSetItemText ( vehList, guiGridListAddRow ( vehList ), 1, "VIP Vehicles", true, true )
for i, v in pairs ( VipVehicles [ level ] ) do
local name = getVehicleNameFromModel ( v )
local row = guiGridListAddRow ( vehList )
guiGridListSetItemText ( vehList, row, 1, name, false, false )
guiGridListSetItemData ( vehList, row, 1, v )
end
end
end
guiGridListSetSelectedItem ( vehList, 0, 1 )
addEventHandler ( "onClientGUIClick", btnSpawn, spawnClickingFunctions )
addEventHandler ( "onClientGUIClick", btnClose, spawnClickingFunctions )
end
end )
function spawnClickingFunctions ( )
if ( source == btnClose ) then
closeWindow ( localPlayer )
elseif ( source == btnSpawn ) or getKeyState( "space" ) == true then
local row, col = guiGridListGetSelectedItem ( vehList )
if ( row == -1 ) then
return exports['NGMessages']:sendClientMessage ( "Select a vehicle to be spawn.", 255, 255, 0 )
end
local id = guiGridListGetItemData ( vehList, row, 1 )
triggerServerEvent ( "NGSpawners:spawnVehicle", localPlayer, id, marker, true )
closeWindow ( localPlayer )
end
end
function closeWindow ( p )
if ( not p or p == localPlayer ) then
removeEventHandler ( 'onClientMarkerLeave', marker, closeWindow )
marker = nil
guiSetVisible ( window, false )
showCursor ( false )
guiGridListClear ( vehList )
removeEventHandler ( "onClientGUIClick", btnSpawn, spawnClickingFunctions )
removeEventHandler ( "onClientGUIClick", btnClose, spawnClickingFunctions )
unbindKey ( "space", "down", spawnClickingFunctions )
end
end
addEvent ( "NGSpawners:CloseWindow", true )
addEventHandler ( "NGSpawners:CloseWindow", root, closeWindow )
Server
local spawners = {
['Free'] = { },
['Job'] = { }
}
local spawnedVehciles = { }
function createFreeSpawner ( x, y, z, rz, sx, sy, sz )
local i = #spawners['Free']+1
local z = z - 1
local sx, sy, sz = sx or x, sy or y, sz or z+1.5
local rz = rz or 0
spawners['Free'][i] = createMarker ( x, y, z, 'cylinder', 2, 255, 255, 255, 120 )
setElementData ( spawners['Free'][i], "SpawnCoordinates", { sx, sy, sz, rz } )
setElementData ( spawners['Free'][i], "NGVehicles:SpawnVehicleList", JobVehicles['Free'] )
setElementData ( spawners['Free'][i], "NGVehicles:JobRestriction", false )
addEventHandler ( "onMarkerHit", spawners['Free'][i], onSpawnerHit )
return spawners['Free'][i]
end
function createJobSpawner ( job, x, y, z, colors, rz, sx, sy, sz )
local i = #spawners['Job']+1
local z = z - 1
local sx, sy, sz = sx or x, sy or y, sz or z+1.5
local rz = rz or 0
local r, g, b = unpack ( colors )
spawners['Job'][i] = createMarker ( x, y, z, 'cylinder', 2, r, g, b, 120 )
setElementData ( spawners['Job'][i], "SpawnCoordinates", { sx, sy, sz, rz } )
setElementData ( spawners['Job'][i], "NGVehicles:SpawnVehicleList", JobVehicles[job] )
setElementData ( spawners['Job'][i], "NGVehicles:JobRestriction", tostring ( job ) )
addEventHandler ( "onMarkerHit", spawners['Job'][i], onSpawnerHit )
return spawners['Job'][i]
end
function onSpawnerHit ( p )
local job = string.lower ( getElementData ( source, "NGVehicles:JobRestriction" ) or "false" )
if ( job == 'false' ) then job = false end
local pJob = string.lower ( getElementData ( p, "Job" ) or "" )
if ( job ) then
if ( pJob ~= job ) then
exports['NGMessages']:sendClientMessage ( "This spawner is for the "..job.." job. You're not in the "..job.." job.", p, 255, 140, 40 )
return
end
end
if ( getElementType ( p ) == 'player' and not isPedInVehicle ( p ) ) then
local list = getElementData ( source, "NGVehicles:SpawnVehicleList" );
triggerClientEvent ( p, 'NGSpawners:ShowClientSpawner', p, list, source )
triggerEvent ( "NGSpawners:onPlayerOpenSpawner", source, p )
end
end
addEvent ( "NGSpawners:spawnVehicle", true )
addEventHandler ( "NGSpawners:spawnVehicle", root, function ( id, x, y, z, rz, job )
local c = exports['NGAntiRestart']:createPlayerVehicle ( source, id, x, y, z, rz, true, job )
end )
for i, v in pairs ( data ) do
if ( i == 'Free' ) then
for k, e in ipairs ( v ) do
createFreeSpawner ( unpack ( e ) )
end
elseif ( i == 'Jobs' ) then
for k, e in ipairs ( v ) do
createJobSpawner ( unpack ( e ) )
end
end
end
addEvent ( "NGSpawners:onPlayerOpenSpawner", true )
Data
data = {
-- Free: { x, y, z [, rz=0, sx=x, sy=y, sz=y ] }
['Free'] = {
{ 1538.88, -1686.07, 13.55, 90 }
},
-- { job, x, y, z, { r, g, b } [, rz=0, sx=x, sy=y, sz=y ] }
['Jobs'] = {
{ "Criminal", 2138.91, -1727.17, 13.54, { 255, 50, 50 }, -90 },
{ "Police Officer", 1555.09, -1610.62, 13.38, { 0, 100, 255 }, 180 },
{ "Medic", 1179.02, -1339.01, 13.86, { 0, 255, 255 }, -90 },
}
}
JobVehicles = {
['Free'] = { 412, 468, 457 },
['Criminal'] = { 609, 581, 521, 463, 522 },
['Police Officer'] = { 596, 597, 598, 599 },
['Medic'] = { 416 }
}
VipVehicles = {
[0] = { }, -- None
[4] = { 522, 560, 411, 546 } -- Level X
}