Scripts/resources/[qb]/[qb_extras]/qb-store3/Client/Client.lua
2024-12-29 21:07:10 +01:00

450 lines
12 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = QBCore.Functions.GetPlayerData()
local drawn_marker = false
local pos_close = nil
local marker = nil
local openned = false
local notify_open = false
local mission_started = false
local mission_point_start = nil
local mission_point_end = nil
local mission_name = nil
local mission_position = nil
local vehicle = nil
local draw_marker_mission = false
local step = 0
RegisterKeyMapping('OpenStores:'..key_open, 'Open Store', 'keyboard', key_open)
RegisterCommand('OpenStores:'..key_open, function()
local ped = GetPlayerPed(-1)
local pos = GetEntityCoords(ped)
local closest, dist, dist2, position = closestStore()
if dist < radius_coord then
if not openned then
TriggerServerEvent('qb-store3: OpenStore', closest, position.buy_items)
openned = true
end
elseif dist2 < radius_coord then
if not openned then
TriggerServerEvent('qb-store3: CheckOwnerStore', closest, position.buy_items)
end
end
end)
RegisterNetEvent('qb-store3: OpenStore')
AddEventHandler('qb-store3: OpenStore', function(name, items)
OpenStore(name, items)
openned = true
end)
RegisterNetEvent('qb-store3: OpenDashboard')
AddEventHandler('qb-store3: OpenDashboard', function(name, balance)
OpenDashboard(name, balance)
openned = true
end)
RegisterNetEvent('qb-store3: OpenBuyStore')
AddEventHandler('qb-store3: OpenBuyStore', function(name)
OpenBuyStore(name)
openned = true
end)
function OpenStore(name, items)
SendNUIMessage({
open = true,
store_title = name,
items = items,
color_header = stores[name].color_header,
color_buttons = stores[name].color_buttons
})
SetNuiFocus(true, true)
end
function OpenBuyStore(name)
SendNUIMessage({
open_buy = true,
store_title = name,
color_header = stores[name].color_header,
color_buttons = stores[name].color_buttons,
price_store = stores[name].price_store
})
SetNuiFocus(true, true)
end
function OpenDashboard(name, balance)
SendNUIMessage({
open_dashboard = true,
store_title = name,
color_header = stores[name].color_header,
color_buttons = stores[name].color_buttons,
price_store = stores[name].price_store,
percentage_sell = stores[name].percentage_sell
})
SetNuiFocus(true, true)
end
CreateThread(function()
while true do
local ped = GetPlayerPed(-1)
local pos = GetEntityCoords(ped)
local closest, dist, dist2, position = closestStore()
if dist < radius_coord then
if not notify_open then
--Notify(translate.TR_PRESS_BUTTON .. key_open)
QBCore.Functions.Notify(translate.TR_PRESS_BUTTON, "success")
notify_open = true
end
elseif dist2 < radius_coord then
if not notify_open then
--Notify(translate.TR_PRESS_BUTTON .. key_open)
QBCore.Functions.Notify(translate.TR_PRESS_BUTTON, "success")
notify_open = true
end
elseif dist < 50.0 then
pos_close = position
marker = stores[closest].marker
drawn_marker = true
openned = false
notify_open = false
else
drawn_marker = false
pos_close = nil
marker = nil
openned = false
notify_open = false
end
if mission_started then
if step == 0 then
local dist_start = #(pos - mission_point_start)
if dist_start < radius_coord then
local veh = GetVehiclePedIsIn(ped, false)
if veh ~= 0 then
step = 1
---Notify(translate.TR_WAIT_PRODUCTS)
QBCore.Functions.Notify(translate.TR_WAIT_PRODUCTS, "success")
SetTimeout(2000, function()
vehicle = GetEntityModel(veh)
DeleteWaypoint()
SetNewWaypoint(mission_point_end.x, mission_point_end.y)
---Notify(translate.TR_GO_STORE)
QBCore.Functions.Notify(translate.TR_GO_STORE, "success")
end)
end
elseif dist_start < 50.0 then
draw_marker_mission = true
else
draw_marker_mission = false
end
elseif step == 1 then
local dist_end = #(pos - mission_point_end)
if dist_end < radius_coord then
local veh = GetVehiclePedIsIn(ped, false)
if veh ~= 0 then
if vehicle == GetEntityModel(veh) then
TriggerServerEvent('qb-store3: CompleteMission', mission_name, mission_position.buy_items)
mission_started = false
mission_point_start = nil
mission_point_end = nil
mission_name = nil
mission_position = nil
vehicle = nil
draw_marker_mission = false
step = 0
end
end
elseif dist_end < 50.0 then
draw_marker_mission = true
else
draw_marker_mission = false
end
end
end
Wait(2000)
end
end)
CreateThread(function()
while true do
local sleep = 0
if drawn_marker then
sleep = 0
pos_buy_items = pos_close.buy_items
pos_buy_store = pos_close.buy_store
DrawMarker(marker, pos_buy_items.x, pos_buy_items.y, pos_buy_items.z-0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75, 0.75, 0.75, 0, 255, 0, 100, false, true, 2, false, false, false, false)
DrawMarker(marker, pos_buy_store.x, pos_buy_store.y, pos_buy_store.z-0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75, 0.75, 0.75, 0, 255, 0, 100, false, true, 2, false, false, false, false)
else
sleep = 1000
end
if draw_marker_mission then
sleep = 0
DrawMarker(2, mission_point_start.x, mission_point_start.y, mission_point_start.z-0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75, 0.75, 0.75, 0, 255, 0, 100, false, true, 2, false, false, false, false)
DrawMarker(2, mission_point_end.x, mission_point_end.y, mission_point_end.z-0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75, 0.75, 0.75, 0, 255, 0, 100, false, true, 2, false, false, false, false)
end
Wait(sleep)
end
end)
RegisterNetEvent('qb-store3: SendPopMessage')
AddEventHandler('qb-store3: SendPopMessage', function(type, message)
SendNUIMessage({
pop_up = true,
type = type,
message = message
})
end)
RegisterNetEvent('qb-store3: LoadBalance')
AddEventHandler('qb-store3: LoadBalance', function(money)
SendNUIMessage({
loadBalance = true,
money = money
})
end)
RegisterNetEvent('qb-store3: LoadStock')
AddEventHandler('qb-store3: LoadStock', function(stock, products)
SendNUIMessage({
loadStock = true,
stock = stock,
products = products
})
end)
RegisterNetEvent('qb-store3: LoadMissions')
AddEventHandler('qb-store3: LoadMissions', function(missions, identifier)
SendNUIMessage({
loadMissions = true,
request = missions,
identifier = identifier
})
end)
RegisterCommand('tpr', function()
SetEntityCoords(GetPlayerPed(-1), mission_point_start)
end)
RegisterNetEvent('qb-store3: AcceptMission')
AddEventHandler('qb-store3: AcceptMission', function(name, item_name)
if not mission_started then
local closest, dist, dist2, position = closestStore()
mission_name = name
mission_position = position
mission_point_end = position.mission
if missions_coords[item_name] then
local rand_point = math.random(1, #missions_coords[item_name])
mission_point_start = missions_coords[item_name][rand_point]
else
local rand_point = math.random(1, #missions_coords['RANDOM_MISSION'])
mission_point_start = missions_coords['RANDOM_MISSION'][rand_point]
end
-- print(mission_point_start)
DeleteWaypoint()
SetNewWaypoint(mission_point_start.x, mission_point_start.y)
mission_started = true
end
end)
RegisterNetEvent('qb-store3: CancelMission')
AddEventHandler('qb-store3: CancelMission', function()
mission_started = false
mission_point_start = nil
mission_point_end = nil
mission_name = nil
mission_position = nil
vehicle = nil
draw_marker_mission = false
step = 0
DeleteWaypoint()
end)
RegisterNUICallback('close', function(data, cb)
SetNuiFocus(false, false)
openned = false
cb('ok')
end)
RegisterNUICallback('buyItens', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: BuyItens", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('sendBuyStore', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendBuyStore", closest, position.buy_items)
cb('ok')
end)
RegisterNUICallback('sendSellStore', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendSellStore", closest, position.buy_items)
cb('ok')
end)
RegisterNUICallback('sendAddMoney', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendAddMoney", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('sendWithdraw', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendWithdraw", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('sendPutForSale', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendPutForSale", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('sendRequestItem', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendRequestItem", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('sendRemoveItem', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendRemoveItem", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('sendChangePrice', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: SendChangePrice", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('acceptMission', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: AcceptMission", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('cancelMission', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: CancelMission", closest, position.buy_items, data)
cb('ok')
end)
RegisterNUICallback('loadBalance', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: LoadBalance", closest, position.buy_items)
cb('ok')
end)
RegisterNUICallback('loadStock', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: LoadStock", closest, position.buy_items)
cb('ok')
end)
RegisterNUICallback('loadMissions', function(data, cb)
local closest, dist, dist2, position = closestStore()
TriggerServerEvent("qb-store3: LoadMissions", closest, position.buy_items)
cb('ok')
end)
CreateThread(function()
while not NetworkIsSessionStarted() do Wait(0) end
Wait(5000)
SendNUIMessage({
config = true,
translate = translate,
weightSystem = use_weight_system,
NameResource = {GetCurrentResourceName(),
GetCurrentServerEndpoint()
}
})
for i,k in pairs(stores) do
if k.use_blip then
for c,j in pairs(k.coordinates) do
local blip = AddBlipForCoord(j.buy_items.x, j.buy_items.y, j.buy_items.z)
SetBlipSprite(blip, k.blip)
SetBlipColour(blip, k.blip_color)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(k.blip_name)
SetBlipScale(blip, 0.70)
EndTextCommandSetBlipName(blip)
end
end
end
end)
function closestStore()
local ped = GetPlayerPed(-1)
local pos = GetEntityCoords(ped)
local min = 99999
local buy = 99999
local closest = -1
local position = nil
for i,k in pairs(stores) do
for c,j in pairs(k.coordinates) do
local dist = #(j.buy_items - pos)
if dist < min then
closest = i
min = dist
buy = #(j.buy_store - pos)
position = j
end
end
end
return closest, min, buy, position
end
function Notify(message)
TriggerEvent('esx:Notify', message)
TriggerEvent('chat:addMessage', { args = { message }})
end