=begin ● スキル・アイテム表示ソート ver1.0------------------------(c)2011,光の軌想曲  スキルやアイテムの表示順序を、それらの効果を基準とした順序に変更します。  また各スキル・アイテムに優先度を設定して、表示順序を変更することができます。  ○つかいかた  【グループごとの優先度設定】  本スクリプトではスキル・アイテムを、対象およびダメージの有無によって  5つのグループに分け、各グループに表示優先度を設定します。  優先度が大きいほどスキル・アイテム画面で前に表示されます。  優先度が等しいもの同士はID順になります。  (優先度の設定例)  前から順に 敵/ダメージ, 敵/補助, 味方/回復, 味方/補助, 対象なし  ・回復優先          :10, 10, 20, 10, 10 ・攻撃優先、対象なしは一番下に:20, 10, 10, 10, 0 ・効果での並べ替えをしない  :10, 10, 10, 10, 10  【スキル・アイテム個別優先度設定】  スキル・アイテムのメモ欄に   “<表示優先度:n>” ※ n は0以上の整数  と記入することで、そのスキル・アイテムの表示優先度を n に設定できます。 ○競合の可能性:Window_Item, Window_Skill を再定義。         競合した場合は ▼ 素材 のなるべく上に導入してください。 ○更新履歴 2011/ 4/22 ver1.0公開 =end module MAZ module SIS #---------------------------------------------------------------------------- # ↓カスタマイズポイント # この機能をスキルに対して有効にする SORT_SKILL = true # この機能をアイテムに対して有効にする SORT_ITEM = true # 〈グループごとの優先度設定〉 # 整数で指定。大きいほど上に表示される。 # ・対象:敵/ダメージ(基本ダメージ)> 0 RANK_DMG = 10 # ・対象:敵/補助  (基本ダメージ)≦ 0 RANK_JAM = 5 # ・対象:味方/回復 (基本ダメージ)< 0 RANK_HLR = 20 # ・対象:味方/補助 (基本ダメージ)≧ 0 RANK_ENH = 15 # ・対象:なし RANK_NAN = 0 # スキル・アイテムのメモ欄に記入する識別用文字列 RANK_WORD = "表示優先度" # ↑カスタマイズポイントおわり #---------------------------------------------------------------------------- end end module RPG #============================================================================== # ■ RPG::Skill #============================================================================== class Skill < UsableItem #-------------------------------------------------------------------------- # ○ 表示優先度を取得 #-------------------------------------------------------------------------- def list_rank rank = 0 if self.for_opponent? rank = base_damage > 0 ? MAZ::SIS::RANK_DMG : MAZ::SIS::RANK_JAM elsif self.for_friend? rank = base_damage < 0 ? MAZ::SIS::RANK_HLR : MAZ::SIS::RANK_ENH else rank = MAZ::SIS::RANK_NAN end # メモ欄読み取り memo = self.note.scan(/<#{MAZ::SIS::RANK_WORD}:(\d+)>/) memo = memo.flatten if memo != nil and not memo.empty? rank = memo[0].to_i end # 優先度が同値の時はID順になるよう小細工 rank = rank * 1000 - id return rank end end #============================================================================== # ■ RPG::Item #============================================================================== class Item < UsableItem #-------------------------------------------------------------------------- # ○ 表示優先度を取得 #-------------------------------------------------------------------------- def list_rank rank = 0 if self.for_opponent? rank = base_damage > 0 ? MAZ::SIS::RANK_DMG : MAZ::SIS::RANK_JAM elsif self.for_friend? rank = base_damage < 0 ? MAZ::SIS::RANK_HLR : MAZ::SIS::RANK_ENH if hp_recovery_rate > 0 || hp_recovery > 0 || \ mp_recovery_rate > 0 || mp_recovery > 0 rank = MAZ::SIS::RANK_HLR end else rank = MAZ::SIS::RANK_NAN end # メモ欄読み取り memo = self.note.scan(/<#{MAZ::SIS::RANK_WORD}:(\d+)>/) memo = memo.flatten if memo != nil and not memo.empty? rank = memo[0].to_i end # 優先度が同値の時はID順になるよう小細工 rank = rank * 1000 - id return rank end end end #============================================================================== # ■ Window_Item #------------------------------------------------------------------------------ #  アイテム画面などで、所持アイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_Item < Window_Selectable #-------------------------------------------------------------------------- # ● リフレッシュ ※再定義 #-------------------------------------------------------------------------- def refresh @data = [] for item in $game_party.items next unless include?(item) @data.push(item) if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id self.index = @data.size - 1 end end # 優先度で並べ替え if MAZ::SIS::SORT_ITEM @data.sort! do |a, b| b.list_rank - a.list_rank end end @data.push(nil) if include?(nil) @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end end #============================================================================== # ■ Window_Skill #------------------------------------------------------------------------------ #  スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。 #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ● リフレッシュ ※再定義 #-------------------------------------------------------------------------- def refresh @data = [] for skill in @actor.skills @data.push(skill) if skill.id == @actor.last_skill_id self.index = @data.size - 1 end end # 優先度で並べ替え if MAZ::SIS::SORT_SKILL @data.sort! do |a, b| b.list_rank - a.list_rank end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end end