Я сделяль.

Под свои нужды немного дополнил этот скрипт, делюсь:

Спойлер Bravo Storage System (modified version):

Код:
#==============================================================================
# Bravo Storage System (modified version)
#------------------------------------------------------------------------------
# Автор скрипта: Bravo2Kilo
# Автор аддона: Dirge
# Дополнение 1.3: Sleeping Visitor ( простите мой говнокод, сделал как смог :D )
# Version: 2.0
# Addon Version: 1.3
#
# Version History:
#   v1.0 = Initial Release
#   v1.1 = Fixed a bug and added some commands.
#   v2.0 = Added the ability to have multiple storage containers.
# Addon History:
#   v1.0 = релиз, расширение возможностей скрипта, больше настроек.
#          Русский перевод xD
#   v1.1 = Добавлено больше всяких штук типа статистики хранилища.
#   v1.2 = Правка некоторых багов и расширение допустимого кол-ва предметов в
#          инвентаре.
#   v1.3 = Добавлена возможность отслеживания краж предметов и денег, возможность
#          вложения в банк. (инструкции в описании)
#==============================================================================
# Заметки:
#   Если category и gold выставлены в значение false - доступен только обмен 
#   вещей. Если же category стоит false, а gold true, то в хранилище можно 
#   будет положить только деньги.
#==============================================================================
# Для вызова хранилища используйте приведенный ниже скрипт(call script)
#  open_storage("name", name_window, category, gold, free_slot)
#    Где:
#    "name" = имя хранилища
#    name_window = (true или false) true - для показа имени хранилища на экране.
#    category = (true или false)true - для показа категорий предметов, если 
#    вы используете категории ОБЯЗАТЕЛЬНО перед open_storage вызовите
#    allowed_category (скрипт который описан под этим). 
#    gold = (true или false) true - для показа ячейки с золотом.
#    free_slot = введите число свободного места в хранилище, поставьте 0,
#    если вам это не нужно.
#    По-умолчанию, не указывая name_window, category, gold, они устанавливаются
#    на значение true, а free_slot = 0.
#  
# Если вы используете category в скрипте выше, то ОБЯЗАТЕЛЬНО перед ним 
# вызовите этот(ОБЯЗАТЕЛЬНО, при каждом вызове open_storage с включенными
# категориями). Он позволяет определять какие категории предметов можно класть
# в данное хранилище.
#  allowed_category(items, weapons, armors)
#     Где:
#     items = (true или false) категория - вещи, при true видна.
#     weapons = (true или false) категория - оружие, при true видна.
#     armors = (true или false) категория - броня, при true видна.
# 
# Для запрета внесения определенных вещей в определенное хранилище. 
# Впишите, через запятую, ID-предметов с базы данных, доступны только вещи (броня
# и оружие не поддерживается). Оставьте скобки пустыми, если запрещать нечего. 
# ОБЯЗАТЕЛЬНО вызывать перед open_storage, если использовали хоть раз. Иначе 
# старые настройки будут влиять и на другие хранилища.
#  $not_allowed_items = []
#
# Добавить\удалить определенный предмет в нужном хранилище в ручном режиме.
#   storage_add_item("name", type, id, amount) - добавление
#   storage_remove_item("name", type, id, amount) - удаление
#     Где:
#     "name" = имя хранилища
#     type = тип предмета, может быть(:item, :weapon, :armor)
#     id = id предмета в базе данных
#     amount = количество
#
# Для удаления всех предметов из определенного хранилища
#   clear_storage("name")
#     "name" = имя хранилища
#
# Для получения количества определенного предмета в нужном хранилище.
#   s_item_number("name", type, id)
#     "name" = имя хранилища
#     type = тип предмета, может быть(:item, :weapon, :armor)
#     id = id предмета в базе данных
#
# Для добавления\удаления золота из определенного хранилища
#   storage_add_gold("name", amount) - добавление
#   storage_remove_gold("name", amount) - удаление
#     "name" = имя хранилища
#     amount = количество
#
# Для получения количества золота в определенном хранилище.
#   storage_gold_number("name")
#     "name" = имя хранилища
#
# Если вы хотите установить максимальное количество определенного предмета в 
# хранилищах, используйте этот тег в заметка к предмету. В противном случае 
# будет использоваться значение по-умолчанию(ITEM_MAX) идущее ниже.
#   <storagemax: X> где X = максимум.
#==============================================================================
module BRAVO_STORAGE
  
  # Показывать окно с количеством свободного места в хранилище true\false
  FREE_SLOTS_WINDOW = true
  
  # Максимальное количество предметов в стаке инвентаря.
  INV_ITEM_MAX = 100
  
  # Переменная максимально доступного количества предметов в хранилище
  ITEMS_MAX_VAR = 999
  
  # Назначте переключатель показывающий есть ли вещи в хранилище.
  # Переключатель включается, в случае, если в последнем открытом хранилище
  # что-то есть.
  STORAGE_SWITCH = 0 # поставить 0 если вам это не нужно.

  # Максимальное количество определенного предмета в хранилище, это значение будет 
  # применено ко всем предметам, кроме тех у которых стоит тег <storagemax: X>
  # в базе данных игры.
  ITEM_MAX = 9999
  
  # Макс. количество золота которое может храниться в хранилище.
  GOLD_MAX = 9999999
  
  # Название команды для того, чтобы забрать вещи с хранилища.
  WITHDRAW_TEXT = "Забрать"
  
  # Название команды для того, чтобы положить вещи в хранилище.
  STORE_TEXT = "Положить"
  
  # Название команды для того, чтобы выйти с хранилища.
  CANCEL_TEXT = "Выход"
  
  # Обозначение денег вашей группы при обмене с хранилищем.
  PARTY_CUR_GOLD = "В кармане "
  
  # Обозначение денег находящихся в хранилище.
  STOR_CUR_GOLD = "В хранилище "
  
  # Обозначение статистики хранилища
  STORAGE_STAT = "В хранилище:"
  
  # Номер иконки денег для хранилища
  GOLD_ICON = 361
  
  # Номер иконки предметов для хранилища
  ITEMS_ICON = 270
  
  # Длина окна имени
  NAME_WIDTH = 160
  
  # Длина окна свободного места в хранилище
  FREE_SLOT_WIDTH = 120
  
  # Переключатель для режима воровства
  
  THIEF_SWITCH = 16
  
  # Как пользоваться: перед обыском сундука, включайте этот переключатель,
  # после обыска - отключайте его. Так вы пометите сундук, брать предметы
  # из которого будет считаться за воровство.
  # Рекомендация: через проверку, например если НПС стал вашим другом, вы
  # можете написать отдельный переключатель или переменную, которые при
  # соответствии не будут включать переключатель воровства, т.е. игроку
  # как будто бы друг разрешит брать вещи из сундука.
  
  # Карма игрока и изменение кармы
  
  THIEF_KARMA = 41
  THIEF_KARMA_NUM = 5 # на сколько нужно понизить карму за кражи.
  # Карма понижается не за количество украденных предметов, а за сам факт
  # воровства на -5 (можно заменить на другое значение).
  
  # Анти-абуз понижения кармы (переключатель, отключать вручную)
  
  NIL_KARMA = 17
  # вы можете заккоментировать функцию, если она вам не нужна, просмотрите
  # строки ниже 1380 и 1409, я там всё пометил и подписал.

  # Как пользоваться: переключатель включается автоматически, когда игрок
  # что-нибудь сворует, но автоматически не отключается. Пока включён
  # этот переключатель, карма не будет понижаться.
  # Т.е. карма понижается лишь один раз.
  # Рекомендую отключать переключатель анти-абуза когда игрок ложится спать,
  # тогда на следующие игровые сутки карма игрока при воровстве снова будет
  # падать.

  # НАСТРОЙКА ПЕРЕМЕННЫХ ДЛЯ КРАЖ И ДЕПОЗИТОВ (игровые переменные)
  
  THIEF_ITEM = 42 # текущие кражи предметов
  GIVE_ITEM = 43 # текущие вложения предметов
  THIEF_MONEY = 44 # текущие кражи денег
  GIVE_MONEY = 45 # текущие вклады денег
  # все переменные обнуляйте вручную!
  
  BANK_MONEY = 46 # деньги, которые вы вложили именно в банк
  BANK_SWITCH = 18 # если контейнер является банком, включите переключатель
  # перед открытием контейнера, а выключите после закрытия конетейнера.
  
  # Для кражи предметов и денег созданы разные переменные, чтобы можно было
  # отслеживать количество украденного, и пользователь мог провести проверки
  # в любом ивенте.
  
#==============================================================================
# End of Configuration
#==============================================================================
end
$imported ||= {}
$imported[:Bravo_Storage] = true
$not_allowed_items = []
#==============================================================================
# ** RPG::BaseItem
#==============================================================================
class RPG::BaseItem
  #--------------------------------------------------------------------------
  # * Item Storage Max
  #--------------------------------------------------------------------------
  def storage_max
    if @note =~ /<storagemax: (.*)>/i
      return $1.to_i
    else
      return BRAVO_STORAGE::ITEM_MAX
    end
  end

end

#==============================================================================
# ** Game_Temp
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :storage_gold
  attr_accessor :storage_category
  attr_accessor :storage_name_window
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias bravo_storage_initialize initialize
  def initialize
    bravo_storage_initialize
    @storage_gold = true
    @storage_category = true
    @storage_name_window = true
  end
end

#==============================================================================
# ** Game_Party
#==============================================================================

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :storage_name
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias bravo_storage_initialize initialize
  def initialize
    bravo_storage_initialize
    @storage_gold = {}
    @storage_items = {}
    @storage_weapons = {}
    @storage_armors = {}
    @storage_name = nil
  end
  #--------------------------------------------------------------------------
  # * Initialize Storage
  #--------------------------------------------------------------------------
  def init_storage(name)
    @storage_gold[name] ||= 0
    @storage_items[name] ||= {}
    @storage_weapons[name] ||= {}
    @storage_armors[name] ||= {}
  end
  #--------------------------------------------------------------------------
  # * Storage Name =
  #--------------------------------------------------------------------------
  def storage_name=(name)
    return if @storage_name == name
    @storage_name = name
    init_storage(name)
  end
  #--------------------------------------------------------------------------
  # * Clear Storage
  #--------------------------------------------------------------------------
  def clear_storage(name)
    @storage_gold[name] = 0
    @storage_items[name] = {}
    @storage_weapons[name] = {}
    @storage_armors[name] = {}
  end
  #--------------------------------------------------------------------------
  # * Get Item Object Array 
  #--------------------------------------------------------------------------
  def storage_items
    @storage_items[@storage_name].keys.sort.collect {|id| $data_items[id] }
  end
  #--------------------------------------------------------------------------
  # * Get Weapon Object Array 
  #--------------------------------------------------------------------------
  def storage_weapons
    @storage_weapons[@storage_name].keys.sort.collect {|id| $data_weapons[id] }
  end
  #--------------------------------------------------------------------------
  # * Get Armor Object Array 
  #--------------------------------------------------------------------------
  def storage_armors
    @storage_armors[@storage_name].keys.sort.collect {|id| $data_armors[id] }
  end
  #--------------------------------------------------------------------------
  # * Get Array of All Equipment Objects
  #--------------------------------------------------------------------------
  def storage_equip_items
    storage_weapons + storage_armors
  end
  #--------------------------------------------------------------------------
  # * Get Array of All Item Objects
  #--------------------------------------------------------------------------
  def storage_all_items
    storage_items + storage_equip_items
  end
  #--------------------------------------------------------------------------
  # * Get Container Object Corresponding to Item Class
  #--------------------------------------------------------------------------
  def storage_item_container(item_class)
    return @storage_items[@storage_name]   if item_class == RPG::Item
    return @storage_weapons[@storage_name] if item_class == RPG::Weapon
    return @storage_armors[@storage_name]  if item_class == RPG::Armor
    return nil
  end
  #--------------------------------------------------------------------------
  # * Storage Gold
  #--------------------------------------------------------------------------
  def storage_gold
    @storage_gold[@storage_name]
  end
  #--------------------------------------------------------------------------
  # * Increase Storage Gold
  #--------------------------------------------------------------------------
  def storage_gain_gold(amount)
    @storage_gold[@storage_name] = [[@storage_gold[@storage_name] + amount, 0].max, BRAVO_STORAGE::GOLD_MAX].min
  end
  #--------------------------------------------------------------------------
  # * Decrease Storage Gold
  #--------------------------------------------------------------------------
  def storage_lose_gold(amount)
    storage_gain_gold(-amount)
  end
  
  #--------------------------------------------------------------------------
  # * Get Number of All Items in Box
  #--------------------------------------------------------------------------
  def storage_all_items_in_box?(name)
    all_items_in_box = 0
    @storage_items[name].each_value {|i| all_items_in_box += i}
    @storage_weapons[name].each_value {|i| all_items_in_box += i}
    @storage_armors[name].each_value {|i| all_items_in_box += i}
    return all_items_in_box
  end
  
  #--------------------------------------------------------------------------
  # * Get Maximum Number of Items in Storage
  #--------------------------------------------------------------------------
  def storage_max_item_number(item)
    return item.storage_max
  end
  #--------------------------------------------------------------------------
  # * Determine if Maximum Number of Items Are Possessed
  #--------------------------------------------------------------------------
  def storage_item_max?(item)
    storage_item_number(item) >= storage_max_item_number(item)
  end
  
  #--------------------------------------------------------------------------
  # * Get Number of Items Possessed
  #--------------------------------------------------------------------------
  def s_item_number(item)
    container = storage_item_container(item.class)
    container ? container[item.id] || 0 : 0
  end
  #--------------------------------------------------------------------------
  # * Increase/Decrease Storage Items
  #--------------------------------------------------------------------------
  def storage_gain_item(item, amount)
    container = storage_item_container(item.class)
    return unless container
    last_number = s_item_number(item)
    new_number = last_number + amount
    container[item.id] = [[new_number, 0].max, storage_max_item_number(item)].min
    container.delete(item.id) if container[item.id] == 0
  end
  #--------------------------------------------------------------------------
  # * Remove Storage Items
  #--------------------------------------------------------------------------
  def storage_lose_item(item, amount)
    storage_gain_item(item, -amount)
  end
  
  def max_item_number(item)
    return BRAVO_STORAGE::INV_ITEM_MAX
  end
  
  
end

#==============================================================================
# ** Game_Interpreter
#==============================================================================

class Game_Interpreter

  #--------------------------------------------------------------------------
  # * Open Storage Scene
  #--------------------------------------------------------------------------
  def open_storage(name, name_window = true, category = true, gold = true, free_slot = 0)
    $game_party.storage_name = name
    $game_temp.storage_name_window = name_window
    $game_temp.storage_category = category
    $game_temp.storage_gold = gold
    $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] = free_slot
    SceneManager.call(Scene_Storage)
  end
  
  #--------------------------------------------------------------------------
  # * allowed_category
  #--------------------------------------------------------------------------
  
  def allowed_category(items = true, weapons = true, armors = true)
    $allow_items = items
    $allow_weapons = weapons
    $allow_armors = armors
  end
  
  #--------------------------------------------------------------------------
  # * Clear Storage
  #--------------------------------------------------------------------------
  def clear_storage(name)
    $game_party.clear_storage(name)
  end
  #--------------------------------------------------------------------------
  # * Storage Add Item
  #--------------------------------------------------------------------------
  def storage_add_item(name, type, id, amount)
    $game_party.storage_name = name
    case type
    when :item
      item = $data_items[id]
    when :weapon
      item = $data_weapons[id]
    when :armor
      item = $data_armors[id]
    end
    $game_party.storage_gain_item(item, amount)
  end
  #--------------------------------------------------------------------------
  # * Storage Remove Item
  #--------------------------------------------------------------------------
  def storage_remove_item(name, type, id, amount)
    $game_party.storage_name = name
    case type
    when :item
      item = $data_items[id]
    when :weapon
      item = $data_weapons[id]
    when :armor
      item = $data_armors[id]
    end
    $game_party.storage_lose_item(item, amount)
  end
  #--------------------------------------------------------------------------
  # * Storage Item Number
  #--------------------------------------------------------------------------
  def s_item_number(name, type, id)
    $game_party.storage_name = name
    case type
    when :item
      item = $data_items[id]
    when :weapon
      item = $data_weapons[id]
    when :armor
      item = $data_armors[id]
    end
    $game_party.s_item_number(item)
  end
  
  def storage_all_items_in_box(name)
    return $game_party.storage_all_items_in_box?(name)
  end
  
  #--------------------------------------------------------------------------
  # * Storage Add Gold
  #--------------------------------------------------------------------------
  def storage_add_gold(name, amount)
    $game_party.storage_name = name
    $game_party.storage_gain_gold(amount)
  end
  #--------------------------------------------------------------------------
  # * Storage Remove Gold
  #--------------------------------------------------------------------------
  def storage_remove_gold(name, amount)
    $game_party.storage_name = name
    $game_party.storage_lose_gold(amount)
  end
  #--------------------------------------------------------------------------
  # * Storage Gold Number
  #--------------------------------------------------------------------------
  def storage_gold_number(name)
    $game_party.storage_name = name
    $game_party.storage_gold
  end
