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/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.
Loading…
Add table
Add a link
Reference in a new issue