Problème shop item

Avatar du membre
Arnaud Smith
Messages : 20
Enregistré le : 17 juin 2018, 23:24

17 juin 2018, 23:30

Bonjour, j'ai un petit soucis, lorsque je vais dans un n'importe quel magasin, j'ai bien le repère à terre mais lorsque je clique sur "E", j'ai juste écrit magasin mais sans items.
Quelqu'un aurait une solution?



sorrow
Messages : 15
Enregistré le : 13 juin 2018, 17:22

18 juin 2018, 00:14

Salut, alors normalement il ton donner un fichier sql avec, héberge le et config bien ton cfg .

Avatar du membre
Arnaud Smith
Messages : 20
Enregistré le : 17 juin 2018, 23:24

18 juin 2018, 07:26

Les fichiers sont bien configuré et la commande start esx_shops est bien dans le fichier serveur.cfg.
Mais toujours rien

Avatar du membre
Oldarorn
Messages : 95
Enregistré le : 13 févr. 2018, 18:37

18 juin 2018, 07:41

Si tu as pris le esx_shops présent sur le forum de FiveM il n'est pas du tout à jour, il vaut mieux prendre celui qui est sur le GitHub officiel d'ESX, mis à jour récemment et vraiment bien foutu, après tu peux toujours te servir du script que tu as actuellement pour rajouter des magasins (de mémoire celui sur le Github est pas très très rempli)

Avatar du membre
Arnaud Smith
Messages : 20
Enregistré le : 17 juin 2018, 23:24

18 juin 2018, 07:52

D'accord merci, je vais tester ça

Avatar du membre
Arnaud Smith
Messages : 20
Enregistré le : 17 juin 2018, 23:24

18 juin 2018, 08:23

Je viens à l'instant de modifier les fichiers mais toujours rien dans le shop...

Avatar du membre
Oldarorn
Messages : 95
Enregistré le : 13 févr. 2018, 18:37

18 juin 2018, 08:26

Alors tu dois forcément avoir une erreur quelque part, côté serveur et/ou client, vérifie et envoie nous ça

Avatar du membre
Arnaud Smith
Messages : 20
Enregistré le : 17 juin 2018, 23:24

18 juin 2018, 08:33

ESX = nil
local ShopItems = {}
local hasSqlRun = false

TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

-- Load items
AddEventHandler('onMySQLReady', function()
hasSqlRun = true
LoadShop()
end)

-- extremely useful when restarting script mid-game
Citizen.CreateThread(function()
Citizen.Wait(20000) -- hopefully enough for connection to the SQL server

if not hasSqlRun then
LoadShop()
hasSqlRun = true
end
end)

function LoadShop()
local itemResult = MySQL.Sync.fetchAll('SELECT * FROM items')
local shopResult = MySQL.Sync.fetchAll('SELECT * FROM shops')

local itemInformation = {}
for i=1, #itemResult, 1 do
if itemInformation[itemResult.name] == nil then
itemInformation[itemResult.name] = {}
end

itemInformation[itemResult.name].label = itemResult.label
itemInformation[itemResult.name].limit = itemResult.limit
end

for i=1, #shopResult, 1 do
if ShopItems[shopResult.store] == nil then
ShopItems[shopResult.store] = {}
end

table.insert(ShopItems[shopResult.store], {
label = itemInformation[shopResult.item].label,
item = shopResult[i].item,
price = shopResult[i].price,
limit = itemInformation[shopResult[i].item].limit
})
end
end

ESX.RegisterServerCallback('esx_shops:requestDBItems', function(source, cb)
if not hasSqlRun then
TriggerClientEvent('esx:showNotification', source, 'The shop database has not been loaded yet, try again in a few moments.')
end

cb(ShopItems)
end)

RegisterServerEvent('esx_shops:buyItem')
AddEventHandler('esx_shops:buyItem', function(itemName, amount, zone)
local _source = source
local xPlayer = ESX.GetPlayerFromId(_source)
local sourceItem = xPlayer.getInventoryItem(itemName)

-- is the player trying to exploit?
if amount < 0 then
print('esx_shops: ' .. xPlayer.identifier .. ' attempted to exploit the shop!')
return
end

-- get price
local price = 0
local itemLabel = ''
for i=1, #ShopItems[zone], 1 do
if ShopItems[zone][i].item == itemName then
price = ShopItems[zone][i].price
itemLabel = ShopItems[zone][i].label
break
end
end
price = price * amount

-- can the player afford this item?
if xPlayer.getMoney() >= price then
-- can the player carry the said amount of x item?
if sourceItem.limit ~= -1 and (sourceItem.count + amount) > sourceItem.limit then
TriggerClientEvent('esx:showNotification', _source, _U('player_cannot_hold'))
else
xPlayer.removeMoney(price)
xPlayer.addInventoryItem(itemName, amount)
TriggerClientEvent('esx:showNotification', _source, _U('bought', amount, itemLabel, price))
end
else
local missingMoney = price - xPlayer.getMoney()
TriggerClientEvent('esx:showNotification', _source, _U('not_enough', missingMoney))
end
end)


voici ce que j'ai pour (serveur)

Avatar du membre
Arnaud Smith
Messages : 20
Enregistré le : 17 juin 2018, 23:24

18 juin 2018, 08:34

ESX = nil
local HasAlreadyEnteredMarker = false
local LastZone = nil
local CurrentAction = nil
local CurrentActionMsg = ''
local CurrentActionData = {}
local PlayerData = {}

Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end

Citizen.Wait(5000)
PlayerData = ESX.GetPlayerData()

ESX.TriggerServerCallback('esx_shops:requestDBItems', function(ShopItems)
for k,v in pairs(ShopItems) do
Config.Zones[k].Items = v
end
end)
end)

function OpenShopMenu(zone)
PlayerData = ESX.GetPlayerData()

local elements = {}
for i=1, #Config.Zones[zone].Items, 1 do
local item = Config.Zones[zone].Items

table.insert(elements, {
label = item.label .. ' - <span style="color: green;">$' .. item.price .. '</span>',
label_real = item.label,
item = item.item,
price = item.price,

-- menu properties
value = 1,
type = 'slider',
min = 1,
max = item.limit
})
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.label_real, 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.x, v.Pos.y, v.Pos.z)
SetBlipSprite (blip, 52)
SetBlipDisplay(blip, 4)
SetBlipScale (blip, 1.0)
SetBlipColour (blip, 2)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(_U('shops'))
EndTextCommandSetBlipName(blip)
end
end
end)

-- Display markers
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
local coords = GetEntityCoords(GetPlayerPed(-1))
for k,v in pairs(Config.Zones) do
for i = 1, #v.Pos, 1 do
if(Config.Type ~= -1 and GetDistanceBetweenCoords(coords, v.Pos.x, v.Pos.y, v.Pos.z, true) < Config.DrawDistance) then
DrawMarker(Config.Type, v.Pos.x, v.Pos.y, v.Pos.z, 0.0, 0.0, 0.0, 0, 0.0, 0.0, Config.Size.x, Config.Size.y, Config.Size.z, Config.Color.r, Config.Color.g, Config.Color.b, 100, false, true, 2, false, false, false, false)
end
end
end
end
end)

-- Enter / Exit marker events
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
local coords = GetEntityCoords(GetPlayerPed(-1))
local isInMarker = false
local currentZone = nil

for k,v in pairs(Config.Zones) do
for i = 1, #v.Pos, 1 do
if(GetDistanceBetweenCoords(coords, v.Pos[i].x, v.Pos[i].y, v.Pos[i].z, true) < Config.Size.x) then
isInMarker = true
ShopItems = v.Items
currentZone = k
LastZone = k
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
end
end)

-- Key Controls
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
if CurrentAction ~= nil then

SetTextComponentFormat('STRING')
AddTextComponentString(CurrentActionMsg)
DisplayHelpTextFromStringLabel(0, 0, 1, -1)

if IsControlJustReleased(0, 38) then

if CurrentAction == 'shop_menu' then
OpenShopMenu(CurrentActionData.zone)
end

CurrentAction = nil

end

end
end
end)


et voici ce que j'ai pour (client)

Avatar du membre
Oldarorn
Messages : 95
Enregistré le : 13 févr. 2018, 18:37

18 juin 2018, 08:35

Et je suis censé en faire quoi de ça ?

Je t'ai demandé une erreur pas le script...

Répondre