查看: 1402|回复: 1

[已经过期] Yanfly的装备拓展系统怎么用

[复制链接]
梦石
0
星屑
1065
在线时间
235 小时
注册时间
2016-2-3
回帖
140

开拓者

发表于 2016-3-19 17:40:28 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
我找了一个Yanfly的装备拓展系统,可是我看不懂英文说明(本坑现于初二)....
哪位大神帮我翻译一下?
[pre lang="ruby"]#==============================================================================

#
# ▼ Yanfly Engine Ace - Ace Equip Engine v1.05

# -- Last Updated: 2012.01.22

# -- Level: Normal, Hard

# -- Requires: n/a

#
#==============================================================================


$imported = {} if $imported.nil?

$imported["YEA-AceEquipEngine"] = true


#==============================================================================

# ▼ Updates

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# 2012.01.22 - Bug Fixed: <equip slot> notetags updated to factor in spaces.

# 2012.01.05 - Compatibility Update: Equip Dynamic Stats

# 2011.12.30 - Bug Fixed: Stats didn't update.

# 2011.12.23 - Script efficiency optimized.

# 2011.12.18 - Script efficiency optimized.

# 2011.12.13 - Started Script and Finished.

#
#==============================================================================

# ▼ Introduction

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# The default equipment system in RPG Maker VX is the standard equipment system

# seen in all of the previous iterations, which consists of weapon, shield,

# headgear, bodygear, and accessory. To break free of that norm, this script

# allows users access to giving actors and/or classes dynamic equipment setups

# (including having multiples of the same categories). In addition to having

# different equip slot setups, newer equipment types can be made to allow for

# more diversity in armour types.

#
#==============================================================================

# ▼ 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.

# -----------------------------------------------------------------------------

# <equip slots>

#  string

#  string

# </equip slots>

# This sets the actor's default slots to whatever is listed in between the two

# notetags. An actor's custom equip slots will take priority over a class's

# custom equip slots, which will take priority over the default equip slots.

# Replace "string" with the proper equipment type name or when in doubt, use

# "equip type: x" with x as the equipment type.

#
# <starting gear: x>

# <starting gear: x, x>

# Adds armour x to the actor's list of starting gear. This is used primarily

# for the newer pieces of gear that can't be added through the starting set of

# equipment through the RPG Maker VX Ace editor by default. Insert multiple of

# these notetags to add more pieces of starting gear if so desired.

#
# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.

#
# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.

#
# -----------------------------------------------------------------------------

# Class Notetags - These notetags go in the class notebox in the database.

# -----------------------------------------------------------------------------

# <equip slots>

#  string

#  string

# </equip slots>

# This sets the class's default slots to whatever is listed in between the two

# notetags. An actor's custom equip slots will take priority over a class's

# custom equip slots, which will take priority over the default equip slots.

# Replace "string" with the proper equipment type name or when in doubt, use

# "equip type: x" with x as the equipment type.

#
# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.

#
# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.

#
# -----------------------------------------------------------------------------

# Weapon Notetags - These notetags go in the weapons notebox in the database.

# -----------------------------------------------------------------------------

# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.

#
# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.

#
# -----------------------------------------------------------------------------

# Armour Notetags - These notetags go in the armour notebox in the database.

# -----------------------------------------------------------------------------

# <equip type: x>

# <equip type: string>

# For the newer equip types, replace x or string with the equip type ID or the

# name of the equip type respectively. This will set that armour to that

# particular equip type.

#
# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.

#
# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.

#
# -----------------------------------------------------------------------------

# State Notetags - These notetags go in the states notebox in the database.

# -----------------------------------------------------------------------------

# <fixed equip: x>

# <fixed equip: x, x>

# This will fix the equip type x. Fixed equip slots mean that the equipment

# already on it are unable to be exchanged in or out by the player. This tag

# has been made so that equip types can be fixed for equip type 5 and above.

# Use multiple of these notetags to add more fixed equipment restrictions.

#
# <sealed equip: x>

# <sealed equip: x, x>

# This will seal the equip type x. Sealed equip slots mean that no equipment

# can be equipped onto that equip type slot. This tag has been made so that

# equip types can be sealed for equip type 5 and above. Use multiple of these

# notetags to add more sealed equipment restrictions.

#
#==============================================================================

# ▼ 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.

#
#==============================================================================


