#============================================================================== # ■ RGSS3 EXP増加アイテム・スキル Ver2.00 by 星潟 #------------------------------------------------------------------------------ # EXPを増減させるアイテム・スキルを作成します。 # ……まあ、アイテムだけの方が無難ですが。 # また、戦闘中のEXP増減アイテム使用も可能です。 # アクター以外には効果を及ぼさないように制限をかけてあります。 #============================================================================== # アイテム・スキルのメモ欄に記述します。 #============================================================================== # # # 対象のEXPを50000増加させます。 #============================================================================== # # # 対象のEXPを50000減少させます。 #============================================================================== # <対象レベル下限:2> # # 対象のレベルが2以上でなければEXP増減効果は発生しません。 # EXP減少アイテムをレベル1のキャラクターに対しては # 無効にしたい場合に使うのがいいかと。 #============================================================================== # <対象レベル下限:10> # # 対象のレベルが10以上でなければEXP増減効果は発生しません。 #============================================================================== # <対象レベル下限:@max_level/2> # # 対象のレベルが最大レベルの半分以上の値でなければEXP増減効果は発生しません。 #============================================================================== # <対象レベル上限:90> # # 対象のレベルが90以下でなければEXP増減効果は発生しません。 #============================================================================== # <対象レベル上限:@max_level-1> # # 対象のレベルが最大レベルより低くなければEXP増減効果は発生しません。 # EXP増加アイテムを最大レベルに達したキャラクターに対しては # 無効にしたい場合に使うのがいいかと。 #============================================================================== # Ver1.01 キャッシュ化等による軽量化を行いました。 # Ver1.02 EXP増加以外の効果を持つ場合を想定し、処理を変更しました。 # Ver2.00 関係のないスキルでEXP増減表示がされてしまう不具合を修正。 # 処理全体を見直し、機能を拡張しました。 # これに伴い、これまでのレベル監視を撤廃しておりますので # バージョンアップの際は設定にご注意ください。 #============================================================================== module EXP_P_ITEM #メモ欄に記入するEXP増加アイテム設定用ワードです。 #「<>」で囲い、設定用ワードの後に「:」をつけ、数値を入力して下さい。 #記入例 # #EXP+30000の効果を与える。 #記入例 # #EXP+50000〜99999の効果を与える。 WORD1 = "EXP増加" #メモ欄に記入する対象レベル下限監視設定用ワードです。 WORD2 = "対象レベル下限" #メモ欄に記入する対象レベル上限監視設定用ワードです。 WORD3 = "対象レベル上限" #メニュー画面でEXP増加アイテム使用時、レベルアップ表示を行うか #(ただし、レベルアップ表示はメニューを閉じた後に # アイテムを使用した回数分判定が行われます) LVUP1 = false #戦闘中、EXP増加アイテム使用時、レベルアップ表示を行うかを指定。 LVUP2 = false #レベルダウン時、レベルアップを表示する設定になっていた場合は #レベルダウンも表示するかを指定。 LVUP3 = true end module Vocab EXP_Plus = "%sの経験値が%s増加した!" EXP_Minus = "%sの経験値が%s減少した!" LevelDownEX = "%sは%s %s に下がった!" end class Game_ActionResult attr_accessor :added_exp #-------------------------------------------------------------------------- # ステータス効果のクリア #-------------------------------------------------------------------------- alias clear_damage_values_added_exp clear_damage_values def clear_damage_values clear_damage_values_added_exp @added_exp = 0 end end class Game_Actor < Game_Battler def exp_item_effectable?(item) return false if item.exp_plus_value.empty? return false if !item.exp_plus_max_check1.empty? && @level < eval(item.exp_plus_max_check1) return false if !item.exp_plus_max_check2.empty? && @level > eval(item.exp_plus_max_check2) true end if EXP_P_ITEM::LVUP3 #-------------------------------------------------------------------------- # 経験値の変更 #-------------------------------------------------------------------------- alias change_exp_level_down change_exp def change_exp(exp, show) last_level = @level change_exp_level_down(exp, show) display_level_down_ex if show && @level < last_level refresh end #-------------------------------------------------------------------------- # レベルアップメッセージの表示 #-------------------------------------------------------------------------- def display_level_down_ex $game_message.new_page $game_message.add(sprintf(Vocab::LevelDownEX, @name, Vocab::level, @level)) end end end class Game_Battler < Game_BattlerBase def exp_item_effectable?(item) false end #-------------------------------------------------------------------------- # スキル/アイテムに有効な使用効果が一つでもあるかを判定 #-------------------------------------------------------------------------- alias item_has_any_valid_effects_exp_plus? item_has_any_valid_effects? def item_has_any_valid_effects?(user, item) return true if exp_item_effectable?(item) item_has_any_valid_effects_exp_plus?(user, item) end #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_exp_plus item_user_effect def item_user_effect(user, item) item_user_effect_exp_plus(user, item) if exp_item_effectable?(item) value = eval(item.exp_plus_value) @result.added_exp += value change_exp(self.exp + value, $game_party.in_battle ? EXP_P_ITEM::LVUP2 : EXP_P_ITEM::LVUP1) @result.success = true end end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ダメージの表示 #-------------------------------------------------------------------------- alias display_damage_exp_plus display_damage def display_damage(target, item) display_damage_exp_plus(target, item) display_exp_plus(target, item) if target.result.added_exp != 0 end #-------------------------------------------------------------------------- # EXP増加の表示 #-------------------------------------------------------------------------- def display_exp_plus(target, item) add_text(sprintf( target.result.added_exp < 0 ? Vocab::EXP_Minus : Vocab::EXP_Plus, target.name, target.result.added_exp.abs)) wait end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 増減EXPのデータを設定 #-------------------------------------------------------------------------- def exp_plus_value @exp_plus_value ||= /<#{EXP_P_ITEM::WORD1}[::](\S+)>/ =~ @note ? $1.to_s : "" end #-------------------------------------------------------------------------- # 対象レベル下限のデータを設定 #-------------------------------------------------------------------------- def exp_plus_max_check1 @exp_plus_max_check1 ||= /<#{EXP_P_ITEM::WORD2}[::](\S+)>/ =~ @note ? $1.to_s : "" end #-------------------------------------------------------------------------- # 対象レベル上限のデータを設定 #-------------------------------------------------------------------------- def exp_plus_max_check2 @exp_plus_max_check2 ||= /<#{EXP_P_ITEM::WORD3}[::](\S+)>/ =~ @note ? $1.to_s : "" end end