Код:
	#==============================================================================
# 
# ▼ Yanfly Engine Ace - Battle Command List v1.08
# -- Last Updated: 2012.01.10
# -- Level: Normal
# -- Requires: n/a
# 
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-BattleCommandList"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.10 - Compatibility Update: Battle System FTB
# 2011.12.30 - Bug Fixed: Disappearing windows when no confirm window is used.
# 2011.12.26 - Bug Fixed: Actor Command Window disappears without Battle Engine
#              Ace installed.
# 2011.12.19 - Compatibility Update: Class System
#            - New Actor Command: Subclass List
# 2011.12.17 - Bug Fixed: Item command from Actor Command Window fixed.
# 2011.12.15 - Bug Fixed: Prevented multiple actions per battler.
# 2011.12.13 - Compatibility Update: Command Equip
#              Compatibility Update: Add-On: Command Party
# 2011.12.12 - Compatibility Update: Command Autobattle
# 2011.12.10 - Started Script and Finished.
#            - Compatibility Update: Combat Log Display
# 
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script allows you to change the order to commands that appear in battle
# for the Party Command Window and Actor Command Window. In addition to the
# ability to change the order commands appear, you may also add commands to the
# Actor Command Window that can trigger the usage of skills and/or items. The
# Confirm Command Window is also a new addition that appears at the end of the
# action select phase (after the last actor has made a choice) before entering
# the battle phase.
# 
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
# 
# -----------------------------------------------------------------------------
# Actor Notetags - These notetags go in the actors notebox in the database.
# -----------------------------------------------------------------------------
# <command list>
#  string
#  string
# </command list>
# These lines go inside of an actor's notebox to adjust the battle commands
# that appear in the actor's Actor Command Window. Refer to the module as to
# what to use for the strings. If a custom command list is used for an actor,
# it will take priority over its class's custom command list, which takes place
# over the default command list.
# 
# -----------------------------------------------------------------------------
# Class Notetags - These notetags go in the class notebox in the database.
# -----------------------------------------------------------------------------
# <command list>
#  string
#  string
# </command list>
# These lines go inside of a class's notebox to adjust the battle commands
# that appear in the actor's Actor Command Window. Refer to the module as to
# what to use for the strings. A custom command list for a class does not take
# priority over an actor's custom command list, but it does take priority over
# the default command list.
# 
# -----------------------------------------------------------------------------
# Skill Notetags - These notetags go in the skill notebox in the database.
# -----------------------------------------------------------------------------
# <command name: string>
# If this skill is being used as a command, it will use "string" to replace the
# skill's name in the command list window.
# 
# <command hide until learn>
# This hides the command until the actor has learned the respective skill for
# the command to appear in the actor's command list.
# 
# <command hide until usable>
# This hides the command until the actor is capable of using the command by
# meeting TP costs or MP costs.
# 
# <command hide until switch: x>
# This switch x is OFF, then the command remains hidden. If the switch is ON,
# then the command becomes enabled and appears in the command list.
# 
# -----------------------------------------------------------------------------
# Item Notetags - These notetags go in the item notebox in the database.
# -----------------------------------------------------------------------------
# <command name: string>
# If this item is being used as a command, it will use "string" to replace the
# item's name in the command list window.
# 
# <command hide until usable>
# This hides the command until the actor is capable of using the command as
# long as that item is usable normally.
# 
# <command hide until switch: x>
# This switch x is OFF, then the command remains hidden. If the switch is ON,
# then the command becomes enabled and appears in the command list.
# 
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
# 
# For maximum compatibility with Yanfly Engine Ace - Ace Battle Engine, place
# this script under Ace Battle Engine.
# 
#==============================================================================
module YEA
  module BATTLE_COMMANDS
    
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Party Command Window Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # This section adjusts the commands for the Party Command Window. Rearrange
    # commands as you see fit or add in new ones. Here's a list of which
    # command does what:
    # 
    # -------------------------------------------------------------------------
    # :command         Description
    # -------------------------------------------------------------------------
    # :fight           Enters the command selection phase for actors. Default.
    # :escape          Party attempts to escape from battle. Default.
    # 
    # :combatlog       Requires YEA - Combat Log Display.
    # :autobattle      Requires YEA - Command Autobattle.
    # :party           Requires YEA - Party System Add-On: Command Party.
    # 
    # And that's all of the currently available commands. This list will be
    # updated as more scripts become available.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # This array arranges the order of which the commands appear in the Party
    # Command window.
    PARTY_COMMANDS =[
      :fight,
      :autobattle,
      :party,
    # :custom1,
    # :custom2,
      :escape,
    ] # Do not remove this.
    
    #--------------------------------------------------------------------------
    # - Party Command Custom Commands -
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # For those who use scripts to that may produce unique effects in battle,
    # use this hash to manage the custom commands for the Party Command Window.
    # You can disable certain commands or prevent them from appearing by using
    # switches. If you don't wish to bind them to a switch, set the proper
    # switch to 0 for it to have no impact.
    #--------------------------------------------------------------------------
    CUSTOM_PARTY_COMMANDS ={
    # :command => ["Display Name", EnableSwitch, ShowSwitch, Handler Method],
      :custom1 => [ "Custom Name",            0,         0, :command_name1],
      :custom2 => [ "Custom Name",           13,         0, :command_name2],
    } # Do not remove this.
    
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Actor Command Window Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # This section only adjusts the default commands for actors. If you wish
    # for an actor to have a unique command list, use the notetags listed in
    # the instructions to apply them. The custom command lists for actors will
    # override this command list.
    # 
    # Here's a list of which command does what:
    # 
    # -------------------------------------------------------------------------
    # :command         Description
    # -------------------------------------------------------------------------
    # "ATTACK"         Normal attack for actor. Default.
    # "SKILL LIST"     All of the skill types the actor can use. Default.
    # "DEFEND"         Set defend action for actor. Default.
    # "ITEMS"          Opens up the item menu for the actor. Default.
    # 
    # "SKILL TYPE X"   Specifically puts in skill type X if actor has it.
    # "SKILL X"        Uses Skill X in that slot.
    # "ITEM X"         Uses Item X in that slot.
    # 
    # "AUTOBATTLE"     Requires YEA - Command Autobattle.
    # "EQUIP"          Requires YEA - Command Equip
    # "SUBCLASS LIST"  Requires YEA - Class System. Adds subclass skill types.
    # 
    # And that's all of the currently available commands. This list will be
    # updated as more scripts become available.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # This array arranges the order of which the commands appear in the Actor
    # Command window if the actor does not have a custom command list.
    DEFAULT_ACTOR_COMMANDS =[
    # "AUTOBATTLE",
      "ATTACK",
      "SKILL LIST",
      "SUBCLASS LIST",
      "DEFEND",
      "ITEMS",
      "EQUIP",
    ] # Do not remove this.
    
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Confirm Command Window Settings -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # The confirm window is something new that's been added. It shows after the
    # last actor has made a decision as to what actions the player wishes to
    # take for the turn Here's a list of which command does what:
    # 
    # -------------------------------------------------------------------------
    # :command         Description
    # -------------------------------------------------------------------------
    # :execute         Start the battle turn. Comes with this script.
    # 
    # :combatlog       Requires YEA - Combat Log Display.
    # 
    # And that's all of the currently available commands. This list will be
    # updated as more scripts become available.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    USE_CONFIRM_WINDOW = true    # Set to false if you don't wish to use it.
    
    # This array arranges the order of which the commands appear in the Party
    # Command window.
    CONFIRM_COMMANDS =[
      :execute,
      :combatlog,
    # :custom1,
    # :custom2,
    ] # Do not remove this.
    
    # This sets what text appears for the execute command.
    EXECUTE_VOCAB = "Execute"
    
    #--------------------------------------------------------------------------
    # - Confirm Command Custom Commands -
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # For those who use scripts to that may produce unique effects in battle,
    # use this hash to manage the custom commands for the Confirm Command
    # Window. You can disable certain commands or prevent them from appearing
    # by using switches. If you don't wish to bind them to a switch, set the
    # proper switch to 0 for it to have no impact.
    #--------------------------------------------------------------------------
    CUSTOM_CONFIRM_COMMANDS ={
    # :command => ["Display Name", EnableSwitch, ShowSwitch, Handler Method],
      :custom1 => [ "Custom Name",            0,          0, :command_name1],
      :custom2 => [ "Custom Text",           13,          0, :command_name2],
    } # Do not remove this.
    
  end # BATTLE_COMMANDS
end # YEA
#==============================================================================
# ▼ Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================
module YEA
  module REGEXP
  module BASEITEM
    
    COMMAND_LIST_ON  = /<(?:COMMAND_LIST|command list)>/i
    COMMAND_LIST_OFF = /<\/(?:COMMAND_LIST|command list)>/i
    
  end # BASEITEM
  module USABLEITEM
    
    COMMAND_NAME = /<(?:COMMAND NAME|command name):[ ](.*)>/i
    COMMAND_HIDE_LEARN = 
      /<(?:COMMAND_HIDE_UNTIL_LEARN|command hide until learn)>/i
    COMMAND_HIDE_USABLE = 
      /<(?:COMMAND_HIDE_UNTIL_USABLE|command hide until usable)>/i
    COMMAND_HIDE_SWITCH = 
      /<(?:COMMAND_HIDE_UNTIL_SWITCH|command hide until switch):[ ](\d+)>/i
    
  end # USABLEITEM
  end # REGEXP
end # YEA
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
  
  #--------------------------------------------------------------------------
  # alias method: load_database
  #--------------------------------------------------------------------------
  class <<self; alias load_database_bcl load_database; end
  def self.load_database
    load_database_bcl
    load_notetags_bcl
  end
  
  #--------------------------------------------------------------------------
  # new method: load_notetags_bcl
  #--------------------------------------------------------------------------
  def self.load_notetags_bcl
    groups = [$data_actors, $data_classes, $data_skills, $data_items]
    for group in groups
      for obj in group
        next if obj.nil?
        obj.load_notetags_bcl
      end
    end
  end
  
end # DataManager
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
  
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :battle_commands
  
  #--------------------------------------------------------------------------
  # common cache: load_notetags_bcl
  #--------------------------------------------------------------------------
  def load_notetags_bcl
    @battle_commands = []
    @command_list = false
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when YEA::REGEXP::BASEITEM::COMMAND_LIST_ON
        @command_list = true
      when YEA::REGEXP::BASEITEM::COMMAND_LIST_OFF
        @command_list = false
      else
        next unless @command_list
        @battle_commands.push(line.to_s.upcase)
      #---
      end
    } # self.note.split
    #---
    if @battle_commands == [] and self.is_a?(RPG::Class)
      @battle_commands = YEA::BATTLE_COMMANDS::DEFAULT_ACTOR_COMMANDS
    end
  end
  
end # RPG::BaseItem
#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
  
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :command_name
  attr_accessor :command_hide_until_learn
  attr_accessor :command_hide_until_usable
  attr_accessor :command_hide_until_switch
  
  #--------------------------------------------------------------------------
  # common cache: load_notetags_bcl
  #--------------------------------------------------------------------------
  def load_notetags_bcl
    @command_name = @name.clone
    @command_hide_until_switch = 0
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when YEA::REGEXP::USABLEITEM::COMMAND_NAME
        @command_name = $1.to_s
      when YEA::REGEXP::USABLEITEM::COMMAND_HIDE_LEARN
        @command_hide_until_learn = true
      when YEA::REGEXP::USABLEITEM::COMMAND_HIDE_USABLE
        @command_hide_until_usable = true
      when YEA::REGEXP::USABLEITEM::COMMAND_HIDE_USABLE
        command_hide_until_switch = $1.to_i
      #---
      end
    } # self.note.split
    #---
  end
  
end # RPG::UsableItem
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  
  #--------------------------------------------------------------------------
  # new method: battle_commands
  #--------------------------------------------------------------------------
  def battle_commands
    return self.actor.battle_commands unless actor.battle_commands == []
    return self.class.battle_commands
  end
  
  #--------------------------------------------------------------------------
  # new method: next_command_valid?
  #--------------------------------------------------------------------------
  def next_command_valid?
    if $imported["YEA-BattleSystem-FTB"] && BattleManager.btype?(:ftb)
      return false
    end
    return false if @action_input_index >= @actions.size - 1
    return true
  end
  
end # Game_Actor
#==============================================================================
# ■ Window_PartyCommand
#==============================================================================
class Window_PartyCommand < Window_Command
  
  #--------------------------------------------------------------------------
  # overwrite method: make_command_list
  #--------------------------------------------------------------------------
  def make_command_list
    for command in YEA::BATTLE_COMMANDS::PARTY_COMMANDS
      case command
      when :fight
        add_command(Vocab::fight, :fight)
      when :escape
        add_command(Vocab::escape, :escape, BattleManager.can_escape?)
      when :combatlog
        next unless $imported["YEA-CombatLogDisplay"]
        add_command(YEA::COMBAT_LOG::COMMAND_NAME, :combatlog)
      when :autobattle
        next unless $imported["YEA-CommandAutobattle"]
        add_autobattle_command
      when :party
        next unless $imported["YEA-PartySystem"]
        next unless $imported["YEA-CommandParty"]
        add_party_command
      else
        process_custom_command(command)
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: process_custom_command
  #--------------------------------------------------------------------------
  def process_custom_command(command)
    return unless YEA::BATTLE_COMMANDS::CUSTOM_PARTY_COMMANDS.include?(command)
    show = YEA::BATTLE_COMMANDS::CUSTOM_PARTY_COMMANDS[command][2]
    continue = show <= 0 ? true : $game_switches[show]
    return unless continue
    text = YEA::BATTLE_COMMANDS::CUSTOM_PARTY_COMMANDS[command][0]
    switch = YEA::BATTLE_COMMANDS::CUSTOM_PARTY_COMMANDS[command][1]
    enabled = switch <= 0 ? true : $game_switches[switch]
    add_command(text, command, enabled)
  end
  
end # Window_PartyCommand
#==============================================================================
# ■ Window_ConfirmCommand
#==============================================================================
class Window_ConfirmCommand < Window_Command
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
    deactivate
    hide
  end
  
  #--------------------------------------------------------------------------
  # window_width
  #--------------------------------------------------------------------------
  def window_width; return 128; end
  
  #--------------------------------------------------------------------------
  # visible_line_number
  #--------------------------------------------------------------------------
  def visible_line_number; return 4; end
  
  #--------------------------------------------------------------------------
  # overwrite method: make_command_list
  #--------------------------------------------------------------------------
  def make_command_list
    for command in YEA::BATTLE_COMMANDS::CONFIRM_COMMANDS
      case command
      when :execute
        text = YEA::BATTLE_COMMANDS::EXECUTE_VOCAB
        add_command(text, :execute)
      when :combatlog
        next unless $imported["YEA-CombatLogDisplay"]
        add_command(YEA::COMBAT_LOG::COMMAND_NAME, :combatlog)
      else
        process_custom_command(command)
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: process_custom_command
  #--------------------------------------------------------------------------
  def process_custom_command(command)
    return unless YEA::BATTLE_COMMANDS::CUSTOM_CONFIRM_COMMANDS.include?(command)
    show = YEA::BATTLE_COMMANDS::CUSTOM_CONFIRM_COMMANDS[command][2]
    continue = show <= 0 ? true : $game_switches[show]
    return unless continue
    text = YEA::BATTLE_COMMANDS::CUSTOM_CONFIRM_COMMANDS[command][0]
    switch = YEA::BATTLE_COMMANDS::CUSTOM_CONFIRM_COMMANDS[command][1]
    enabled = switch <= 0 ? true : $game_switches[switch]
    add_command(text, command, enabled)
  end
  
  #--------------------------------------------------------------------------
  # setup
  #--------------------------------------------------------------------------
  def setup
    clear_command_list
    make_command_list
    refresh
    select(0)
    activate
    self.openness = 255
    show
  end
  
  #--------------------------------------------------------------------------
  # process_handling
  #--------------------------------------------------------------------------
  if $imported["YEA-BattleEngine"]
  def process_handling
    return unless open? && active
    return process_dir4 if Input.repeat?(:LEFT)
    return super
  end
  
  #--------------------------------------------------------------------------
  # process_dir4
  #--------------------------------------------------------------------------
  def process_dir4
    Sound.play_cursor
    Input.update
    deactivate
    call_handler(:dir4)
  end
  end # $imported["YEA-BattleEngine"]
  