module YEA

  module EQUIP

   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - General Equip Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This adjusts the default equip configuration. While actors can have their

    # own unique equipment configurations, it's recommended to not change too

    # much as things get really hairy when it comes to proper eventing.

    #
    # ID   Equip Type

    # ---  ------------

    #  0   Weapon

    #  1   Shield

    #  2   Headgear

    #  3   Bodygear

    #  4   Accessory

    #
    # Whatever you set the below slots to, the dual wield setup will be exactly

    # identical except that the second slot will be changed to a weapon (0).

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Adjust this array to set the default slots used for all of your actors

    # and classes if they do not have a custom equipment slot setup.

    DEFAULT_BASE_SLOTS = [ 0, 1, 2, 3, 9, 5,7,6,8,4,4]

   
    # This hash adjusts the new equip types (past 4+). Adjust them to match

    # their names properly. You can choose to allow certain types of equipment

    # be removable or not, or whether or not optimize will affect them.

    TYPES ={

    # TypeID => ["Type Name", Removable?, Optimize?],

           0 => [   "武器",      false,      true],

           1 => [   "盾",       true,      true],

           2 => [ "头盔",       true,      true],

           3 => [ "防具",       true,      true],

           4 => ["贵重物品",       true,     false],

          5 => [ "护腕",       true,      false],

           6 => [ "项链",       true,      true],

           7 => [ "鞋子",       true,      true],

           8 => [ "戒指",       true,      true],
           
           9 => [ "属性",       true,      true],

    } # Do not remove this.

   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Equip Command List -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Here, you can adjust the order at which the commands appear (or even

    # remove commands as you see fit). Here's a list of which does what:

    #
    # -------------------------------------------------------------------------

    # :command         Description

    # -------------------------------------------------------------------------

    # :equip           Activates the manual equip window. Default.

    # :optimize        Optimizes equipment for the actor. Default.

    # :clear           Clears all equipment from the actor. Default

    #
    # 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 Equip

    # Command window in the Equip Scene.

    COMMAND_LIST =[

      :equip,

      :optimize,

      :clear,

    # :custom1,

    # :custom2,

    ] # Do not remove this.

   
    #--------------------------------------------------------------------------

    # - Equip Custom Commands -

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    # For those who use scripts to that may produce unique effects for

    # equipping, use this hash to manage the custom commands for the Equip

    # 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_EQUIP_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.

   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Misc Window Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This section adjusts the minor visuals that you see inside of the newly

    # organized Equip Scene. Adjust the settings as you see fit.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # This sets the font size used for the status window in the lower right

    # corner of the screen (which shows stats and comparisons).

    STATUS_FONT_SIZE = 20

   
    # This sets the remove equip command in the item window.

    REMOVE_EQUIP_ICON = 185

    REMOVE_EQUIP_TEXT = "换下"

   
    # This sets the no-equipment text in the slot window.

    NOTHING_ICON = 185

    NOTHING_TEXT = ""

   
   
  end # EQUIP

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

   
    EQUIP_SLOTS_ON  = /<(?:EQUIP_SLOTS|equip slots)>/i

    EQUIP_SLOTS_OFF = /<\/(?:EQUIP_SLOTS|equip slots)>/i

   
    EQUIP_TYPE_INT = /<(?:EQUIP_TYPE|equip type):[ ]*(\d+)>/i

    EQUIP_TYPE_STR = /<(?:EQUIP_TYPE|equip type):[ ]*(.*)>/i

   
    STARTING_GEAR = /<(?:STARTING_GEAR|starting gear):[ ](\d+(?:\s*,\s*\d+)*)>/i

   
    FIXED_EQUIP = /<(?:FIXED_EQUIP|fixed equip):[ ](\d+(?:\s*,\s*\d+)*)>/i

    SEALED_EQUIP = /<(?:SEALED_EQUIP|sealed equip):[ ](\d+(?:\s*,\s*\d+)*)>/i

   
  end # BASEITEM

  end # REGEXP

end # YEA


#==============================================================================

# ■ Vocab

#==============================================================================


module Vocab

  

  #--------------------------------------------------------------------------

  # overwrite method: self.etype

  #--------------------------------------------------------------------------

  def self.etype(etype)

    return $data_system.terms.etypes[etype] if [0,1,2,3,4].include?(etype)

    return YEA::EQUIP::TYPES[etype][0] if YEA::EQUIP::TYPES.include?(etype)

    return ""

  end

  

end # Vocab


#==============================================================================

# ■ Icon

#==============================================================================


module Icon

  

  #--------------------------------------------------------------------------

  # self.remove_equip

  #--------------------------------------------------------------------------

  def self.remove_equip; return YEA::EQUIP::REMOVE_EQUIP_ICON; end

  

  #--------------------------------------------------------------------------

  # self.nothing_equip

  #--------------------------------------------------------------------------

  def self.nothing_equip; return YEA::EQUIP::NOTHING_ICON; end

   
end # Icon


#==============================================================================

# ■ Numeric

#==============================================================================


class Numeric

  

  #--------------------------------------------------------------------------

  # new method: group_digits

  #--------------------------------------------------------------------------

  unless $imported["YEA-CoreEngine"]

  def group; return self.to_s; end

  end # $imported["YEA-CoreEngine"]

   
end # Numeric


#==============================================================================

# ■ DataManager

#==============================================================================


module DataManager

  

  #--------------------------------------------------------------------------

  # alias method: load_database

  #--------------------------------------------------------------------------

  class <<self; alias load_database_aee load_database; end

  def self.load_database

    load_database_aee

    load_notetags_aee

  end

  

  #--------------------------------------------------------------------------

  # new method: load_notetags_aee

  #--------------------------------------------------------------------------

  def self.load_notetags_aee

    groups = [$data_actors, $data_classes, $data_weapons, $data_armors,

      $data_states]

    for group in groups

      for obj in group

        next if obj.nil?

        obj.load_notetags_aee

      end

    end

  end

  

end # DataManager


#==============================================================================

# ■ RPG::BaseItem

#==============================================================================


class RPG::BaseItem

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :base_equip_slots

  attr_accessor :fixed_equip_type

  attr_accessor :sealed_equip_type

  attr_accessor :extra_starting_equips

  

  #--------------------------------------------------------------------------

  # common cache: load_notetags_aee

  #--------------------------------------------------------------------------

  def load_notetags_aee

    @base_equip_slots = []

    @equip_slots_on = false

    @fixed_equip_type = []

    @sealed_equip_type = []

    @extra_starting_equips = []

    #---

    self.note.split(/[\r\n]+/).each { |line|

      case line

      #---

      when YEA::REGEXP::BASEITEM::EQUIP_SLOTS_ON

        next unless self.is_a?(RPG::Actor) ||self.is_a?(RPG::Class)

        @equip_slots_on = true

      when YEA::REGEXP::BASEITEM::EQUIP_SLOTS_OFF

        next unless self.is_a?(RPG::Actor) ||self.is_a?(RPG::Class)

        @equip_slots_on = false

      #---

      when YEA::REGEXP::BASEITEM::STARTING_GEAR

        next unless self.is_a?(RPG::Actor)

        $1.scan(/\d+/).each { |num|
        @extra_starting_equips.push(num.to_i) if num.to_i > 0 }

      when YEA::REGEXP::BASEITEM::FIXED_EQUIP

        $1.scan(/\d+/).each { |num|
        @fixed_equip_type.push(num.to_i) if num.to_i > 0 }

      when YEA::REGEXP::BASEITEM::SEALED_EQUIP

        $1.scan(/\d+/).each { |num|
        @sealed_equip_type.push(num.to_i) if num.to_i > 0 }

      #---

      when YEA::REGEXP::BASEITEM::EQUIP_TYPE_INT

        next unless self.is_a?(RPG::Armor)

        @etype_id = [1, $1.to_i].max

      when YEA::REGEXP::BASEITEM::EQUIP_TYPE_STR

        next unless self.is_a?(RPG::Armor)

        for key in YEA::EQUIP::TYPES

          id = key[0]

          next if YEA::EQUIP::TYPES[id][0].upcase != $1.to_s.upcase

          @etype_id = [1, id].max

          break

        end

      #---

      else

        if @equip_slots_on

          case line.upcase

          when /EQUIP TYPE[ ](\d+)/i, /EQUIP TYPE:[ ](\d+)/i

            id = $1.to_i

            @base_equip_slots.push(id) if [0,1,2,3,4].include?(id)

            @base_equip_slots.push(id) if YEA::EQUIP::TYPES.include?(id)

          when /WEAPON/i

            @base_equip_slots.push(0)

          when /SHIELD/i

            @base_equip_slots.push(1)

          when /HEAD/i

            @base_equip_slots.push(2)

          when /BODY/i, /ARMOR/i, /ARMOUR/i

            @base_equip_slots.push(3)

          when /ETC/i, /OTHER/i, /ACCESSOR/i

            @base_equip_slots.push(4)

          else

            text = line.upcase.delete(" ")

            for key in YEA::EQUIP::TYPES

              id = key[0]

              next if YEA::EQUIP::TYPES[id][0].upcase.delete(" ")!= text

              @base_equip_slots.push(id)

              break

            end

          end

        end

      end

    } # self.note.split

    #---

    return unless self.is_a?(RPG::Class)

    if @base_equip_slots.empty?

      @base_equip_slots = YEA::EQUIP::DEFAULT_BASE_SLOTS.clone

    end

  end

  

end # RPG::BaseItem


#==============================================================================

# ■ Game_Temp

#==============================================================================


class Game_Temp

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :eds_actor

  attr_accessor :scene_equip_index

  attr_accessor :scene_equip_oy

  

end # Game_Temp


#==============================================================================

# ■ Game_BaseItem

#==============================================================================


class Game_BaseItem

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :item_id

  

end # Game_BaseItem


#==============================================================================

# ■ Game_BattlerBase

#==============================================================================


class Game_BattlerBase

  

  #--------------------------------------------------------------------------

  # alias method: equip_type_fixed?

  #--------------------------------------------------------------------------

  alias game_battlerbase_equip_type_fixed_aee equip_type_fixed?

  def equip_type_fixed?(etype_id)

    return true if fixed_etypes.include?(etype_id) if actor?

    return game_battlerbase_equip_type_fixed_aee(etype_id)

  end

  

  #--------------------------------------------------------------------------

  # alias method: equip_type_sealed?

  #--------------------------------------------------------------------------

  alias game_battlerbase_equip_type_sealed_aee equip_type_sealed?

  def equip_type_sealed?(etype_id)

    return true if sealed_etypes.include?(etype_id) if actor?

    return game_battlerbase_equip_type_sealed_aee(etype_id)

  end

  

end # Game_BattlerBase


#==============================================================================

# ■ Game_Actor

#==============================================================================


class Game_Actor < Game_Battler

  

  #--------------------------------------------------------------------------

  # alias method: init_equips

  #--------------------------------------------------------------------------

  alias game_actor_init_equips_aee init_equips

  def init_equips(equips)

    game_actor_init_equips_aee(equips)

    equip_extra_starting_equips

  end

  

  #--------------------------------------------------------------------------

  # new method: equip_extra_starting_equips

  #--------------------------------------------------------------------------

  def equip_extra_starting_equips

    for equip_id in actor.extra_starting_equips

      armour = $data_armors[equip_id]

      next if armour.nil?

      etype_id = armour.etype_id

      next unless equip_slots.include?(etype_id)

      slot_id = empty_slot(etype_id)

      @equips[slot_id].set_equip(etype_id == 0, armour.id)

    end

    refresh

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: equip_slots

  #--------------------------------------------------------------------------

  def equip_slots

    return equip_slots_dual if dual_wield?

    return equip_slots_normal

  end

  

  #--------------------------------------------------------------------------

  # new method: equip_slots_normal

  #--------------------------------------------------------------------------

  def equip_slots_normal

    return self.actor.base_equip_slots if self.actor.base_equip_slots != []

    return self.class.base_equip_slots

  end

  

  #--------------------------------------------------------------------------

  # new method: equip_slots_dual

  #--------------------------------------------------------------------------

  def equip_slots_dual

    array = equip_slots_normal.clone

    array[1] = 0 if array.size >= 2

    return array

  end

  

  #--------------------------------------------------------------------------

  # new method: fixed_etypes

  #--------------------------------------------------------------------------

  def fixed_etypes

    array = []

    array |= self.actor.fixed_equip_type

    array |= self.class.fixed_equip_type

    for equip in equips

      next if equip.nil?

      array |= equip.fixed_equip_type

    end

    for state in states

      next if state.nil?

      array |= state.fixed_equip_type

    end

    return array

  end

  

  #--------------------------------------------------------------------------

  # new method: sealed_etypes

  #--------------------------------------------------------------------------

  def sealed_etypes

    array = []

    array |= self.actor.sealed_equip_type

    array |= self.class.sealed_equip_type

    for equip in equips

      next if equip.nil?

      array |= equip.sealed_equip_type

    end

    for state in states

      next if state.nil?

      array |= state.sealed_equip_type

    end

    return array

  end

  

  #--------------------------------------------------------------------------

  # alias method: change_equip

  #--------------------------------------------------------------------------

  alias game_actor_change_equip_aee change_equip

  def change_equip(slot_id, item)

    if item.nil? && !@optimize_clear

      etype_id = equip_slots[slot_id]

      return unless YEA::EQUIP::TYPES[etype_id][1]

    elsif item.nil? && @optimize_clear

      etype_id = equip_slots[slot_id]

      return unless YEA::EQUIP::TYPES[etype_id][2]

    end

    game_actor_change_equip_aee(slot_id, item)

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: optimize_equipments

  #--------------------------------------------------------------------------

  def optimize_equipments

    $game_temp.eds_actor = self

    @optimize_clear = true

    clear_equipments

    @optimize_clear = false

    equip_slots.size.times do |i|

      next if !equip_change_ok?(i)

      next unless can_optimize?(i)

      items = $game_party.equip_items.select do |item|

        item.etype_id == equip_slots &&

        equippable?(item) && item.performance >= 0

      end

      change_equip(i, items.max_by {|item| item.performance })

    end

    $game_temp.eds_actor = nil

  end

  

  #--------------------------------------------------------------------------

  # new method: can_optimize?

  #--------------------------------------------------------------------------

  def can_optimize?(slot_id)

    etype_id = equip_slots[slot_id]

    return YEA::EQUIP::TYPES[etype_id][2]

  end

  

end # Game_Actor


#==============================================================================

# ■ Game_Interpreter

#==============================================================================


class Game_Interpreter

  

  #--------------------------------------------------------------------------

  # overwrite method: change equip

  #--------------------------------------------------------------------------

  def command_319

    actor = $game_actors[@params[0]]

    return if actor.nil?

    if @params[1] == 0 && @params[2] != 0

      item = $data_weapons[@params[2]]

      return unless actor.equip_slots.include?(0)

      slot_id = actor.empty_slot(0)

    elsif @params[2] != 0

      item = $data_armors[@params[2]]

      return unless actor.equip_slots.include?(item.etype_id)

      slot_id = actor.empty_slot(item.etype_id)

    else

      slot_id = @params[1]

    end

    actor.change_equip_by_id(slot_id, @params[2])

  end

  

end # Game_Interpreter


#==============================================================================

# ■ Window_EquipStatus

#==============================================================================


class Window_EquipStatus < Window_Base

  

  #--------------------------------------------------------------------------

  # overwrite method: initialize

  #--------------------------------------------------------------------------

  def initialize(dx, dy)

    super(dx, dy, window_width, Graphics.height - dy)

    @actor = nil

    @temp_actor = nil

    refresh

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: window_width

  #--------------------------------------------------------------------------

  def window_width; return Graphics.width * 2 / 5; end

  

  #--------------------------------------------------------------------------

  # overwrite method: refresh

  #--------------------------------------------------------------------------

  def refresh

    contents.clear

    8.times {|i| draw_item(0, line_height * i, i) }

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: draw_item

  #--------------------------------------------------------------------------

  def draw_item(dx, dy, param_id)

    draw_background_colour(dx, dy)

    draw_param_name(dx + 4, dy, param_id)

    draw_current_param(dx + 4, dy, param_id) if @actor

    drx = (contents.width + 22) / 2

    draw_right_arrow(drx, dy)

    draw_new_param(drx + 22, dy, param_id) if @temp_actor

    reset_font_settings

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_background_colour

  #--------------------------------------------------------------------------

  def draw_background_colour(dx, dy)

    colour = Color.new(0, 0, 0, translucent_alpha/2)

    rect = Rect.new(dx+1, dy+1, contents.width - 2, line_height - 2)

    contents.fill_rect(rect, colour)

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: draw_param_name

  #--------------------------------------------------------------------------

  def draw_param_name(dx, dy, param_id)

    contents.font.size = YEA::EQUIP::STATUS_FONT_SIZE

    change_color(system_color)

    draw_text(dx, dy, contents.width, line_height, Vocab::param(param_id))

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: draw_current_param

  #--------------------------------------------------------------------------

  def draw_current_param(dx, dy, param_id)

    change_color(normal_color)

    dw = (contents.width + 22) / 2

    draw_text(0, dy, dw, line_height, @actor.param(param_id).group, 2)

    reset_font_settings

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: draw_new_param

  #--------------------------------------------------------------------------

  def draw_new_param(dx, dy, param_id)

    contents.font.size = YEA::EQUIP::STATUS_FONT_SIZE

    new_value = @temp_actor.param(param_id)

    change_color(param_change_color(new_value - @actor.param(param_id)))

    draw_text(0, dy, contents.width-4, line_height, new_value.group, 2)

    reset_font_settings

  end

  

end # Window_EquipStatus


#==============================================================================

# ■ Window_EquipCommand

#==============================================================================


class Window_EquipCommand < Window_HorzCommand

  

  #--------------------------------------------------------------------------

  # overwrite method: make_command_list

  #--------------------------------------------------------------------------

  def make_command_list

    for command in YEA::EQUIP::COMMAND_LIST

      case command

      when :equip

        add_command(Vocab::equip2, :equip)

      when :optimize

        add_command(Vocab::optimize, :optimize)

      when :clear

        add_command(Vocab::clear, :clear)

      else

        process_custom_command(command)

      end

    end

  end

  

  #--------------------------------------------------------------------------

  # process_ok

  #--------------------------------------------------------------------------

  def process_ok

    $game_temp.scene_equip_index = index

    $game_temp.scene_equip_oy = self.oy

    super

  end

  

  #--------------------------------------------------------------------------

  # new method: process_custom_command

  #--------------------------------------------------------------------------

  def process_custom_command(command)

    return unless YEA::EQUIP::CUSTOM_EQUIP_COMMANDS.include?(command)

    show = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][2]

    continue = show <= 0 ? true : $game_switches[show]

    return unless continue

    text = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][0]

    switch = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][1]

    enabled = switch <= 0 ? true : $game_switches[switch]

    add_command(text, command, enabled)

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: window_width

  #--------------------------------------------------------------------------

  def window_width; return 160; end

  

  #--------------------------------------------------------------------------

  # overwrite method: contents_width

  #--------------------------------------------------------------------------

  def contents_width; return width - standard_padding * 2; end

  

  #--------------------------------------------------------------------------

  # overwrite method: contents_height

  #--------------------------------------------------------------------------

  def contents_height

    ch = height - standard_padding * 2

    return [ch - ch % item_height, row_max * item_height].max

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: visible_line_number

  #--------------------------------------------------------------------------

  def visible_line_number; return 4; end

  

  #--------------------------------------------------------------------------

  # overwrite method: col_max

  #--------------------------------------------------------------------------

  def col_max; return 1; end

   
  #--------------------------------------------------------------------------

  # overwrite method: item_rect

  #--------------------------------------------------------------------------

  def item_rect(index)

    rect = Rect.new

    rect.width = item_width

    rect.height = item_height

    rect.x = index % col_max * (item_width + spacing)

    rect.y = index / col_max * item_height

    rect

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: ensure_cursor_visible

  #--------------------------------------------------------------------------

  def ensure_cursor_visible

    self.top_row = row if row < top_row

    self.bottom_row = row if row > bottom_row

  end

   
  #--------------------------------------------------------------------------

  # overwrite method: cursor_down

  #--------------------------------------------------------------------------

  def cursor_down(wrap = false)

    if index < item_max - col_max || (wrap && col_max == 1)

      select((index + col_max) % item_max)

    end

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: cursor_up

  #--------------------------------------------------------------------------

  def cursor_up(wrap = false)

    if index >= col_max || (wrap && col_max == 1)

      select((index - col_max + item_max) % item_max)

    end

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: process_pageup

  #--------------------------------------------------------------------------

  def process_pageup

    Sound.play_cursor

    Input.update

    deactivate

    call_handler(:pageup)

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: process_pagedown

  #--------------------------------------------------------------------------

  def process_pagedown

    Sound.play_cursor

    Input.update

    deactivate

    call_handler(:pagedown)

  end

  