end

#==============================================================================
# ** Window_StorageCategory
#==============================================================================

$allow_items = true
$allow_weapons = true
$allow_armors = true

class Window_StorageCategory < Window_ItemCategory
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(gold)
    @gold = gold
    super()
    $allow_items = true
    $allow_weapons = true
    $allow_armors = true
  end
  #--------------------------------------------------------------------------
  # * Get Digit Count
  #--------------------------------------------------------------------------
  def col_max
    if @gold == true
      return 4
    else
      return 3
    end
  end
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list
    add_command(Vocab::item, :item) if $allow_items == true
    add_command(Vocab::weapon, :weapon) if $allow_weapons == true
    add_command(Vocab::armor, :armor) if $allow_armors == true
    add_command(Vocab::currency_unit, :gold) if @gold == true
  end
end

#==============================================================================
# ** Window_ItemList
#------------------------------------------------------------------------------
#  This window displays a list of party items on the item screen.
#==============================================================================

class Window_StorageItemList < Window_ItemList
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @storage = :none
  end
  #--------------------------------------------------------------------------
  # * Set Storage Flag
  #--------------------------------------------------------------------------
  def storage=(storage)
    return if @storage == storage
    @storage = storage
    refresh
    self.oy = 0
  end
  #--------------------------------------------------------------------------
  # * Include in Item List?
  #--------------------------------------------------------------------------
  def include?(item)
    case @category
    when :item
      item.is_a?(RPG::Item)
    when :weapon
      item.is_a?(RPG::Weapon)
    when :armor
      item.is_a?(RPG::Armor)
    when :all
      item
    else
      false
    end
  end
  
  #--------------------------------------------------------------------------
  # * Display in Enabled State?
  #--------------------------------------------------------------------------
  def enable?(item)
    if item.is_a?(RPG::Item)
      $not_allowed_items.each do |items_id|
        return false if item.id == items_id
      end
      case @storage
      when :store
        box_name = $game_party.storage_name 
        return false if $game_party.s_item_number(item) >= $game_party.storage_max_item_number(item)
        if $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR]  > 0
          return false if $game_party.storage_all_items_in_box?(box_name) >= $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR]
        end
      when :withdraw
        box_name = $game_party.storage_name
        return false if $game_party.item_number(item) == $game_party.max_item_number(item)
      end
      return true if !item.key_item?
    elsif item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor)
      case @storage
      when :store
        box_name = $game_party.storage_name 
        return false if $game_party.s_item_number(item) >= $game_party.storage_max_item_number(item)
        if $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] > 0
          return false if $game_party.storage_all_items_in_box?(box_name) >= $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR]
        end
      end
      return true
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # * Create Item List
  #--------------------------------------------------------------------------
  def make_item_list
    case @storage
    when :store
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
    when :withdraw
      @data = $game_party.storage_all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Number of Items
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
    case @storage
    when :store
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
    when :withdraw
      draw_text(rect, sprintf(":%2d", $game_party.s_item_number(item)), 2)
    end
  end
end

#==============================================================================
# ** Window_StorageCommand
#==============================================================================

class Window_StorageCommand < Window_HorzCommand
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    if $game_temp.storage_name_window == false
      return Graphics.width
    else
      Graphics.width - BRAVO_STORAGE::NAME_WIDTH
    end
  end
  #--------------------------------------------------------------------------
  # * Get Digit Count
  #--------------------------------------------------------------------------
  def col_max
    return 3
  end
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list
    add_command(BRAVO_STORAGE::WITHDRAW_TEXT, :withdraw)
    add_command(BRAVO_STORAGE::STORE_TEXT, :store)
    add_command(BRAVO_STORAGE::CANCEL_TEXT, :cancel)
  end
end

#==============================================================================
# ** Window_StorageName
#==============================================================================
class Window_StorageName < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, fitting_height(1))
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return BRAVO_STORAGE::NAME_WIDTH
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    name = $game_party.storage_name
    draw_text(0, 0, window_width, line_height, name)
  end
  #--------------------------------------------------------------------------
  # * Open Window
  #--------------------------------------------------------------------------
  def open
    refresh
    super
  end
end

#==============================================================================
# ** Window_StorageNumber
#==============================================================================

class Window_StorageNumber < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :number                   # quantity entered
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, window_height) 
    @item = nil
    @max = 1
    @number = 1
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return 304
  end
  #--------------------------------------------------------------------------
  # * Get Window Height
  #--------------------------------------------------------------------------
  def window_height
    return 48
  end
  #--------------------------------------------------------------------------
  # * Set Item, Max Quantity
  #--------------------------------------------------------------------------
  def set(item, max)
    @item = item
    @max = max
    @number = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_item_name(@item, 0, 0)
    draw_number
  end
  #--------------------------------------------------------------------------
  # * Draw Quantity
  #--------------------------------------------------------------------------
  def draw_number
    change_color(normal_color)
    draw_text(cursor_x - 28, 0, 22, line_height, "×")
    draw_text(cursor_x, 0, cursor_width - 4, line_height, @number, 2)
  end
  #--------------------------------------------------------------------------
  # * Get Cursor Width
  #--------------------------------------------------------------------------
  def cursor_width
    figures * 10 + 12
  end
  #--------------------------------------------------------------------------
  # * Get X Coordinate of Cursor
  #--------------------------------------------------------------------------
  def cursor_x
    contents_width - cursor_width - 4
  end
  #--------------------------------------------------------------------------
  # * Get Maximum Number of Digits for Quantity Display
  #--------------------------------------------------------------------------
  def figures
    return 2
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if active
      last_number = @number
      update_number
      if @number != last_number
        Sound.play_cursor
        refresh
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Update Quantity
  #--------------------------------------------------------------------------
  def update_number
    change_number(1)   if Input.repeat?(:RIGHT)
    change_number(-1)  if Input.repeat?(:LEFT)
    change_number(10)  if Input.repeat?(:UP)
    change_number(-10) if Input.repeat?(:DOWN)
  end
  #--------------------------------------------------------------------------
  # * Change Quantity
  #--------------------------------------------------------------------------
  def change_number(amount)
    @number = [[@number + amount, @max].min, 1].max
  end
  #--------------------------------------------------------------------------
  # * Update Cursor
  #--------------------------------------------------------------------------
  def update_cursor
    cursor_rect.set(cursor_x, 0, cursor_width, line_height)
  end
end

#==============================================================================
# ** Window_GoldTransfer
#==============================================================================

class Window_GoldTransfer < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :number                   # quantity entered
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, window_height) 
    @item = nil
    @max = 1
    @number = 1
    @cursor_y = 0
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return 330
  end
  #--------------------------------------------------------------------------
  # * Get Window Height
  #--------------------------------------------------------------------------
  def window_height
    return 72
  end
  #--------------------------------------------------------------------------
  # * Set Item, Max Quantity
  #--------------------------------------------------------------------------
  def set(max, position)
    @max = max
    @number = 1
    @cursor_y = position
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_gold_info
    draw_number
  end
  #--------------------------------------------------------------------------
  # * Display in Enabled State?
  #--------------------------------------------------------------------------
  def enabled?
    if @cursor_y == 0
      return true if $game_party.gold > 0
    else
      return true if $game_party.storage_gold > 0
    end
    return false
  end
  #--------------------------------------------------------------------------
  # * Processing When OK Button Is Pressed
  #--------------------------------------------------------------------------
  def process_ok
    if enabled?
      Sound.play_ok
      Input.update
      deactivate
      call_ok_handler
    else
      Sound.play_buzzer
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Gold Info
  #--------------------------------------------------------------------------
  def draw_gold_info
    party = BRAVO_STORAGE::PARTY_CUR_GOLD + Vocab::currency_unit + " :"
    storage = BRAVO_STORAGE::STOR_CUR_GOLD + Vocab::currency_unit + " :"
    draw_text(0, 0, 280, line_height, party)
    draw_text(0, 24, 280, line_height, storage)
    draw_text(0, 0, 225, line_height, $game_party.gold, 2)
    draw_text(0, 24, 225, line_height, $game_party.storage_gold, 2)
  end
  #--------------------------------------------------------------------------
  # * Draw Quantity
  #--------------------------------------------------------------------------
  def draw_number
    change_color(normal_color)
    draw_text(cursor_x - 28, @cursor_y, 22, line_height, "×")
    draw_text(cursor_x, @cursor_y, cursor_width - 4, line_height, @number, 2)
  end
  #--------------------------------------------------------------------------
  # * Get Cursor Width
  #--------------------------------------------------------------------------
  def cursor_width
    figures * 10 + 12
  end
  #--------------------------------------------------------------------------
  # * Get X Coordinate of Cursor
  #--------------------------------------------------------------------------
  def cursor_x
    contents_width - cursor_width - 4
  end
  #--------------------------------------------------------------------------
  # * Get Maximum Number of Digits for Quantity Display
  #--------------------------------------------------------------------------
  def figures
    return 3
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if active
      last_number = @number
      update_number
      if @number != last_number
        Sound.play_cursor
        refresh
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Update Quantity
  #--------------------------------------------------------------------------
  def update_number
    change_number(1)   if Input.repeat?(:RIGHT)
    change_number(-1)  if Input.repeat?(:LEFT)
    change_number(10)  if Input.repeat?(:UP)
    change_number(-10) if Input.repeat?(:DOWN)
  end
  #--------------------------------------------------------------------------
  # * Change Quantity
  #--------------------------------------------------------------------------
  def change_number(amount)
    @number = [[@number + amount, @max].min, 1].max
  end
  #--------------------------------------------------------------------------
  # * Update Cursor
  #--------------------------------------------------------------------------
  def update_cursor
    @cursor_y ||= 0
    cursor_rect.set(cursor_x, @cursor_y, cursor_width, line_height)
  end
end


#==============================================================================
# ** Window_FreeSlots
#==============================================================================


class Window_FreeSlots < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, fitting_height(1))
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return BRAVO_STORAGE::FREE_SLOT_WIDTH
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    box_name = $game_party.storage_name 
    items_info = $game_party.storage_all_items_in_box?(box_name).to_s + "/" + $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR].to_s
    draw_text(0, 0, window_width, line_height, items_info) 
  end
  #--------------------------------------------------------------------------
  # * Open Window
  #--------------------------------------------------------------------------
  def open
    refresh
    super
  end
end

class Window_StorageInfo < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, fitting_height(3))
    self.opacity = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return Graphics.width / 2
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    box_name = $game_party.storage_name 
    draw_text(0, 0, window_width, line_height, BRAVO_STORAGE::STORAGE_STAT)
    gold_info = $game_party.storage_gold.to_s #+ " - " #+ BRAVO_STORAGE::STOR_CUR_GOLD
    draw_text(24, 24, window_width, line_height, gold_info)
    draw_icon(BRAVO_STORAGE::GOLD_ICON, 0, 24, true)
    if $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] > 0
      items_info = $game_party.storage_all_items_in_box?(box_name).to_s + "/" + $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR].to_s
    else
      items_info = $game_party.storage_all_items_in_box?(box_name).to_s
    end
    draw_text(24, 48, window_width, line_height, items_info)
    draw_icon(BRAVO_STORAGE::ITEMS_ICON, 0, 48, true)
  end
  #--------------------------------------------------------------------------
  # * Open Window
  #--------------------------------------------------------------------------
  def open
    refresh
    super
  end
