#============================================================================== # □ クリティカル個別設定 (for VX Ace) #------------------------------------------------------------------------------ # Version : 1_20120712 # by サリサ・タイクーン # http://www.tycoon812.com/rgss/ #============================================================================== #============================================================================== # □ 素材スイッチ #============================================================================== $rgsslab = {} if $rgsslab == nil $rgsslab["クリティカル個別設定"] = true if $rgsslab["クリティカル個別設定"] #============================================================================== # □ カスタマイズポイント #============================================================================== module RGSSLAB end module RGSSLAB::Critical_Individual_Setting #-------------------------------------------------------------------------- # ○ 設定モード # "アクターに対するクリティカル設定を指定します。 # # "アクター" # ACTORにて設定されたものを扱います。 # ---------------------------------------------------------------------- # "職業" # CLASSにて設定されたものを扱います。 # ---------------------------------------------------------------------- # 上記以外の文字列の場合は、"アクター"と同じ扱いとなります。 # # ・イベントコマンドのスクリプトでの変更方法 # $game_system.rgsslab075.mode = "モードの文字列" #-------------------------------------------------------------------------- MODE = "アクター" #-------------------------------------------------------------------------- # ○ アクターのクリティカル個別設定 # ・記述方法 # アクターID => 倍率設定,(少数点可) # (最後の設定のみ、後ろのカンマを省略する事ができます) #-------------------------------------------------------------------------- ACTOR = { 1 => 3.0, 2 => 3.0, 3 => 3.0, 4 => 3.0, 5 => 3.0, 6 => 3.0, 7 => 3.0, 8 => 3.0, 9 => 3.0, 10 => 3.0, } #-------------------------------------------------------------------------- # ○ デフォルト設定(アクター) # ACTORに記述されていないアクターについてのデフォルト設定です。 #-------------------------------------------------------------------------- ACTOR_DEFAULT = 3.0 #-------------------------------------------------------------------------- # ○ 職業のクリティカル個別設定 # ・記述方法 # 職業のID => 倍率設定,(少数点可) # (最後の設定のみ、後ろのカンマを省略する事ができます) #-------------------------------------------------------------------------- CLASS = { 1 => 3.0, 2 => 3.0, 3 => 3.0, 4 => 3.0, 5 => 3.0, 6 => 3.0, 7 => 3.0, 8 => 3.0, 9 => 3.0, 10 => 3.0, } #-------------------------------------------------------------------------- # ○ デフォルト設定(職業) # CLASSに記述されていない職業についてのデフォルト設定です。 #-------------------------------------------------------------------------- CLASS_DEFAULT = 3.0 #-------------------------------------------------------------------------- # ○ 敵のクリティカル個別設定 # ・記述方法 # 敵のID => 倍率設定,(少数点可) # (最後の設定のみ、後ろのカンマを省略する事ができます) #-------------------------------------------------------------------------- ENEMY = { 1 => 3.0, } #-------------------------------------------------------------------------- # ○ デフォルト設定(敵) # ENEMYに記述されていない敵についてのデフォルト設定です。 #-------------------------------------------------------------------------- ENEMY_DEFAULT = 3.0 end # カスタマイズポイントは、ここまで #============================================================================== # □ RGSSLAB::Critical_Individual_Setting [module] #============================================================================== module RGSSLAB::Critical_Individual_Setting #-------------------------------------------------------------------------- # ○ 素材設定用の定数定義 #-------------------------------------------------------------------------- MATERIAL_NAME = "クリティカル個別設定" VERSION = 1 RELEASE = 20120712 end #============================================================================== # ■ Game_System [class] #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :rgsslab075 #-------------------------------------------------------------------------- # ● オブジェクト初期化 [エイリアス] #-------------------------------------------------------------------------- alias critical_individual_initialize initialize def initialize critical_individual_initialize @rgsslab075 = RgssLab_075.new end end #============================================================================== # □ RgssLab_075 [class] #============================================================================== class RgssLab_075 #-------------------------------------------------------------------------- # ○ モジュールの設定 #-------------------------------------------------------------------------- RGSSLAB_075 = RGSSLAB::Critical_Individual_Setting #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :mode #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize @mode = RGSSLAB_075::MODE end end #============================================================================== # ■ Game_Battler [class] #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ○ モジュールの設定 #-------------------------------------------------------------------------- RGSSLAB_075 = RGSSLAB::Critical_Individual_Setting #-------------------------------------------------------------------------- # ● ダメージ計算 [再定義] # user : 攻撃者 # item : スキル/アイテム #-------------------------------------------------------------------------- def make_damage_value(user, item) value = item.damage.eval(user, self, $game_variables) value *= item_element_rate(user, item) value *= pdr if item.physical? value *= mdr if item.magical? value *= rec if item.damage.recover? if $rgsslab["クリティカル倍率変更ステート"] value *= critical_rate(value, user) if @result.critical value = Integer(value) elsif $rgsslab["クリティカル個別設定"] ; value = apply_critical(value, user) if @result.critical else ; value = apply_critical(value) if @result.critical end value = apply_variance(value, item.damage.variance) if $rgsslab["ダメージ計算拡張"] ; value = apply_guard(value) unless damage_disregard_judge(item) else ; value = apply_guard(value) end value = damage_limit_process(value, item) if $rgsslab["ダメージ計算拡張"] @result.make_damage(value.to_i, item) end #-------------------------------------------------------------------------- # ● クリティカルの適用 [再構築] # damage : ダメージ # user : 攻撃者 #-------------------------------------------------------------------------- def apply_critical(damage, user) return apply_critical_actor(damage, user) if self.is_a?(Game_Enemy) return apply_critical_enemy(damage, user) if self.is_a?(Game_Actor) end #-------------------------------------------------------------------------- # ○ クリティカルの適用(敵→アクター) # damage : ダメージの値 # user : 攻撃者 #-------------------------------------------------------------------------- def apply_critical_actor(damage, user) if $game_system.rgsslab075.mode == "職業" rate = RGSSLAB_075::CLASS[user.class_id] ? RGSSLAB_075::CLASS[user.class_id] : RGSSLAB_075::CLASS_DEFAULT else rate = RGSSLAB_075::ACTOR[user.id] ? RGSSLAB_075::ACTOR[user.id] : RGSSLAB_075::ACTOR_DEFAULT end return Integer(damage * rate) end #-------------------------------------------------------------------------- # ○ クリティカルの適用(アクター→敵) # damage : ダメージの値 # user : 攻撃者 #-------------------------------------------------------------------------- def apply_critical_enemy(damage, user) rate = RGSSLAB_075::ENEMY[user.enemy_id] ? RGSSLAB_075::ENEMY[user.enemy_id] : RGSSLAB_075::ENEMY_DEFAULT return Integer(damage * rate) end end end