#============================================================================== # # ▼ Yanfly Engine Ace - Ace Equip Engine v1.06 # -- Last Updated: 2014.05.01 # -- Level: Normal, Hard # -- Requires: n/a # #============================================================================== $imported = {} if $imported.nil? $imported["YEA-AceEquipEngine"] = true #============================================================================== # ▼ Updates # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 2014.05.01 - Bug Fixed: Refresh Equip Item List when change slot. # 2012.02.02 - Bug Fixed: Crash when changing classes to different equip slots. # 2012.01.22 - Bug Fixed: 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. # ----------------------------------------------------------------------------- # # string # string # # 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. # # # # 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. # # # # 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. # # # # 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. # ----------------------------------------------------------------------------- # # string # string # # 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. # # # # 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. # # # # 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. # ----------------------------------------------------------------------------- # # # 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. # # # # 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. # ----------------------------------------------------------------------------- # # # 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. # # # # 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. # # # # 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. # ----------------------------------------------------------------------------- # # # 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. # # # # 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, 5, 6, 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 => [ "Weapon", false, true], 1 => [ "Shield", true, true], 2 => [ "Headgear", true, true], 3 => [ "Bodygear", true, true], 4 => ["Accessory", true, false], 5 => [ "Cloak", true, true], 6 => [ "Necklace", 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 < 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 @equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil? 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[i] && 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 #-------------------------------------------------------------------------- # alias method: force_change_equip #-------------------------------------------------------------------------- alias game_actor_force_change_equip_aee force_change_equip def force_change_equip(slot_id, item) @equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil? game_actor_force_change_equip_aee(slot_id, item) end #-------------------------------------------------------------------------- # alias method: weapons #-------------------------------------------------------------------------- alias game_actor_weapons_aee weapons def weapons anti_crash_equips return game_actor_weapons_aee end #-------------------------------------------------------------------------- # alias method: armors #-------------------------------------------------------------------------- alias game_actor_armors_aee armors def armors anti_crash_equips return game_actor_armors_aee end #-------------------------------------------------------------------------- # alias method: equips #-------------------------------------------------------------------------- alias game_actor_equips_aee equips def equips anti_crash_equips return game_actor_equips_aee end #-------------------------------------------------------------------------- # new method: equips #-------------------------------------------------------------------------- def anti_crash_equips for i in 0...@equips.size next unless @equips[i].nil? @equips[i] = Game_BaseItem.new end 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 refresh 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 # #==============================================================================