forked from Simnation/Main
ed
This commit is contained in:
parent
6d22d5f77c
commit
63fbc60a00
86 changed files with 8352 additions and 3428 deletions
488
resources/[Developer]/mh_Parking/cl_utils.lua
Normal file
488
resources/[Developer]/mh_Parking/cl_utils.lua
Normal file
|
@ -0,0 +1,488 @@
|
|||
-- logs text to the console
|
||||
function Log(text)
|
||||
if (Config.isDebug) then
|
||||
Log(text)
|
||||
end
|
||||
end
|
||||
|
||||
-- Return all vehicle modifications in an array
|
||||
function GetVehicleModifications(vehicle)
|
||||
local color1, color2 = GetVehicleColours(vehicle)
|
||||
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
|
||||
|
||||
local extras = {}
|
||||
for i = 0, 20, 1 do
|
||||
if (DoesExtraExist(vehicle, i)) then
|
||||
if (IsVehicleExtraTurnedOn(vehicle, i)) then
|
||||
table.insert(extras, { i, 0 })
|
||||
else
|
||||
table.insert(extras, { i, 1 })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local tiresBurst = {}
|
||||
for i = 0, 5, 1 do
|
||||
if (IsVehicleTyreBurst(vehicle, i, true)) then
|
||||
table.insert(tiresBurst, { i, true })
|
||||
elseif (IsVehicleTyreBurst(vehicle, i, false)) then
|
||||
table.insert(tiresBurst, { i, false })
|
||||
end
|
||||
end
|
||||
|
||||
local doorsMissing = {}
|
||||
for i = 0, 7, 1 do
|
||||
if (IsVehicleDoorDamaged(vehicle, i)) then
|
||||
table.insert(doorsMissing, i)
|
||||
end
|
||||
end
|
||||
|
||||
local windowsBroken = {}
|
||||
--for i = 0, 13, 1 do
|
||||
-- if (not IsVehicleWindowIntact(vehicle, i)) then
|
||||
-- table.insert(windowsBroken, i)
|
||||
-- end
|
||||
--end
|
||||
|
||||
-- custom colors
|
||||
local hasCustomPrimaryColor = GetIsVehiclePrimaryColourCustom(vehicle)
|
||||
local customPrimaryColor = nil
|
||||
if (hasCustomPrimaryColor) then
|
||||
local r, g, b = GetVehicleCustomPrimaryColour(vehicle)
|
||||
customPrimaryColor = { r, g, b }
|
||||
end
|
||||
|
||||
local hasCustomSecondaryColor = GetIsVehicleSecondaryColourCustom(vehicle)
|
||||
local customSecondaryColor = nil
|
||||
if (hasCustomSecondaryColor) then
|
||||
local r, g, b = GetVehicleCustomSecondaryColour(vehicle)
|
||||
customSecondaryColor = { r, g, b }
|
||||
end
|
||||
|
||||
return {
|
||||
-- 1 model
|
||||
GetEntityModel(vehicle),
|
||||
|
||||
-- 2 lockStatus
|
||||
GetVehicleDoorLockStatus(vehicle),
|
||||
|
||||
-- 3 health
|
||||
math.floor(GetEntityHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 4 bodyHealth
|
||||
math.floor(GetVehicleBodyHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 5 engineHealth
|
||||
math.floor(GetVehicleEngineHealth(vehicle) * 10.0) / 10.0,
|
||||
-- 6 petrolTankHealth
|
||||
math.floor(GetVehiclePetrolTankHealth(vehicle) * 10.0) / 10.0,
|
||||
|
||||
-- 7 dirtLevel
|
||||
math.floor(GetVehicleDirtLevel(vehicle) * 10.0) / 10.0,
|
||||
-- 8 fuelLevel
|
||||
math.floor(exports[Config.exports]:GetFuel(vehicle) * 10.0) / 10.0,
|
||||
|
||||
---------------------------------------------------------------------- Implementierung Miho
|
||||
--math.floor(DecorGetFloat(vehicle, Config.FuelDecor)*10) / 10.0,
|
||||
---------------------------------------------------------------------- Implementierung Miho ENDE
|
||||
|
||||
-- 9 plateIndex
|
||||
GetVehicleNumberPlateTextIndex(vehicle),
|
||||
|
||||
-- 10 primaryColor
|
||||
color1,
|
||||
-- 11 secondaryColor
|
||||
color2,
|
||||
-- 12 pearlescentColor
|
||||
pearlescentColor,
|
||||
-- 13 wheelColor
|
||||
wheelColor,
|
||||
|
||||
-- 14 wheelType
|
||||
GetVehicleWheelType(vehicle),
|
||||
-- 15 customWheelsFront
|
||||
GetVehicleModVariation(vehicle, 23);
|
||||
-- 16 customWheelsBack
|
||||
GetVehicleModVariation(vehicle, 24);
|
||||
-- 17 windowTint
|
||||
GetVehicleWindowTint(vehicle),
|
||||
-- 18 enabledNeon
|
||||
{
|
||||
IsVehicleNeonLightEnabled(vehicle, 0),
|
||||
IsVehicleNeonLightEnabled(vehicle, 1),
|
||||
IsVehicleNeonLightEnabled(vehicle, 2),
|
||||
IsVehicleNeonLightEnabled(vehicle, 3),
|
||||
},
|
||||
-- 19 neonColor
|
||||
table.pack(GetVehicleNeonLightsColour(vehicle)),
|
||||
-- 20 tireSmokeColor
|
||||
table.pack(GetVehicleTyreSmokeColor(vehicle)),
|
||||
|
||||
-- 21 extras
|
||||
extras,
|
||||
|
||||
-- 22-32 mods
|
||||
GetVehicleMod(vehicle, 0),
|
||||
GetVehicleMod(vehicle, 1),
|
||||
GetVehicleMod(vehicle, 2),
|
||||
GetVehicleMod(vehicle, 3),
|
||||
GetVehicleMod(vehicle, 4),
|
||||
GetVehicleMod(vehicle, 5),
|
||||
GetVehicleMod(vehicle, 6),
|
||||
GetVehicleMod(vehicle, 7),
|
||||
GetVehicleMod(vehicle, 8),
|
||||
GetVehicleMod(vehicle, 9),
|
||||
GetVehicleMod(vehicle, 10),
|
||||
|
||||
-- 33-38 mods
|
||||
GetVehicleMod(vehicle, 11),
|
||||
GetVehicleMod(vehicle, 12),
|
||||
GetVehicleMod(vehicle, 13),
|
||||
GetVehicleMod(vehicle, 14),
|
||||
GetVehicleMod(vehicle, 15),
|
||||
GetVehicleMod(vehicle, 16),
|
||||
|
||||
-- 39-41 mods
|
||||
IsToggleModOn(vehicle, 18),
|
||||
IsToggleModOn(vehicle, 20),
|
||||
IsToggleModOn(vehicle, 22),
|
||||
|
||||
-- 42-43 mods
|
||||
GetVehicleMod(vehicle, 23),
|
||||
GetVehicleMod(vehicle, 24),
|
||||
|
||||
-- 44-66 mods
|
||||
GetVehicleMod(vehicle, 25),
|
||||
GetVehicleMod(vehicle, 26),
|
||||
GetVehicleMod(vehicle, 27),
|
||||
GetVehicleMod(vehicle, 28),
|
||||
GetVehicleMod(vehicle, 29),
|
||||
GetVehicleMod(vehicle, 30),
|
||||
GetVehicleMod(vehicle, 31),
|
||||
GetVehicleMod(vehicle, 32),
|
||||
GetVehicleMod(vehicle, 33),
|
||||
GetVehicleMod(vehicle, 34),
|
||||
GetVehicleMod(vehicle, 35),
|
||||
GetVehicleMod(vehicle, 36),
|
||||
GetVehicleMod(vehicle, 37),
|
||||
GetVehicleMod(vehicle, 38),
|
||||
GetVehicleMod(vehicle, 39),
|
||||
GetVehicleMod(vehicle, 40),
|
||||
GetVehicleMod(vehicle, 41),
|
||||
GetVehicleMod(vehicle, 42),
|
||||
GetVehicleMod(vehicle, 43),
|
||||
GetVehicleMod(vehicle, 44),
|
||||
GetVehicleMod(vehicle, 45),
|
||||
GetVehicleMod(vehicle, 46),
|
||||
GetVehicleMod(vehicle, 48),
|
||||
|
||||
-- 67 livery
|
||||
GetVehicleLivery(vehicle),
|
||||
|
||||
-- 68 missingDoors
|
||||
doorsMissing,
|
||||
|
||||
-- 69 bulletproofTires
|
||||
not GetVehicleTyresCanBurst(vehicle),
|
||||
-- 70 tiresBurst
|
||||
tiresBurst,
|
||||
|
||||
-- 71 brokenWindows
|
||||
windowsBroken,
|
||||
|
||||
-- 72 xenon lights
|
||||
GetVehicleXenonLightsColour(vehicle),
|
||||
|
||||
-- 73 custom primary color
|
||||
customPrimaryColor,
|
||||
-- 74 custom secondary color
|
||||
customSecondaryColor,
|
||||
|
||||
-- 75 interior color
|
||||
GetVehicleInteriorColor(vehicle)
|
||||
}
|
||||
end
|
||||
|
||||
-- Apply all modifications to a vehicle entity
|
||||
function SetVehicleModifications(vehicle, plate, modifications)
|
||||
SetVehicleModKit(vehicle, 0)
|
||||
|
||||
-- plate
|
||||
SetVehicleNumberPlateText(vehicle, plate)
|
||||
SetVehicleNumberPlateTextIndex(vehicle, modifications[9])
|
||||
|
||||
-- lockStatus
|
||||
SetVehicleDoorsLocked(vehicle, modifications[2])
|
||||
|
||||
-- colours
|
||||
SetVehicleColours(vehicle, modifications[10], modifications[11])
|
||||
if (modifications[73]) then
|
||||
SetVehicleCustomPrimaryColour(vehicle, modifications[73][1], modifications[73][2], modifications[73][3])
|
||||
end
|
||||
if (modifications[74]) then
|
||||
SetVehicleCustomSecondaryColour(vehicle, modifications[74][1], modifications[74][2], modifications[74][3])
|
||||
end
|
||||
if (modifications[75]) then
|
||||
SetVehicleInteriorColor(vehicle, modifications[75])
|
||||
end
|
||||
|
||||
SetVehicleExtraColours(vehicle, modifications[12], modifications[13])
|
||||
|
||||
SetVehicleTyreSmokeColor(vehicle, modifications[20][1], modifications[20][2], modifications[20][3])
|
||||
|
||||
-- wheels
|
||||
SetVehicleWheelType(vehicle, modifications[14])
|
||||
|
||||
-- windows
|
||||
SetVehicleWindowTint(vehicle, modifications[17])
|
||||
|
||||
-- neonlight
|
||||
SetVehicleNeonLightEnabled(vehicle, 0, modifications[18][1])
|
||||
SetVehicleNeonLightEnabled(vehicle, 1, modifications[18][2])
|
||||
SetVehicleNeonLightEnabled(vehicle, 2, modifications[18][3])
|
||||
SetVehicleNeonLightEnabled(vehicle, 3, modifications[18][4])
|
||||
|
||||
SetVehicleNeonLightsColour(vehicle, modifications[19][1], modifications[19][2], modifications[19][3])
|
||||
|
||||
-- mods
|
||||
SetVehicleMod(vehicle, 0, modifications[22], modifications[15])
|
||||
SetVehicleMod(vehicle, 1, modifications[23], modifications[15])
|
||||
SetVehicleMod(vehicle, 2, modifications[24], modifications[15])
|
||||
SetVehicleMod(vehicle, 3, modifications[25], modifications[15])
|
||||
SetVehicleMod(vehicle, 4, modifications[26], modifications[15])
|
||||
SetVehicleMod(vehicle, 5, modifications[27], modifications[15])
|
||||
SetVehicleMod(vehicle, 6, modifications[28], modifications[15])
|
||||
SetVehicleMod(vehicle, 7, modifications[29], modifications[15])
|
||||
SetVehicleMod(vehicle, 8, modifications[30], modifications[15])
|
||||
SetVehicleMod(vehicle, 9, modifications[31], modifications[15])
|
||||
SetVehicleMod(vehicle, 10, modifications[32], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 11, modifications[33], modifications[15])
|
||||
SetVehicleMod(vehicle, 12, modifications[34], modifications[15])
|
||||
SetVehicleMod(vehicle, 13, modifications[35], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 14, modifications[36], modifications[15])
|
||||
|
||||
SetVehicleMod(vehicle, 15, modifications[37], modifications[15])
|
||||
SetVehicleMod(vehicle, 16, modifications[38], modifications[15])
|
||||
|
||||
ToggleVehicleMod(vehicle, 18, modifications[39])
|
||||
ToggleVehicleMod(vehicle, 20, modifications[40])
|
||||
ToggleVehicleMod(vehicle, 22, modifications[41])
|
||||
|
||||
SetVehicleMod(vehicle, 23, modifications[42], modifications[15])
|
||||
SetVehicleMod(vehicle, 24, modifications[43], modifications[16])
|
||||
|
||||
SetVehicleMod(vehicle, 25, modifications[44], modifications[15])
|
||||
SetVehicleMod(vehicle, 26, modifications[45], modifications[15])
|
||||
SetVehicleMod(vehicle, 27, modifications[46], modifications[15])
|
||||
SetVehicleMod(vehicle, 28, modifications[47], modifications[15])
|
||||
SetVehicleMod(vehicle, 29, modifications[48], modifications[15])
|
||||
SetVehicleMod(vehicle, 30, modifications[49], modifications[15])
|
||||
SetVehicleMod(vehicle, 31, modifications[50], modifications[15])
|
||||
SetVehicleMod(vehicle, 32, modifications[51], modifications[15])
|
||||
SetVehicleMod(vehicle, 33, modifications[52], modifications[15])
|
||||
SetVehicleMod(vehicle, 34, modifications[53], modifications[15])
|
||||
SetVehicleMod(vehicle, 35, modifications[54], modifications[15])
|
||||
SetVehicleMod(vehicle, 36, modifications[55], modifications[15])
|
||||
SetVehicleMod(vehicle, 37, modifications[56], modifications[15])
|
||||
SetVehicleMod(vehicle, 38, modifications[57], modifications[15])
|
||||
SetVehicleMod(vehicle, 39, modifications[58], modifications[15])
|
||||
SetVehicleMod(vehicle, 40, modifications[59], modifications[15])
|
||||
SetVehicleMod(vehicle, 41, modifications[60], modifications[15])
|
||||
SetVehicleMod(vehicle, 42, modifications[61], modifications[15])
|
||||
SetVehicleMod(vehicle, 43, modifications[62], modifications[15])
|
||||
SetVehicleMod(vehicle, 44, modifications[63], modifications[15])
|
||||
SetVehicleMod(vehicle, 45, modifications[64], modifications[15])
|
||||
SetVehicleMod(vehicle, 46, modifications[65], modifications[15])
|
||||
SetVehicleMod(vehicle, 48, modifications[66], modifications[15])
|
||||
|
||||
SetVehicleLivery(vehicle, modifications[67])
|
||||
|
||||
-- extras
|
||||
for i = 1, #modifications[21], 1 do
|
||||
SetVehicleExtra(vehicle, modifications[21][i][1], modifications[21][i][2])
|
||||
end
|
||||
|
||||
-- stats
|
||||
SetEntityHealth(vehicle, modifications[3])
|
||||
SetVehicleBodyHealth(vehicle, modifications[4])
|
||||
SetVehicleEngineHealth(vehicle, modifications[5])
|
||||
SetVehiclePetrolTankHealth(vehicle, modifications[6])
|
||||
if (Config.renderScorched and (modifications[5] < -3999.0 or modifications[6] < -999.0)) then
|
||||
TriggerServerEvent("mh_Parking:renderScorched", NetworkGetNetworkIdFromEntity(vehicle), true)
|
||||
end
|
||||
|
||||
SetVehicleDirtLevel(vehicle, modifications[7])
|
||||
exports[Config.exports]:SetFuel(vehicle, modifications[8])
|
||||
|
||||
---------------------------------------------------------------------- Implementierung Miho
|
||||
--[[
|
||||
fuel = modifications[8]
|
||||
if type(fuel) == 'number' and fuel >= 0 and fuel <= 100 then
|
||||
SetVehicleFuelLevel(vehicle, fuel + 0.0)
|
||||
DecorSetFloat(vehicle, Config.FuelDecor, GetVehicleFuelLevel(vehicle))
|
||||
end
|
||||
]]
|
||||
---------------------------------------------------------------------- Implementierung Miho ENDE
|
||||
|
||||
|
||||
-- doors
|
||||
for i = 1, #modifications[68], 1 do
|
||||
SetVehicleDoorBroken(vehicle, modifications[68][i], true)
|
||||
end
|
||||
|
||||
-- tires
|
||||
SetVehicleTyresCanBurst(vehicle, not modifications[69])
|
||||
if (not modifications[69]) then
|
||||
for i = 1, #modifications[70], 1 do
|
||||
SetVehicleTyreBurst(vehicle, modifications[70][i][1], modifications[70][i][2], 1000.0)
|
||||
end
|
||||
end
|
||||
|
||||
-- windows
|
||||
for i = 1, #modifications[71], 1 do
|
||||
SmashVehicleWindow(vehicle, modifications[71][i])
|
||||
end
|
||||
|
||||
-- xenon lights
|
||||
if (modifications[72]) then
|
||||
SetVehicleXenonLightsColour(vehicle, modifications[72])
|
||||
end
|
||||
end
|
||||
|
||||
-- Return closest loaded vehicle entity or nil if no vehicle is found
|
||||
function GetClosestVehicle(position, maxRadius)
|
||||
local vehicles = GetAllVehicles()
|
||||
local dist = maxRadius
|
||||
local closestVehicle = nil
|
||||
|
||||
for i=1, #vehicles, 1 do
|
||||
local vehicleCoords = GetEntityCoords(vehicles[i])
|
||||
local tempDist = Vdist(vehicleCoords.x, vehicleCoords.y, vehicleCoords.z, position.x, position.y, position.z)
|
||||
if (tempDist < dist) then
|
||||
dist = tempDist
|
||||
closestVehicle = vehicles[i]
|
||||
end
|
||||
end
|
||||
|
||||
if (closestVehicle ~= nil and DoesEntityExist(closestVehicle)) then
|
||||
return closestVehicle
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns all loaded vehicles on client side
|
||||
function GetAllVehicles()
|
||||
local vehicles = {}
|
||||
|
||||
for vehicle in EnumerateVehicles() do
|
||||
table.insert(vehicles, vehicle)
|
||||
end
|
||||
|
||||
return vehicles
|
||||
end
|
||||
|
||||
function IsVehicleBlacklisted(vehicle)
|
||||
-- check class
|
||||
local class = GetVehicleClass(vehicle)
|
||||
for i = 1, #Config.classesBlacklist, 1 do
|
||||
if (class == Config.classesBlacklist[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
-- check model
|
||||
local modelHash = GetEntityModel(vehicle)
|
||||
for i = 1, #Config.vehiclesBlacklist, 1 do
|
||||
if (modelHash == Config.vehiclesBlacklist[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function GetVehiclePosition(plate)
|
||||
if (GetResourceState("kimi_callbacks") ~= "started") then
|
||||
Log("^1[ERROR] \"kimi_callbacks\" is either not installed properly or hasn't been started!")
|
||||
Log("^1[ERROR] The export \"GetVehiclePosition\" can only be used when having this resource installed.")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (plate == nil) then
|
||||
Log("^1[ERROR] \"plate\" was nil while trying to call export \"GetVehiclePosition\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (type(plate) ~= "string") then
|
||||
Log("^1[ERROR] \"plate\" (\"" .. plate .. "\") needs to be of type string when calling export \"GetVehiclePosition\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
local position = exports["kimi_callbacks"]:Trigger("AP:getVehiclePosition", plate:upper())
|
||||
|
||||
return position
|
||||
end
|
||||
|
||||
function GetVehiclePositions(...)
|
||||
if (GetResourceState("kimi_callbacks") ~= "started") then
|
||||
Log("^1[ERROR] \"kimi_callbacks\" is either not installed properly or hasn't been started!")
|
||||
Log("^1[ERROR] The export \"GetVehiclePositions\" can only be used when having this resource installed.")
|
||||
return nil
|
||||
end
|
||||
|
||||
local plates = { ... }
|
||||
|
||||
for i, plate in ipairs(plates) do
|
||||
if (plate == nil) then
|
||||
Log("^1[ERROR] \"plate\" (Index: \"" .. i .. "\") was nil while trying to call export \"GetVehiclePositions\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
if (type(plate) ~= "string") then
|
||||
Log("^1[ERROR] \"plate\" (\"" .. plate .. "\") (Index: " .. i .. ") needs to be of type string when calling export \"GetVehiclePositions\"!")
|
||||
return nil
|
||||
end
|
||||
|
||||
plates[i] = plates[i]:upper()
|
||||
end
|
||||
|
||||
local data = exports["kimi_callbacks"]:Trigger("AP:getVehiclePositions", plates)
|
||||
|
||||
return data
|
||||
end
|
||||
|
||||
-- getting all vehicles
|
||||
function EnumerateVehicles()
|
||||
return EnumerateEntities(FindFirstVehicle, FindNextVehicle, EndFindVehicle)
|
||||
end
|
||||
function EnumerateEntities(initFunc, moveFunc, disposeFunc)
|
||||
return coroutine.wrap(function()
|
||||
local iter, id = initFunc()
|
||||
if not id or id == 0 then
|
||||
disposeFunc(iter)
|
||||
return
|
||||
end
|
||||
|
||||
local enum = {handle = iter, destructor = disposeFunc}
|
||||
setmetatable(enum, entityEnumerator)
|
||||
|
||||
local next = true
|
||||
repeat
|
||||
coroutine.yield(id)
|
||||
next, id = moveFunc(iter)
|
||||
until not next
|
||||
|
||||
enum.destructor, enum.handle = nil, nil
|
||||
disposeFunc(iter)
|
||||
end)
|
||||
end
|
||||
local entityEnumerator = {
|
||||
__gc = function(enum)
|
||||
if enum.destructor and enum.handle then
|
||||
enum.destructor(enum.handle)
|
||||
end
|
||||
enum.destructor = nil
|
||||
enum.handle = nil
|
||||
end
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue