This commit is contained in:
Nordi98 2025-07-09 19:41:05 +02:00
parent 30bf7c8604
commit 8dbe79a29d
135 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,21 @@
--- @return boolean @true if player is boss, false if not
tgiCore.isBoss = function(job)
if job and job ~= PlayerData.job.name then return end
return PlayerData.job.boss or PlayerData.job.isboss or (PlayerData.job.grade_name and PlayerData.job.grade_name == "boss")
end

--- Open boss menu for player job
tgiCore.OpenBossMenu = function()
if not tgiCore.isBoss() then return end
if config.tgiannServer then
TriggerEvent('esx_society:openBossMenu', PlayerData.job.name, function(_, menu)
menu.close()
end, { wash = false })
else
if config.framework == "esx" then
TriggerEvent('esx_society:openBossMenu', PlayerData.job.name, function() end, { wash = false })
elseif config.framework == "qb" then
TriggerEvent("qb-bossmenu:client:OpenMenu")
end
end
end

View file

@ -0,0 +1,18 @@
local tgiann_clothing = GetResourceState("tgiann-clothing") ~= "missing"
local rcore_clothing = GetResourceState("rcore_clothing") ~= "missing"

tgiCore.OpenClothingShop = function()
--local invokingResource = GetInvokingResource()
if tgiann_clothing then
exports["tgiann-clothing"]:openMenu({
allowedMenus = { [0] = false, [1] = true, [2] = false, [3] = false },
isBerberMenu = false,
})
elseif rcore_clothing then
TriggerEvent('rcore_clothing:openShop', "binco")
elseif config.framework == "qb" then
TriggerEvent("qb-clothing:client:openOutfitMenu")
elseif confg.framework == "esx" then
-- TODO: Implement ESX clothing shop
end
end

View file

@ -0,0 +1,55 @@
local lang = langs[config.lang]
local esxDuty = nil

--- @return boolean @true if on duty, false if off duty
function tgiCore.IsOnDuty()
if config.framework == "esx" then
if config.esx_service then
if esxDuty == nil then
local p = promise.new()
tgiCore.core.TriggerServerCallback('esx_service:isInService', function(isInService)
p:resolve(isInService)
end, PlayerData.job.name)
esxDuty = Citizen.Await(p)
end
return esxDuty
else
return true -- If there is no service script, return true for default
end
elseif config.framework == "qb" then
return PlayerData.job.onduty
end
return nil
end

--- Toogle on/off duty
--- @return string @ dutyFull | onDuty | offDuty
function tgiCore.ToggleDuty()
local onDuty = tgiCore.IsOnDuty()
if onDuty == nil then return end
if config.framework == "esx" then
if config.esx_service then
if onDuty then
TriggerServerEvent('esx_service:disableService', PlayerData.job.name)
esxDuty = false
else
local p = promise.new()
tgiCore.core.TriggerServerCallback('esx_service:enableService', function(canTakeService, maxInService, inServiceCount)
esxDuty = canTakeService
if not canTakeService then
tgiCore.notif(lang.dutyFull, "error")
return p:resolve("dutyFull")
end
p:resolve("onDuty")
end, PlayerData.job.name)
return Citizen.Await(p)
end
else
tgiCore.DebugWarningLog("Not found any service/duty script for ESX! You can edit from 'client/functions/duty.lua'")
return "offDuty"
end
elseif config.framework == "qb" then
TriggerServerEvent('QBCore:ToggleDuty')
end
return onDuty and "offDuty" or "onDuty"
end

View file

@ -0,0 +1,169 @@
if config.framework == "esx" then
tgiCore.GetVehicleProperties = myFramework.Game.GetVehicleProperties
elseif config.framework == "qb" then
tgiCore.GetVehicleProperties = myFramework.Functions.GetVehicleProperties
else
local gameBuild = GetGameBuildNumber()
function tgiCore.GetVehicleProperties(vehicle)
if DoesEntityExist(vehicle) then
---@type number | number[], number | number[]
local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local paintType1 = GetVehicleModColor_1(vehicle)
local paintType2 = GetVehicleModColor_2(vehicle)

