213 lines
		
	
	
		
			No EOL
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			No EOL
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| module 'shared/debug'
 | |
| module 'shared/resource'
 | |
| module 'shared/table'
 | |
| 
 | |
| Version = resource.version(Bridge.TargetName)
 | |
| Bridge.Debug('Target', Bridge.TargetName, Version)
 | |
| 
 | |
| local function convert(options)
 | |
|     local distance = 7
 | |
|     options = options.options
 | |
| 
 | |
|     for _, v in pairs(options) do
 | |
| 
 | |
|         distance = v.distance
 | |
| 
 | |
|         if v.items then v.item = v.items end
 | |
| 
 | |
|         if v.onSelect then
 | |
|             v.action = function(entity)
 | |
|                 v.entity = entity
 | |
|                 v.coords = entity and GetEntityCoords(entity) or nil
 | |
|                 v.distance = entity and #(GetEntityCoords(Cache.Ped) - GetEntityCoords(entity)) or nil
 | |
|                 v.onSelect(v)
 | |
|             end
 | |
|         end
 | |
| 
 | |
|         if not v.onSelect and v.export then
 | |
|             v.action = function(entity)
 | |
|                 local resource, exportName = string.strsplit('.', v.export)
 | |
|                 v.entity = entity
 | |
|                 v.coords = entity and GetEntityCoords(entity) or nil
 | |
|                 v.distance = entity and #(GetEntityCoords(Cache.Ped) - GetEntityCoords(entity)) or nil
 | |
|                 exports[resource][exportName](nil, v)
 | |
|             end
 | |
|         end
 | |
| 
 | |
|         if v.canInteract or v.gang then
 | |
|             local canInteract = v.canInteract
 | |
|             v.canInteract = function(entity, distance, data)
 | |
|                 if v.gang and not Framework.HasGang(v.gang, Framework.Player) then return false end
 | |
|                 if type(canInteract) == "function" then return canInteract(entity, entity and GetEntityCoords(entity) or nil, distance, data) end
 | |
|                 return true
 | |
|             end
 | |
|         end
 | |
| 
 | |
|         if v.event then
 | |
|             v.type = 'client'
 | |
|         end
 | |
| 
 | |
|         if v.serverEvent then
 | |
|             v.type = 'server'
 | |
|             v.event = v.serverEvent
 | |
|         end
 | |
| 
 | |
|         if v.command then
 | |
|             v.type = 'command'
 | |
|             v.event = v.command
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return distance, options
 | |
| end
 | |
| 
 | |
| Target.DisableTarget = function(state)
 | |
|     exports[Bridge.TargetName]:AllowTargeting(state)
 | |
| end
 | |
| 
 | |
| Target.AddGlobalObject = function(options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:Object({
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveGlobalObject = function(labels)
 | |
|     exports[Bridge.TargetName]:RemoveObject(labels)
 | |
| end
 | |
| 
 | |
| Target.AddGlobalPed = function(options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:Ped({
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveGlobalPed = function(labels)
 | |
|     exports[Bridge.TargetName]:RemovePed(labels)
 | |
| end
 | |
| 
 | |
| Target.AddGlobalPlayer = function(options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:Player({
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveGlobalPlayer = function(labels)
 | |
|     exports[Bridge.TargetName]:RemovePlayer(labels)
 | |
| end
 | |
| 
 | |
| Target.AddGlobalVehicle = function(options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:Vehicle({
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveGlobalVehicle = function(labels)
 | |
|     exports[Bridge.TargetName]:RemoveVehicle(labels)
 | |
| end
 | |
| 
 | |
| Target.AddModel = function(models, options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:AddTargetModel(models, {
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveModel = function(models, labels)
 | |
|     exports[Bridge.TargetName]:RemoveTargetModel(models, labels)
 | |
| end
 | |
| 
 | |
| Target.AddEntity = function(entities, options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:AddTargetEntity(entities, {
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveEntity = function(entities, labels)
 | |
|     exports[Bridge.TargetName]:RemoveTargetEntity(entities, labels)
 | |
| end
 | |
| 
 | |
| Target.AddBone = function(bones, options)
 | |
|     local distance, options = convert({ options = options })
 | |
|     exports[Bridge.TargetName]:AddTargetBone(bones, {
 | |
|         options = options,
 | |
|         distance = distance
 | |
|     })
 | |
| end
 | |
| 
 | |
| Target.RemoveBone = function(bones, labels)
 | |
|     exports[Bridge.TargetName]:RemoveTargetBone(bones, labels)
 | |
| end
 | |
| 
 | |
| Target.AddSphereZone = function(data)
 | |
|     local distance, options = convert(data)
 | |
| 
 | |
|     if not data.radius then data.radius = 2 end
 | |
| 
 | |
|     exports[Bridge.TargetName]:AddCircleZone(data.name, data.coords, data.radius,
 | |
|         {
 | |
|             name = data.name,
 | |
|             debugPoly = data.debug,
 | |
|             useZ = true,
 | |
|         }, {
 | |
|             options = options,
 | |
|             distance = distance
 | |
|         })
 | |
|     return data.name
 | |
| end
 | |
| 
 | |
| Target.AddBoxZone = function(data)
 | |
|     local distance, options = convert(data)
 | |
| 
 | |
|     if not data.size then data.size = vector3(4, 4, 4) end
 | |
|     if not data.rotation then data.rotation = 0 end
 | |
| 
 | |
|     exports[Bridge.TargetName]:AddBoxZone(data.name, data.coords, data.size.y, data.size.x,
 | |
|         {
 | |
|             name = data.name,
 | |
|             heading = data.rotation,
 | |
|             debugPoly = data.debug,
 | |
|             minZ = (data.coords.z - (data.size.z / 2)),
 | |
|             maxZ = (data.coords.z + (data.size.z / 2)),
 | |
|         }, {
 | |
|             options = options,
 | |
|             distance = distance
 | |
|         })
 | |
|     return data.name
 | |
| end
 | |
| 
 | |
| Target.AddPolyZone = function(data)
 | |
|     local distance, options = convert(data)
 | |
| 
 | |
|     local points = {}
 | |
|     local z = 0
 | |
|     for pos, coords in ipairs(data.points) do
 | |
|         points[pos] = vec2(coords.x, coords.y)
 | |
|         z = z + coords.z
 | |
|     end
 | |
|     exports[Bridge.TargetName]:AddPolyZone(data.name, points,
 | |
|         {
 | |
|             name = data.name,
 | |
|             debugPoly = data.debug,
 | |
|             minZ = (z / #points) - (data.height / 2),
 | |
|             maxZ = (z / #points) + (data.height / 2),
 | |
|         }, {
 | |
|             options = options,
 | |
|             distance = distance
 | |
|         })
 | |
|     return data.name
 | |
| end
 | |
| 
 | |
| Target.RemoveZone = function(id)
 | |
|     exports[Bridge.TargetName]:RemoveZone(id)
 | |
| end | 
