Scripts/resources/[qb]/[qb_shops]/qb-shop/client/main.lua
2024-12-29 21:06:22 +01:00

158 lines
5.4 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
-- [ MAIN ] --
local shopItems = Config.Items
local function toggleField(enable)
SetNuiFocus(enable, enable)
if enable then
SendNUIMessage({
action = 'open'
})
else
SendNUIMessage({
action = 'close'
})
end
end
RegisterNUICallback('escape', function(data, cb)
toggleField(false)
SetNuiFocus(false, false)
cb('ok')
end)
RegisterNUICallback('buy', function(data, cb)
local shoppingCart = data.shoppingCart
local totalprice = 0
for item, v in pairs(shoppingCart) do
local configItem = shopItems[item]
totalprice += (v.amount * configItem.price)
end
if (ESX) then
ESX.TriggerServerCallback('qb-shop:canAfford', function(bool)
if (bool) then
Config.Notification(Config.Locale.buyed:format(totalprice), 'success')
else
Config.Notification(Config.Locale.nomoney, 'error')
end
SetNuiFocus(not bool, not bool)
cb(bool)
end, totalprice, shoppingCart)
elseif (QBCore) then
QBCore.Functions.TriggerCallback('qb-shop:canAfford', function(bool)
if (bool) then
Config.Notification(Config.Locale.buyed:format(totalprice), 'success')
else
Config.Notification(Config.Locale.nomoney, 'error')
end
SetNuiFocus(not bool, not bool)
cb(bool)
end, totalprice, shoppingCart)
end
end)
local function addItem(category, item, display, price, description)
SendNUIMessage({
action = 'add',
category = category,
item = item,
display = display,
price = price,
description = description,
})
end
local function ShowHelpNotification(msg)
AddTextEntry('shopsHelpNotification', msg)
DisplayHelpTextThisFrame('shopsHelpNotification', false)
end
CreateThread(function()
while true do
local msec = 750
local pCoords = GetEntityCoords(PlayerPedId())
for key, value in pairs(Config.Shops) do
local dist = #(pCoords - vector3(value.x, value.y, value.z))
if (dist <= 20.0) then
msec = 0
if dist <= 1.5 then
if not displayedText then
exports['qb-core']:DrawText("TRYK [E] FOR AT ÅBNE SHOPPEN", 'top')
displayedText = true
end
if IsControlJustReleased(0, 38) then
SendNUIMessage({
action = 'clear'
})
for item, value2 in pairs(shopItems) do
addItem(value2.category, item, value2.display, value2.price, value2.description)
end
toggleField(true)
exports['qb-core']:HideText()
displayedText = false
end
else
displayedText = false
exports['qb-core']:HideText()
end
end
end
Wait(msec)
end
end)
local activeBlips = {} -- Table to store active blips
CreateThread(function()
RequestStreamedTextureDict("shops", 1)
while not HasStreamedTextureDictLoaded("shops") do
Wait(0)
end
for k, coords in pairs(Config.Shops) do
if not activeBlips[k] then
if coords.type == 1 then return end
local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
SetBlipSprite(blip, 59)
SetBlipScale(blip, 0.6)
SetBlipDisplay(blip, 4)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(coords.blipname)
EndTextCommandSetBlipName(blip)
if coords.type == 2 then
exports['blip_info']:SetBlipInfoTitle(blip, "Småkagebutik", 0)
exports['blip_info']:SetBlipInfoImage(blip, "shops", "cookies")
exports['blip_info']:AddBlipInfoName(blip, "Ejet af", "Staten")
exports['blip_info']:AddBlipInfoName(blip, "Type", "Butik")
exports['blip_info']:AddBlipInfoHeader(blip, "")
exports['blip_info']:AddBlipInfoHeader(blip, "")
exports['blip_info']:AddBlipInfoText(blip, "Sød tand? Køb dine småkager her!")
else
exports['blip_info']:SetBlipInfoTitle(blip, "24/7 SuperMarket", 0)
exports['blip_info']:SetBlipInfoImage(blip, "shops", "24")
exports['blip_info']:AddBlipInfoName(blip, "Ejet af", "Staten")
exports['blip_info']:AddBlipInfoName(blip, "Type", "Butik")
exports['blip_info']:AddBlipInfoHeader(blip, "")
exports['blip_info']:AddBlipInfoHeader(blip, "")
exports['blip_info']:AddBlipInfoText(blip, "Åben 24/7, klar til at dække dit behov!")
end
activeBlips[k] = blip
end
end
end)
AddEventHandler('onResourceStop', function(resource)
if resource == GetCurrentResourceName() then
for k, v in pairs(activeBlips) do
exports['blip_info']:ResetBlipInfo(v)
RemoveBlip(v)
end
end
end)