Плохо! Плохо!:  0
Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: Bravo Storage System + Modified Version

  1. #11
    Местный Аватар для Potato
    Информация о пользователе
    Регистрация
    12.04.2012
    Адрес
    Вторая палатка слева
    Сообщений
    243
    Записей в дневнике
    1
    Репутация: 5 Добавить или отнять репутацию

    По умолчанию

    open_storage("My Chest")

  2. #12
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    924
    Репутация: 79 Добавить или отнять репутацию

    По умолчанию

    Если ты используешь мою версию, то там обязательно указывать остальные параметры, которые идут после "name" в open_storage("name", name_window, category, gold, free_slot), так же если category ставишь true, то обязательно нужно перед open_storage ставить allowed_category(items, weapons, armors). Это описано в шапке моего скрипта. Почитай и попробуй, должно работать. Я чуть позже подправлю, чтобы оно все не было так жестко по правилам.

  3. #13
    Местный Аватар для Potato
    Информация о пользователе
    Регистрация
    12.04.2012
    Адрес
    Вторая палатка слева
    Сообщений
    243
    Записей в дневнике
    1
    Репутация: 5 Добавить или отнять репутацию

    По умолчанию

    Ну ты тоже нашёл гения скриптинга, если бы я ещё хоть слово понял из твоей инструкции

  4. #14
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    924
    Репутация: 79 Добавить или отнять репутацию

    По умолчанию

    ну он и не является plug&play скриптом. Требует понимая работы переменных.

  5. #15
    Супер-модератор Аватар для dirge
    Информация о пользователе
    Регистрация
    25.02.2013
    Сообщений
    924
    Репутация: 79 Добавить или отнять репутацию

    По умолчанию

    UPDATE
    Обновил модифицированный скрипт.
    Раз уж, такой интерес у людей появился к скрипту, в связи с этим сделал его менее строгим к требованиям оформления, но читать описание нужно обязательно, сам он работать не будет.
    Поправил некоторые недоработки, из-за которых игрок мог брать больше предметов чем позволял его инвентарь, из-за чего предметы сверх максимума уходили в небытие. Так же, добавил опцию управления максимальным количеством предметов в стаке инвентаря игрока.
    Последний раз редактировалось dirge; 30.10.2014 в 21:14.

  6. #16
    Познающий Аватар для ZoWW
    Информация о пользователе
    Регистрация
    15.12.2013
    Сообщений
    487
    Репутация: 12 Добавить или отнять репутацию

    По умолчанию

    Большое спасибо dirge за проделанную работу и помощь! Скрипт теперь не имеет ошибок аналогичных имеющихся скриптов. Всем рекомендую - очень удобная и функциональная вещь!

  7. #17

    По умолчанию

    Что бы понять как скрип работает сделай в любой демке событие, да хотя бы просто нарисуй на столе кувшин. После чего перепиши скрипт из шапки, вызывается он через вызов скрипта и внимательно вноси изменения, как там в шапке написано, после чего у тебя всё получится, просто будь ВНИМАТЕЛЬНЕЕ!. НЕ ПОВТОРЯЙТЕ МОИХ ОШИБОК ТРЕНЕРУЙТЕСЬ НА МАЛЕНЕЬКИХ ИГРУШКАХ.

  8. #18

    По умолчанию

    Было бы круто ещё реализовать набор определённых предметов, типа изначально там книги, а ты могёшь сунуть чё хош. Или я ещё не до конца разобрался?*

  9. #19

    По умолчанию

    Я сделяль.

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

    Спойлер 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


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

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

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

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

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

  10. #20

    По умолчанию

    Чуть не забыл, на всякий случай для новичков:

    Когда будете тестировать работу скрипта, вы можете посмотреть все переключатели и переменные в запущенной игре, нажав на F9.
    Это позволит быстрее протестировать проект на ошибки. Если в этом скрипте есть ошибки, напишите какие и как работают.
    Если знаете как исправить сами, пожалуйста исправьте, обновите версию аддона в описании и загрузите скрипт сюда.

    Вложение в спойлере с установкой полетело. Опишу тут как сделать:

    Действие как пример:
    - включаем переключатель проверки краж или проверки банка (или ничего не включаем, если эти функции нам не нужны)
    - стандартная анимация открытия сундука (с ожиданием)
    - вызов скрипта со ссылкой на конкретный сундух/хранилище
    - анимация закрытия сундука (как открытие, но проигрывается обратно) (с ожиданием)
    - выключаем переключатель проверки краж или банка (или ничего не выключаем, если не включали)
    .
    - после завершения всего, важно провести все проверки переменных, а затем обнулить более ненужные для следующей передачи данных от другого сундука/хранилища. держите свои переменные чистыми
    Обязательно важно чтобы после включения переключателя и перед вызовом скрипта прошло немного времени, например времени на анимацию - иначе переключатель не успевает засчитаться скриптом, а игра уже ставится на паузу при работе с хранилищем, потому данные в переменные для отслеживания передаваться не будут, игра будет думать что это обычный сундук, а не сундук который игрок обворовывает или не засчитает операции с банком.
    Последний раз редактировалось Sleeping Visitor; Вчера в 21:04.

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Bravo Storage System + Modified Version