#==============================================================================
# 「装備スロットカスタム」(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