Скрипт изменяет структуру меню предметов, добавляя фильтрацию по различным критериям
Скрипт использует мой кривенький аддончег, так что его цепляем в обязательном порядке. Траблы возможны только в том случае, если ваши кастомные скрипты будут менять тоже, что и мои.
	Код:
	#==============================================================================
# EK Addon v.1.0b
#------------------------------------------------------------------------------
# Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
# Created on: 25.05.2008 22:20:49
#==============================================================================
# Description: The given package of scripts expands opportunities of original
# functions. All made changes are described below. Problems can arise only in
# the event that you use the scripts changing теже the functions.
#------------------------------------------------------------------------------
# Install: Make a new blank script page above main and copy this script.
#==============================================================================
# Window_Command:
# 1. Procedure of a call is changed:
#    (width, commands, column_max = 1, row_max = 0, spacing = 32, textalign = 0)
#    textalign << Change text align (0 - Left; 1 - Center; 2 - Right)
#    
#------------------------------------------------------------------------------
# Window_Help:
# 1. Procedure of a call is changed:
#    (x = 0, y = 0, width = 544, height = WLH + 32)
#==============================================================================
class Window_Command < Window_Selectable
  
  def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32, textalign = 0)
    if row_max == 0
      row_max = (commands.size + column_max - 1) / column_max
    end
    super(0, 0, width, row_max * WLH + 32, spacing)
    @commands = commands
    @item_max = commands.size
    @column_max = column_max
    @textalign = textalign
    refresh
    self.index = 0
  end
  def draw_item(index, enabled = true)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(rect, @commands[index], @textalign)
  end
  
end
#==============================================================================
class Window_Help < Window_Base
  
  def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
    super(x, y, width, height)
  end
  
end
#==============================================================================
 
	Код:
	#==============================================================================
# EK Items Menu v.1.4b
#------------------------------------------------------------------------------
# Created by: Equilibrium Keeper [equilibriumkeeper@inbox.com]
# Created on: 26.05.2008 17:29:18
# Отдельное спасибо: Рольф, ANNxiousity, insider
#          А так же: rpgmaker.sk6.ru, rpg-maker.info, rpgmakervx.net
#==============================================================================
# Описание: Скрипт изменяет структуру меню предметов, добавляя фильтрацию
# по различным критериям
#------------------------------------------------------------------------------
# Требования: Addon Equilibrium Keeper'а версии 1.00 или выше
# Установка: В редакторе скриптов создайте чистую страницу над "Main" и
# скопируйте туда данный скрипт.
#==============================================================================
# Инструкция: В массив ITEMS_TYPE (строка 43) впишите названия желаемых
# разделов. В двумерный массив ITEMS_FILTRARION (строка 44) впишите критерии
# отбора из списка ниже или задайте свои. ПРИМЕЧАНИЕ: Одномерные массивы 
# (критерии отбора) в массиве ITEM_FILTRATION должны следовать именно в том
# порядке, в котором следуют соответствующие им категории в ITEMS_TYPE!
#------------------------------------------------------------------------------
# Список стандартных критериев отбора (по умолчанию отрисовываются все предметы):
# "Usable" - Предметы, которые можно использовать либо в меню, либо в бою, либо и там и там
# "Usable!" - Предметы, которые нельзя использовать никогда
# "Equipment" - Предметы экипировки - оружие или броня (или и то и другое о.О)
# "Equipment!" - Предметы, не являющиеся частью экипировки
# "InMenu" - Предметы, которые можно использовать в меню
# "InMenu!" - Предметы, которые нельзя использовать в меню
# "InBattle" - Предметы, которые можно использовать в бою
# "InBattle!" - Предметы, которые нельзя использовать в бою
#------------------------------------------------------------------------------
# Для того, что бы создать свой собственный критерий отбора следует:
# 1)Вписать название новой категории в массив ITEMS_TYPE, в качестве нового
# значения или заменив уже существующее.
# 2)Придумать тег, например "\alch" и вписать его в поле "Note" оружия,
# доспеха или предмета, который вы решили отнести к новой категории.
# 3)Вписать этот тег, заменив \ на \\ в массив ITEMS_FILTRATION, как новое
# условие или заменив им уже существующие.
# 4)В блок GetItemType, в конец case'а (ст.178) добавить блок кода, аналогичный
# строкам 151...178, заменив "\\alch" и "\\alch!" на ваш тег и тег отрицающий.
#==============================================================================
module EKScripts
  ITEMS_TYPE = ["Usable", "Battle Only", "Equipment", "Other", "Alchemistry"]
  ITEMS_FILTRARION = [
    ["InMenu", "Equipment!", "\\alch!"],   # Usable
    ["InBattle", "InMenu!", "Equipment!"], # Battle Only
    ["Equipment"],                         # Equipment
    ["Usable!", "Equipment!", "\\alch!"],  # Other
    ["\\alch"]                             # For example: Alchemistry
  ] # ← Do not delete