end



#==============================================================================
# ** Scene_Storage
#==============================================================================

class Scene_Storage < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    @storage_gold = $game_temp.storage_gold
    @storage_category = $game_temp.storage_category
    @storage_name_window = $game_temp.storage_name_window
    create_help_window
    create_command_window
    create_name_window
    create_dummy_window
    create_freeslot_window  
    create_category_window
    create_item_window
    create_number_window
    create_gold_window
    create_storageinfo_window
  end
  
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_StorageCommand.new
    @command_window.viewport = @viewport
    @command_window.y = @help_window.height
    @command_window.set_handler(:withdraw, method(:command_withdraw))
    @command_window.set_handler(:store, method(:command_store))
    @command_window.set_handler(:cancel, method(:return_scene))
  end
  #--------------------------------------------------------------------------
  # * Create Storage Name Window
  #--------------------------------------------------------------------------
  def create_name_window
    @name_window = Window_StorageName.new
    @name_window.viewport = @viewport
    @name_window.x = @command_window.width
    @name_window.y = @help_window.height
    if @storage_name_window == true 
      @name_window.show
    end
  end
  #--------------------------------------------------------------------------
  # * Create Storage Free Slot Window
  #--------------------------------------------------------------------------
  def create_freeslot_window
    @freeslot_window = Window_FreeSlots.new
    @freeslot_window.viewport = @viewport
    @freeslot_window.x = Graphics.width - @freeslot_window.width
    @freeslot_window.y = Graphics.height - @freeslot_window.height
    @freeslot_window.z = 1000
    @freeslot_window.hide
  end
  
  def create_storageinfo_window
    @storageinfo_window = Window_StorageInfo.new
    @storageinfo_window.viewport = @viewport
    @storageinfo_window.x = 0
    @storageinfo_window.y = Graphics.height - @dummy_window.height
    @storageinfo_window.z = 1000
  end
  
  #--------------------------------------------------------------------------
  # * Create Dummy Window
  #--------------------------------------------------------------------------
  def create_dummy_window
    wy = @command_window.y + @command_window.height
    wh = Graphics.height - wy
    @dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
    @dummy_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------
  # * Create Quantity Input Window
  #--------------------------------------------------------------------------
  def create_number_window
    @number_window = Window_StorageNumber.new
    @number_window.viewport = @viewport
    @number_window.x = ((Graphics.width / 2) - (@number_window.width / 2)) 
    @number_window.y = ((Graphics.height / 2) - (@number_window.height / 2)) 
    @number_window.hide
    @number_window.set_handler(:ok,     method(:on_number_ok))
    @number_window.set_handler(:cancel, method(:on_number_cancel))
  end
  #--------------------------------------------------------------------------
  # * Create Category Window
  #--------------------------------------------------------------------------
  def create_category_window
    @category_window = Window_StorageCategory.new(@storage_gold)
    @category_window.viewport = @viewport
    @category_window.help_window = @help_window
    @category_window.y = @dummy_window.y
    @category_window.hide.deactivate
    @category_window.set_handler(:ok,     method(:on_category_ok))
    @category_window.set_handler(:cancel, method(:on_category_cancel))
  end
  #--------------------------------------------------------------------------
  # * Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
    if @storage_category == false
      wy = @command_window.y + @command_window.height
    else
      wy = @category_window.y + @category_window.height
    end
    wh = Graphics.height - wy 
    @item_window = Window_StorageItemList.new(0, wy, Graphics.width, wh)
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.hide
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    if @storage_category == false
      @item_window.category = :all
    else
      @category_window.item_window = @item_window
    end
  end
  #--------------------------------------------------------------------------
  # * Create Item Window
  #--------------------------------------------------------------------------
  def create_gold_window
    @gold_window = Window_GoldTransfer.new
    @gold_window.viewport = @viewport
    @gold_window.x = ((Graphics.width / 2) - (@gold_window.width / 2)) 
    @gold_window.y = ((Graphics.height / 2) - (@gold_window.height / 2)) 
    @gold_window.hide
    @gold_window.set_handler(:ok,     method(:on_gold_ok))
    @gold_window.set_handler(:cancel, method(:on_gold_cancel))
  end
  #--------------------------------------------------------------------------
  # * Start Category Selection
  #--------------------------------------------------------------------------
  def start_category_selection
    @dummy_window.hide
    @storageinfo_window.hide
    @freeslot_window.show if ($game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] > 0) && (BRAVO_STORAGE::FREE_SLOTS_WINDOW == true)
    @item_window.show
    @item_window.unselect
    @item_window.refresh
    @item_window.storage = @command_window.current_symbol
    @category_window.show.activate
  end
  #--------------------------------------------------------------------------
  # * [Withdraw] Command
  #--------------------------------------------------------------------------
  def command_withdraw
    if @storage_category == false and @storage_gold == true
      case @command_window.current_symbol
      when :withdraw
        @gold_window.set(max_withdraw, 24)
      when :store
        @gold_window.set(max_store, 0)
      end
      @gold_window.show.activate
    elsif @storage_category == false
      @dummy_window.hide
      @storageinfo_window.hide
      @freeslot_window.show if ($game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] > 0) && (BRAVO_STORAGE::FREE_SLOTS_WINDOW == true)
      @item_window.show.activate
      @item_window.storage = @command_window.current_symbol
      @item_window.select_last
    else
      start_category_selection
    end
  end
  #--------------------------------------------------------------------------
  # * [Store] Command
  #--------------------------------------------------------------------------
  def command_store
    if @storage_category == false and @storage_gold == true
      case @command_window.current_symbol
      when :withdraw
        @gold_window.set(max_withdraw, 24)
      when :store
        @gold_window.set(max_store, 0)
      end
      @gold_window.show.activate
    elsif @storage_category == false
      @dummy_window.hide
      @storageinfo_window.hide
      @freeslot_window.show if ($game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] > 0) && (BRAVO_STORAGE::FREE_SLOTS_WINDOW == true)
      @item_window.show.activate
      @item_window.storage = @command_window.current_symbol
      @item_window.select_last
    else
      start_category_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Category [OK]
  #--------------------------------------------------------------------------
  def on_category_ok
    case @category_window.current_symbol
    when :item, :weapon, :armor
      @item_window.activate
      @item_window.select_last
    when :gold
      case @command_window.current_symbol
      when :withdraw
        @gold_window.set(max_withdraw, 24)
      when :store
        @gold_window.set(max_store, 0)
      end
      @gold_window.show.activate
    end
  end
  #--------------------------------------------------------------------------
  # * Category [Cancel]
  #--------------------------------------------------------------------------
  def on_category_cancel
    @command_window.activate
    @dummy_window.show
    @storageinfo_window.show
    @freeslot_window.hide
    @item_window.hide
    @category_window.hide
  end
  #--------------------------------------------------------------------------
  # * Item [OK]
  #--------------------------------------------------------------------------
  def on_item_ok
    @item = @item_window.item
    case @command_window.current_symbol
    when :withdraw
      @number_window.set(@item, max_withdraw)
    when :store
      @number_window.set(@item, max_store)
    end
    @number_window.show.activate
  end
  #--------------------------------------------------------------------------
  # * Item [Cancel]
  #--------------------------------------------------------------------------
  def on_item_cancel
    @item_window.unselect
    if @storage_category == false
      @item_window.hide
      @dummy_window.show
      @storageinfo_window.show
      @freeslot_window.hide
      @command_window.activate
    else
      @category_window.activate
    end
  end
  #--------------------------------------------------------------------------
  # * Quantity Input [OK]
  #--------------------------------------------------------------------------
  def on_number_ok
    Sound.play_ok
    case @command_window.current_symbol
    when :withdraw
      do_withdraw(@number_window.number)
    when :store
      do_store(@number_window.number)
    end
    @number_window.hide
    @freeslot_window.refresh
    @storageinfo_window.refresh
    @item_window.refresh
    @item_window.activate
    @item_window.select_last
  end
  #--------------------------------------------------------------------------
  # * Quantity Input [Cancel]
  #--------------------------------------------------------------------------
  def on_number_cancel
    Sound.play_cancel
    @number_window.hide
    @item_window.activate
  end
  #--------------------------------------------------------------------------
  # * Gold Quantity Input [OK]
  #--------------------------------------------------------------------------
  def on_gold_ok
    case @command_window.current_symbol
    when :withdraw
      gold_withdraw(@gold_window.number)
      @gold_window.set(max_withdraw, 24)
    when :store
      gold_store(@gold_window.number)
      @gold_window.set(max_store, 0)
    end
    @gold_window.show.activate
    @gold_window.refresh
    @storageinfo_window.refresh
    Sound.play_ok
  end
  #--------------------------------------------------------------------------
  # * Gold Quantity Input [Cancel]
  #--------------------------------------------------------------------------
  def on_gold_cancel
    Sound.play_cancel
    if @storage_category == false && @storage_gold == true
      @command_window.activate
    else
      start_category_selection
    end
    @gold_window.hide
  end
  #--------------------------------------------------------------------------
  # * Execute Withdraw
  #--------------------------------------------------------------------------
  def do_withdraw(number)
    if $game_switches[BRAVO_STORAGE::THIEF_SWITCH] == false # это не воровство
      $game_party.storage_lose_item(@item, number)
      $game_party.gain_item(@item, number)
    end
    if $game_switches[BRAVO_STORAGE::THIEF_SWITCH] == true # если это воровство
      $game_party.storage_lose_item(@item, number)
      $game_party.gain_item(@item, number)
      $game_variables[BRAVO_STORAGE::THIEF_ITEM] += number # подсчёт текущей кражи
      #АНТИ-АБУЗ КАРМЫ
      if $game_switches[BRAVO_STORAGE::NIL_KARMA] == false # анти-абуз "if" (можно удалить)
        $game_switches[BRAVO_STORAGE::NIL_KARMA] = true # анти-абуз (можно удалить)
        $game_variables[BRAVO_STORAGE::THIEF_KARMA] -= BRAVO_STORAGE::THIEF_KARMA_NUM # понижает карму (не удалять)
      end # анти-абуз "end" (можно удалить)
    end
  end
  #--------------------------------------------------------------------------
  # * Execute Store
  #--------------------------------------------------------------------------
  def do_store(number)
    $game_party.storage_gain_item(@item, number)
    $game_party.lose_item(@item, number)
    $game_variables[BRAVO_STORAGE::GIVE_ITEM] += number # подсчёт текущего вложения
  end
  #--------------------------------------------------------------------------
  # * Gold Withdraw
  #--------------------------------------------------------------------------
  def gold_withdraw(number)
    if $game_switches[BRAVO_STORAGE::THIEF_SWITCH] == false # это не воровство
      if $game_switches[BRAVO_STORAGE::BANK_SWITCH] == false # это не банк
        $game_party.storage_lose_gold(number)
        $game_party.gain_gold(number)
      end
    end
    if $game_switches[BRAVO_STORAGE::THIEF_SWITCH] == true # если это воровство
      $game_party.storage_lose_gold(number)
      $game_party.gain_gold(number)
      $game_variables[BRAVO_STORAGE::THIEF_MONEY] += number # подсчёт текущей кражи
      #АНТИ-АБУЗ КАРМЫ
      if $game_switches[BRAVO_STORAGE::NIL_KARMA] == false # анти-абуз "if" (можно удалить)
        $game_switches[BRAVO_STORAGE::NIL_KARMA] = true # анти-абуз (можно удалить)
        $game_variables[BRAVO_STORAGE::THIEF_KARMA] -= BRAVO_STORAGE::THIEF_KARMA_NUM # понижает карму (не удалять)
      end # анти-абуз "end" (можно удалить)
    end
    if $game_switches[BRAVO_STORAGE::BANK_SWITCH] == true # если это банк
      $game_party.storage_lose_gold(number)
      $game_party.gain_gold(number)
      $game_variables[BRAVO_STORAGE::BANK_MONEY] -= number # подсчёт текущего вывода денег
    end
  end
  #--------------------------------------------------------------------------
  # * Gold Store
  #--------------------------------------------------------------------------
  def gold_store(number)
    $game_party.lose_gold(number)
    $game_party.storage_gain_gold(number)
    $game_variables[BRAVO_STORAGE::GIVE_MONEY] += number # подсчёт текущего вложения
      if $game_switches[BRAVO_STORAGE::BANK_SWITCH] == true # это банк
        $game_variables[BRAVO_STORAGE::BANK_MONEY] += number # подсчёт текущего вклада
      end
  end
  #--------------------------------------------------------------------------
  # * Get Maximum Quantity Withdrawable
  #--------------------------------------------------------------------------
  def max_withdraw
    case @category_window.current_symbol
    when :item, :weapon, :armor
      available_inv_slots = $game_party.max_item_number(@item) - $game_party.item_number(@item)
      if $game_party.s_item_number(@item) > available_inv_slots
        return available_inv_slots
      else
        $game_party.s_item_number(@item)
      end
    when :gold
      if $game_party.storage_gold > 999
        return 999
      else
        $game_party.storage_gold
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Get Maximum Quantity Storable
  #--------------------------------------------------------------------------
  def max_store
    case @category_window.current_symbol
    when :item, :weapon, :armor
      box_name = $game_party.storage_name
      if $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] > 0
        if $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] - $game_party.storage_all_items_in_box?(box_name) >= $game_party.item_number(@item)
          available_slots_in_box = 99
        elsif $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] - $game_party.storage_all_items_in_box?(box_name) <= 99
          available_slots_in_box = $game_variables[BRAVO_STORAGE::ITEMS_MAX_VAR] - $game_party.storage_all_items_in_box?(box_name)
        else
          available_slots_in_box = 99
        end
      else
        available_slots_in_box = 99
      end
      if $game_party.item_number(@item) > available_slots_in_box
        return available_slots_in_box
      else
        $game_party.item_number(@item)
      end
    when :gold
      if $game_party.gold > 999
        return 999
      else
        $game_party.gold
      end
    end
  end
