1
0
Fork 0
forked from Simnation/Main
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

Binary file not shown.

Binary file not shown.

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)

View file

@ -0,0 +1,97 @@
function sendNuiMessage(method, data)
SendNUIMessage({
app = "app-name",
method = method,
data = data,
})
end
function cbNuiMessage(method, data)
SendNUIMessage({
app = "app-name",
method = method .. "Success",
data = data,
})
return ""
end
local hasCustomNuiFocus = false
RegisterNetEvent('tgiann-core:nui-focus')
AddEventHandler('tgiann-core:nui-focus', function(hasFocus, hasKeyboard, hasMouse, allControl)
hasCustomNuiFocus = hasFocus
TriggerEvent("tgiann-main:focus", hasCustomNuiFocus)
if not hasCustomNuiFocus then return end
CreateThread(function()
while hasCustomNuiFocus do
if hasKeyboard and not allControl then
DisableAllControlActions(0)
EnableControlAction(0, 249, true)
elseif hasKeyboard and allControl then
DisableControlAction(0, 24, true) -- disable attack
DisableControlAction(0, 25, true) -- disable aim
DisableControlAction(0, 1, true) -- LookLeftRight
DisableControlAction(0, 2, true) -- LookUpDown
end
if not hasKeyboard and hasMouse then
DisableControlAction(0, 1, true)
DisableControlAction(0, 2, true)
elseif hasKeyboard and not hasMouse then
EnableControlAction(0, 1, true)
EnableControlAction(0, 2, true)
end
HudWeaponWheelIgnoreSelection()
DisableFrontendThisFrame()
Wait(0)
end
end)
end)
local function updateUiClientData()
sendNuiMessage("updateClientData", {
lang = langs[config.lang],
config = {
textUiLocation = config.textUiLocation,
locale = config.locale
},
defaultColor = config.defaultColor
})
end
local playerLoadedEvent = custom.playerLoadedEvent.active and custom.playerLoadedEvent.event or 'tgiCore:Client:OnPlayerLoaded'
AddEventHandler(playerLoadedEvent, updateUiClientData)
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
Wait(2000)
updateUiClientData()
end)
AddEventHandler('onResourceStop', function(resourceName)
if not PlayerData then return end
if GetCurrentResourceName() == resourceName then return end
if not string.find(resourceName, "tgiann") then return end
while GetResourceState(resourceName) ~= "started" do Wait(100) end
SetTimeout(1000, function() TriggerEvent("tgiCore:Client:OnPlayerLoaded", PlayerData) end)
end)
if custom.deadReviveEvent.active then
RegisterNetEvent(custom.deadReviveEvent.deadEvent)
AddEventHandler(custom.deadReviveEvent.deadEvent, function(data)
TriggerEvent("tgiCore:playerdead", data ~= nil and data or true)
end)
RegisterNetEvent(custom.deadReviveEvent.reviveEvent)
AddEventHandler(custom.deadReviveEvent.reviveEvent, function(data)
TriggerEvent("tgiCore:playerdead", data ~= nil and data or false)
end)
elseif config.wasabi_ambulance then
AddStateBagChangeHandler("dead", ('player:%s'):format(GetPlayerServerId(PlayerId())), function(bagName, _, value)
local entity = GetEntityFromStateBagName(bagName)
if entity == 0 then return end
TriggerEvent("tgiCore:playerdead", value)
end)
end
RegisterNetEvent("tgiann-lumihud:setLumiHudColor")
AddEventHandler("tgiann-lumihud:setLumiHudColor", function(color)
sendNuiMessage("setLumiHudColor", color)
end)

View file

@ -0,0 +1,121 @@
--[[
Start tgiann-core script after es_extented/qb-core/oxmysql script and before tgiann-* scripts
Adjust the tgiann-core config file according to the framework you are using
- If you are having any problems, please check the channels on my discord. If your problem is not resolved, open a ticket.
- Discord: http://discord.gg/9SEg2WNf7Y
- Docs: https://tgiann.gitbook.io/tgiann
- Core Exports: https://docs.tgiann.com/scripts/tgiann-core
]]
config = {}
config.lang = "en" -- "en" - "tr"
config.locale = {
timeLocale = "en-EN",
moneyLocale = "en-EN",
moneyCurrency = "USD",
}
-- number of online police needed to control
config.policeJobs = {
"police",
}
config.defaultColor = { background = "#36ff9f", color = "#252525" } -- Changes the main hud color of tgiann scripts.
config.textUiLocation = "right" -- "left" | "right"
config.tgiannDrawText3D = true -- Use tgiann's drawtext3d function instead of QB and ESX
config.checkArtifactVersion = true -- Check the artifact version of the server
config.playerMaxOwnableLocations = 1 -- The maximum number of places the player can buy in scripts like garage, clothing
frameworkConfig = {
esxScriptName = "es_extended", -- https://github.com/esx-framework/esx_core/tree/main/%5Bcore%5D/es_extended
qbScriptName = "qb-core", -- https://github.com/qbcore-framework/qb-core
qbxScriptName = "qbx_core", -- https://github.com/Qbox-project/qbx_core
tgiannInventoryScriptName = "tgiann-inventory", -- https://store.tgiann.com/package/6251398
oxInventoryScriptName = "ox_inventory", -- https://github.com/overextended/ox_inventory
qsInventoryScriptName = "qs-inventory",
codemInventoryScriptName = "codem-inventory",
origenInventoryScriptName = "origen_inventory",
coreInventoryScriptName = "core_inventory",
oxMysqlScriptName = "oxmysql", -- https://github.com/overextended/oxmysql
esxService = "esx_service", -- https://github.com/esx-framework/esx_service
wasabiAmbulance = "wasabi_ambulance",
oxTarget = "ox_target",
qbTarget = "qb-target",
}
showClosestMenuKey = "LMENU"
custom = {
drawText = {
active = false,
---@param uniqName string Unique name for the text
---@param button string Button text to display
---@param text string Text to display
---@diagnostic disable-next-line: unused-local
openFunc = function(uniqName, button, text)
lib.showTextUI(text)
end,
---@param uniqName string Unique name for the text
---@diagnostic disable-next-line: unused-local
closeFunc = function(uniqName)
lib.hideTextUI()
end
},
notif = {
active = false, -- If you are using a different notify system, set active to true and edit the notify function
---@param msg string
---@param msgType? "primary" | "success" | "error"
---@param time? number
---@diagnostic disable-next-line: unused-local
func = function(msg, msgType, time)
lib.notify({
title = 'Notification',
description = msg,
type = msgType or "primary",
duration = time or 5000,
})
end
},
uiDrawText3D = {
active = false, -- If you want to use something other than tgiann 3d draw text, you can activate this. (When true, some problems may arise!!!)
triggerEveryTick = false, -- When true, the openFunc function is triggered every tick.
---@param uniqName string Unique name for the text
---@param data [string, string][] -- Data to display, where each item is a table with two strings: [1] = key, [2] = text
---@param coord vector3
---@param screenPos { x: number, y: number }
---@diagnostic disable-next-line: unused-local
openFunc = function(uniqName, data, coord, screenPos)
local text = ""
local length = #data
for i = 1, length do
text = ("[%s] %s%s"):format(data[i][1], data[i][2], i < length and " " or "")
end
lib.showTextUI(text)
end,
---@param uniqName string Unique name for the text
---@diagnostic disable-next-line: unused-local
closeFunc = function(uniqName)
lib.hideTextUI()
end
},
playerLoadedEvent = {
active = false, -- for core, the player loaded event needs to be triggered to load the ui data. if you are using a different loaded event than qb or esx, make it true and edit the event (-- also u can change event from client/main.lua)
event = "playerSpawned" --https://docs.fivem.net/docs/resources/spawnmanager/events/playerSpawned/
},
deadReviveEvent = {
active = false, -- if you are using a different ambulance script, make it true and edit the events (-- also u can change event from client/main.lua)
deadEvent = "baseevents:onPlayerDied", -- https://docs.fivem.net/docs/resources/baseevents/events/onPlayerDied/
reviveEvent = "playerSpawned", -- https://docs.fivem.net/docs/resources/spawnmanager/events/playerSpawned/
}
}
config.test = false -- Dont touch this
config.tgiannServer = false -- Dont touch this
langs = {}
exports("getConfig", function()
return config
end)

View file

@ -0,0 +1,12 @@
-- Don't share the bot token with anyone
discordConfig = {
guildId = '', -- Set to the ID of your guild
botToken = '', -- Search google "How to get discord bot token"
cacheDiscordRoles = true, -- true to cache player roles, false to make a new Discord Request every time
cacheDiscordRolesTime = 60, -- if CacheDiscordRoles is true, how long to cache roles before clearing (in seconds)
}
config.discordLog = {
name = "TGIANN",
avatar = "",
}