end
class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  attr_writer :type
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     x      : window x-coordinate
  #     y      : window y-coordinate
  #     width  : window width
  #     height : window height
  #     type   : item type
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height, type = -1)
    super(x, y, width, height)
    @items_notes = []
    for i in 1..$data_items.size - 1
      @items_notes[i] = $data_items[i].note
    end
    @weapons_notes = []
    for i in 1..$data_weapons.size - 1
      @weapons_notes[i] = $data_weapons[i].note
    end
    @armors_notes = []
    for i in 1..$data_armors.size - 1
      @armors_notes[i] = $data_armors[i].note
    end
    @type = type
    @items_filtrarion = EKScripts::ITEMS_FILTRARION
    @column_max = 2
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Whether or not to include in item list
  #     item : item
  #--------------------------------------------------------------------------
  def include?(item)
    return false if item == nil
    if $game_temp.in_battle
      return false unless item.is_a?(RPG::Item)
    else      
      return false if GetItemType(item) == false
    end
    return true
  end
  #--------------------------------------------------------------------------
  # * Whether or not to include in valid items list
  #     item : item
  #--------------------------------------------------------------------------
  def GetItemType(item)
    @item = item
    @return = true
    for i in 0..@items_filtrarion[@type].size - 1
      if @return == true
        case @items_filtrarion[@type][i]
          when "Usable"
            if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
              unless $data_items[item.id].menu_ok? || $data_items[item.id].battle_ok?
                @return = false
              end
            end
          when "Usable!"
            if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
              if $data_items[item.id].menu_ok? || $data_items[item.id].battle_ok?
                @return = false
              end
            end
          when "InMenu"
            if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
              unless $data_items[item.id].menu_ok?
                @return = false
              end
            end
          when "InMenu!"
            if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
              if $data_items[item.id].menu_ok?
                @return = false
              end
            end
          when "InBattle"
            if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
              unless $data_items[item.id].battle_ok?
                @return = false
              end
            end
          when "InBattle!"
            if !(item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon))
              if $data_items[item.id].battle_ok?
                @return = false
              end
            end
          when "Equipment"
            unless item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
              @return = false
            end
          when "Equipment!"
            if item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
              @return = false
            end
          when "IsWeapon"
            unless item.is_a?(RPG::Weapon)
              @return = false
            end
          when "IsWeapon!"
            if item.is_a?(RPG::Weapon)
              @return = false
            end
          when "IsArmor"
            unless item.is_a?(RPG::Armor)
              @return = false
            end
          when "IsArmor!"
            if item.is_a?(RPG::Armor)
              @return = false
            end
          when "\\alch"
            if item.is_a?(RPG::Weapon)
              if @weapons_notes[item.id].index("\\alch") == nil
                @return = false
              end
            elsif item.is_a?(RPG::Armor)
              if @armors_notes[item.id].index("\\alch") == nil
                @return = false
              end
            else
              if @items_notes[item.id].index("\\alch") == nil
                @return = false
              end
            end
          when "\\alch!"
            if item.is_a?(RPG::Weapon)
              if @weapons_notes[item.id].index("\\alch") != nil
                @return = false
              end
            elsif item.is_a?(RPG::Armor)
              if @armors_notes[item.id].index("\\alch") != nil
                @return = false
              end
            else
              if @items_notes[item.id].index("\\alch") != nil
                @return = false
              end
            end
        end
      end
    end
    return @return
  end
end
class Scene_Item < Scene_Base
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @items_type = EKScripts::ITEMS_TYPE
    @spacing = 32 - (@items_type.size - 4) * 8
    if @spacing <= 0
      @spacing = 8
    end
    @command_window = Window_Command.new(544, @items_type, @items_type.size, 0, @spacing, 1)
    @command_window.index = 0
    @viewport = Viewport.new(0, 0, 544, 416)
    @help_window = Window_Help.new (0, 56)
    @help_window.viewport = @viewport
    @item_window = Window_Item.new(0, 112, 544, 304, 0)
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.active = false
    @target_window = Window_MenuStatus.new(0, 0)
    hide_target_window
    @command_window.active = true
    @item_window.active = false
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @command_window.dispose
    @viewport.dispose
    @help_window.dispose
    @item_window.dispose
    @target_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update Frame
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @command_window.update
    @help_window.update
    @item_window.update
    @target_window.update
    if @command_window.active
      update_command_selection
    elsif @item_window.active
      update_item_selection
    elsif @target_window.active
      update_target_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      @command_window.active = false
      @item_window.active = true
    elsif Input.trigger?(Input::RIGHT) || Input.trigger?(Input::LEFT)
      @item_window.type = @command_window.index
      @item_window.refresh
      @item_window.update_help
    end
  end
  #--------------------------------------------------------------------------
  # * Update Item Selection
  #--------------------------------------------------------------------------
  def update_item_selection
    if Input.trigger?(Input::B)
      Sound.play_decision
      @item_window.active = false
      @command_window.active = true
      Sound.play_cancel
    elsif Input.trigger?(Input::C)
      @item = @item_window.item
      if @item != nil
        $game_party.last_item_id = @item.id
      end
      if $game_party.item_can_use?(@item)
        Sound.play_decision
        determine_item
      else
        Sound.play_buzzer
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Show(Recreate) Target Window
  #     right : Right justification flag (if false, left justification)
  #--------------------------------------------------------------------------
  def show_target_window(right)
    @item_window.active = false
    @target_window.dispose
    @target_window = Window_MenuStatus.new(0, 0)
    width_remain = 544 - @target_window.width
    @target_window.x = right ? width_remain : 0
    @target_window.visible = true
    @target_window.active = true
    if right
      @viewport.rect.set(0, 0, width_remain, 416)
      @viewport.ox = 0
    else
      @viewport.rect.set(@target_window.width, 0, width_remain, 416)
      @viewport.ox = @target_window.width
    end
  end
end
 
Мой второй скрипт. Пожелания и критика приветствуются!
Социальные закладки