activePlayerPositions = {} -- returns a loaded vehicled with a given number plate function TryGetLoadedVehicle(plate, loadedVehicles) for i = 1, #loadedVehicles, 1 do if (plate == GetVehicleNumberPlateText(loadedVehicles[i]) and DoesEntityExist(loadedVehicles[i])) then return loadedVehicles[i] end end return nil end function ContainsPlate(plate, vehiclePlates) for i = 1, #vehiclePlates, 1 do if (plate == vehiclePlates[i]) then return true end end return false end -- Logs text to the server console function Log(text) if (Config.isDebug) then Print(GetCurrentResourceName() .. ": " .. text) end end -- return the distance between two positions (Vector3) function Vector3Dist(v1, v2) return math.sqrt( (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z) ) end -- return the distance between two positions without sqrt (Vector3) function Vector3DistFast(v1, v2) return (v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y) + (v2.z - v1.z) * (v2.z - v1.z) end -- returns the difference in degrees from the axis with the highest difference function GetRotationDifference(r1, r2) local x = math.abs(r1.x - r2.x) local y = math.abs(r1.y - r2.y) local z = math.abs(r1.z - r2.z) if (x > y and x > z) then return x elseif (y > z) then return y else return z end end -- get the amount of currently active players function GetActivePlayerCount() local playerCount = 0 for k, v in pairs(activePlayerPositions) do playerCount = playerCount + 1 end return playerCount end -- return the ID of the closest player function GetClosestPlayerId(position) local closestDistance = 1000000.0 local closestPlayerID = nil local closestPos = nil for playerID, pos in pairs(activePlayerPositions) do local distance = Vector3DistFast(position, pos) if (distance < closestDistance) then closestDistance = distance closestPlayerID = playerID closestPos = pos end end local distance = nil if (closestPlayerID ~= nil) then distance = Vector3Dist(position, closestPos) end return closestPlayerID, distance end function IsAnyPlayerInsideVehicle(vehicle, playerPeds) for i = 1, #playerPeds, 1 do local veh = GetVehiclePedIsIn(playerPeds[i], false) if (DoesEntityExist(veh) and veh == vehicle) then return true end end return false end -- return the ped of the closest player function GetClosestPlayerPed(position, playerPeds) local closestDistance = 1000000.0 local closestPlayerPed = nil local closestPos = nil for k, playerPed in pairs(playerPeds) do local pos = GetEntityCoords(playerPed) local distance = Vector3DistFast(position, pos) if (distance < closestDistance) then closestDistance = distance closestPlayerPed = playerPed closestPos = pos end end local distance = 0.0 if (closestPlayerPed ~= nil) then distance = Vector3Dist(position, closestPos) end return closestPlayerPed, distance end -- returns true if a player is active on the server with the specified license function IsPlayerWithLicenseActive(license) for playerId, playerPos in pairs(activePlayerPositions) do if (GetPlayerIdentifiersSorted(playerId)["license"] == license) then return true end end return false end -- Return an array with all identifiers - e.g. ids["license"] = license:xxxxxxxxxxxxxxxx function GetPlayerIdentifiersSorted(playerServerId) local ids = {} local identifiers = GetPlayerIdentifiers(playerServerId) for k, identifier in pairs (identifiers) do local i, j = string.find(identifier, ":") local idType = string.sub(identifier, 1, i-1) ids[idType] = identifier end return ids end