forked from Simnation/Main
ed
This commit is contained in:
parent
30bf7c8604
commit
8dbe79a29d
135 changed files with 0 additions and 0 deletions
BIN
resources/[standalone]/tgiann-core/.fxap
Normal file
BIN
resources/[standalone]/tgiann-core/.fxap
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/camera/camera.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/camera/camera.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/exports.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/exports.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/framework/esx/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/framework/esx/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/framework/ox/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/framework/ox/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/framework/qb/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/framework/qb/main.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
21
resources/[standalone]/tgiann-core/client/functions/boss.lua
Normal file
21
resources/[standalone]/tgiann-core/client/functions/boss.lua
Normal 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
|
BIN
resources/[standalone]/tgiann-core/client/functions/callback.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/functions/callback.lua
Normal file
Binary file not shown.
|
@ -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
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
55
resources/[standalone]/tgiann-core/client/functions/duty.lua
Normal file
55
resources/[standalone]/tgiann-core/client/functions/duty.lua
Normal 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
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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
|
Binary file not shown.
Binary file not shown.
|
@ -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)
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
tgiCore.OpenMechanicMenu = function()
|
||||
if config.framework == "qb" then
|
||||
elseif confg.framework == "esx" then
|
||||
end
|
||||
end
|
BIN
resources/[standalone]/tgiann-core/client/functions/notif.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/functions/notif.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/functions/playAnim.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/functions/playAnim.lua
Normal file
Binary file not shown.
|
@ -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
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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
|
|
@ -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
|
Binary file not shown.
Binary file not shown.
|
@ -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)
|
BIN
resources/[standalone]/tgiann-core/client/gizmo/gizmo.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/gizmo/gizmo.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/inventory/esx/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/inventory/esx/main.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/inventory/ox/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/inventory/ox/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/inventory/qb/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/inventory/qb/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/inventory/qs/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/inventory/qs/main.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/keyHelp/keyHelp.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/keyHelp/keyHelp.lua
Normal file
Binary file not shown.
97
resources/[standalone]/tgiann-core/client/main.lua
Normal file
97
resources/[standalone]/tgiann-core/client/main.lua
Normal 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)
|
BIN
resources/[standalone]/tgiann-core/client/menu/menu.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/menu/menu.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/menu/menuDialog.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/menu/menuDialog.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/menu/menuList.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/menu/menuList.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/playerOwnable/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/playerOwnable/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/client/target/target.lua
Normal file
BIN
resources/[standalone]/tgiann-core/client/target/target.lua
Normal file
Binary file not shown.
121
resources/[standalone]/tgiann-core/configs/config.lua
Normal file
121
resources/[standalone]/tgiann-core/configs/config.lua
Normal 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)
|
12
resources/[standalone]/tgiann-core/configs/discordConfig.lua
Normal file
12
resources/[standalone]/tgiann-core/configs/discordConfig.lua
Normal 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 = "",
|
||||
}
|
|
@ -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
|
||||
}
|
10
resources/[standalone]/tgiann-core/configs/webhookConfig.lua
Normal file
10
resources/[standalone]/tgiann-core/configs/webhookConfig.lua
Normal file
|
@ -0,0 +1,10 @@
|
|||
webhooks = {
|
||||
playerOwnable = {
|
||||
buy = "",
|
||||
payRent = "",
|
||||
withdraw = "",
|
||||
hireEmployee = "",
|
||||
fireEmployee = "",
|
||||
expired = "",
|
||||
}
|
||||
}
|
56
resources/[standalone]/tgiann-core/fxmanifest.lua
Normal file
56
resources/[standalone]/tgiann-core/fxmanifest.lua
Normal 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'
|
BIN
resources/[standalone]/tgiann-core/import.lua
Normal file
BIN
resources/[standalone]/tgiann-core/import.lua
Normal file
Binary file not shown.
52
resources/[standalone]/tgiann-core/languages/en.lua
Normal file
52
resources/[standalone]/tgiann-core/languages/en.lua
Normal 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",
|
||||
}
|
||||
}
|
||||
}
|
52
resources/[standalone]/tgiann-core/languages/tr.lua
Normal file
52
resources/[standalone]/tgiann-core/languages/tr.lua
Normal 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",
|
||||
}
|
||||
}
|
||||
}
|
BIN
resources/[standalone]/tgiann-core/server/framework/esx/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/framework/esx/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/framework/ox/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/framework/ox/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/framework/qb/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/framework/qb/main.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/functions/callback.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/functions/callback.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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
|
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/functions/jobCount.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/functions/jobCount.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/inventory/esx/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/inventory/esx/main.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/inventory/ox/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/inventory/ox/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/inventory/qb/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/inventory/qb/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/inventory/qs/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/inventory/qs/main.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/server/playerOwnable/main.lua
Normal file
BIN
resources/[standalone]/tgiann-core/server/playerOwnable/main.lua
Normal file
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/shared/functions/debug.lua
Normal file
BIN
resources/[standalone]/tgiann-core/shared/functions/debug.lua
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/[standalone]/tgiann-core/shared/functions/interval.lua
Normal file
BIN
resources/[standalone]/tgiann-core/shared/functions/interval.lua
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue