1

So i'm very new to lua and I wrote this:

Clientside

ESX.TriggerServerCallback('mapbuilder:getMoney', function(money)
                    if selectedmatamount == nil or money >= selectedmatamount then
                        TriggerServerEvent('mapbuilder:removeMoney', selectedmatamount)
                        print('' .. material .. '\n')
                        TriggerServerEvent('mapbuilder:syncObject', selectedObject, coords, heading, isFrozen, mySteamID, desc)
                        TriggerServerEvent('mapbuilder:saveToDatabase', selectedObject, coords, heading, isFrozen, desc)
                        DeleteObject(object)
                        object = nil
                    else
                        ShowNotification(Translation[Config.Locale]['not_enough_money'])
                        DeleteObject(object)
                    end
                end, material)

The variable Material is specified above and is NOT nil

But when I try to get it serverside:

ESX.RegisterServerCallback('mapbuilder:getMoney', function(source, cb)
    local xPlayer = ESX.GetPlayerFromId(source)
    local xItem = xPlayer.getInventoryItem(material)

    print(material)

    print(xItem.name .. ' ' .. xItem.count)
    cb(xItem.count)
  
end)

It tells me, that material = nil

Please help

Benzy YT
  • 11
  • 3
  • In the client (first) example the `material` variable must be defined outside of your callback function. In the server (second) example it is not. My guess is you should pass the value of `material` to the server callback as a parameter, and then extract it on the server side. – JimmyNJ Oct 10 '22 at 14:30
  • Or, to put it another way, on the server code - where does the value for `material` come from in the line `local xItem = xPlayer.getInventoryItem(material)` ? – JimmyNJ Oct 10 '22 at 14:32

1 Answers1

0

You're simply missing the "material" arugment in your ESX.RegisterServerCallback :

ESX.RegisterServerCallback("mapbuilder:getMoney", function(source, cb, material)
  local xPlayer = ESX.GetPlayerFromId(source)
  local xItem = xPlayer.getInventoryItem(material)

  print(material)

  print(xItem.name .. " " .. xItem.count)
  cb(xItem.count)
end)

The rule is that your variables source, cb, var1, var2, ... should be in the same order in the ESX.RegisterServerCallback and ESX.TriggerServerCallback
The source is automatically added
The cb is the callback function declared in the client

So a simple example would be :
server.lua

ESX.RegisterServerCallback('myEvent', function(source, cb, var1, var2)
  print(var1, var2)
  local var3 = 3
  local var4 = 4
  cb(var3, var4)
end)

client.lua

local var1 = 1
local var2 = 2
ESX.TriggerServerCallback('myEvent', function(var3, var4)
  print(var3, var4)
end, var1, var2)

Would print :

  1. Server : 1 2
  2. Client : 3 4
Blaizz
  • 21
  • 1
  • 5