158 lines
5.4 KiB
Lua
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) |