-- 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)