78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- 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
 | |
| }
 |