1
0
Fork 0
forked from Simnation/Main
Main/resources/[freizeit]/[gym]/dynyx-gym/client/main.lua
2025-08-11 17:38:19 +02:00

514 lines
17 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
-- Check if player has an item (uses server-side check for compatibility with all inventory systems)
local function checkHasItem(item)
local hasItem = false
local checkComplete = false
-- Request item check from server
TriggerServerEvent('dynyx_gym:server:CheckItem', item)
-- Wait for response
RegisterNetEvent('dynyx_gym:client:ItemCheckResult', function(result)
hasItem = result
checkComplete = true
end)
-- Wait for the response with a timeout
local timeout = 500 -- 500ms timeout
local start = GetGameTimer()
while not checkComplete and GetGameTimer() - start < timeout do
Wait(0)
end
return hasItem
end
CreateThread(function()
for k, v in pairs(Config.Threadmills) do
exports['qb-target']:AddBoxZone("treadmill"..k, v.coords - vector3(0.0, 0.0, 1.0), 1, 2, {
name = "treadmill"..k,
heading = 300,
debugPoly = false,
minZ = v.coords.z - 1.0,
maxZ = v.coords.z + 2.0,
}, {
options = {
{
type = "client",
event = "dynyx-gym:treadmill",
icon = "fas fa-person-running",
label = 'Use Treadmill'
},
},
distance = 2.0
})
end
for k, v in pairs(Config.LiftWeight) do
exports['qb-target']:AddBoxZone("liftweights"..k, v.coords - vector3(0.0, 0.0, 1.0), 1, 2, {
name = "liftweights"..k,
heading = 300,
debugPoly = false,
minZ = v.coords.z - 1.0,
maxZ = v.coords.z + 2.0,
}, {
options = {
{
type = "client",
event = 'dynyx-gym:liftweights',
icon = "fas fa-dumbbell",
label = 'Lift Weights'
},
},
distance = 2.0
})
end
exports['qb-target']:AddBoxZone("chinups", vector3(-1258.97, -356.16, 36.99), 1, 2, {
name = "chinups",
heading = 300.0,
debugPoly = false,
minZ = 30.0,
maxZ = 39.0,
}, {
options = {
{
type = "client",
event = 'dynyx-gym:chinup',
icon = "fa-solid fa-arrow-up",
label = 'Do Chinups'
},
},
distance = 2.0
})
exports['qb-target']:AddBoxZone("chinups2", vector3(-1257.71, -358.84, 36.99), 1, 2, {
name = "chinups2",
heading = 300.0,
debugPoly = false,
minZ = 30.0,
maxZ = 39.0,
}, {
options = {
{
type = "client",
event = 'dynyx-gym:chinup2',
icon = "fa-solid fa-arrow-up",
label = 'Do Chinups'
},
},
distance = 2.0
})
exports['qb-target']:AddCircleZone("yoga", vector3(-1262.42, -360.93, 36.96), 3, {
name = "yoga",
debugPoly = false,
}, {
options = {
{
type = "client",
event = "dynyx-gym:yoga",
icon = 'fas fa-face-smile',
label = 'Start Yoga',
}
},
distance = 2.5,
})
end)
RegisterNetEvent('dynyx-gym:treadmill', function()
local hasItem = checkHasItem(Config.GymPassItem)
if hasItem then
Treadmill()
else
QBCore.Functions.Notify("You dont have a membership pass", "error")
end
end)
RegisterNetEvent('dynyx-gym:chinup', function()
local hasItem = checkHasItem(Config.GymPassItem)
if hasItem then
Chinup()
else
QBCore.Functions.Notify("You dont own a membership!", "error")
end
end)
RegisterNetEvent('dynyx-gym:chinup2', function()
local hasItem = checkHasItem(Config.GymPassItem)
if hasItem then
Chinup2()
else
QBCore.Functions.Notify("You dont own a membership!", "error")
end
end)
RegisterNetEvent('dynyx-gym:liftweights', function()
local hasItem = checkHasItem(Config.GymPassItem)
if hasItem then
LiftWeight()
else
QBCore.Functions.Notify("You dont own a membership!", "error")
end
end)
RegisterNetEvent('dynyx-gym:yoga', function()
local hasItem = checkHasItem(Config.GymPassItem)
if hasItem then
Yoga()
else
QBCore.Functions.Notify("You dont own a membership!", "error")
end
end)
local function LoadAnimDict(dict)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Wait(10)
end
end
function ChinupsAnim()
local ped = PlayerPedId()
local chinup = Config.Skills.Chinups.ChinupAnimCoords
SetEntityCoords(ped, chinup.x, chinup.y, chinup.z, false, false, false, true)
SetEntityHeading(ped, chinup.w)
end
function ChinupsAnim2()
local ped = PlayerPedId()
local chinup = Config.Skills.Chinups.ChinupAnimCoords2
SetEntityCoords(ped, chinup.x, chinup.y, chinup.z, false, false, false, true)
SetEntityHeading(ped, chinup.w)
end
local function ThreadmillReward(results)
if results == 'success' then
exports["mz-skills"]:UpdateSkill(Config.Skills.ThreadMills.skill, Config.Skills.ThreadMills.amount)
Wait(2000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.ThreadMills.Stress)
TriggerEvent('inventory:client:busy:status', false)
elseif results == 'failed' then
QBCore.Functions.Notify("That did not feel too good..", "error")
Wait(3000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.ThreadMills.Minigame.FailedMinigameStress)
end
end
local function StartThreadmillMinigame()
-------------------------------------------------------------------------------------------- ps-ui section
if Config.Minigame == 'ps-ui' then
exports['ps-ui']:Circle(function(success)
if success then
ThreadmillReward('success')
else --failed
ThreadmillReward('failed')
end
end, Config.Skills.ThreadMills.Minigame.circles, Config.Skills.ThreadMills.Minigame.time)
-------------------------------------------------------------------------------------------- qb-lock section
elseif Config.Minigame == 'qb-lock' then
local success = exports['qb-lock']:StartLockPickCircle(Config.Skills.ThreadMills.Minigame.circles, Config.Skills.ThreadMills.Minigame.time, success)
if success then
ThreadmillReward('success')
else --failed
ThreadmillReward('failed')
end
elseif Config.Minigame == 'skillCheck' then
local success = lib.skillCheck({'easy', 'easy', 'medium', 'medium'}, {'w', 'a', 's', 'd'})
if success then
ThreadmillReward('success')
else --failed
ThreadmillReward('failed')
end
end
end
function Treadmill()
local ped = PlayerPedId()
TaskStartScenarioInPlace(ped, "WORLD_HUMAN_JOG_STANDING", 0, true)
if Config.Progressbar == 'qb' then
QBCore.Functions.Progressbar('random_task', 'Jogging', Config.Skills.ThreadMills.ProgressbarDuration, false, false, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
}, {}, {}, {}, function()
StartThreadmillMinigame()
ClearPedTasks(ped)
end)
elseif Config.Progressbar == 'ox' then
exports.ox_inventory:Progress({
duration = Config.Skills.ThreadMills.ProgressbarDuration,
label = "Jogging",
useWhileDead = false,
disable = {
move = true,
car = true,
combat = true,
mouse = false,
},
}, function(cancel)
if not cancel then
StartThreadmillMinigame()
ClearPedTasks(ped)
end
end)
end
end
local function ChinupReward(results)
if results == 'success' then
exports["mz-skills"]:UpdateSkill(Config.Skills.Chinups.skill, Config.Skills.Chinups.amount)
Wait(2000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.Chinups.Stress)
TriggerEvent('inventory:client:busy:status', false)
elseif results == 'failed' then
QBCore.Functions.Notify("That did not feel too good..", "error")
Wait(3000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.Chinups.Minigame.FailedMinigameStress)
end
end
local function StartChinupMinigame()
-------------------------------------------------------------------------------------------- ps-ui section
if Config.Minigame == 'ps-ui' then
exports['ps-ui']:Circle(function(success)
if success then
ChinupReward('success')
else --failed
ChinupReward('failed')
end
end, Config.Skills.Chinups.Minigame.circles, Config.Skills.Chinups.Minigame.time)
-------------------------------------------------------------------------------------------- qb-lock section
elseif Config.Minigame == 'qb-lock' then
local success = exports['qb-lock']:StartLockPickCircle(Config.Skills.Chinups.Minigame.circles, Config.Skills.Chinups.Minigame.time, success)
if success then
ChinupReward('success')
else --failed
ChinupReward('failed')
end
elseif Config.Minigame == 'skillCheck' then
local success = lib.skillCheck({'easy', 'easy', 'medium', 'medium'}, {'w', 'a', 's', 'd'})
if success then
ChinupReward('success')
else --failed
ChinupReward('failed')
end
end
end
function Chinup()
local ped = PlayerPedId()
ChinupsAnim()
TaskStartScenarioInPlace(ped, "PROP_HUMAN_MUSCLE_CHIN_UPS", 0, true)
if Config.Progressbar == 'qb' then
QBCore.Functions.Progressbar('random_task', 'Doing Chin-ups', Config.Skills.Chinups.ProgressbarDuration, false, false, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
}, {}, {}, {}, function()
StartChinupMinigame()
ClearPedTasks(ped)
end)
elseif Config.Progressbar == 'ox' then
exports.ox_inventory:Progress({
duration = Config.Skills.Chinups.ProgressbarDuration,
label = "Doing Chin-ups",
useWhileDead = false,
disable = {
move = true,
car = true,
combat = true,
mouse = false,
},
}, function(cancel)
if not cancel then
StartChinupMinigame()
ClearPedTasks(ped)
end
end)
end
end
function Chinup2()
local ped = PlayerPedId()
ChinupsAnim2()
TaskStartScenarioInPlace(ped, "PROP_HUMAN_MUSCLE_CHIN_UPS", 0, true)
if Config.Progressbar == 'qb' then
QBCore.Functions.Progressbar('random_task', 'Doing Chin-ups', Config.Skills.Chinups.ProgressbarDuration, false, false, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
}, {}, {}, {}, function()
StartChinupMinigame()
ClearPedTasks(ped)
end)
elseif Config.Progressbar == 'ox' then
exports.ox_inventory:Progress({
duration = Config.Skills.Chinups.ProgressbarDuration,
label = "Doing Chin-ups",
useWhileDead = false,
disable = {
move = true,
car = true,
combat = true,
mouse = false,
},
}, function(cancel)
if not cancel then
StartChinupMinigame()
ClearPedTasks(ped)
end
end)
end
end
local function LiftWeightReward(results)
if results == 'success' then
exports["mz-skills"]:UpdateSkill(Config.Skills.LiftWeights.skill, Config.Skills.LiftWeights.amount)
Wait(2000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.LiftWeights.Stress)
TriggerEvent('inventory:client:busy:status', false)
elseif results == 'failed' then
QBCore.Functions.Notify("That did not feel too good..", "error")
Wait(3000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.LiftWeights.Minigame.FailedMinigameStress)
end
end
local function StartLiftWeightMinigame()
-------------------------------------------------------------------------------------------- ps-ui section
if Config.Minigame == 'ps-ui' then
exports['ps-ui']:Circle(function(success)
if success then
LiftWeightReward('success')
else --failed
LiftWeightReward('failed')
end
end, Config.Skills.LiftWeights.Minigame.circles, Config.Skills.LiftWeights.Minigame.time)
-------------------------------------------------------------------------------------------- qb-lock section
elseif Config.Minigame == 'qb-lock' then
local success = exports['qb-lock']:StartLockPickCircle(Config.Skills.LiftWeights.Minigame.circles, Config.Skills.LiftWeights.Minigame.time, success)
if success then
LiftWeightReward('success')
else --failed
LiftWeightReward('failed')
end
elseif Config.Minigame == 'skillCheck' then
local success = lib.skillCheck({'easy', 'easy', 'medium', 'medium'}, {'w', 'a', 's', 'd'})
if success then
LiftWeightReward('success')
else --failed
LiftWeightReward('failed')
end
end
end
function LiftWeight()
local ped = PlayerPedId()
TaskStartScenarioInPlace(ped, "world_human_muscle_free_weights", 0, true)
if Config.Progressbar == 'qb' then
QBCore.Functions.Progressbar('random_task', 'Lifting Weights', Config.Skills.LiftWeights.ProgressbarDuration, false, false, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
}, {}, {}, {}, function()
StartLiftWeightMinigame()
ClearPedTasks(ped)
end)
elseif Config.Progressbar == 'ox' then
exports.ox_inventory:Progress({
duration = Config.Skills.LiftWeights.ProgressbarDuration,
label = "Lifting Weights",
useWhileDead = false,
disable = {
move = true,
car = true,
combat = true,
mouse = false,
},
}, function(cancel)
if not cancel then
StartLiftWeightMinigame()
ClearPedTasks(ped)
end
end)
end
end
local function YogaReward(results)
if results == 'success' then
exports["mz-skills"]:UpdateSkill(Config.Skills.Yoga.skill, Config.Skills.Yoga.amount)
Wait(2000)
TriggerServerEvent('hud:server:RelieveStress', Config.Skills.Yoga.Stress)
TriggerEvent('inventory:client:busy:status', false)
elseif results == 'failed' then
QBCore.Functions.Notify("That did not feel too good..", "error")
Wait(3000)
TriggerServerEvent('hud:server:GainStress', Config.Skills.Yoga.Minigame.FailedMinigameStress)
end
end
local function StartYogaMinigame()
-------------------------------------------------------------------------------------------- ps-ui section
if Config.Minigame == 'ps-ui' then
exports['ps-ui']:Circle(function(success)
if success then
YogaReward('success')
else --failed
YogaReward('failed')
end
end, Config.Skills.Yoga.Minigame.circles, Config.Skills.Yoga.Minigame.time)
-------------------------------------------------------------------------------------------- qb-lock section
elseif Config.Minigame == 'qb-lock' then
local success = exports['qb-lock']:StartLockPickCircle(Config.Skills.Yoga.Minigame.circles, Config.Skills.Yoga.Minigame.time, success)
if success then
YogaReward('success')
else --failed
YogaReward('failed')
end
elseif Config.Minigame == 'skillCheck' then
local success = lib.skillCheck({'easy', 'easy', 'medium', 'medium'}, {'w', 'a', 's', 'd'})
if success then
YogaReward('success')
else --failed
YogaReward('failed')
end
end
end
function Yoga()
local ped = PlayerPedId()
TaskStartScenarioInPlace(ped, "WORLD_HUMAN_YOGA", 0, true)
if Config.Progressbar == 'qb' then
QBCore.Functions.Progressbar('random_task', 'Yoga Exercising', Config.Skills.Yoga.ProgressbarDuration, false, false, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
}, {}, {}, {}, function()
StartYogaMinigame()
ClearPedTasks(ped)
end)
elseif Config.Progressbar == 'ox' then
exports.ox_inventory:Progress({
duration = Config.Skills.Yoga.ProgressbarDuration,
label = "Yoga Exercising",
useWhileDead = false,
disable = {
move = true,
car = true,
combat = true,
mouse = false,
},
}, function(cancel)
if not cancel then
StartYogaMinigame()
ClearPedTasks(ped)
end
end)
end
end