View file

@ -0,0 +1,7 @@
screenshot = {
fivemanage = { -- https://fivemanage.com
active = false, -- Set to true to enable fivemanage
api = '', -- Fivemmanage API Key
},
discordWebhook = "" -- if favemanage is active this will be ignored
}

View file

@ -0,0 +1,10 @@
webhooks = {
playerOwnable = {
buy = "",
payRent = "",
withdraw = "",
hireEmployee = "",
fireEmployee = "",
expired = "",
}
}

View file

@ -0,0 +1,56 @@
fx_version "cerulean"
game "gta5"
version "4.25.2"
lua54 "yes"
dependencies { "ox_lib" }
ui_page "ui/build/index.html"
files {
"ui/build/**.*",
}
escrow_ignore {
"configs/*.lua",
"client/functions/progressbar.lua",
"client/functions/skillCheck.lua",
"client/functions/setVehicleProperties.lua",
"client/functions/getVehicleProperties.lua",
"client/functions/duty.lua",
"client/functions/boss.lua",
"client/functions/mechanic.lua",
"client/functions/clothing.lua",
"client/functions/vehicleKey.lua",
"client/functions/inventory.lua",
"server/functions/inventory.lua",
"client/main.lua",
"server/functions/vehicleKey.lua",
"languages/*.lua"
}
shared_scripts {
'@ox_lib/init.lua',
"import.lua",
"configs/config.lua",
"languages/*.lua",
"shared/functions/*.lua",
"shared/other/*.lua",
}
client_scripts {
"client/**.lua",
}
server_scripts {
"@oxmysql/lib/MySQL.lua",
"configs/discordConfig.lua",
"configs/screenshotConfig.lua",
"configs/webhookConfig.lua",
"server/functions/*.lua",
"server/framework/**.lua",
"server/inventory/**.lua",
"server/playerOwnable/**.lua",
}
dependency '/assetpacks'

Binary file not shown.

View file

@ -0,0 +1,52 @@
langs.en = {
alreadyError = "You're already doing something",
openMenu = "Open Menu",
showMenu = "Show Closest DrawText Menus",
gizmoWalkMode = "Walk Mode",
gizmoNormalMode = "Gizmo Mode",
gizmoRotate = "Rotate Mode",
gizmoTranslate = "Translate Mode",
gizmoSnapToGround = "Snap to Ground",
gizmoDone = "Finish Editing",
gizmoCancel = "Cancel Editing",
gizmoCamera = "Move Camera",
returnText = "Return",
accept = "Accept",
cancel = "Cancel",
inputDefaultDesc = "Enter a value greater than zero",
dutyFull = "You can't go on duty, duty is full!",
company = {
alreadyBuyed = "This Company belongs to someone else",
buyCompany = "Rent Company",
companyMenu = "Company",
buyedCompany = "Company rented!",
rentDay = "Rent start day:",
lastRentDay = "Last Pay Day:",
rentCompany = "Pay Rent",
compnayMoney = "Total Money: ",
companyWithdraw = "Withdraw Money",
uCantRentPay = "Too early to pay Rent",
payedRent = "Rent payed successfully",
noMoneyCompany = "Not enough Money!",
rentForDay = "Rent day:",
employeeAction = "Employee Actions",
noEmployee = "No Employees",
hireEmployee = "Hire Employee",
firePlayer = "Fire Employee",
hireEmployeeSuccess = "Employee hired successfully",
fireEmployeeSuccess = "Employee fired successfully",
loading = "loading...",
noPlayer = "No players nearby",
maxOwnableLocations = "You have reached the maximum number of ownable locations",
},
log = {
company = {
buy = "Business Purchased | %s",
payRent = "Business Rent Paid | %s | $%s",
withdraw = "Business Cash Withdrawn | %s | $%s",
hireEmployee = "Business Hire Employed | %s | Employee: %s",
fireEmployee = "Business Fire Employee | %s | Employee: %s",
expired = "Business Expired | %s | Owner: %s",
}
}
}

View file