if GetIsVehiclePrimaryColourCustom(vehicle) then
colorPrimary = { GetVehicleCustomPrimaryColour(vehicle) }
end

if GetIsVehicleSecondaryColourCustom(vehicle) then
colorSecondary = { GetVehicleCustomSecondaryColour(vehicle) }
end

local extras = {}

for i = 1, 15 do
if DoesExtraExist(vehicle, i) then
extras[i] = IsVehicleExtraTurnedOn(vehicle, i) and 0 or 1
end
end

local modLiveryCount = GetVehicleLiveryCount(vehicle)
local modLivery = GetVehicleLivery(vehicle)

if modLiveryCount == -1 or modLivery == -1 then
modLivery = GetVehicleMod(vehicle, 48)
end

local damage = {
windows = {},
doors = {},
tyres = {},
}

local windows = 0

for i = 0, 7 do
RollUpWindow(vehicle, i)

if not IsVehicleWindowIntact(vehicle, i) then
windows += 1
damage.windows[windows] = i
end
end

local doors = 0

for i = 0, 5 do
if IsVehicleDoorDamaged(vehicle, i) then
doors += 1
damage.doors[doors] = i
end
end

for i = 0, 7 do
if IsVehicleTyreBurst(vehicle, i, false) then
damage.tyres[i] = IsVehicleTyreBurst(vehicle, i, true) and 2 or 1
end
end

local neons = {}

for i = 0, 3 do
neons[i + 1] = IsVehicleNeonLightEnabled(vehicle, i)
end

return {
model = GetEntityModel(vehicle),
plate = GetVehicleNumberPlateText(vehicle),
plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
bodyHealth = math.floor(GetVehicleBodyHealth(vehicle) + 0.5),
engineHealth = math.floor(GetVehicleEngineHealth(vehicle) + 0.5),
tankHealth = math.floor(GetVehiclePetrolTankHealth(vehicle) + 0.5),
fuelLevel = math.floor(GetVehicleFuelLevel(vehicle) + 0.5),
oilLevel = math.floor(GetVehicleOilLevel(vehicle) + 0.5),
dirtLevel = math.floor(GetVehicleDirtLevel(vehicle) + 0.5),
paintType1 = paintType1,
paintType2 = paintType2,
color1 = colorPrimary,
color2 = colorSecondary,
pearlescentColor = pearlescentColor,
interiorColor = GetVehicleInteriorColor(vehicle),
dashboardColor = GetVehicleDashboardColour(vehicle),
wheelColor = wheelColor,
wheelWidth = GetVehicleWheelWidth(vehicle),
wheelSize = GetVehicleWheelSize(vehicle),
wheels = GetVehicleWheelType(vehicle),
windowTint = GetVehicleWindowTint(vehicle),
xenonColor = GetVehicleXenonLightsColor(vehicle),
neonEnabled = neons,
neonColor = { GetVehicleNeonLightsColour(vehicle) },
extras = extras,
tyreSmokeColor = { GetVehicleTyreSmokeColor(vehicle) },
modSpoilers = GetVehicleMod(vehicle, 0),
modFrontBumper = GetVehicleMod(vehicle, 1),
modRearBumper = GetVehicleMod(vehicle, 2),
modSideSkirt = GetVehicleMod(vehicle, 3),
modExhaust = GetVehicleMod(vehicle, 4),
modFrame = GetVehicleMod(vehicle, 5),
modGrille = GetVehicleMod(vehicle, 6),
modHood = GetVehicleMod(vehicle, 7),
modFender = GetVehicleMod(vehicle, 8),
modRightFender = GetVehicleMod(vehicle, 9),
modRoof = GetVehicleMod(vehicle, 10),
modEngine = GetVehicleMod(vehicle, 11),
modBrakes = GetVehicleMod(vehicle, 12),
modTransmission = GetVehicleMod(vehicle, 13),
modHorns = GetVehicleMod(vehicle, 14),
modSuspension = GetVehicleMod(vehicle, 15),
modArmor = GetVehicleMod(vehicle, 16),
modNitrous = GetVehicleMod(vehicle, 17),
modTurbo = IsToggleModOn(vehicle, 18),
modSubwoofer = GetVehicleMod(vehicle, 19),
modSmokeEnabled = IsToggleModOn(vehicle, 20),
modHydraulics = IsToggleModOn(vehicle, 21),
modXenon = IsToggleModOn(vehicle, 22),
modFrontWheels = GetVehicleMod(vehicle, 23),
modBackWheels = GetVehicleMod(vehicle, 24),
modCustomTiresF = GetVehicleModVariation(vehicle, 23),
modCustomTiresR = GetVehicleModVariation(vehicle, 24),
modPlateHolder = GetVehicleMod(vehicle, 25),
modVanityPlate = GetVehicleMod(vehicle, 26),
modTrimA = GetVehicleMod(vehicle, 27),
modOrnaments = GetVehicleMod(vehicle, 28),
modDashboard = GetVehicleMod(vehicle, 29),
modDial = GetVehicleMod(vehicle, 30),
modDoorSpeaker = GetVehicleMod(vehicle, 31),
modSeats = GetVehicleMod(vehicle, 32),
modSteeringWheel = GetVehicleMod(vehicle, 33),
modShifterLeavers = GetVehicleMod(vehicle, 34),
modAPlate = GetVehicleMod(vehicle, 35),
modSpeakers = GetVehicleMod(vehicle, 36),
modTrunk = GetVehicleMod(vehicle, 37),
modHydrolic = GetVehicleMod(vehicle, 38),
modEngineBlock = GetVehicleMod(vehicle, 39),
modAirFilter = GetVehicleMod(vehicle, 40),
modStruts = GetVehicleMod(vehicle, 41),
modArchCover = GetVehicleMod(vehicle, 42),
modAerials = GetVehicleMod(vehicle, 43),
modTrimB = GetVehicleMod(vehicle, 44),
modTank = GetVehicleMod(vehicle, 45),
modWindows = GetVehicleMod(vehicle, 46),
modDoorR = GetVehicleMod(vehicle, 47),
modLivery = modLivery,
modRoofLivery = GetVehicleRoofLivery(vehicle),
modLightbar = GetVehicleMod(vehicle, 49),
windows = damage.windows,
doors = damage.doors,
tyres = damage.tyres,
bulletProofTyres = GetVehicleTyresCanBurst(vehicle),
driftTyres = gameBuild >= 2372 and GetDriftTyresEnabled(vehicle),
-- no setters?
-- leftHeadlight = GetIsLeftVehicleHeadlightDamaged(vehicle),
-- rightHeadlight = GetIsRightVehicleHeadlightDamaged(vehicle),
-- frontBumper = IsVehicleBumperBrokenOff(vehicle, true),
-- rearBumper = IsVehicleBumperBrokenOff(vehicle, false),
}
end
end
end

View file

@ -0,0 +1,76 @@
-- client

-- Support for inventory scripts:
-- qb-inventory
-- tgiann-inventory
-- ox_inventory
-- qs-inventory
-- codem-inventory
-- origen_inventory
-- core_inventory

--- @param data table {stashName: string, slots: number, maxWeight: number, label: string, blacklist: table, whitelist: table, isPlayer: boolean}
--- @diagnostic disable-next-line dublicate-function
tgiCore.OpenStash = function(data)
if next(data) then data.maxWeight = data.maxweight or data.maxWeight end
if config["qs-inventory"] then
local stashName = ("Stash_%s"):format(data.stashName)
--exports["qs-inventory"]:RegisterStash(stashName, data.slots, data.maxWeight) -- Probably not needed
TriggerServerEvent("inventory:server:OpenInventory", "stash", stashName, {
maxweight = data.maxWeight,
slots = data.slots,
})
TriggerEvent("inventory:client:SetCurrentStash", stashName)
elseif config["codem-inventory"] then
TriggerServerEvent('inventory:server:OpenInventory', 'stash', data.stashName, { maxweight = data.maxWeight, slots = data.slots })
else
assert(false, "There is no open stash event in the client for the inventory you are using!")
end
end

RegisterNetEvent("tgiann-core:client:openInventory")
AddEventHandler("tgiann-core:client:openInventory", tgiCore.OpenStash)

-- SHOP

--- @param data table { shopName: string, items: table }
--- @diagnostic disable-next-line dublicate-function
tgiCore.OpenShop = function(data)
if config.ox_inventory then
exports.ox_inventory:openInventory("shop", data.shopName)
elseif config["qs-inventory"] then
local Items = {
label = data.shopName,
items = data.items
}
TriggerServerEvent("inventory:server:OpenInventory", "shop", "Itemshop_" .. data.shopName, Items)
elseif config["codem-inventory"] then
TriggerEvent('codem-inventory:openshop', data.shopName)
else
assert(false, "There is no open shop event in the client for the inventory you are using!")
end
end

RegisterNetEvent("tgiann-core:client:openShop")
AddEventHandler("tgiann-core:client:openShop", tgiCore.OpenShop)

-- TARGET PLAYER

--- @param targetSrc number
--- @diagnostic disable-next-line dublicate-function
tgiCore.OpenTargetPlayerInventory = function(targetSrc)
if config.core_inventory then
TriggerServerEvent('core_inventory:server:openInventory', targetSrc, 'otherplayer', nil, nil, true)
elseif config.ox_inventory then
exports.ox_inventory:openInventory("player", targetSrc)
elseif config["qs-inventory"] then
TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", targetSrc)
elseif config["codem-inventory"] then
TriggerEvent('codem-inventory:client:robplayer', targetSrc)
else
assert(false, "There is no open target player inventory event in the client for the inventory you are using!")
end
end

RegisterNetEvent("tgiann-core:client:OpenTargetPlayerInventory")
AddEventHandler("tgiann-core:client:OpenTargetPlayerInventory", tgiCore.OpenTargetPlayerInventory)

View file

@ -0,0 +1,5 @@
tgiCore.OpenMechanicMenu = function()
if config.framework == "qb" then
elseif confg.framework == "esx" then
end
end

View file

@ -0,0 +1,122 @@
local bussy = false
local lang = langs[config.lang]

local lumihud = GetResourceState("tgiann-lumihud") ~= "missing"
local tgiannProgressbar = GetResourceState("tgiann-progressbar") ~= "missing"

tgiCore.Progressbar = function(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel)
if bussy then
tgiCore.notif(lang.alreadyError, "error")
if onCancel then onCancel() end
return false
end

bussy = true

if lumihud then
local success = exports['tgiann-lumihud']:Progress({
name = name:lower(),
duration = duration,
label = label,
useWhileDead = useWhileDead,
canCancel = canCancel,
controlDisables = disableControls,
animation = animation and animation or {},
prop = prop and prop or {},
propTwo = propTwo and propTwo or {},
})
bussy = false
if success then
if onFinish then onFinish() end
else
if onCancel then onCancel() end
end
return success
elseif tgiannProgressbar then
local p = promise.new()
exports['tgiann-progressbar']:Progress({
name = name:lower(),
duration = duration,
label = label,
useWhileDead = useWhileDead,
canCancel = canCancel,
controlDisables = disableControls,
animation = animation and animation or {},
prop = prop and prop or {},
propTwo = propTwo and propTwo or {},
}, function(cancelled)
if not cancelled then
p:resolve(true)
else
p:resolve(false)
end
end)
local success = Citizen.Await(p)
bussy = false
if success then
if onFinish then onFinish() end
else
if onCancel then onCancel() end
end
return success
elseif config.framework == "qb" and not config.qbx then -- QB Framework
local p = promise.new()
tgiCore.core.Functions.Progressbar(
name:lower(),
label,
duration,
useWhileDead,
canCancel,
disableControls,
animation or {},
prop or {},
propTwo or {},
function()
p:resolve(true)
end,
function()
p:resolve(false)
end)