end # Window_EquipCommand


#==============================================================================

# ■ Window_EquipSlot

#==============================================================================


class Window_EquipSlot < Window_Selectable

  

  #--------------------------------------------------------------------------

  # overwrite method: initialize

  #--------------------------------------------------------------------------

  def initialize(dx, dy, dw)

    super(dx, dy, dw, Graphics.height - dy)

    @actor = nil

    refresh

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: window_height

  #--------------------------------------------------------------------------

  def window_height; return self.height; end

  

  #--------------------------------------------------------------------------

  # overwrite method: visible_line_number

  #--------------------------------------------------------------------------

  def visible_line_number; return item_max; end

  

  #--------------------------------------------------------------------------

  # overwrite method: refresh

  #--------------------------------------------------------------------------

  def refresh

    create_contents

    super

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: draw_item

  #--------------------------------------------------------------------------

  def draw_item(index)

    return unless @actor

    rect = item_rect_for_text(index)

    change_color(system_color, enable?(index))

    draw_text(rect.x, rect.y, 92, line_height, slot_name(index))

    item = @actor.equips[index]

    dx = rect.x + 92

    dw = contents.width - dx - 24

    if item.nil?

      draw_nothing_equip(dx, rect.y, false, dw)

    else

      draw_item_name(item, dx, rect.y, enable?(index), dw)

    end

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_nothing_equip

  #--------------------------------------------------------------------------

  def draw_nothing_equip(dx, dy, enabled, dw)

    change_color(normal_color, enabled)

    draw_icon(Icon.nothing_equip, dx, dy, enabled)

    text = YEA::EQUIP::NOTHING_TEXT

    draw_text(dx + 24, dy, dw - 24, line_height, text)

  end

  

