2025-04-05 22:25:06 +00:00

125 lines
3.7 KiB
Lua

-- Variables
local QBCore = exports['qb-core']:GetCoreObject()
local requiredItemsShowed = false
local requiredItems = { [1] = { name = QBCore.Shared.Items['cryptostick']['name'], image = QBCore.Shared.Items['cryptostick']['image'] } }
-- Functions
local function DrawText3Ds(coords, text)
SetTextScale(0.35, 0.35)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
BeginTextCommandDisplayText('STRING')
SetTextCentre(true)
AddTextComponentSubstringPlayerName(text)
SetDrawOrigin(coords.x, coords.y, coords.z, 0)
EndTextCommandDisplayText(0.0, 0.0)
local factor = (string.len(text)) / 370
DrawRect(0.0, 0.0 + 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
local function ExchangeSuccess()
TriggerServerEvent('qb-crypto:server:ExchangeSuccess', math.random(1, 10))
end
local function ExchangeFail()
local Odd = 5
local RemoveChance = math.random(1, Odd)
local LosingNumber = math.random(1, Odd)
if RemoveChance == LosingNumber then
TriggerServerEvent('qb-crypto:server:ExchangeFail')
TriggerServerEvent('qb-crypto:server:SyncReboot')
end
end
local function SystemCrashCooldown()
CreateThread(function()
while Crypto.Exchange.RebootInfo.state do
if (Crypto.Exchange.RebootInfo.percentage + 1) <= 100 then
Crypto.Exchange.RebootInfo.percentage = Crypto.Exchange.RebootInfo.percentage + 1
TriggerServerEvent('qb-crypto:server:Rebooting', true, Crypto.Exchange.RebootInfo.percentage)
else
Crypto.Exchange.RebootInfo.percentage = 0
Crypto.Exchange.RebootInfo.state = false
TriggerServerEvent('qb-crypto:server:Rebooting', false, 0)
end
Wait(1200)
end
end)
end
CreateThread(function()
while true do
local sleep = 5000
if LocalPlayer.state.isLoggedIn then
local ped = PlayerPedId()
local pos = GetEntityCoords(ped)
local dist = #(pos - Crypto.Exchange.coords)
if dist < 15 then
sleep = 5
if dist < 1.5 then
if not Crypto.Exchange.RebootInfo.state then
DrawText3Ds(Crypto.Exchange.coords, Lang:t('text.enter_usb'))
if not requiredItemsShowed then
requiredItemsShowed = true
TriggerEvent('qb-inventory:client:requiredItems', requiredItems, true)
end
if IsControlJustPressed(0, 38) then
QBCore.Functions.TriggerCallback('qb-crypto:server:HasSticky', function(HasItem)
if HasItem then
local success = exports['qb-minigames']:Hacking(5, 30) -- code block size & seconds to solve
if success then
ExchangeSuccess()
else
ExchangeFail()
end
else
QBCore.Functions.Notify(Lang:t('error.you_dont_have_a_cryptostick'), 'error')
end
end)
end
else
DrawText3Ds(Crypto.Exchange.coords, Lang:t('text.system_is_rebooting', { rebootInfoPercentage = Crypto.Exchange.RebootInfo.percentage }))
end
else
if requiredItemsShowed then
requiredItemsShowed = false
TriggerEvent('qb-inventory:client:requiredItems', requiredItems, false)
end
end
end
end
Wait(sleep)
end
end)
-- Events
RegisterNetEvent('qb-crypto:client:SyncReboot', function()
Crypto.Exchange.RebootInfo.state = true
SystemCrashCooldown()
end)
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
TriggerServerEvent('qb-crypto:server:FetchWorth')
TriggerServerEvent('qb-crypto:server:GetRebootState')
end)
RegisterNetEvent('qb-crypto:client:UpdateCryptoWorth', function(crypto, amount, history)
Crypto.Worth[crypto] = amount
if history ~= nil then
Crypto.History[crypto] = history
end
end)
RegisterNetEvent('qb-crypto:client:GetRebootState', function(RebootInfo)
if RebootInfo.state then
Crypto.Exchange.RebootInfo.state = RebootInfo.state
Crypto.Exchange.RebootInfo.percentage = RebootInfo.percentage
SystemCrashCooldown()
end
end)