end

class Scene_Map < Scene_Base
  alias stor_flag_update update
  def update
    stor_flag_update
    upd_name = $game_party.storage_name
    if upd_name != nil
      check_storage = $game_party.storage_all_items_in_box?(upd_name) + $game_party.storage_gold
      if check_storage > 0
        $game_switches[BRAVO_STORAGE::STORAGE_SWITCH] = true if BRAVO_STORAGE::STORAGE_SWITCH != 0
      else
        $game_switches[BRAVO_STORAGE::STORAGE_SWITCH] = false if BRAVO_STORAGE::STORAGE_SWITCH != 0
      end
    end
  end
end


Раньше мне не хватало у скрипта возможности кражи предметов из сундуков так, чтобы игрой это можно было отследить.
Теперь игра помещает в игровые переменные, данные о количестве вложенных в сундуки предметов и денег, записывает
количество украденных предметов и денег, позволяет вкладывать деньги в подобие банка (отследить вложение денег в банк).
Все переменные и переключатели выведены для удобства в начало скрипта, так что вы можете их изменить на свои.
Любой сундук можно сделать чьим-то, просто включив перед его обыском игровой переключатель и выключив после обыска.
(Это запустит проверку краж.)
Любой сундук можно сделать БАНКОМ, делается это так-же как с проверкой краж, но с другим переключателем.
Есть что-то вроде кармы за воровство. Карма отнимается не за количество украденного, а за сам факт совершения кражи,
т.е. после понижения кармы включится переключатель, который больше не даст её понизить, выключаете его уже вручную,
т.к. вы сами можете поместить его куда пожелаете (например после того как персонаж игрока ляжет спать).
Это своего рода и защита от абуза понижения кармы, но эту функцию защиты от абуза можно убрать, я пометил где и как
это сделать.

Эти переменные нужны только для отслеживания, вы же можете настроить на их основе много своего, как вам угодно.
Можно например сделать проверку для сундука НПС, и если НПС вам стал другом, то переключатель краж в его сундуке
больше не будет включаться - т.е. он разрешит вам брать его вещи.
Можно делать подобие карманных краж на основе сундуков, запуская рандомные или зависящие от
характеристики персонажа, пассивной способности или переменной -- проверки.
Можно на основе переменной для денег, вложенных в банк, создать дополнительные переменные для множества банков,
а основную использовать просто как отслеживание вклада денег, чтобы потом данные из неё передать переменной
конкретного банка, не забудьте только после этого обнулить основную переменную, чтобы она не копила информацию
с разных банков.

Вообще внимательно прочитайте инструкции, это очень важно!

Так можно установить отслеживание режима кражи или режима банка.
Спойлер Установка:

Спойлер Скриншот: