-- client side:
local screenWidth, screenHeight = guiGetScreenSize()
local marker
function createVehicleChooserGUI()
if (isElement(wndVehicle)) then
if (guiGetVisible(wndVehicle)) then return end
end
windowWidth, windowHeight = 321, 338
windowX, windowY = (screenWidth / 2) - (windowWidth / 2), (screenHeight / 2) - (windowHeight / 2)
wndVehicle = guiCreateWindow(windowX, windowY, windowWidth, windowHeight, "Select Vehicle",false)
guiSetAlpha(wndVehicle, 1)
gridVehicle = guiCreateGridList(9,23,303,249,false,wndVehicle)
vehicleColumn = guiGridListAddColumn(gridVehicle,"Vehicle",0.
vehicleSpawn = guiCreateButton(9,282,96,37,"Select",false,wndVehicle)
vehicleClose = guiCreateButton(216,282,96,37,"Exit",false,wndVehicle)
addEventHandler("onClientGUIClick", vehicleSpawn, onPlayerSelectVehicle)
addEventHandler("onClientGUIClick", vehicleClose, onPlayerExitVehicleGUI)
end
function showVehicleGUI(vehicles, mkr)
marker = mkr
createVehicleChooserGUI()
showCursor(true)
guiGridListClear(gridVehicle)
for index, vehicles in ipairs(vehicles) do
vehicleRow = guiGridListAddRow(gridVehicle)
guiGridListSetItemText(gridVehicle, vehicleRow, vehicleColumn, getVehicleNameFromModel(vehicles), false, true)
end
end
addEvent("jobvehicles.showVehicleGUI", true)
addEventHandler("jobvehicles.showVehicleGUI", root, showVehicleGUI)
function onPlayerExitVehicleGUI(button, state)
if (button ~= "left" or state ~= "up") then return end
guiSetVisible(wndVehicle, false)
showCursor(false)
end
function onPlayerSelectVehicle(button, state)
if (button ~= "left" or state ~= "up") then return end
if (guiGridListGetSelectedItem(gridVehicle) == -1) then return end
local vrow = guiGridListGetSelectedItem(gridVehicle)
local vname = guiGridListGetItemText(gridVehicle, vrow, vehicleColumn)
local vid = getVehicleModelFromName(vname)
guiSetVisible(wndVehicle, false)
showCursor(false)
triggerServerEvent("jobvehicles.onPlayerSpawnVehicle", localPlayer, vid, marker)
end
-- server side:
local vehicle = {}
function isVehicleSpawned(vehicle)
return getElementData(vehicle, "jobvehicle")
end
function doesPlayerHaveVehicleSpawned(player)
if (isElement(vehicle[player])) then
return true
else
return false
end
end
function destroyVehicle(vehicle, player)
if (isElement(vehicle[player])) then
destroyElement(vehicle[player])
end
end
function createTheJobVehicles()
for index, table in ipairs(vehicles) do
marker = createMarker(table.x, table.y, table.z, "cylinder", 2, table.r, table.g, table.b)
setElementData(marker, "vehiclemarker-data", { table.Roles, table.vehicles, { table.x, table.y, table.z, table.rotation }, { table.vehR, table.vehG, table.vehB } }, false)
addEventHandler("onMarkerHit", marker, onPlayerVehicleMarkerHit)
end
end
addEventHandler("onResourceStart", resourceRoot, createTheJobVehicles)
function onPlayerVehicleMarkerHit(player)
local data = getElementData(source, "vehiclemarker-data")
if (getElementType(player) == "player") then
if (getElementData(player, dataToFindPlayersJob) == data [ 1 ] or data [ 1 ] == "ALL") then
if (isPedInVehicle(player)) then return end
triggerClientEvent(player, "jobvehicles.showVehicleGUI", root, data [ 2 ], source )
end
end
end
function onPlayerSpawnVehicle(vid, marker)
if (isElement(vehicle[client])) then
destroyElement(vehicle[client])
end
local data = getElementData ( marker, "vehiclemarker-data" )
local x, y, z, rot = unpack ( data [ 3 ] )
local r, g, b = unpack ( data [ 4 ] )
vehicle[client] = createVehicle(vid, x, y, z, 0, 0, rot)
setElementData(vehicle[client], "jobvehicle", true)
warpPedIntoVehicle(client, vehicle[client])
outputDebugString(getPlayerName(client).. " has spawned a '"..getVehicleNameFromModel(vid))
outputServerLog(getPlayerName(client).. " has spawned a '"..getVehicleNameFromModel(vid).."'")
if (r and g and b) then
setVehicleColor(vehicle[client], r, g, b)
end
end
addEvent("jobvehicles.onPlayerSpawnVehicle", true)
addEventHandler("jobvehicles.onPlayerSpawnVehicle", root, onPlayerSpawnVehicle)
function destroyPlayerVehicle()
if (isElement(vehicle[source])) then
destroyElement(vehicle[source])
end
end
addEventHandler("onPlayerWasted", root, destroyPlayerVehicle)
addEventHandler("onPlayerLogout", root, destroyPlayerVehicle)
addEventHandler("onPlayerQuit", root, destroyPlayerVehicle)
function destroyMyOwnVehicle(player)
if (isElement(vehicle[player])) then
outputChatBox("You have succesfully destroyed your "..getVehicleNameFromModel(getElementModel(vehicle[player])).."!", player, 0, 255, 10)
destroyElement(vehicle[player])
elseif (not isElement(vehicle[player])) then
outputChatBox("You currently do not have a job vehicle spawned to destroy!", player, 250, 0, 0)
end
end
addCommandHandler("destroyv", destroyMyOwnVehicle)
function destroyVehicleOnExplode()
if (getElementData(source, "jobvehicle")) then
destroyElement(source)
end
end
addEventHandler("onVehicleExplode", root, destroyVehicleOnExplode)
function onAdminDestroyJobVehicle(admin, cmd, target)
local accountname = getAccountName(getPlayerAccount(admin))
if (hasObjectPermissionTo("user."..accountname, "function.kickPlayer") and target) then
local player = getPlayerFromName(target)
if (isElement(vehicle[player]) and player) then
outputChatBox("You have destroyed "..getPlayerName(player).."' s "..getVehicleNameFromModel(getElementModel(vehicle[player])).." (jobvehicle)", admin, 0, 255, 10)
outputChatBox(getPlayerName(admin).." has destroyed your "..getVehicleNameFromModel(getElementModel(vehicle[player])).." (jobvehicle)", player, 255, 10, 0)
destroyElement(vehicle[player])
elseif (not isElement(vehicle[player]) and player) then
outputChatBox(getPlayerName(player).. " does not currently have any job vehicle spawned.", admin, 255, 10, 0)
else
outputChatBox("The player do not exist!", admin, 250, 0, 0)
end
end
end
addCommandHandler("dv", onAdminDestroyJobVehicle)
As you can see, I have changed how it works, I haven't tested it.