Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 28 additions & 57 deletions [esx_addons]/esx_drugs/client/main.lua
Original file line number Diff line number Diff line change
@@ -1,62 +1,46 @@
local menuOpen = false
local inZoneDrugShop = false
local inRangeMarkerDrugShop = false
local dealerTextShow = false

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like the code structure. Can you use do end code blocks so it much clearer.
Last code snippet: https://www.lua.org/pil/4.2.html

local cfgMarker = Config.Marker;

--slow loop
CreateThread(function()
while true do
local Sleep = 1500
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
local distDrugShop = #(coords - Config.CircleZones.DrugDealer.coords)

inRangeMarkerDrugShop = false
if(distDrugShop <= Config.Marker.Distance) then
inRangeMarkerDrugShop = true
end

if distDrugShop < 1 then
inZoneDrugShop = true
else
inZoneDrugShop = false
if menuOpen then
menuOpen=false
end
inRangeMarkerDrugShop = (distDrugShop <= Config.Marker.Distance)
inZoneDrugShop = (distDrugShop < 1)
if not inZoneDrugShop and menuOpen then
menuOpen = false
end

Wait(500)
end
end)

--drawk marker
CreateThread(function()
while true do
local Sleep = 1500
if(inRangeMarkerDrugShop) then
if inRangeMarkerDrugShop then
Sleep = 0
local coordsMarker = Config.CircleZones.DrugDealer.coords
local color = cfgMarker.Color
DrawMarker(cfgMarker.Type, coordsMarker.x, coordsMarker.y,coordsMarker.z - 1.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
cfgMarker.Size, color.r,color.g,color.b,color.a,
false, true, 2, false, nil, nil, false)
end
Wait(Sleep)
end
end)

--main loop
CreateThread(function ()
while true do
local Sleep = 1500
if inZoneDrugShop and not menuOpen then
Sleep = 0
ESX.ShowHelpNotification(TranslateCap('dealer_prompt'),true)
if IsControlJustPressed(0, 38) then
OpenDrugShop()
DrawMarker(cfgMarker.Type, coordsMarker.x, coordsMarker.y, coordsMarker.z - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, cfgMarker.Size, color.r, color.g, color.b, color.a, false, true, 2, false, nil, nil, false)
if inZoneDrugShop and not menuOpen then
if not dealerTextShow then
ESX.TextUI(TranslateCap('dealer_prompt'))
dealerTextShow = true
end
if IsControlJustPressed(0, 38) then
OpenDrugShop()
end
else
if dealerTextShow then
ESX.HideUI()
dealerTextShow = false
end
end
else
if dealerTextShow then
ESX.HideUI()
dealerTextShow = false
end
end
Wait(Sleep)
Wait(Sleep)
end
end)

Expand All @@ -65,10 +49,8 @@ function OpenDrugShop()
{unselectable = true, icon = "fas fa-cannabis", title = TranslateCap('dealer_title')}
}
menuOpen = true

for k, v in pairs(ESX.GetPlayerData().inventory) do

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't use pairs. Use numeric loop instead as you don't even use key.

local price = Config.DrugDealerItems[v.name]

if price and v.count > 0 then
elements[#elements+1] = {
icon = "fas fa-shopping-basket",
Expand All @@ -78,22 +60,18 @@ function OpenDrugShop()
}
end
end

ESX.OpenContext("right", elements, function(menu,element)
local elements2 = {
{unselectable = true, icon = "fas fa-shopping-basket", title = element.title},
{icon = "fas fa-shopping-basket", title = "Amount", input = true, inputType = "number", inputPlaceholder = "Amount you want to sell", inputValue=0, inputMin = Config.SellMenu.Min, inputMax = Config.SellMenu.Max},
{icon = "fas fa-check-double", title = "Confirm", val = "confirm"}
}

ESX.OpenContext("right", elements2, function(menu2,element2)
ESX.CloseContext()
local count = tonumber(menu2.eles[2].inputValue)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if count fails?


if count < 1 then
return
end

TriggerServerEvent('esx_drugs:sellDrug',tostring(element.name), count)
end, function(menu)
menuOpen = false
Expand All @@ -114,12 +92,10 @@ end)
function OpenBuyLicenseMenu(licenseName)
menuOpen = true
local license = Config.LicensePrices[licenseName]

local elements = {
{unselectable = true, title = TranslateCap('purchase_license')},
{title = ('%s - <span style="color:green;">%s</span>'):format(license.label, TranslateCap('dealer_item', ESX.Math.GroupDigits(license.price))), value = licenseName, price = license.price, licenseName = license.label}
}

ESX.OpenContext("right", elements, function(menu,element)
ESX.TriggerServerCallback('esx_drugs:buyLicense', function(boughtLicense)
if boughtLicense then
Expand All @@ -136,20 +112,15 @@ end

function CreateBlipCircle(coords, text, radius, color, sprite)
local blip = AddBlipForRadius(coords, radius)

SetBlipHighDetail(blip, true)
SetBlipColour(blip, 1)
SetBlipAlpha (blip, 128)

-- create a blip in the middle
blip = AddBlipForCoord(coords)

SetBlipHighDetail(blip, true)
SetBlipSprite (blip, sprite)
SetBlipScale (blip, 1.0)
SetBlipColour (blip, color)
SetBlipAsShortRange(blip, true)

BeginTextCommandSetBlipName("STRING")
AddTextComponentSubstringPlayerName(text)
EndTextCommandSetBlipName(blip)
Expand All @@ -159,4 +130,4 @@ CreateThread(function()
for k,zone in pairs(Config.CircleZones) do

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same here. You don't need key.
https://springrts.com/wiki/Lua_Performance#TEST_12:_Adding_Table_Items_.28table.insert_vs._.5B_.5D.29
Check the performance article.

CreateBlipCircle(zone.coords, zone.name, zone.radius, zone.color, zone.sprite)
end
end)
end)
Loading
Loading