Skip to content

[nxn-shop] addShopItem export Config.Shops belső táblájába ír közvetlenül – minden játékosra hatással van #182

Description

@firstvideosgrp

🐛 Bug leírás

Az addShopItem export a GetShopDef által visszaadott belső referenciába ír:

exports('addShopItem', function(shopId, itemDef)
    local shop = GetShopDef(shopId)   -- ❌ belso referencia!
    if not shop then return false end
    table.insert(shop.items, itemDef)  -- ❌ kozvetlenul Config.Shops-t modositja!
    ...
end)

GetShopDef visszaadja a Config.Shops[shopId] táblát referencia szerint. Az addShopItem ezután közvetlenül ebbe a táblába szúrja be az új item def-et.

Problémák:

  1. A Config.Shops megosztott tábla – runtime módosítása minden kapcsolódó használatra hatással van
  2. Ha a bolt Config.Shops-ból származik (nem runtimeShops), a módosítás nem perzisztens (szerver restart után elvész), de futás közben nem különbözik a runtimeShops módosítástól – megtévesztő
  3. removeShopItem is ugyanezt csénálja: közvetlenül a belső táblából távolít el

Kapcsolódó bug: A getAllShops export (#181) előtt ha addShopItem-et hívtak, a visszaadott kópia már a módosított állapotot tartalmazza.

📍 Érintett fájl

nxn-shop/server.luaaddShopItem, removeShopItem exportok

✅ Javasolt javítás

Config-ból származó bolton csak runtimeShops-on engedük meg a módosítást, vagy explicit copy-on-write megközelítést alkalmazzunk:

exports('addShopItem', function(shopId, itemDef)
    -- Csak runtimeShops-on engedelyezzuk a modositast
    if not runtimeShops[shopId] then
        NXN.Shop.Warn(('addShopItem: %s nem runtime bolt, csak runtimeShops modosithato'):format(shopId))
        return false
    end
    table.insert(runtimeShops[shopId].items, itemDef)
    NXN.Shop.Log(('addShopItem: %s -> %s'):format(shopId, itemDef.item))
    return true
end)

🏷️ Prioritás

Közepes – Config.Shops-ból származó boltok item listáját runtime módosítja, megtevő perzisztencia érzetet kelt.

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