#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ◆ Equipment Extension - KGC_EquipExtension ◆ VX ◆ #_/ ◇ Last Update: 2008/09/06 ◇ #_/ ◆ Translated and Extended Updates by Mr. Anonymous ◆ #_/ ◆ KGC Site: ◆ #_/ ◆ http://ytomy.sakura.ne.jp/ ◆ #_/ ◆ Translator's Blog: ◆ #_/ ◆ http://mraprojects.wordpress.com ◆ #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ This script has two functions equipment-related functions. #_/ The first function is the ability to create moire 'slots' for equipment, #_/ such as separating Boots and Gauntlets from mere 'accessories'. #_/ It is possible to also create additional equipment slots. See the customize #_/ block for more details. #_/ #_/ The second function is an "EP" (Equipment Point) System, which allows you #_/ to designate how many 'points' an item costs to successfully equip. A #_/ character's total EP expenditure is increased upon leveling up. #_/ This introduces more strategy-oriented character customization. #_/---------------------------------------------------------------------------- #_/ ◆ Instructions For Usage ◆ #_/ To make use of these functions, you must insert the tag into the desired #_/ item's "Notes" box located in the Armor tab of the database. For example, #_/ you want the Leather Boots to be bound to the "Legs" slot and cost #_/ 2 EP to equip. Insert , press enter, then add #_/ #_/ ◆ Tags ◆ #_/ #_/ Where EquipType = The name of the type of equipment. See EXTRA_EQUIP_KIND #_/ below. #_/ #_/ Where Amount = The desired amount of EP the item requires to equip. #_/ #_/ #_/ ◆ Script Commands ◆ #_/ These commands are used in "Script" function in the third page of event #_/ commands under "Advanced". #_/ #_/ * set_actor_equip_type(ActorID, [EquipType]) #_/ Allows you to manually specify an actor's equipment slots. a #_/ Ex. set_actor_equip_type(2, [0, 2, 3, 3, 3]) #_/ If "nil"(without quotations) is appointed to EquipType, the default #_/ EQUIP_TYPE (see below) is used. Trust me, it's useful! #_/ #_/ * change_actor_equipment(ActorID, equipslot_index, ItemID) #_/ Allows you to change the equipment of a specified actor. #_/ equipslot_index works by finding the equipment slot number, which is #_/ different from EQUIP_TYPE. Setting ItemID to 0 will remove the item. #_/ With the default setup, we see: #_/ 0=Weapon 1=Shield 2=Headgear 3=Armor 4=Accessory 5=Legs 6=Arms #_/ #_/ So, for an example: #_/ change_actor_equipment(1, 3, 15) #_/ Would change Ralph's(Actor01 in the database) armor to Chainmail(By default) #_/ #_/ #_/============================================================================ #_/ Installation: This script must be inserted below KCG_ExtendedEquipScene #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #=============================================================================# # ★ Customization ★ # #=============================================================================# module KGC module EquipExtension # ◆ Extended Equipment Classification Names ◆ # You may designate the names of additional equipment slots here. # Each time you designate a new equipment slot, it is assigned a number. # The first four equipment types (Shield, Helmet, Armor, and Accessory) are # given as 1, 2, 3, 4, respectively. Then the values below are assigned in # order. By default "Legs" and "Arms" would be 4 and 5. It is possible # to add additional slots. # Example: EXTRA_EQUIP_KIND = ["Legs", "Arms", "Skill Book"] EXTRA_EQUIP_KIND = ["Legs", "Arms"] # ◆ Equipment Placement ◆ # This allows you to arrange the equip slots as you see fit on the equipment # menu. Note the order listed below. # ** Equipment Classification Summary ** # 0.Shield 1.Headgear 2.Armor 3.Accessory 4. "Legs" 5."Arms" # Note that these can be changed as desired. By default, we've enabled two # accessory slots at the end, instead of one. If you plan on adding extra # equip slots, the category's cooresponding number must be inserted in the # brackets [] below. EQUIP_TYPE = [0, 1, 2, 5, 4, 3, 3] # ◆ EP (Equip Point) System ◆ # These settings are for the Equipment Point Limit System. # This toggle allows you to use the EP system if set to true. # If set to false, the EP system will be disabled. USE_EP_SYSTEM = true # VOCAB_EP appears once a character gains EP from battle. (Not Tested) VOCAB_EP = "EP" # VOCAB_EP_A appears above the EP gauge. VOCAB_EP_A = "EP" # This toggle allows you to display the EP gauge in the actor status window. SHOW_STATUS_EP = true # ◆ Default EP Cost ◆ # Allows you to change the default amount an item costs to equip in EP. # (When not otherwise specified.) DEFAULT_EP_COST = 1 # This toggle allows you to hide the EP cost of an item if its cost is 0. # true = hide # false = show HIDE_ZERO_EP_COST = true # ◆ EP Values & Level Gain ◆ # Maximum EP that can be spent equipping items. EP_MAX = 20 # Characters begin with this amount of EP. EP_MIN = 5 # ◆ EP Level Gain # This is the formula for the amount of EP gained upon leveling up. # The result of this formula is automatically converted to an integer. EP_CALC_EXP = "level * 0.3 + 4" # ◆ Individual Actor EP Level Gain PERSONAL_EP_CALC_EXP = [] # <- Do not alter or remove! # Below here, you may specify formulas for individual actors that dictates # the amount of EP they recieve upon leveling up. Like EP_CALC_EXP, the # result is converted to an integer. # Format: PERSONAL_EP_CALC_EXP[ActorID] = "Formula" # The format is just like EP_CALC_EXP, except each actor is defined after # PERSONAL_EP_CALC_EXP in brackets []. # Any actor not specified uses the EP_CALC_EXP formula. # Example: # PERSONAL_EP_CALC_EXP[1] = "level * 0.5 + 5" # ◆ Insert Personal EP Calculations Below Here ◆ PERSONAL_EP_CALC_EXP[1] = "level * 0.5 + 5" # ◆ Insert Personal EP Calculations Above Here ◆ # ◆ EP Gauge Colorization ◆ # Allows you to change the color of the EP gauges. # The color can also be determined by a red, green, and blue values. # Example: GAUGE_NORMAL_START_COLOR = Color.new(255, 0, 0) <- This is red. # This method of color assignment is much like Tint Screen event command. # # This affects the color of number that represents EP cost. EP_COST_COLOR = 23 # This is the fill color for the early phase of the guage. EP_GAUGE_START_COLOR = 28 # This is the fill color for the late phase of the guage. (When full) EP_GAUGE_END_COLOR = 29 end end #=============================================================================# # ★ End Customization ★ # #=============================================================================# #=================================================# # IMPORT # #=================================================# $imported = {} if $imported == nil $imported["EquipExtension"] = true #=================================================# module KGC::EquipExtension # Unless the EP system is used... unless USE_EP_SYSTEM SHOW_STATUS_EP = false HIDE_ZERO_EP_COST = true end #============================================================================== # □ KGC::EquipExtension::Regexp #============================================================================== # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # # Note Field Tag Strings # # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # # Whatever word(s) are after the separator ( | ) in the following lines are # what are used to determine what is searched for in the "Note" section of # an item or armor. # Regular expressions defined module Regexp # Base Item Module module BaseItem # EP Tag String EP_COST = //i # Item Type Tag String # Special note: I cannot get this tag to work right. If anyone knows how # this works or if it's bugged, please let me know. EQUIP_TYPE = /<(?:EQUIP_TYPE|equiptype)\s*(\d+(?:\s*,\s*\d+)*)>/ end # Base Armor Module module Armor # Armor Type Tag String EQUIP_KIND = /<(?:EQUIP_KIND|equipkind)\s*(.+)>/i end end end #=================================================# #============================================================================== # □ KGC::Commands #============================================================================== module KGC module Commands module_function #-------------------------------------------------------------------------- # ○ アクターの装備を修復 #-------------------------------------------------------------------------- def restore_equip (1...$data_actors.size).each { |i| actor = $game_actors[i] actor.restore_equip } end #-------------------------------------------------------------------------- # ○ アクターの装備タイプを設定 # actor_id : アクター ID # equip_type : 装備タイプ #-------------------------------------------------------------------------- def set_actor_equip_type(actor_id, equip_type = nil) actor = $game_actors[actor_id] return if actor == nil actor.equip_type = equip_type end #-------------------------------------------------------------------------- # ○ アクターの装備を変更 # actor_id : アクター ID # index : 装備部位 (0~) # item_id : 武器 or 防具 ID (0 で解除) #-------------------------------------------------------------------------- def change_actor_equipment(actor_id, index, item_id) actor = $game_actors[actor_id] return if actor == nil actor.change_equip_by_id(index, item_id) end end end class Game_Interpreter include KGC::Commands end #=================================================# #============================================================================== # ■ Vocab #============================================================================== module Vocab # EP def self.ep return KGC::EquipExtension::VOCAB_EP end # EP (略) def self.ep_a return KGC::EquipExtension::VOCAB_EP_A end # 拡張防具欄 def self.extra_armor(index) return KGC::EquipExtension::EXTRA_EQUIP_KIND[index] end end #=================================================# #============================================================================== # ■ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ○ 装備拡張のキャッシュを作成 #-------------------------------------------------------------------------- def create_equip_extension_cache @__ep_cost = KGC::EquipExtension::DEFAULT_EP_COST @__equip_type = [] self.note.split(/[\r\n]+/).each { |line| case line when KGC::EquipExtension::Regexp::BaseItem::EP_COST # 消費 EP @__ep_cost = $1.to_i when KGC::EquipExtension::Regexp::BaseItem::EQUIP_TYPE # 装備タイプ @__equip_type = [] $1.scan(/\d+/) { |num| @__equip_type << num.to_i } end } # EP 制を使用しない場合は消費 EP = 0 @__ep_cost = 0 unless KGC::EquipExtension::USE_EP_SYSTEM end #-------------------------------------------------------------------------- # ○ 消費 EP #-------------------------------------------------------------------------- def ep_cost create_equip_extension_cache if @__ep_cost == nil return @__ep_cost end #-------------------------------------------------------------------------- # ○ 装備タイプ #-------------------------------------------------------------------------- def equip_type create_equip_extension_cache if @__equip_type == nil return @__equip_type end end #=================================================# #============================================================================== # ■ RPG::Armor #============================================================================== class RPG::Armor < RPG::BaseItem #-------------------------------------------------------------------------- # ○ 装備拡張のキャッシュを作成 #-------------------------------------------------------------------------- def create_equip_extension_cache super @__kind = -1 self.note.split(/[\r\n]+/).each { |line| if line =~ KGC::EquipExtension::Regexp::Armor::EQUIP_KIND # 装備種別 e_index = KGC::EquipExtension::EXTRA_EQUIP_KIND.index($1) next if e_index == nil @__kind = e_index + 4 end } end unless $@ #-------------------------------------------------------------------------- # ○ 種別 #-------------------------------------------------------------------------- alias kind_KGC_EquipExtension kind def kind create_equip_extension_cache if @__kind == nil return (@__kind == -1 ? kind_KGC_EquipExtension : @__kind) end end end #=================================================# #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_writer :equip_type # 装備タイプ #-------------------------------------------------------------------------- # ● セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- alias setup_KGC_EquipExtension setup def setup(actor_id) actor = $data_actors[actor_id] @extra_armor_id = [] setup_KGC_EquipExtension(actor_id) restore_equip end #-------------------------------------------------------------------------- # ○ MaxEP 取得 #-------------------------------------------------------------------------- def maxep calc_exp = KGC::EquipExtension::PERSONAL_EP_CALC_EXP[self.id] if calc_exp == nil calc_exp = KGC::EquipExtension::EP_CALC_EXP end n = Integer(eval(calc_exp)) return [[n, ep_limit].min, KGC::EquipExtension::EP_MIN].max end #-------------------------------------------------------------------------- # ○ EP 取得 #-------------------------------------------------------------------------- def ep n = 0 equips.compact.each { |item| n += item.ep_cost } return [maxep - n, 0].max end #-------------------------------------------------------------------------- # ○ EP 上限取得 #-------------------------------------------------------------------------- def ep_limit return KGC::EquipExtension::EP_MAX end #-------------------------------------------------------------------------- # ○ 防具欄の取得 #-------------------------------------------------------------------------- def equip_type if @equip_type.is_a?(Array) return @equip_type else return KGC::EquipExtension::EQUIP_TYPE end end #-------------------------------------------------------------------------- # ○ 防具欄の数 #-------------------------------------------------------------------------- def armor_number return equip_type.size end #-------------------------------------------------------------------------- # ○ 拡張防具欄の数 #-------------------------------------------------------------------------- def extra_armor_number return [armor_number - 4, 0].max end #-------------------------------------------------------------------------- # ○ 防具 ID リストの取得 #-------------------------------------------------------------------------- def extra_armor_id @extra_armor_id = [] if @extra_armor_id == nil return @extra_armor_id end #-------------------------------------------------------------------------- # ● 防具オブジェクトの配列取得 #-------------------------------------------------------------------------- alias armors_KGC_EquipExtension armors def armors result = armors_KGC_EquipExtension # 5番目以降の防具を追加 extra_armor_number.times { |i| armor_id = extra_armor_id[i] result << (armor_id == nil ? nil : $data_armors[armor_id]) } return result end #-------------------------------------------------------------------------- # ● 装備の変更 (オブジェクトで指定) # equip_type : 装備部位 # item : 武器 or 防具 (nil なら装備解除) # test : テストフラグ (戦闘テスト、または装備画面での一時装備) #-------------------------------------------------------------------------- alias change_equip_KGC_EquipExtension change_equip def change_equip(equip_type, item, test = false) change_equip_KGC_EquipExtension(equip_type, item, test) # 拡張防具欄がある場合のみ if extra_armor_number > 0 item_id = item == nil ? 0 : item.id case equip_type when 5..armor_number # 拡張防具欄 @extra_armor_id = [] if @extra_armor_id == nil @extra_armor_id[equip_type - 5] = item_id end end restore_battle_skill if $imported["SkillCPSystem"] restore_passive_rev if $imported["PassiveSkill"] end #-------------------------------------------------------------------------- # ● 装備の破棄 # item : 破棄する武器 or 防具 # 武器/防具の増減で「装備品も含める」のとき使用する。 #-------------------------------------------------------------------------- alias discard_equip_KGC_EquipExtension discard_equip def discard_equip(item) last_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id] discard_equip_KGC_EquipExtension(item) curr_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id] return unless item.is_a?(RPG::Armor) # 防具でない return if last_armors != curr_armors # 既に破棄された # 拡張防具欄を検索 extra_armor_number.times { |i| if extra_armor_id[i] == item.id @extra_armor_id[i] = 0 break end } restore_battle_skill if $imported["SkillCPSystem"] restore_passive_rev if $imported["PassiveSkill"] end #-------------------------------------------------------------------------- # ● 職業 ID の変更 # class_id : 新しい職業 ID #-------------------------------------------------------------------------- alias class_id_equal_KGC_EquipExtension class_id= def class_id=(class_id) class_id_equal_KGC_EquipExtension(class_id) return if extra_armor_number == 0 # 拡張防具欄がない # 装備できない拡張防具を外す for i in 5..armor_number change_equip(i, nil) unless equippable?(equips[i]) end end #-------------------------------------------------------------------------- # ○ EP 条件クリア判定 # equip_type : 装備部位 # item : 武器 or 防具 #-------------------------------------------------------------------------- def ep_condition_clear?(equip_type, item) return true if item == nil # nil は解除なので OK curr_item = equips[equip_type] offset = (curr_item != nil ? curr_item.ep_cost : 0) return false if self.ep < (item.ep_cost - offset) # EP 不足 return true end #-------------------------------------------------------------------------- # ○ 装備を修復 #-------------------------------------------------------------------------- def restore_equip return if @__last_equip_type == equip_type # 以前の装備品・パラメータを退避 last_equips = equips last_hp = self.hp last_mp = self.mp if $imported["SkillCPSystem"] last_battle_skill_ids = battle_skill_ids.clone end # 全装備解除 last_equips.each_index { |i| change_equip(i, nil) } # 装備品・パラメータを復元 last_equips.compact.each { |item| equip_legal_slot(item) } self.hp = last_hp self.mp = last_mp if $imported["SkillCPSystem"] last_battle_skill_ids.each_with_index { |s, i| set_battle_skill(i, s) } end @__last_equip_type = equip_type.clone Graphics.frame_reset end #-------------------------------------------------------------------------- # ○ 装備品を正しい箇所にセット # item : 武器 or 防具 #-------------------------------------------------------------------------- def equip_legal_slot(item) if item.is_a?(RPG::Weapon) if @weapon_id == 0 # 武器 1 change_equip(0, item) elsif two_swords_style && @armor1_id == 0 # 武器 2 (二刀流の場合) change_equip(1, item) end elsif item.is_a?(RPG::Armor) if !two_swords_style && item.kind == equip_type[0] && @armor1_id == 0 # 先頭の防具 (二刀流でない場合) change_equip(1, item) else # 装備箇所リストを作成 list = [-1, @armor2_id, @armor3_id, @armor4_id] list += extra_armor_id # 正しい、かつ空いている箇所にセット equip_type.each_with_index { |kind, i| if kind == item.kind && list[i] == 0 change_equip(i + 1, item) break end } end end end end #=================================================# #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ○ EP の文字色を取得 # actor : アクター #-------------------------------------------------------------------------- def ep_color(actor) return knockout_color if actor.maxep > 0 && actor.ep == 0 return normal_color end #-------------------------------------------------------------------------- # ○ EP ゲージの色 1 の取得 #-------------------------------------------------------------------------- def ep_gauge_color1 color = KGC::EquipExtension::EP_GAUGE_START_COLOR return (color.is_a?(Integer) ? text_color(color) : color) end #-------------------------------------------------------------------------- # ○ EP ゲージの色 2 の取得 #-------------------------------------------------------------------------- def ep_gauge_color2 color = KGC::EquipExtension::EP_GAUGE_END_COLOR return (color.is_a?(Integer) ? text_color(color) : color) end #-------------------------------------------------------------------------- # ○ EP の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 幅 #-------------------------------------------------------------------------- def draw_actor_ep(actor, x, y, width = 120) draw_actor_ep_gauge(actor, x, y, width) self.contents.font.color = system_color self.contents.draw_text(x, y, 30, WLH, Vocab::ep_a) self.contents.font.color = ep_color(actor) xr = x + width if width < 120 self.contents.draw_text(xr - 40, y, 40, WLH, actor.ep, 2) else self.contents.draw_text(xr - 90, y, 40, WLH, actor.ep, 2) self.contents.font.color = normal_color self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2) self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxep, 2) end self.contents.font.color = normal_color end #-------------------------------------------------------------------------- # ○ EP ゲージの描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 幅 #-------------------------------------------------------------------------- def draw_actor_ep_gauge(actor, x, y, width = 120) gw = width * actor.ep / [actor.maxep, 1].max gc1 = ep_gauge_color1 gc2 = ep_gauge_color2 self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color) self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2) end #-------------------------------------------------------------------------- # ○ 消費 EP の描画 # item : 武器 or 防具 # rect : 描画する領域 # enabled : 許可状態 #-------------------------------------------------------------------------- def draw_equipment_ep_cost(item, rect, enabled = true) return if item == nil # 消費 EP 0 を表示しない場合 return if KGC::EquipExtension::HIDE_ZERO_EP_COST && item.ep_cost == 0 color = KGC::EquipExtension::EP_COST_COLOR self.contents.font.color = (color.is_a?(Integer) ? text_color(color) : color) self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(rect, item.ep_cost, 2) end end #=================================================# #============================================================================== # ■ Window_Equip #============================================================================== class Window_Equip < Window_Selectable #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @data = @actor.equips.clone @item_max = [@data.size, @actor.armor_number + 1].min create_contents # 装備箇所を描画 self.contents.font.color = system_color if @actor.two_swords_style self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon1) self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2) else self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon) name = armor_slot_name(@actor.equip_type[0]) self.contents.draw_text(4, WLH * 1, 92, WLH, name) end for i in 1...@actor.armor_number name = armor_slot_name(@actor.equip_type[i]) self.contents.draw_text(4, WLH * (i + 1), 92, WLH, name) end # 装備品を描画 rect = Rect.new(92, 0, self.width - 128, WLH) @item_max.times { |i| rect.y = WLH * i draw_item_name(@data[i], rect.x, rect.y) draw_equipment_ep_cost(@data[i], rect) } end #-------------------------------------------------------------------------- # ○ 防具欄の名称を取得 # kind : 種別 #-------------------------------------------------------------------------- def armor_slot_name(kind) case kind when 0..3 return eval("Vocab.armor#{kind + 1}") else return Vocab.extra_armor(kind - 4) end end unless $imported["ExtendedEquipScene"] #-------------------------------------------------------------------------- # ● カーソルを 1 ページ後ろに移動 #-------------------------------------------------------------------------- def cursor_pagedown return if Input.repeat?(Input::R) super end #-------------------------------------------------------------------------- # ● カーソルを 1 ページ前に移動 #-------------------------------------------------------------------------- def cursor_pageup return if Input.repeat?(Input::L) super end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super return unless self.active if Input.repeat?(Input::RIGHT) cursor_pagedown elsif Input.repeat?(Input::LEFT) cursor_pageup end end end end #=================================================# #============================================================================== # ■ Window_EquipItem #============================================================================== class Window_EquipItem < Window_Item #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @item_enabled = [] super @data.each { |item| @item_enabled << enable?(item) } end #-------------------------------------------------------------------------- # ● アイテムをリストに含めるかどうか # item : アイテム #-------------------------------------------------------------------------- def include?(item) return true if item == nil if @equip_type == 0 return false unless item.is_a?(RPG::Weapon) else return false unless item.is_a?(RPG::Armor) return false unless item.kind == @equip_type - 1 end return @actor.equippable?(item) end #-------------------------------------------------------------------------- # ● アイテムを許可状態で表示するかどうか # item : アイテム #-------------------------------------------------------------------------- def enable?(item) return false unless @actor.equippable?(item) # 装備不可 return false unless @actor.ep_condition_clear?(@equip_type, item) # EP 不足 return true end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) super(index) rect = item_rect(index) item = @data[index] # 個数表示分の幅を削る cw = self.contents.text_size(sprintf(":%2d", 0)).width rect.width -= cw + 4 draw_equipment_ep_cost(item, rect, enable?(item)) end #-------------------------------------------------------------------------- # ○ 簡易リフレッシュ # equip_type : 装備部位 #-------------------------------------------------------------------------- def simple_refresh(equip_type) # 一時的に装備部位を変更 last_equip_type = @equip_type @equip_type = equip_type @data.each_with_index { |item, i| # 許可状態が変化した項目のみ再描画 if enable?(item) != @item_enabled[i] draw_item(i) @item_enabled[i] = enable?(item) end } # 装備部位を戻す @equip_type = last_equip_type end end #=================================================# #============================================================================== # ■ Window_EquipStatus #============================================================================== class Window_EquipStatus < Window_Base #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias refresh_KGC_EquipExtension refresh def refresh refresh_KGC_EquipExtension draw_actor_ep(@actor, 120, 0, 56) if KGC::EquipExtension::USE_EP_SYSTEM end end #=================================================# #============================================================================== # ■ Window_Status #============================================================================== class Window_Status < Window_Base if KGC::EquipExtension::SHOW_STATUS_EP #-------------------------------------------------------------------------- # ● 基本情報の描画 # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- alias draw_basic_info_KGC_EquipExtension draw_basic_info def draw_basic_info(x, y) draw_basic_info_KGC_EquipExtension(x, y) draw_actor_ep(@actor, x + 160, y + WLH * 4) end end #-------------------------------------------------------------------------- # ● 装備品の描画 # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_equipments(x, y) self.contents.font.color = system_color self.contents.draw_text(x, y, 120, WLH, Vocab::equip) item_number = [@actor.equips.size, @actor.armor_number + 1].min item_number.times { |i| draw_item_name(@actor.equips[i], x + 16, y + WLH * (i + 1)) } end end #=================================================# #============================================================================== # ■ Window_ShopStatus #============================================================================== class Window_ShopStatus < Window_Base #-------------------------------------------------------------------------- # ● アクターの現装備と能力値変化の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_actor_parameter_change(actor, x, y) return if @item.is_a?(RPG::Item) enabled = actor.equippable?(@item) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x, y, 200, WLH, actor.name) if @item.is_a?(RPG::Weapon) item1 = weaker_weapon(actor) elsif actor.two_swords_style and @item.kind == 0 item1 = nil else index = actor.equip_type.index(@item.kind) item1 = (index != nil ? actor.equips[1 + index] : nil) end if enabled if @item.is_a?(RPG::Weapon) atk1 = item1 == nil ? 0 : item1.atk atk2 = @item == nil ? 0 : @item.atk change = atk2 - atk1 else def1 = item1 == nil ? 0 : item1.def def2 = @item == nil ? 0 : @item.def change = def2 - def1 end self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2) end draw_item_name(item1, x, y + WLH, enabled) end end #=================================================# #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip < Scene_Base #-------------------------------------------------------------------------- # ● 定数 #-------------------------------------------------------------------------- EQUIP_TYPE_MAX = KGC::EquipExtension::EXTRA_EQUIP_KIND.size + 5 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor_index : アクターインデックス # equip_index : 装備インデックス #-------------------------------------------------------------------------- alias initialize_KGC_EquipExtension initialize def initialize(actor_index = 0, equip_index = 0) initialize_KGC_EquipExtension(actor_index, equip_index) unit = ($imported["LargeParty"] ? $game_party.all_members : $game_party.members) actor = unit[actor_index] @equip_index = [@equip_index, actor.armor_number].min end #-------------------------------------------------------------------------- # ● アイテムウィンドウの作成 #-------------------------------------------------------------------------- alias create_item_windows_KGC_EquipExtension create_item_windows def create_item_windows create_item_windows_KGC_EquipExtension kind = equip_kind(@equip_index) EQUIP_TYPE_MAX.times { |i| @item_windows[i].visible = (kind == i) } end #-------------------------------------------------------------------------- # ● アイテムウィンドウの更新 #-------------------------------------------------------------------------- def update_item_windows kind = equip_kind(@equip_window.index) for i in 0...EQUIP_TYPE_MAX @item_windows[i].visible = (kind == i) @item_windows[i].update end @item_window = @item_windows[kind] @item_window.simple_refresh(@equip_window.index) end #-------------------------------------------------------------------------- # ○ 装備欄の種別を取得 # index : 装備欄インデックス #-------------------------------------------------------------------------- def equip_kind(index) if index == 0 return 0 else return @actor.equip_type[index - 1] + 1 end end unless $imported["ExtendedEquipScene"] #-------------------------------------------------------------------------- # ● ステータスウィンドウの更新 #-------------------------------------------------------------------------- def update_status_window if @equip_window.active @status_window.set_new_parameters(nil, nil, nil, nil) elsif @item_window.active temp_actor = Marshal.load(Marshal.dump(@actor)) temp_actor.change_equip(@equip_window.index, @item_window.item, true) new_atk = temp_actor.atk new_def = temp_actor.def new_spi = temp_actor.spi new_agi = temp_actor.agi @status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi) end @status_window.update end end #-------------------------------------------------------------------------- # ● アイテム選択の更新 #-------------------------------------------------------------------------- alias update_item_selection_KGC_EquipExtension update_item_selection def update_item_selection if Input.trigger?(Input::C) # 装備不可能な場合 index = @equip_window.index item = @item_window.item unless item == nil || (@actor.equippable?(item) && @actor.ep_condition_clear?(index, item)) Sound.play_buzzer return end end update_item_selection_KGC_EquipExtension end end #=================================================# #============================================================================== # ■ Scene_File #============================================================================== class Scene_File < Scene_Base #-------------------------------------------------------------------------- # ● セーブデータの読み込み # file : 読み込み用ファイルオブジェクト (オープン済み) #-------------------------------------------------------------------------- alias read_save_data_KGC_EquipExtension read_save_data def read_save_data(file) read_save_data_KGC_EquipExtension(file) KGC::Commands.restore_equip Graphics.frame_reset end end