local success = Citizen.Await(p)

bussy = false
if success then
if onFinish then onFinish() end
else
if onCancel then onCancel() end
end
return success
else
local success = lib.progressBar({
duration = duration,
label = label,
useWhileDead = useWhileDead,
canCancel = canCancel,
disable = {
car = disableControls.disableCarMovement,
move = disableControls.disableMovement,
combat = disableControls.disableCombat,
mouse = disableControls.disableMouse,
},
anim = animation and {
dict = animation.animDict,
clip = animation.anim,
flag = animation.flags
},
prop = prop and {
model = prop.model,
pos = prop.coords,
rot = prop.rotation,
bone = prop.bone
},
})
bussy = false
if success then
if onFinish then onFinish() end
else
if onCancel then onCancel() end
end
return success
end
end

View file

@ -0,0 +1,360 @@
if config.framework == "esx" then
tgiCore.SetVehicleProperties = myFramework.Game.SetVehicleProperties
elseif config.framework == "qb" then
tgiCore.SetVehicleProperties = myFramework.Functions.SetVehicleProperties
else
local gameBuild = GetGameBuildNumber()

function tgiCore.SetVehicleProperties(vehicle, props, fixVehicle)
if not DoesEntityExist(vehicle) then
error(("Unable to set vehicle properties for '%s' (entity does not exist)"):format(vehicle))
end

local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)

SetVehicleModKit(vehicle, 0)
-- SetVehicleAutoRepairDisabled(vehicle, true)

if props.extras then
for id, disable in pairs(props.extras) do
SetVehicleExtra(vehicle, tonumber(id) --[[@as number]], disable == 1)
end
end

if props.plate then
SetVehicleNumberPlateText(vehicle, props.plate)
end

if props.plateIndex then
SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
end

if props.bodyHealth then
SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
end

if props.engineHealth then
SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
end

if props.tankHealth then
SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0)
end

if props.fuelLevel then
SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
end

if props.oilLevel then
SetVehicleOilLevel(vehicle, props.oilLevel + 0.0)
end

if props.dirtLevel then
SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
end

if props.color1 then
if type(props.color1) == 'number' then
ClearVehicleCustomPrimaryColour(vehicle)
SetVehicleColours(vehicle, props.color1 --[[@as number]], colorSecondary --[[@as number]])
else
if props.paintType1 then SetVehicleModColor_1(vehicle, props.paintType1, colorPrimary, pearlescentColor) end

SetVehicleCustomPrimaryColour(vehicle, props.color1[1], props.color1[2], props.color1[3])
end
end

if props.color2 then
if type(props.color2) == 'number' then
ClearVehicleCustomSecondaryColour(vehicle)
SetVehicleColours(vehicle, props.color1 or colorPrimary --[[@as number]], props.color2 --[[@as number]])
else
if props.paintType2 then SetVehicleModColor_2(vehicle, props.paintType2, colorSecondary) end

SetVehicleCustomSecondaryColour(vehicle, props.color2[1], props.color2[2], props.color2[3])
end
end

if props.pearlescentColor or props.wheelColor then
SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor or wheelColor)
end

if props.interiorColor then
SetVehicleInteriorColor(vehicle, props.interiorColor)
end

if props.dashboardColor then
SetVehicleDashboardColor(vehicle, props.dashboardColor)
end

if props.wheels then
SetVehicleWheelType(vehicle, props.wheels)
end

if props.wheelSize then
SetVehicleWheelSize(vehicle, props.wheelSize)
end

if props.wheelWidth then
SetVehicleWheelWidth(vehicle, props.wheelWidth)
end

if props.windowTint then
SetVehicleWindowTint(vehicle, props.windowTint)
end

if props.neonEnabled then
for i = 1, #props.neonEnabled do
SetVehicleNeonLightEnabled(vehicle, i - 1, props.neonEnabled[i])
end
end

