#============================================================================== # 「装備スロットカスタム」(ACE) ver1.0 # 製作者:奈々(なな) # へぷたなすくろーる http://heptanas.mamagoto.com/ # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # その他、詳しい利用規約はブログを参照して下さい。 # #------------------------------------------------------------------------------ # # 装備スロットを自由に設定することが出来ます。 # アクター毎や職業別に指定が可能で # また装備品やステートによって変化させることも出来ます。 # # これによって特殊な装備のキャラクターを作成することや # オリジナルの装備システムを設定することが可能です。 # ブログに作例を紹介しているので参考にして下さい。 # # 使い方は、初期設定で共通のスロットを設定します。 # またデータベースのメモ欄に # <装備スロット [0,1,2,3,4]> # <二刀流スロット [0,0,2,3,4]> # とタグを入れることで、装備スロットを指定できます。 # # 設定の優先順位は、ステート・装備品・アクター・職業の順番です。 # 装備スロットが変化する=装備品が外れる可能性があるので # 特にステートと装備品でのスロット変更には注意が必要です。 # #============================================================================== #◇初期設定 module Nana module ESC #基本の装備スロットの設定 # 0:武器 1:盾 2:頭 3:身体 4:装飾品 NORMAL = [0, 1, 2, 3, 4] #二刀流の装備スロットの設定 # 0:武器 1:盾 2:頭 3:身体 4:装飾品 DUAL = [0, 0, 2, 3, 4] end end #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ● 装備スロット指定 #-------------------------------------------------------------------------- def equip_slots_n @note.scan(/<装備スロット\s*\[(.+)\]\s*>/) list = [] $1.split(/\s*,\s*/).each{|s| list.push(s.to_i)} if $1 return list != [] ? list : nil end #-------------------------------------------------------------------------- # ● 二刀流スロット指定 #-------------------------------------------------------------------------- def equip_slots_d @note.scan(/<二刀流スロット\s*\[(.+?)\]\s*>/) list = [] $1.split(/\s*,\s*/).each{|s| list.push(s.to_i)} if $1 return list != [] ? list : nil end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ # アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) # の内部で使用され、Game_Party クラス($game_party)からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 装備スロット指定を取得 #-------------------------------------------------------------------------- def equip_slots_n self.states.each do |state| next unless state && state.equip_slots_n return state.equip_slots_n end self.equips.each do |equip| next unless equip && equip.equip_slots_n return equip.equip_slots_n end return self.actor.equip_slots_n if self.actor.equip_slots_n return self.class.equip_slots_n if self.class.equip_slots_n return Nana::ESC::NORMAL end #-------------------------------------------------------------------------- # ● 二刀流スロット指定を取得 #-------------------------------------------------------------------------- def equip_slots_d self.states.each do |state| next unless state && state.equip_slots_d return state.equip_slots_d end self.equips.each do |equip| next unless equip && equip.equip_slots_d return equip.equip_slots_d end return self.actor.equip_slots_d if self.actor.equip_slots_d return self.class.equip_slots_d if self.class.equip_slots_d return Nana::ESC::DUAL end #-------------------------------------------------------------------------- # ● 装備スロットの配列を取得 #-------------------------------------------------------------------------- def equip_slots return equip_slots_d if dual_wield? # 二刀流 return equip_slots_n # 通常 end #-------------------------------------------------------------------------- # ● 装備タイプからスロット ID のリストに変換 #-------------------------------------------------------------------------- def slot_list(etype_id) result = [] equip_slots.each_with_index {|e, i| result.push(i) if e == etype_id } result end end #============================================================================== # ■ Window_EquipSlot #------------------------------------------------------------------------------ # 装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。 #============================================================================== class Window_EquipSlot < Window_Selectable #-------------------------------------------------------------------------- # ● アクターの設定 #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor create_contents refresh end end