#============================================================================== # ★ 置換スキル・アイテム ver1.0 by USK #------------------------------------------------------------------------------ # ・戦闘中別のスキルに置換されるスキル・アイテムを設定します # ・ランダム、ローテーションを設定できます #============================================================================== =begin ・スキル、アイテムのメモ欄にのようにと記述する  とそのスキルは戦闘中設定したスキルIDのものになります。 ・のように記述すると一ターンごとに置換スキルが1→2→3→4→1とループ  します。 ・のように記述すると一ターンごとにスキルが1,2,3,4のどれかにランダ  ムで置換されます。 ・のようにv[変数ID]と記述すると指定したIDの変数値をIDとしたスキルと置  換されます。 ・スクリプトの知識があればで設定可能です。 =end #============================================================================== # ■ DataManager #============================================================================== module DataManager class << self; alias :usk_sub_load_database :load_database; end #-------------------------------------------------------------------------- # ● データベースのロード #-------------------------------------------------------------------------- def self.load_database usk_sub_load_database $data_skills = SubArray[*$data_skills] $data_items = SubArray[*$data_items] end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def substitute @substitute_list ||= get_substitute_list return @substitute_list.call end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def get_substitute_list if @note =~ //m f = $1 s = "[#{$2.gsub("v[", "$game_variables[")}]" r = ";ret = ret[$game_troop.turn_count % ret.size];ret == 0 ? @id : ret" if f return eval("Proc.new{shuffle(#{s})}") else return eval("Proc.new{ret = #{s + r}}") end else return Proc.new{@id} end end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def shuffle(a) if SceneManager.scene_is?(Scene_Battle) if @turn != $game_troop.turn_count @turn = $game_troop.turn_count return @sub_id = a.delete_if{|x| x == 0}.sample else return @sub_id || @id end else @turn = -1 return @id end end end #============================================================================== # ■ SubArray #============================================================================== class SubArray < Array attr_accessor :proc #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def [](*args) args.size == 1 && args[0].is_a?(Integer) ? proc.call(*args) : super(*args) end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def proc @proc ||= Proc.new do |i| obj = at(i) j = obj ? obj.substitute : i i == j ? obj : self[j] end end end