if props.windows then
for i = 1, #props.windows do
RemoveVehicleWindow(vehicle, props.windows[i])
end
end

if props.doors then
for i = 1, #props.doors do
SetVehicleDoorBroken(vehicle, props.doors[i], true)
end
end

if props.tyres then
for tyre, state in pairs(props.tyres) do
SetVehicleTyreBurst(vehicle, tonumber(tyre) --[[@as number]], state == 2, 1000.0)
end
end

if props.neonColor then
SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
end

if props.modSmokeEnabled ~= nil then
ToggleVehicleMod(vehicle, 20, props.modSmokeEnabled)
end

if props.tyreSmokeColor then
SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
end

if props.modSpoilers then
SetVehicleMod(vehicle, 0, props.modSpoilers, false)
end

if props.modFrontBumper then
SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
end

if props.modRearBumper then
SetVehicleMod(vehicle, 2, props.modRearBumper, false)
end

if props.modSideSkirt then
SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
end

if props.modExhaust then
SetVehicleMod(vehicle, 4, props.modExhaust, false)
end

if props.modFrame then
SetVehicleMod(vehicle, 5, props.modFrame, false)
end

if props.modGrille then
SetVehicleMod(vehicle, 6, props.modGrille, false)
end

if props.modHood then
SetVehicleMod(vehicle, 7, props.modHood, false)
end

if props.modFender then
SetVehicleMod(vehicle, 8, props.modFender, false)
end

if props.modRightFender then
SetVehicleMod(vehicle, 9, props.modRightFender, false)
end

if props.modRoof then
SetVehicleMod(vehicle, 10, props.modRoof, false)
end

if props.modEngine then
SetVehicleMod(vehicle, 11, props.modEngine, false)
end

if props.modBrakes then
SetVehicleMod(vehicle, 12, props.modBrakes, false)
end

if props.modTransmission then
SetVehicleMod(vehicle, 13, props.modTransmission, false)
end

if props.modHorns then
SetVehicleMod(vehicle, 14, props.modHorns, false)
end

if props.modSuspension then
SetVehicleMod(vehicle, 15, props.modSuspension, false)
end

if props.modArmor then
SetVehicleMod(vehicle, 16, props.modArmor, false)
end

if props.modNitrous then
SetVehicleMod(vehicle, 17, props.modNitrous, false)
end

if props.modTurbo ~= nil then
ToggleVehicleMod(vehicle, 18, props.modTurbo)
end

if props.modSubwoofer ~= nil then
ToggleVehicleMod(vehicle, 19, props.modSubwoofer)
end

if props.modHydraulics ~= nil then
ToggleVehicleMod(vehicle, 21, props.modHydraulics)
end

if props.modXenon ~= nil then
ToggleVehicleMod(vehicle, 22, props.modXenon)
end

if props.xenonColor then
SetVehicleXenonLightsColor(vehicle, props.xenonColor)
end

if props.modFrontWheels then
SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF)
end

if props.modBackWheels then
SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR)
end

if props.modPlateHolder then
SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
end

if props.modVanityPlate then
SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
end

if props.modTrimA then
SetVehicleMod(vehicle, 27, props.modTrimA, false)
end

if props.modOrnaments then
SetVehicleMod(vehicle, 28, props.modOrnaments, false)
end

if props.modDashboard then
SetVehicleMod(vehicle, 29, props.modDashboard, false)
end

if props.modDial then
SetVehicleMod(vehicle, 30, props.modDial, false)
end

if props.modDoorSpeaker then
SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
end

if props.modSeats then
SetVehicleMod(vehicle, 32, props.modSeats, false)
end

if props.modSteeringWheel then
SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
end

if props.modShifterLeavers then
SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
end

if props.modAPlate then
SetVehicleMod(vehicle, 35, props.modAPlate, false)
end

if props.modSpeakers then
SetVehicleMod(vehicle, 36, props.modSpeakers, false)
end

if props.modTrunk then
SetVehicleMod(vehicle, 37, props.modTrunk, false)
end

if props.modHydrolic then
SetVehicleMod(vehicle, 38, props.modHydrolic, false)
end

if props.modEngineBlock then
SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
end

if props.modAirFilter then
SetVehicleMod(vehicle, 40, props.modAirFilter, false)
end

if props.modStruts then
SetVehicleMod(vehicle, 41, props.modStruts, false)
end

if props.modArchCover then
SetVehicleMod(vehicle, 42, props.modArchCover, false)
end

if props.modAerials then
SetVehicleMod(vehicle, 43, props.modAerials, false)
end

if props.modTrimB then
SetVehicleMod(vehicle, 44, props.modTrimB, false)
end

if props.modTank then
SetVehicleMod(vehicle, 45, props.modTank, false)
end

if props.modWindows then
SetVehicleMod(vehicle, 46, props.modWindows, false)
end

if props.modDoorR then
SetVehicleMod(vehicle, 47, props.modDoorR, false)
end

if props.modLivery then
SetVehicleMod(vehicle, 48, props.modLivery, false)
SetVehicleLivery(vehicle, props.modLivery)
end

if props.modRoofLivery then
SetVehicleRoofLivery(vehicle, props.modRoofLivery)
end

if props.modLightbar then
SetVehicleMod(vehicle, 49, props.modLightbar, false)
end

if props.bulletProofTyres ~= nil then
SetVehicleTyresCanBurst(vehicle, props.bulletProofTyres)
end

if gameBuild >= 2372 and props.driftTyres then
SetDriftTyresEnabled(vehicle, true)
end

if fixVehicle then
SetVehicleFixed(vehicle)
end
end
end

View file

@ -0,0 +1,15 @@
local tgiann_skillbar = GetResourceState("tgiann-skillbar") == "started"

tgiCore.skillCheck = function(time)
if tgiann_skillbar then
return exports["tgiann-skillbar"]:taskBar(6500, true)
end

local dif = "easy"
if time < 2000 then
dif = "hard"
elseif time < 5000 then
dif = "medium"
end
return lib.skillCheck({ dif })
end

View file

@ -0,0 +1,35 @@
local tgiann_hotwire = GetResourceState("tgiann-hotwire") ~= "missing"
local qs_vehiclekeys = GetResourceState("qs-vehiclekeys") ~= "missing"
local qb_vehiclekeys = GetResourceState("qb-vehiclekeys") ~= "missing"

---@param vehicle number
---@param keyType? "giveKey" | "nonRemoveable" | "garage"
---@diagnostic disable-next-line: duplicate-set-field
tgiCore.GiveVehicleKey = function(vehicle, keyType)
if tgiann_hotwire then
if keyType == "giveKey" then
exports["tgiann-hotwire"]:GiveKeyVehicle(vehicle, true)
elseif keyType == "nonRemoveable" then
exports["tgiann-hotwire"]:SetNonRemoveableIgnition(vehicle, true)
elseif keyType == "garage" then
exports["tgiann-hotwire"]:CheckKeyInIgnitionWhenSpawn(vehicle)
end
elseif qs_vehiclekeys then
local plate = GetVehicleNumberPlateText(vehicle)
local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicle))
exports['qs-vehiclekeys']:GiveKeys(plate, model, true)
elseif qb_vehiclekeys then
TriggerServerEvent("tgiann-core:server:giveVehicleKey", NetworkGetNetworkIdFromEntity(vehicle))
else
local plate = GetVehicleNumberPlateText(vehicle)
TriggerEvent("vehiclekeys:client:SetOwner", plate)
TriggerEvent("x-hotwire:give-keys", vehicle)
TriggerEvent('tgiann-hotwire:give-keys-with-carid', vehicle)
end
end

RegisterNetEvent("tgiann-core:client:giveVehicleKey")
AddEventHandler("tgiann-core:client:giveVehicleKey", function(netId, keyType)
local vehicle = NetworkGetEntityFromNetworkId(netId)
tgiCore.GiveVehicleKey(vehicle, keyType)
end)