@ -0,0 +1,52 @@
langs.tr = {
alreadyError = "Zaten Birşey yapıyorsun",
openMenu = "Menüyü Aç",
showMenu = "Yakındaki Menüleri Göster",
gizmoWalkMode = "Yürüme Modu",
gizmoNormalMode = "Gizmo Modu",
gizmoRotate = "Döndürme Modu",
gizmoTranslate = "Hareket Modu",
gizmoSnapToGround = "Yere Yerleştir",
gizmoDone = "Düzenlemeyi Tamamla",
gizmoCancel = "Düzenlemeyi İptal Et",
gizmoCamera = "Kamerayı Hareket Ettir",
returnText = "Geri",
accept = "Onayla",
cancel = "İptal",
inputDefaultDesc = "Sıfırdan Büyük Bir Değer Girin",
dutyFull = "Mesaiye Giremezsin Mesai Dolu!",
company = {
alreadyBuyed = "İşletme Başkasına Ait",
buyCompany = "İşletmeyi Satın Al",
companyMenu = "İşletme",
buyedCompany = "İşletme Satın Alındı!",
rentDay = "En Erken Ödeme Tarihi:",
lastRentDay = "Son Ödeme Tarihi:",
rentCompany = "Kirayı Öde",
compnayMoney = "Kasadaki Miktar: ",
companyWithdraw = "Parayı Çek",
uCantRentPay = "Kira Ücretini Ödemek İçin Daha Çok Erken",
payedRent = "Kira Ücreti Ödendi",
noMoneyCompany = "Kasanda Para Yok!",
rentForDay = "Kiralanacak Gün Sayısı:",
employeeAction = "Çalışan İşlemleri",
noEmployee = "Çalışan Yok",
hireEmployee = "Çalışan Al",
firePlayer = "Kov",
hireEmployeeSuccess = "Oyuncu İşe Alındı",
fireEmployeeSuccess = "Oyuncu İşten Çıkarıldı",
loading = "Yükleniyor",
noPlayer = "Yakınında Oyuncu Yok",
maxOwnableLocations = "Sahip olunabilecek maksimum mekan sayısına ulaştınız"
},
log = {
company = {
buy = "İşletme Satın Alındı | %s",
payRent = "İşletme Kirası Ödendi | %s | $%s",
withdraw = "İşletme Kasasından Para Çekildi | %s | $%s",
hireEmployee = "İşletmeye Çalışan Alındı | %s | Çalışan: %s",
fireEmployee = "İşletmeden Çalışan Çıkarıldı | %s | Çalışan: %s",
expired = "İşletme Süresi Doldu | %s | Owner: %s",
}
}
}

View file

@ -0,0 +1,143 @@
-- server
-- Support for inventory scripts:
-- qb-inventory
-- tgiann-inventory
-- ox_inventory
-- qs-inventory
-- codem-inventory
-- origen_inventory
-- core_inventory
tgiCore.RegisterStash = function(src, data)
if next(data) then data.maxWeight = data.maxweight or data.maxWeight end
if config.ox_inventory then
--- id, label, slots, maxWeight, owner, groups, coords
exports.ox_inventory:RegisterStash(data.stashName, data.label or data.stashName, data.slots or 100, data.maxWeight or 10000000)
elseif config["tgiann-inventory"] then
exports["tgiann-inventory"]:RegisterStash(data)
elseif config.origen_inventory then
exports.origen_inventory:RegisterStash(data.stashName, {
label = data.label or data.stashName,
slots = data.slots,
weight = data.maxWeight,
})
end
return true
end
--- @param src number
--- @param data {stashName: string, slots: number, maxWeight: number, label: string, blacklist: table, whitelist: table, isPlayer: boolean}
--- @diagnostic disable-next-line dublicate-function
tgiCore.OpenStash = function(src, data)
assert(type(src) == "number", "Open Stash: src must be a number")
if next(data) then data.maxWeight = data.maxweight or data.maxWeight end
if config["qs-inventory"] or config["codem-inventory"] then
TriggerClientEvent("tgiann-core:client:openInventory", src, data)
elseif config.ox_inventory then
tgiCore.RegisterStash(src, data)
exports.ox_inventory:forceOpenInventory(src, "stash", data.stashName)
elseif config["tgiann-inventory"] then
tgiCore.RegisterStash(src, data)
exports["tgiann-inventory"]:OpenInventory(src, "stash", data.stashName, {
maxweight = data.maxWeight,
slots = data.slots,
}, {
isPlayer = data.isPlayer,
password = data.password
})
elseif config.origen_inventory then
tgiCore.RegisterStash(src, data)
exports.origen_inventory:OpenInventory(src, 'stash', data.stashName)
elseif config.core_inventory then
--- source, inventory, inventoryType, x, y, open, content, discoverItem)
exports.core_inventory:openInventory(src, data.stashName, "stash", nil, nil, true, nil, false)
elseif config.framework == "qb" then
exports["qb-inventory"]:OpenInventory(src, data.stashName, {
maxweight = data.maxWeight,
slots = data.slots,
label = data.label
})
elseif config.framework == "esx" then
return assert(false, "Not Found ESX inventory script for open stash!")
else
return assert(false, "Not Found inventory script for open stash!")
end
end
-- SHOP
--- @param shopName string
--- @param items table
--- @param location vector3
tgiCore.RegisterShop = function(shopName, items, location)
if config["tgiann-inventory"] then
exports["tgiann-inventory"]:RegisterShop(shopName, items)
elseif config.ox_inventory then
exports.ox_inventory:RegisterShop(shopName, {
name = shopName,
inventory = items,
locations = {
location.xyz
},
groups = {
police = 0
},
})
elseif config.framework == "qb" then
exports['qb-inventory']:CreateShop({
name = shopName,
label = shopName,
slots = #items,
coords = location.xyz,
items = items,
})
end
end
--- @param src number
--- @param data table {shopName: string, items: table}
--- @diagnostic disable-next-line dublicate-function
tgiCore.OpenShop = function(src, data)
assert(type(src) == "number", "Open Shop: src must be a number")
if config.ox_inventory or config["qs-inventory"] or config["codem-inventory"] then
TriggerClientEvent("tgiann-core:client:OpenShop", src, data)
elseif config["tgiann-inventory"] then
exports["tgiann-inventory"]:OpenShop(src, data.shopName)
elseif config.origen_inventory then
-- stash items need add to config file
exports.origen_inventory:OpenInventory(src, 'shop', data.stashName)
elseif config.core_inventory then
-- there is no shop in core_inventory
elseif config.framework == "qb" then
exports['qb-inventory']:OpenShop(src, data.shopName)
elseif config.framework == "esx" then
return assert(false, "Not Found ESX inventory script for open shop!")
else
return assert(false, "Not Found inventory script for open shop!")
end
end
-- Open Target Player
--- @param src number
--- @param targetSrc table {shopName: string, items: table}
--- @diagnostic disable-next-line dublicate-function
tgiCore.OpenTargetPlayerInventory = function(src, targetSrc)
assert(type(src) == "number", "Open Target Inventory: src must be a number")
assert(type(targetSrc) == "number", "Open Target Inventory: targetSrc must be a number")
if config.ox_inventory or config["qs-inventory"] or config["codem-inventory"] or config.core_inventory then
TriggerClientEvent("tgiann-core:client:OpenTargetPlayerInventory", src, targetSrc)
elseif config["tgiann-inventory"] then
exports["tgiann-inventory"]:OpenInventoryById(src, targetSrc)
elseif config.origen_inventory then
exports.origen_inventory:OpenInventoryById(playerId, otherPlayerId)
elseif config.framework == "qb" then
exports["qb-inventory"]:OpenInventoryById(src, targetSrc)
elseif config.framework == "esx" then
return assert(false, "Not Found ESX inventory script for open stash!")
else
return assert(false, "Not Found inventory script for open stash")
end
end

View file

@ -0,0 +1,20 @@
local qb_vehiclekeys = GetResourceState("qb-vehiclekeys") ~= "missing"
---@param src number
---@param netId number
---@param keyType? "giveKey" | "nonRemoveable" | "garage"
---@diagnostic disable-next-line: duplicate-set-field
tgiCore.GiveVehicleKey = function(src, netId, keyType)
local vehicle = NetworkGetEntityFromNetworkId(netId)
local plate = GetVehicleNumberPlateText(vehicle)
if qb_vehiclekeys then
exports["qb-vehiclekeys"]:GiveKeys(src, plate)
else
TriggerClientEvent("tgiann-core:client:giveVehicleKey", src, netId, keyType)
end
end
RegisterNetEvent("tgiann-core:server:giveVehicleKey")
AddEventHandler("tgiann-core:server:giveVehicleKey", function(netId, keyType)
tgiCore.GiveVehicleKey(source, netId, keyType)
end)

Some files were not shown because too many files have changed in this diff Show more