end # Window_EquipSlot


#==============================================================================

# ■ Window_EquipItem

#==============================================================================


class Window_EquipItem < Window_ItemList

  

  #--------------------------------------------------------------------------

  # overwrite method: col_max

  #--------------------------------------------------------------------------

  def col_max; return 1; end

  

  #--------------------------------------------------------------------------

  # overwrite method: slot_id=

  #--------------------------------------------------------------------------

  def slot_id=(slot_id)

    return if @slot_id == slot_id

    @slot_id = slot_id

    @last_item = nil

    self.oy = 0

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: draw_item

  #--------------------------------------------------------------------------

  def draw_item(index)

    item = @data[index]

    rect = item_rect(index)

    rect.width -= 4

    if item.nil?

      draw_remove_equip(rect)

      return

    end

    dw = contents.width - rect.x - 24

    draw_item_name(item, rect.x, rect.y, enable?(item), dw)

    draw_item_number(rect, item)

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_remove_equip

  #--------------------------------------------------------------------------

  def draw_remove_equip(rect)

    draw_icon(Icon.remove_equip, rect.x, rect.y)

    text = YEA::EQUIP::REMOVE_EQUIP_TEXT

    rect.x += 24

    rect.width -= 24

    draw_text(rect, text)

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: include?

  #--------------------------------------------------------------------------

  def include?(item)

    if item.nil? && !@actor.nil?

      etype_id = @actor.equip_slots[@slot_id]

      return YEA::EQUIP::TYPES[etype_id][1]

    end

    return true if item.nil?

    return false unless item.is_a?(RPG::EquipItem)

    return false if @slot_id < 0

    return false if item.etype_id != @actor.equip_slots[@slot_id]

    return @actor.equippable?(item)

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: enable?

  #--------------------------------------------------------------------------

  def enable?(item)

    if item.nil? && !@actor.nil?

      etype_id = @actor.equip_slots[@slot_id]

      return YEA::EQUIP::TYPES[etype_id][1]

    end

    return @actor.equippable?(item)

  end

  

  #--------------------------------------------------------------------------

  # new method: show

  #--------------------------------------------------------------------------

  def show

    @last_item = 0

    update_help

    super

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: update_help

  #--------------------------------------------------------------------------

  def update_help

    super

    return if @actor.nil?

    return if @status_window.nil?

    return if @last_item == item

    @last_item = item

    temp_actor = Marshal.load(Marshal.dump(@actor))

    temp_actor.force_change_equip(@slot_id, item)

    @status_window.set_temp_actor(temp_actor)

  end

  

end # Window_EquipItem


#==============================================================================

# ■ Window_EquipActor

#==============================================================================


class Window_EquipActor < Window_Base

  

  #--------------------------------------------------------------------------

  # initialize

  #--------------------------------------------------------------------------

  def initialize(dx, dy)

    super(dx, dy, window_width, fitting_height(4))

    @actor = nil

  end

  

  #--------------------------------------------------------------------------

  # window_width

  #--------------------------------------------------------------------------

  def window_width; return Graphics.width - 160; end

  

  #--------------------------------------------------------------------------

  # actor=

  #--------------------------------------------------------------------------

  def actor=(actor)

    return if @actor == actor

    @actor = actor

    refresh

  end

  

  #--------------------------------------------------------------------------

  # refresh

  #--------------------------------------------------------------------------

  def refresh

    contents.clear

    return unless @actor

    draw_actor_face(@actor, 0, 0)

    draw_actor_simple_status(@actor, 108, line_height / 2)

  end

  

end # Window_EquipActor


#==============================================================================

# ■ Scene_Equip

#==============================================================================


class Scene_Equip < Scene_MenuBase

  

  #--------------------------------------------------------------------------

  # overwrite method: create_status_window

  #--------------------------------------------------------------------------

  def create_status_window

    wx = Graphics.width - (Graphics.width * 2 / 5)

    wy = @help_window.height + 120

    @status_window = Window_EquipStatus.new(wx, wy)

    @status_window.viewport = @viewport

    @status_window.actor = @actor

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: create_command_window

  #--------------------------------------------------------------------------

  def create_command_window

     

    wx = 0

    wy = @help_window.height

    ww = 160

    @command_window = Window_EquipCommand.new(wx, wy, ww)

    @command_window.viewport = @viewport

    @command_window.help_window = @help_window

    if !$game_temp.scene_equip_index.nil?

      @command_window.select($game_temp.scene_equip_index)

      @command_window.oy = $game_temp.scene_equip_oy

    end

    $game_temp.scene_equip_index = nil

    $game_temp.scene_equip_oy = nil

    @command_window.set_handler(:equip,    method(:command_equip))

    @command_window.set_handler(:optimize, method(:command_optimize))

    @command_window.set_handler(:clear,    method(:command_clear))

    @command_window.set_handler(:cancel,   method(:return_scene))

    @command_window.set_handler(:pagedown, method(:next_actor))

    @command_window.set_handler(:pageup,   method(:prev_actor))

    process_custom_equip_commands

    create_actor_window

  end

  

  #--------------------------------------------------------------------------

  # new method: create_actor_window

  #--------------------------------------------------------------------------

  def create_actor_window

    wy = @help_window.height

    @actor_window = Window_EquipActor.new(@command_window.width, wy)

    @actor_window.viewport = @viewport

    @actor_window.actor = @actor

  end

  

  #--------------------------------------------------------------------------

  # new method: process_custom_equip_commands

  #--------------------------------------------------------------------------

  def process_custom_equip_commands

    for command in YEA::EQUIP::COMMAND_LIST

      next unless YEA::EQUIP::CUSTOM_EQUIP_COMMANDS.include?(command)

      called_method = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][3]

      @command_window.set_handler(command, method(called_method))

    end

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: create_slot_window

  #--------------------------------------------------------------------------

  def create_slot_window

    wx = 0

    wy = @command_window.y + @command_window.height

    ww = Graphics.width - @status_window.width

    @slot_window = Window_EquipSlot.new(wx, wy, ww)

    @slot_window.viewport = @viewport

    @slot_window.help_window = @help_window

    @slot_window.status_window = @status_window

    @slot_window.actor = @actor

    @slot_window.set_handler(:ok,       method(:on_slot_ok))

    @slot_window.set_handler(:cancel,   method(:on_slot_cancel))

  end

  

  #--------------------------------------------------------------------------

  # overwrite method: create_item_window

  #--------------------------------------------------------------------------

  def create_item_window

    wx = @slot_window.x

    wy = @slot_window.y

    ww = @slot_window.width

    wh = @slot_window.height

    @item_window = Window_EquipItem.new(wx, wy, ww, wh)

    @item_window.viewport = @viewport

    @item_window.help_window = @help_window

    @item_window.status_window = @status_window

    @item_window.actor = @actor

    @item_window.set_handler(:ok,     method(:on_item_ok))

    @item_window.set_handler(:cancel, method(:on_item_cancel))

    @slot_window.item_window = @item_window

    @item_window.hide

  end

  

  #--------------------------------------------------------------------------

  # alias method: command_optimize

  #--------------------------------------------------------------------------

  alias scene_equip_command_optimize_aee command_optimize

  def command_optimize

    scene_equip_command_optimize_aee

    @actor_window.refresh

  end

  

  #--------------------------------------------------------------------------

  # alias method: command_clear

  #--------------------------------------------------------------------------

  alias scene_equip_command_clear_aee command_clear

  def command_clear

    scene_equip_command_clear_aee

    @actor_window.refresh

  end

  

  #--------------------------------------------------------------------------

  # alias method: on_slot_ok

  #--------------------------------------------------------------------------

  alias scene_equip_on_slot_ok_aee on_slot_ok

  def on_slot_ok

    scene_equip_on_slot_ok_aee

    @slot_window.hide

    @item_window.refresh

    @item_window.show

  end

  

  #--------------------------------------------------------------------------

  # alias method: on_item_ok

  #--------------------------------------------------------------------------

  alias scene_equip_on_item_ok_aee on_item_ok

  def on_item_ok

    scene_equip_on_item_ok_aee

    @actor_window.refresh

    @slot_window.show

    @item_window.hide

  end

  

  #--------------------------------------------------------------------------

  # alias method: on_item_cancel

  #--------------------------------------------------------------------------

  alias scene_equip_on_item_cancel_aee on_item_cancel

  def on_item_cancel

    scene_equip_on_item_cancel_aee

    @slot_window.show

    @item_window.hide

  end

  

  #--------------------------------------------------------------------------

  # alias method: on_actor_change

  #--------------------------------------------------------------------------

  alias scene_equip_on_actor_change_aee on_actor_change

  def on_actor_change

    scene_equip_on_actor_change_aee

    @actor_window.actor = @actor

  end

  

  #--------------------------------------------------------------------------

  # new method: command_name1

  #--------------------------------------------------------------------------

  def command_name1

    # Do nothing.

  end

  

  #--------------------------------------------------------------------------

  # new method: command_name2

  #--------------------------------------------------------------------------

  def command_name2

    # Do nothing.

  end

  

end # Scene_Equip


#==============================================================================

#
# ▼ End of File

#
#==============================================================================[/pre]

点评

英文直接机翻不行吗。。。按照格式写在备注里<> バァバァ</>  发表于 2016-3-20 08:57
究极半吊子
《重生学校》同人作:https://rpg.blue/thread-493882-1-1.html
梦石
0
星屑
1065
在线时间
235 小时
注册时间
2016-2-3
回帖
140

开拓者

 楼主| 发表于 2016-3-20 09:38:24 | 显示全部楼层
你的回答好高深,听不懂...
究极半吊子
《重生学校》同人作:https://rpg.blue/thread-493882-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部