🐛 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:
- A
Config.Shops megosztott tábla – runtime módosítása minden kapcsolódó használatra hatással van
- 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ő
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.lua – addShopItem, 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.
🐛 Bug leírás
Az
addShopItemexport aGetShopDefáltal visszaadott belső referenciába ír:GetShopDefvisszaadja aConfig.Shops[shopId]táblát referencia szerint. AzaddShopItemezután közvetlenül ebbe a táblába szúrja be az új item def-et.Problémák:
Config.Shopsmegosztott tábla – runtime módosítása minden kapcsolódó használatra hatással vanConfig.Shops-ból származik (nemruntimeShops), a módosítás nem perzisztens (szerver restart után elvész), de futás közben nem különbözik aruntimeShopsmódosítástól – megtévesztőremoveShopItemis ugyanezt csénálja: közvetlenül a belső táblából távolít elKapcsolódó bug: A
getAllShopsexport (#181) előtt haaddShopItem-et hívtak, a visszaadott kópia már a módosított állapotot tartalmazza.📍 Érintett fájl
nxn-shop/server.lua–addShopItem,removeShopItemexportok✅ 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:🏷️ Prioritás
Közepes –
Config.Shops-ból származó boltok item listáját runtime módosítja, megtevő perzisztencia érzetet kelt.