end # Window_ConfirmCommand
#==============================================================================
# ■ Window_ActorCommand
#==============================================================================
class Window_ActorCommand < Window_Command
  
  #--------------------------------------------------------------------------
  # alias method: setup
  #--------------------------------------------------------------------------
  alias window_actorcommand_setup_bcl setup
  def setup(actor)
    window_actorcommand_setup_bcl(actor)
    show
  end
  
  #--------------------------------------------------------------------------
  # overwrite method: make_command_list
  #--------------------------------------------------------------------------
  def make_command_list
    return if @actor.nil?
    @stype_list = []
    for command in @actor.battle_commands
      case command.upcase
      #---
      when /ATTACK/i
        add_attack_command
      when /SKILL LIST/i
        add_skill_commands
      when /DEFEND/i
        add_guard_command
      when /ITEMS/i
        add_item_command
      #---
      when /SKILL TYPE[ ](\d+)/i
        add_skill_type_command($1.to_i)
      when /SKILL[ ](\d+)/i
        add_skill_id_command($1.to_i)
      when /ITEM[ ](\d+)/i
        add_item_id_command($1.to_i)
      #---
      when /AUTOBATTLE/i
        next unless $imported["YEA-CommandAutobattle"]
        add_autobattle_command
      when /EQUIP/i
        next unless $imported["YEA-CommandEquip"]
        add_equip_command
      when /SUBCLASS LIST/i
        add_subclass_skill_types
      #---
      else; next        
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # overwrite method: add_skill_commands
  #--------------------------------------------------------------------------
  def add_skill_commands
    @actor.added_skill_types.each do |stype_id|
      next if @stype_list.include?(stype_id)
      next if include_subclass_type?(stype_id)
      add_skill_type_command(stype_id)
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: include_subclass_type?
  #--------------------------------------------------------------------------
  def include_subclass_type?(stype_id)
    return false unless $imported["YEA-ClassSystem"]
    return @actor.subclass_skill_types.include?(stype_id)
  end
  
  #--------------------------------------------------------------------------
  # new method: add_subclass_skill_types
  #--------------------------------------------------------------------------
  def add_subclass_skill_types
    return unless $imported["YEA-ClassSystem"]
    return if @actor.subclass.nil?
    @actor.subclass_skill_types.sort.each do |stype_id|
      next if @stype_list.include?(stype_id)
      add_skill_type_command(stype_id)
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: add_skill_type_command
  #--------------------------------------------------------------------------
  def add_skill_type_command(stype_id)
    return unless @actor.added_skill_types.include?(stype_id)
    return if @stype_list.include?(stype_id)
    @stype_list.push(stype_id)
    name = $data_system.skill_types[stype_id]
    add_command(name, :skill, true, stype_id)
  end
  
  #--------------------------------------------------------------------------
  # new method: add_skill_id_command
  #--------------------------------------------------------------------------
  def add_skill_id_command(skill_id)
    return if $data_skills[skill_id].nil?
    return unless add_use_skill?(skill_id)
    name = $data_skills[skill_id].command_name
    add_command(name, :use_skill, use_skill_valid?(skill_id), skill_id)
  end
  
  #--------------------------------------------------------------------------
  # new method: add_use_skill?
  #--------------------------------------------------------------------------
  def add_use_skill?(skill_id)
    skill = $data_skills[skill_id]
    return false if hide_until_learn?(skill)
    return false if hide_until_usable?(skill)
    return false if hide_until_switch?(skill)
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: hide_until_learn?
  #--------------------------------------------------------------------------
  def hide_until_learn?(skill)
    return false unless skill.command_hide_until_learn
    return false if @actor.skill_learn?(skill)
    return false if @actor.added_skills.include?(skill.id)
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: hide_until_usable?
  #--------------------------------------------------------------------------
  def hide_until_usable?(skill)
    return false unless skill.command_hide_until_usable
    return false if @actor.usable?(skill)
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: hide_until_switch?
  #--------------------------------------------------------------------------
  def hide_until_switch?(skill)
    return false unless skill.command_hide_until_switch > 0
    return false if $game_switches[skill.command_hide_until_switch]
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: use_skill_valid?
  #--------------------------------------------------------------------------
  def use_skill_valid?(skill_id)
    skill = $data_skills[skill_id]
    return false unless @actor.skill_conditions_met?(skill)
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: add_item_id_command
  #--------------------------------------------------------------------------
  def add_item_id_command(item_id)
    return if $data_items[item_id].nil?
    return unless add_use_item?(item_id)
    name = $data_items[item_id].command_name
    add_command(name, :use_item, use_item_valid?(item_id), item_id)
  end
  
  #--------------------------------------------------------------------------
  # new method: add_use_item?
  #--------------------------------------------------------------------------
  def add_use_item?(item_id)
    item = $data_items[item_id]
    return false if hide_until_usable?(item)
    return false if hide_until_switch?(item)
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: use_item_valid?
  #--------------------------------------------------------------------------
  def use_item_valid?(item_id)
    item = $data_items[item_id]
    return false unless @actor.item_conditions_met?(item)
    return true
  end
  
