#============================================================================== # ■ RGSS3 撃破EXP・ドロップ率・ゴールド増幅 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # エネミー撃破時の取得EXP・ドロップ率・ゴールドが変動する効果を実装します。 # デフォルトはアクター側によるものですが # こちらはエネミー側に設定するものです。 # また、負の値を設定する事も可能です。 # # ※デフォルトでは、戦闘不能となった時点で全てのステートが解除されてしまいます。 # この効果を使用する場合、「戦闘不能時に解除されないステート」を # 実装する為のスクリプトと併用するのが望ましいです。 # 星潟のスクリプトの場合、『消去無効ステート』スクリプトの # <戦闘不能時残留>の機能が該当します。 #============================================================================== # ステート等のメモ欄に指定します。 #============================================================================== # <撃破EXP増幅:100> # # この効果が付与されたエネミーは、撃破時のEXPが100%増加します。 #------------------------------------------------------------------------------ # <撃破ドロップ率増幅:100> # # この効果が付与されたエネミーは、撃破時のアイテムドロップ率が100%増加します。 # ※元のドロップ率25%の場合、100%増加は50%となります。 #------------------------------------------------------------------------------ # <撃破ゴールド増幅:100> # # この効果が付与されたエネミーは、撃破時のゴールドが100%増加します。 #============================================================================== module EnemyEXPBoost #撃破EXP増幅の設定用キーワードを指定。 Word1 = "撃破EXP増幅" #撃破ドロップ率増幅の設定用キーワードを指定。 Word2 = "撃破ドロップ率増幅" #撃破ゴールド率増幅の設定用キーワードを指定。 Word3 = "撃破ゴールド増幅" #増幅率の計算処理を加算にするか乗算にするかを指定。 #trueで加算、falseで乗算。 Type = true #計算対象をステートだけにするかを指定。 #trueでステートだけ、falseで特徴を有する全ての項目。 #敵に付与するという性質を考えると #通常、ステート以外に設定する意味はないと思います。 StateOnly = true end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 経験値の取得 #-------------------------------------------------------------------------- alias exp_enemy_exp_boost exp def exp (exp_enemy_exp_boost * enemy_exp_boost).to_i end #-------------------------------------------------------------------------- # 撃破EXP増幅率 #-------------------------------------------------------------------------- def enemy_exp_boost targets_array = EnemyEXPBoost::StateOnly ? states : feature_objects if EnemyEXPBoost::Type result = targets_array.inject(100) {|r,f| r += eval(f.enemy_exp_boost)} else result = targets_array.inject(100) {|r,f| r = (r * (100 + eval(f.enemy_exp_boost))) / 100} end result = result.to_f / 100 result > 0 ? result : 0 end #-------------------------------------------------------------------------- # ドロップアイテム取得率の倍率を取得 #-------------------------------------------------------------------------- alias drop_item_rate_enemy_exp_boost drop_item_rate def drop_item_rate drop_item_rate_enemy_exp_boost * enemy_drop_boost.to_f end #-------------------------------------------------------------------------- # 撃破ドロップ率増幅率 #-------------------------------------------------------------------------- def enemy_drop_boost return @enemy_drop_boost_cache if @enemy_drop_boost_cache targets_array = EnemyEXPBoost::StateOnly ? states : feature_objects if EnemyEXPBoost::Type result = targets_array.inject(100) {|r,f| r += eval(f.enemy_drop_boost)} else result = targets_array.inject(100) {|r,f| r = (r * (100 + eval(f.enemy_drop_boost))) / 100} end result = result.to_f / 100 @enemy_drop_boost_cache = result > 0 ? result : 0 end #-------------------------------------------------------------------------- # ドロップアイテムの配列作成 #-------------------------------------------------------------------------- alias make_drop_items_enemy_exp_boost make_drop_items def make_drop_items @enemy_drop_boost_cache = nil#念の為 result = make_drop_items_enemy_exp_boost @enemy_drop_boost_cache = nil#こちらも result end #-------------------------------------------------------------------------- # お金の取得 #-------------------------------------------------------------------------- alias gold_enemy_exp_boost gold def gold (gold_enemy_exp_boost * enemy_gold_boost).to_i end #-------------------------------------------------------------------------- # 撃破ゴールド増幅率 #-------------------------------------------------------------------------- def enemy_gold_boost targets_array = EnemyEXPBoost::StateOnly ? states : feature_objects if EnemyEXPBoost::Type result = targets_array.inject(100) {|r,f| r += eval(f.enemy_gold_boost)} else result = targets_array.inject(100) {|r,f| r = (r * (100 + eval(f.enemy_gold_boost))) / 100} end result = result.to_f / 100 end end class RPG::BaseItem #-------------------------------------------------------------------------- # 撃破EXP増幅率 #-------------------------------------------------------------------------- def enemy_exp_boost @enemy_exp_boost ||= /<#{EnemyEXPBoost::Word1}[::](\S+)>/ =~ note ? $1.to_s : "0" end #-------------------------------------------------------------------------- # 撃破ゴールド増幅率 #-------------------------------------------------------------------------- def enemy_drop_boost @enemy_drop_boost ||= /<#{EnemyEXPBoost::Word2}[::](\S+)>/ =~ note ? $1.to_s : "0" end #-------------------------------------------------------------------------- # 撃破ドロップ増幅率 #-------------------------------------------------------------------------- def enemy_gold_boost @enemy_gold_boost ||= /<#{EnemyEXPBoost::Word3}[::](\S+)>/ =~ note ? $1.to_s : "0" end end