#============================================================================== # ○経験値/レベル増減アイテム/スキル Ver1.00 # for RGSS2 # 西瓜 / Space not far # http://muspell.raindrop.jp/ # 使用すると対象アクターの経験値やレベルが増減するアイテムを設定できます。 # 「しあわせのたね」や「エナジードレイン」を再現することが可能です。 #============================================================================== # アイテムまたはスキルのメモ欄に<経験値増減;n>または<レベル増減:n>という形式で # 記述してください。nの値だけ効果対象の経験値やレベルが増減します。 # マイナスの値を設定することも可能です。 # メニューで使用する場合、「最大MP成長 0」などと # 適当に効果をつけないと使えません。 =begin ●設定例 <経験値増減:1000> <レベル増減:-1> =end module SNF EXP_WORD = "経験値" # ●バトルメッセージ ACTOREXPGAIN = "%sは%sが %s 上がった!" # 経験値上昇時 ACTOREXPDOWN = "%sは%sが %s 下がった!" # 経験値減少時 ACTORLVGAIN = "%sは%sが %s 上がった!" # レベル上昇時 ACTORLVDOWN = "%sは%sが %s 下がった!" # レベル減少時 # 例:「ラルフは経験値が 1000 上がった!」 end class Game_Battler EXPGAINITEM_WORD = "経験値増減" LVGAINITEM_WORD = "レベル増減" attr_reader :exp_gain # 行動結果: EXP 増減 attr_reader :lv_gain # 行動結果: LV 増減 def snf_change_exp_lv(target, obj) if target.is_a?(Game_Actor) # アクターですか? # 経験値の増減 memo = obj.note.scan(/<#{EXPGAINITEM_WORD}:(\S+)>/) memo = memo.flatten show = false if memo != nil and not memo.empty? @exp_gain = memo[0].to_i target.change_exp(target.exp + @exp_gain, show) end # レベルの増減 memo = obj.note.scan(/<#{LVGAINITEM_WORD}:(\S+)>/) memo = memo.flatten if memo != nil and not memo.empty? @lv_gain = memo[0].to_i target.change_level(target.level + @lv_gain, show) end end end #-------------------------------------------------------------------------- # ● 行動効果の保持用変数をクリア #-------------------------------------------------------------------------- alias snf_expgain_clear_action_results clear_action_results def clear_action_results snf_expgain_clear_action_results @exp_gain = 0 @lv_gain = 0 end #-------------------------------------------------------------------------- # ● アイテムの効果適用 # user : アイテムの使用者 # item : アイテム #-------------------------------------------------------------------------- alias snf_expgain_item_effect item_effect def item_effect(user, item) snf_expgain_item_effect(user, item) snf_change_exp_lv(self, item) end alias snf_expgain_skill_effect skill_effect def skill_effect(user, skill) snf_expgain_skill_effect(user, skill) snf_change_exp_lv(self, skill) end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● ダメージの表示 # target : 対象者 # obj : スキルまたはアイテム #-------------------------------------------------------------------------- alias snf_expgain_display_damage display_damage def display_damage(target, obj = nil) snf_expgain_display_damage(target, obj) if target.missed elsif target.evaded else display_exp_gain(target, obj) display_lv_gain(target, obj) end end def display_exp_gain(target, obj = nil) return if target.dead? return if target.exp_gain == 0 if target.exp_gain > 0 # 増加 text = sprintf(SNF::ACTOREXPGAIN, target.name, SNF::EXP_WORD, target.exp_gain) else # 減少 text = sprintf(SNF::ACTOREXPDOWN, target.name, SNF::EXP_WORD, -target.exp_gain) end @message_window.add_instant_text(text) wait(30) end def display_lv_gain(target, obj = nil) return if target.dead? return if target.lv_gain == 0 if target.lv_gain > 0 # 増加 text = sprintf(SNF::ACTORLVGAIN, target.name, Vocab.level, target.lv_gain) else # 減少 text = sprintf(SNF::ACTORLVDOWN, target.name, Vocab.level, -target.lv_gain) end @message_window.add_instant_text(text) wait(30) end end