end # Window_ActorCommand
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # alias method: create_all_windows
  #--------------------------------------------------------------------------
  alias scene_battle_create_all_windows_bcl create_all_windows
  def create_all_windows
    scene_battle_create_all_windows_bcl
    create_confirm_command_window
  end
  
  #--------------------------------------------------------------------------
  # alias method: create_party_command_window
  #--------------------------------------------------------------------------
  alias create_party_command_window_bcl create_party_command_window
  def create_party_command_window
    create_party_command_window_bcl
    process_custom_party_commands
  end
  
  #--------------------------------------------------------------------------
  # new method: process_custom_party_commands
  #--------------------------------------------------------------------------
  def process_custom_party_commands
    for command in YEA::BATTLE_COMMANDS::PARTY_COMMANDS
      next unless YEA::BATTLE_COMMANDS::CUSTOM_PARTY_COMMANDS.include?(command)
      called_method = YEA::BATTLE_COMMANDS::CUSTOM_PARTY_COMMANDS[command][3]
      @party_command_window.set_handler(command, method(called_method))
    end
  end
  
  #--------------------------------------------------------------------------
  # alias method: create_actor_command_window
  #--------------------------------------------------------------------------
  alias create_actor_command_window_bcl create_actor_command_window
  def create_actor_command_window
    create_actor_command_window_bcl
    @actor_command_window.set_handler(:use_skill, method(:command_use_skill))
    @actor_command_window.set_handler(:use_item, method(:command_use_item))
  end
  
  #--------------------------------------------------------------------------
  # alias method: start_actor_command_selection
  #--------------------------------------------------------------------------
  alias start_actor_command_selection_bcl start_actor_command_selection
  def start_actor_command_selection
    @confirm_command_window.hide unless @confirm_command_window.nil?
    start_actor_command_selection_bcl
    @actor_command_window.show
  end
  
  #--------------------------------------------------------------------------
  # new method: command_use_skill
  #--------------------------------------------------------------------------
  def command_use_skill
    @skill = $data_skills[@actor_command_window.current_ext]
    BattleManager.actor.input.set_skill(@skill.id)
    BattleManager.actor.last_skill.object = @skill
    status_redraw_target(BattleManager.actor)
    if $imported["YEA-BattleEngine"]
      $game_temp.battle_aid = @skill
      if @skill.for_opponent?
        select_enemy_selection
      elsif @skill.for_friend?
        select_actor_selection
      else
        next_command
        $game_temp.battle_aid = nil
      end
    else
      if !@skill.need_selection?
        next_command
      elsif @skill.for_opponent?
        select_enemy_selection
      else
        select_actor_selection
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: command_use_item
  #--------------------------------------------------------------------------
  def command_use_item
    @item = $data_items[@actor_command_window.current_ext]
    BattleManager.actor.input.set_item(@item.id)
    status_redraw_target(BattleManager.actor)
    if $imported["YEA-BattleEngine"]
      $game_temp.battle_aid = @item
      if @item.for_opponent?
        select_enemy_selection
      elsif @item.for_friend?
        select_actor_selection
      else
        next_command
        $game_temp.battle_aid = nil
      end
    else
      if !@item.need_selection?
        next_command
      elsif @item.for_opponent?
        select_enemy_selection
      else
        select_actor_selection
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # alias method: on_actor_ok
  #--------------------------------------------------------------------------
  alias scene_battle_on_actor_ok_bcl on_actor_ok
  def on_actor_ok
    scene_battle_on_actor_ok_bcl
    return if !@confirm_command_window.nil? && @confirm_command_window.visible
    @actor_command_window.show
  end
  
  #--------------------------------------------------------------------------
  # alias method: on_actor_cancel
  #--------------------------------------------------------------------------
  alias scene_battle_on_actor_cancel_bcl on_actor_cancel
  def on_actor_cancel
    scene_battle_on_actor_cancel_bcl
    case @actor_command_window.current_symbol
    when :use_skill, :use_item
      @help_window.hide
      @status_window.show
      @actor_command_window.activate
      status_redraw_target(BattleManager.actor)
    end
  end
  
  #--------------------------------------------------------------------------
  # alias method: on_enemy_ok
  #--------------------------------------------------------------------------
  alias scene_battle_on_enemy_ok_bcl on_enemy_ok
  def on_enemy_ok
    scene_battle_on_enemy_ok_bcl
    return if !@confirm_command_window.nil? && @confirm_command_window.visible
    @actor_command_window.show
  end
  
  #--------------------------------------------------------------------------
  # alias method: on_enemy_cancel
  #--------------------------------------------------------------------------
  alias scene_battle_on_enemy_cancel_bcl on_enemy_cancel
  def on_enemy_cancel
    scene_battle_on_enemy_cancel_bcl
    case @actor_command_window.current_symbol
    when :use_skill, :use_item
      @help_window.hide
      @status_window.show
      @actor_command_window.activate
      status_redraw_target(BattleManager.actor)
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: status_redraw_target
  #--------------------------------------------------------------------------
  def status_redraw_target(target)
    return unless target.actor?
    @status_window.draw_item($game_party.battle_members.index(target))
  end
  
  #--------------------------------------------------------------------------
  # new method: create_confirm_command_window
  #--------------------------------------------------------------------------
  def create_confirm_command_window
    return unless YEA::BATTLE_COMMANDS::USE_CONFIRM_WINDOW
    @confirm_command_window = Window_ConfirmCommand.new
    @confirm_command_window.viewport = @info_viewport
    @confirm_command_window.set_handler(:execute, method(:command_execute))
    @confirm_command_window.set_handler(:cancel, method(:on_confirm_cancel))
    @confirm_command_window.set_handler(:dir4, method(:on_confirm_cancel))
    @confirm_command_window.unselect
    @confirm_command_window.x = Graphics.width
    process_custom_confirm_commands
    process_confirm_compatibility_commands
  end
  
  #--------------------------------------------------------------------------
  # new method: process_custom_confirm_commands
  #--------------------------------------------------------------------------
  def process_custom_confirm_commands
    for command in YEA::BATTLE_COMMANDS::CONFIRM_COMMANDS
      next unless YEA::BATTLE_COMMANDS::CUSTOM_CONFIRM_COMMANDS.include?(command)
      called_method = YEA::BATTLE_COMMANDS::CUSTOM_CONFIRM_COMMANDS[command][3]
      @party_command_window.set_handler(command, method(called_method))
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: process_confirm_compatibility_commands
  #--------------------------------------------------------------------------
  def process_confirm_compatibility_commands
    #---
    if $imported["YEA-CombatLogDisplay"]
      @confirm_command_window.set_handler(:combatlog, method(:open_combatlog))
    end
    #---
  end
  
  #--------------------------------------------------------------------------
  # new method: start_confirm_command_selection
  #--------------------------------------------------------------------------
  def start_confirm_command_selection
    if $imported["YEA-BattleEngine"]
      @status_window.show
      redraw_current_status
      @status_aid_window.hide
    end
    @status_window.unselect
    @actor_command_window.hide
    @confirm_command_window.setup
  end
  
  #--------------------------------------------------------------------------
  # new method: on_confirm_cancel
  #--------------------------------------------------------------------------
  def on_confirm_cancel
    @confirm_command_window.hide unless @confirm_command_window.nil?
    @actor_command_window.show
    @actor_command_window.setup(BattleManager.actor)
    @status_window.select(BattleManager.actor.index)
    prior_command unless BattleManager.actor.inputable?
  end
  
  #--------------------------------------------------------------------------
  # alias method: next_command
  #--------------------------------------------------------------------------
  alias scene_battle_next_command_bcl next_command
  def next_command
    if prompt_next_actor?
      scene_battle_next_command_bcl
    elsif YEA::BATTLE_COMMANDS::USE_CONFIRM_WINDOW
      start_confirm_command_selection
    else
      turn_start
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: prompt_next_actor?
  #--------------------------------------------------------------------------
  def prompt_next_actor?
    index = @status_window.index
    last_index = $game_party.battle_members.size - 1
    for member in $game_party.battle_members.reverse
      break if member.inputable?
      last_index -= 1
    end
    if index >= last_index
      actor = $game_party.battle_members[index]
      return true if prompt_ftb_action?(actor)
      return true if actor.next_command_valid?
      return false if YEA::BATTLE_COMMANDS::USE_CONFIRM_WINDOW
    end
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: prompt_ftb_action?
  #--------------------------------------------------------------------------
  def prompt_ftb_action?(actor)
    return false unless $imported["YEA-BattleEngine"]
    return false unless $imported["YEA-BattleSystem-FTB"]
    return false unless BattleManager.btype?(:ftb)
    return actor.current_action.valid?
  end
  
  #--------------------------------------------------------------------------
  # new method: command_execute
  #--------------------------------------------------------------------------
  def command_execute
    @confirm_command_window.close
    turn_start
  end
  
  #--------------------------------------------------------------------------
  # new method: command_name1
  #--------------------------------------------------------------------------
  def command_name1
    # Do nothing.
  end
  
  #--------------------------------------------------------------------------
  # new method: command_name2
  #--------------------------------------------------------------------------
  def command_name2
    # Do nothing.
  end
  
end # Scene_Battle
#==============================================================================
# 
# ▼ End of File
# 
#==============================================================================
 ссылку на такентай щас дам
Социальные закладки