-- luacheck: globals Game MyModGlobal CLIENT if not CLIENT then return end ---@return Barotrauma.Location.StoreInfo[], string? local function getCurrentStore() if not Game or not Game.GameSession or not Game.GameSession.Campaign then return {}, "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 {}, "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 {}, "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() > 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() 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 ---@diagnostic disable-next-line: undefined-field 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 ---@diagnostic disable-next-line: undefined-field cargoManager:ModifyItemQuantityInBuyCrate(store.Identifier, info.prefab, info.quantity) end end end end return { tryBuy = tryBuy }