Skip to content

[nxn-shop] requestInventory event: getInventory hívás pcall védelem nélkül – runtime hiba a szerveren #177

Description

@firstvideosgrp

🐛 Bug leírás

A requestInventory event handler az nxn-inventory getInventory exportját pcall védelem nélkül hívja:

RegisterServerEvent('nxn-shop:server:requestInventory', function()
    local src = source
    local inv = exports['nxn-inventory']:getInventory(src)  -- ❌ pcall nelkul!
    local result = {}
    if inv and inv.items then
        for itemName, slot in pairs(inv.items) do
            ...
        end
    end
    TriggerClientEvent('nxn-shop:client:inventoryData', src, result)
end)

Ha getInventory hibát dob (pl. ismeretlen/érvénytelen src, inventory corruption, vagy az export más típusú hibát jelez), a server event handler unhandled runtime hibával leáll – a kliensnek soha nem küldödik vissza inventoryData, a sell tab loading állapotban ragad.

Továbbá: a for itemName, slot in pairs(inv.items) nem ellenőrzi hogy slot tábla-e – ha slot.count nil, count = slot.count or 1 OK, de slot maga lehet primitiv érték.

📍 Érintett fájl

nxn-shop/server.luanxn-shop:server:requestInventory event handler

✅ Javasolt javítás

RegisterServerEvent('nxn-shop:server:requestInventory', function()
    local src = source
    local result = {}
    local ok, inv = pcall(function()
        return exports['nxn-inventory']:getInventory(src)
    end)
    if not ok or not inv then
        NXN.Shop.Warn(('requestInventory: getInventory hiba src=%d: %s'):format(src, tostring(inv)))
        TriggerClientEvent('nxn-shop:client:inventoryData', src, result)
        return
    end
    if inv.items then
        for itemName, slot in pairs(inv.items) do
            if type(slot) == 'table' then
                local invItem = (type(Config.Items) == 'table') and Config.Items[itemName] or nil
                table.insert(result, {
                    item   = itemName,
                    label  = (invItem and invItem.label) or itemName,
                    icon   = (invItem and invItem.icon) or 'hgi-store-01',
                    count  = slot.count or 1,
                    weight = (invItem and invItem.weight) or 0,
                })
            end
        end
    end
    TriggerClientEvent('nxn-shop:client:inventoryData', src, result)
end)

🏷️ Prioritás

Közepes – inventory hiba esetén a szerver event handler leáll, a sell tab véglegesen loading állapotban ragad.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingnxn-shop

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions