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 |