#============================================================================== # ■ VXAce-RGSS3-8-opt 熟練度変化アイテム [Ver.1.0.0] by Claimh #------------------------------------------------------------------------------ # 熟練度を上げる/下げるアイテムを作成します #------------------------------------------------------------------------------ # [データベース設定方法] # ・Lv増減 # メモ欄に @attr_lv[属性ID,+/-する値] を入力 # 例) @attr_lv[3,1] # 炎+1 # @attr_lv[3,-1] # 炎-1 # @attr_lv[1004,1] # 剣+1 # ・得意・不得意設定 # メモ欄に @attr_ctrl[属性ID,0:解除/1:得意/2:不得意] を入力 # 例) @attr_ctrl[3,0] # 炎を得意・不得意を解除 # @attr_ctrl[3,1] # 炎を得意に設定 # @attr_ctrl[3,2] # 炎を不得意に設定 #============================================================================== #============================================================================== # ■ 上昇アイテムクラス #============================================================================== class SysUpdate::ItemAttrs #============================================================================ # ■ 上昇値クラス #============================================================================ class AttrVal attr_reader :attr attr_reader :level #----------------------------------------------------------------------- # ● オブジェクト初期化 #----------------------------------------------------------------------- def initialize(a, l) @attr = a; @level = l end #----------------------------------------------------------------------- # ● 最大値? #----------------------------------------------------------------------- def max?(actor) actor.attr[@attr].lv_limit >= (actor.attr[@attr].level + @level) end #----------------------------------------------------------------------- # ● 最小値? #----------------------------------------------------------------------- def min?(actor) (actor.attr[@attr].level + @level) > 0 end #----------------------------------------------------------------------- # ● 熟練度変更可能? #----------------------------------------------------------------------- def enable?(actor) max?(actor) and min?(actor) end #----------------------------------------------------------------------- # ● 熟練度変更 #----------------------------------------------------------------------- def exe(actor) actor.attr[@attr].level += @level end end #============================================================================ # ■ 上昇値クラス #============================================================================ class AttrTaste attr_reader :attr attr_reader :taste #----------------------------------------------------------------------- # ● オブジェクト初期化 #----------------------------------------------------------------------- def initialize(a, t) @attr = a; @taste = t end #----------------------------------------------------------------------- # ● 熟練度変更可能? #----------------------------------------------------------------------- def enable?(actor) return true if 0 <= @taste and @taste < 3 p "設定ミス : @attr_ctrl[#{@attr},#{@taste}]" return false end #----------------------------------------------------------------------- # ● 熟練度変更 #----------------------------------------------------------------------- def exe(actor) actor.attr[@attr].taste = @taste end end #------------------------------------------------------------------------- # ● オブジェクト初期化 #------------------------------------------------------------------------- def initialize(note) @prm = [] result = note.scan(/@attr_lv\[(\d+),(.*?+)\]/) if !result.nil? and !result.empty? result.each {|r| @prm.push(AttrVal.new(r[0].to_i, r[1].to_i)) } end result = note.scan(/@attr_ctrl\[(\d+),(.*?+)\]/) if !result.nil? and !result.empty? result.each {|r| @prm.push(AttrTaste.new(r[0].to_i, r[1].to_i)) } end end #------------------------------------------------------------------------- # ● 使用可能? #------------------------------------------------------------------------- def enable?(actor) return false if @prm.empty? # 対象アイテムではない @prm.all? {|r| r.enable?(actor) } end #------------------------------------------------------------------------- # ● 使用 #------------------------------------------------------------------------- def change(actor) return false if @prm.empty? # 対象アイテムではない @prm.each {|r| r.exe(actor) } end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem < RPG::BaseItem #------------------------------------------------------------------------- # ● 熟練度上昇アイテム? #------------------------------------------------------------------------- def attr_enable?(actor) return false unless actor.actor? SysUpdate::ItemAttrs.new(@note).enable?(actor) end #------------------------------------------------------------------------- # ● 熟練度上昇 #------------------------------------------------------------------------- def attr_change(actor) return unless actor.actor? SysUpdate::ItemAttrs.new(@note).change(actor) end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● スキル/アイテムに有効な使用効果が一つでもあるかを判定 #-------------------------------------------------------------------------- alias item_has_any_valid_effects_attr? item_has_any_valid_effects? def item_has_any_valid_effects?(user, item) return true if item.attr_enable?(self) item_has_any_valid_effects_attr?(user, item) end #-------------------------------------------------------------------------- # ● スキル/アイテムの効果適用 #-------------------------------------------------------------------------- alias item_apply_attr item_apply def item_apply(user, item) item_apply_attr(user, item) item.attr_change(self) if @result.hit? end end