-- luacheck: globals Game MyModGlobal ---@return Barotrauma.Location.StoreInfo[], string? local function getCurrentStore() if not Game or not Game.GameSession or not Game.GameSession.Campaign then return nil, "No game session found" end local map = Game.GameSession.Campaign.Map if not map or not map.CurrentLocation or not map.CurrentLocation.Stores then return nil, "No map found" end local location = map.CurrentLocation -- Otherwise, determine which store is active by checking the cargo manager local cargoManager = Game.GameSession.Campaign.CargoManager if not cargoManager then return nil, "No cargo manager found" end -- Find which store has items in the cart local stores = {} for _, store in pairs(location.Stores) do if #cargoManager:GetBuyCrateItems(store) > 0 then stores[#stores + 1] = store end end return stores, nil end local function tryBuy() local cargoManager = Game.GameSession.Campaign.CargoManager if not cargoManager then MyModGlobal.debugPrint("No cargo manager available") return end local stores, err = getCurrentStore() if err then MyModGlobal.debugPrint(string.format("Error getting current store: %s", err)) return end for _, store in ipairs(stores) do local toAdd = {} -- Get items available at the store local items = cargoManager:GetBuyCrateItems(store) for item in items do -- We have already added this many of item toAdd[item.ItemPrefab.Identifier.Value] = { quantity = -item.Quantity, prefab = item.ItemPrefab -- Store the ItemPrefab object } end for item in store.Stock do -- So if we add the total amount available -- We get the amount we have to add to buy entire stock local idValue = item.ItemPrefab.Identifier.Value if toAdd[idValue] then toAdd[idValue].quantity = toAdd[idValue].quantity + item.Quantity end end for idValue, info in pairs(toAdd) do if info.quantity > 0 then MyModGlobal.debugPrint(string.format("Adding %d of %s to the buy crate", info.quantity, idValue)) -- Use the stored ItemPrefab object, not the string identifier cargoManager:ModifyItemQuantityInBuyCrate(store.Identifier, info.prefab, info.quantity) end end end end return { tryBuy = tryBuy }