Files
esx_core-esx-framework/client/main.lua
T
Mycroft af2a25767b fixes
2021-04-26 23:50:47 +01:00

154 lines
3.8 KiB
Lua

ESX = nil
local hasAlreadyEnteredMarker, lastZone
local currentAction, currentActionMsg, currentActionData = nil, nil, {}
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
Citizen.Wait(5000)
end)
function OpenShopMenu(zone)
local elements = {}
for i=1, #Config.Zones[zone].Items, 1 do
local item = Config.Zones[zone].Items[i]
table.insert(elements, {
label = ('%s - <span style="color:green;">%s</span>'):format(item.label, _U('shop_item', ESX.Math.GroupDigits(item.price))),
itemLabel = item.label,
item = item.name,
price = item.price,
-- menu properties
value = 1,
type = 'slider',
min = 1,
max = 100
})
end
ESX.UI.Menu.CloseAll()
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'shop', {
title = _U('shop'),
align = 'bottom-right',
elements = elements
}, function(data, menu)
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'shop_confirm', {
title = _U('shop_confirm', data.current.value, data.current.itemLabel, ESX.Math.GroupDigits(data.current.price * data.current.value)),
align = 'bottom-right',
elements = {
{label = _U('no'), value = 'no'},
{label = _U('yes'), value = 'yes'}
}}, function(data2, menu2)
if data2.current.value == 'yes' then
TriggerServerEvent('esx_shops:buyItem', data.current.item, data.current.value, zone)
end
menu2.close()
end, function(data2, menu2)
menu2.close()
end)
end, function(data, menu)
menu.close()
currentAction = 'shop_menu'
currentActionMsg = _U('press_menu')
currentActionData = {zone = zone}
end)
end
AddEventHandler('esx_shops:hasEnteredMarker', function(zone)
currentAction = 'shop_menu'
currentActionMsg = _U('press_menu')
currentActionData = {zone = zone}
end)
AddEventHandler('esx_shops:hasExitedMarker', function(zone)
currentAction = nil
ESX.UI.Menu.CloseAll()
end)
-- Create Blips
Citizen.CreateThread(function()
for k,v in pairs(Config.Zones) do
for i = 1, #v.Pos, 1 do
local blip = AddBlipForCoord(v.Pos[i])
SetBlipSprite (blip, v.Type)
SetBlipScale (blip, v.Size)
SetBlipColour (blip, v.Color)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(_U('shops'))
EndTextCommandSetBlipName(blip)
end
end
end)
-- Enter / Exit marker events
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
local playerCoords = GetEntityCoords(PlayerPedId())
local isInMarker, letSleep, currentZone = false, false
for k,v in pairs(Config.Zones) do
for i = 1, #v.Pos, 1 do
local distance = #(playerCoords - v.Pos[i])
if distance < Config.DrawDistance then
DrawMarker(Config.MarkerType, v.Pos[i], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, nil, nil, false)
letSleep = false
if distance < Config.MarkerSize.x then
isInMarker = true
currentZone = k
lastZone = k
end
end
end
end
if isInMarker and not hasAlreadyEnteredMarker then
hasAlreadyEnteredMarker = true
TriggerEvent('esx_shops:hasEnteredMarker', currentZone)
end
if not isInMarker and hasAlreadyEnteredMarker then
hasAlreadyEnteredMarker = false
TriggerEvent('esx_shops:hasExitedMarker', lastZone)
end
if letSleep then
Citizen.Wait(500)
end
end
end)
-- Key Controls
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
if currentAction then
ESX.ShowHelpNotification(currentActionMsg)
if IsControlJustReleased(0, 38) then
if currentAction == 'shop_menu' then
OpenShopMenu(currentActionData.zone)
end
currentAction = nil
end
else
Citizen.Wait(500)
end
end
end)