local function pr(...) local debug = false if debug then printf("stash_capacities: " .. ...) end end local stash_sections = {["inv_backpack"] = true, ["inventory_box"] = true} local function itr_for_stashes(section) pr("SECTION: " .. section) local placeable_type = ini_sys:r_string_ex(section, "placeable_type") or "prop" if placeable_type == "stash" then stash_sections[section] = true end end ini_sys:section_for_each(itr_for_stashes) local weight_add = 0 -- used when moving items into a stash local function getInvWeight(stash_id) local stash = get_object_by_id(stash_id) local weight = 0 stash:iterate_inventory_box( function(owner,itm) weight = weight + itm:weight() end) return weight end -- Update Max Capacity of stash inventories inventory_update = ui_inventory.UIInventory.UpdateWeight function ui_inventory.UIInventory:UpdateWeight() inventory_update(self) local stash = self:GetPartner() if not stash then return end local section = stash:section() pr("STASH SECTION: " .. section) if not stash_sections[section] then return end local capacity = ini_sys:r_float_ex(section,"capacity") or 30 pr("CAPACITY: " .. capacity) self.npc_weight_max:SetText( strformat("(max %s %s)", capacity, game.translate_string("st_kg")) ) end -- Make Max Capacity text visible for stashes inventory_reset = ui_inventory.UIInventory.Reset function ui_inventory.UIInventory:Reset(obj) inventory_reset(self, obj) if self:GetPartner() then self.npc_weight_max:Show( (self.npc_is_companion and self.mode == "loot") or stash_sections[self:GetPartner():section()]) end end -- Make sure each item in Move_all function ui_inventory.UIInventory:Action_Move_All(obj, bag) obj = self:CheckItem(obj,"Action_Move_All") pr("check if i override") local ci = self.CC[bag]:GetCell_ID(obj:id()) for id,_ in pairs(ci.childs) do if self:Cond_Move(id, bag) then pr("UNO") if id and bag then self:Action_Move(id, bag) if self:CheckItem(id):weight() then weight_add = weight_add + self:CheckItem(id):weight() else weight_add = weight_add end end else pr("Would normally move, but COND_MOVE says no.") end end if self:Cond_Move(obj, bag) then pr("DUO") self:Action_Move(obj, bag) weight_add = weight_add + self:CheckItem(obj):weight() else pr("Would normally move, but COND_MOVE says no.") end weight_add = 0 end local function actor_on_item_before_move(flags, npc_id, obj, mode, bag_from) if (bag_from ~= EDDListType.iActorBag) then return end if not obj then return end if not npc_id then pr("no npc id?") return end if not get_object_by_id(npc_id) then pr("cant get obejct?") return end local section = get_object_by_id(npc_id):section() pr("section: " .. section) if not stash_sections[section] then return end local capacity = ini_sys:r_float_ex(section,"capacity") or 30 local weight = getInvWeight(npc_id) + weight_add pr("Weight: " .. weight) if weight + obj:weight() > capacity then flags.ret_value = false pr("Cannot place object: Stash is too full. Capacity: " .. capacity) end end function on_game_start() RegisterScriptCallback("ActorMenu_on_item_before_move", actor_on_item_before_move) end