0

所以当我尝试在商店买东西时,它只是给我这个错误。如何解决这个问题?代码:

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)

    amount = ESX.Round(amount)

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

错误:

SCRIPT ERROR: @esx_supermarket/server/main.lua:68: attempt to index a nil value (local 'xPlayer')
4

1 回答 1

1

xPlayer是一个nil值。nil值可能不会被索引。这样做会导致错误。

所以任何类似xPlayer[something], xPlayer.somethingor的东西xPlayer:something()都是不允许的。

在你的第一个例子中

local xPlayer = ESX.GetPlayerFromId(_source)
    local sourceItem = xPlayer.getInventoryItem(itemName)

xPlayernil因为ESX.GetPlayerFromId(_source)没有返回一个玩家。很可能是_source因为nil. 至少您的代码中没有任何内容表明source不是nil.

在您尝试索引可能的nil值之前,请检查它们是否为nil.

请阅读 Lua 手册并做一个初学者教程。

于 2020-01-20T07:14:30.447 回答