108 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local maps = {}
 | |
| local gametypes = {}
 | |
| 
 | |
| AddEventHandler('onClientResourceStart', function(res)
 | |
|     -- parse metadata for this resource
 | |
| 
 | |
|     -- map files
 | |
|     local num = GetNumResourceMetadata(res, 'map')
 | |
| 
 | |
|     if num > 0 then
 | |
|         for i = 0, num-1 do
 | |
|             local file = GetResourceMetadata(res, 'map', i)
 | |
| 
 | |
|             if file then
 | |
|                 addMap(file, res)
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     -- resource type data
 | |
|     local type = GetResourceMetadata(res, 'resource_type', 0)
 | |
| 
 | |
|     if type then
 | |
|         local extraData = GetResourceMetadata(res, 'resource_type_extra', 0)
 | |
| 
 | |
|         if extraData then
 | |
|             extraData = json.decode(extraData)
 | |
|         else
 | |
|             extraData = {}
 | |
|         end
 | |
| 
 | |
|         if type == 'map' then
 | |
|             maps[res] = extraData
 | |
|         elseif type == 'gametype' then
 | |
|             gametypes[res] = extraData
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     -- handle starting
 | |
|     loadMap(res)
 | |
| 
 | |
|     -- defer this to the next game tick to work around a lack of dependencies
 | |
|     Citizen.CreateThread(function()
 | |
|         Citizen.Wait(15)
 | |
| 
 | |
|         if maps[res] then
 | |
|             TriggerEvent('onClientMapStart', res)
 | |
|         elseif gametypes[res] then
 | |
|             TriggerEvent('onClientGameTypeStart', res)
 | |
|         end
 | |
|     end)
 | |
| end)
 | |
| 
 | |
| AddEventHandler('onResourceStop', function(res)
 | |
|     if maps[res] then
 | |
|         TriggerEvent('onClientMapStop', res)
 | |
|     elseif gametypes[res] then
 | |
|         TriggerEvent('onClientGameTypeStop', res)
 | |
|     end
 | |
| 
 | |
|     unloadMap(res)
 | |
| end)
 | |
| 
 | |
| AddEventHandler('getMapDirectives', function(add)
 | |
| 	if not CreateScriptVehicleGenerator then
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
|     add('vehicle_generator', function(state, name)
 | |
|         return function(opts)
 | |
|             local x, y, z, heading
 | |
|             local color1, color2
 | |
| 
 | |
|             if opts.x then
 | |
|                 x = opts.x
 | |
|                 y = opts.y
 | |
|                 z = opts.z
 | |
|             else
 | |
|                 x = opts[1]
 | |
|                 y = opts[2]
 | |
|                 z = opts[3]
 | |
|             end
 | |
| 
 | |
|             heading = opts.heading or 1.0
 | |
|             color1 = opts.color1 or -1
 | |
|             color2 = opts.color2 or -1
 | |
| 
 | |
|             CreateThread(function()
 | |
|                 local hash = GetHashKey(name)
 | |
|                 RequestModel(hash)
 | |
| 
 | |
|                 while not HasModelLoaded(hash) do
 | |
|                     Wait(0)
 | |
|                 end
 | |
| 
 | |
|                 local carGen = CreateScriptVehicleGenerator(x, y, z, heading, 5.0, 3.0, hash, color1, color2, -1, -1, true, false, false, true, true, -1)
 | |
|                 SetScriptVehicleGenerator(carGen, true)
 | |
|                 SetAllVehicleGeneratorsActive(true)
 | |
| 
 | |
|                 state.add('cargen', carGen)
 | |
|             end)
 | |
|         end
 | |
|     end, function(state, arg)
 | |
|         Citizen.Trace("deleting car gen " .. tostring(state.cargen) .. "\n")
 | |
| 
 | |
|         DeleteScriptVehicleGenerator(state.cargen)
 | |
|     end)
 | |
| end)
 | 
