#============================================================================== # ■ RGSS2 VXAce風基本ダメージ式設定 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # RPGツクールVXではアイテム/スキルのダメージ計算式は自由度が低く使い辛いですが # このスクリプトを使用する事でこの計算にVXAceのダメージ設定に準じた処理を追加し # 各アイテム/スキル別に自由に計算式を指定できるようにします。 # # 計算式の記述はメモ欄に特定の書式を記述した後 # 次にその書式が記述されるまでの間の行を個別に判定し # 計算結果はそれらを全て加算したものとなります。 # # 式が設定されたスキルの本来の基本ダメージ・打撃関係度・精神関係度は # ダメージ計算時に0扱いされて無視されますが回復スキルか否かの判定や # 沈黙状態におけるスキルの使用可能判定等には用いられます。 # なので、基本ダメージについては攻撃スキルは1以上、回復スキルは-1以下の値を # それぞれ設定しておく事を強く推奨します。 # また、魔法に関しては精神関係度を1以上にしておけば魔法扱いとなります。 # # 恐らく、ダメージ予測関係のスクリプトとは非常に相性が悪いです。ご了承ください。 #============================================================================== # 設定例(アイテム/スキルのメモ欄に記入) #============================================================================== # <計算式記述> # a.atk * 6 + a.spi * 3 - b.def * 2 - b.spi * 1 # <計算式記述> # # この場合の基本ダメージ計算式は以下のようになります。 # 使用者の攻撃力×6+使用者の精神力×3−対象の防御力×2−対象の精神力 #------------------------------------------------------------------------------ # <計算式記述> # $game_party.gold / 100 # <計算式記述> # # この場合の基本ダメージ計算式は以下のようになります。 # パーティの所持金額÷100 #------------------------------------------------------------------------------ # <計算式記述> # a.level * a.atk # <計算式記述> # # この場合の基本ダメージ計算式は以下のようになります。 # 使用者のレベル×使用者の攻撃力 # ※通常はアクターにしかレベルは存在しない為、エネミーが使用した場合はエラーになります。 # エラーになる場合はダメージ判定が行われません。 #------------------------------------------------------------------------------ # <計算式記述> # a.agi * 4 - b.agi * 2 # <計算式記述> # # この場合の基本ダメージ計算式は以下のようになります。 # 使用者の敏捷性×4−対象の敏捷性×2 #------------------------------------------------------------------------------ # <計算式記述> # v[1] * v[2] # a.maxhp / 25 # -b.maxmp / 10 # <計算式記述> # # この場合の基本ダメージ計算式は以下のようになります。 # 変数ID1の値×変数ID2の値+使用者の最大HP÷25−対象の最大MP÷10 #------------------------------------------------------------------------------ # <計算式記述> # b.state_resist?(2) ? 0 : (b.state_probability(2) * a.spi / 10 - b.spi) # <計算式記述> # # この場合の基本ダメージ計算式は以下のようになります。 # 対象がステートID2無効出ない場合に限り # 対象のステート有効度×使用者の精神力÷10−対象の精神力 #============================================================================== # Ver1.01 VXAceデフォルトにより近づくよう、以下の2点に関して変更しました。 # - 計算式の結果が小数点を含む場合でも # 自動的に整数に整えられるように変更しました。 # - ダメージの正負が逆転しないように修正しました。 #============================================================================== module SIDVXAF Word = "計算式記述" end class Game_Temp attr_accessor :sbd_hash end class Game_Battler #-------------------------------------------------------------------------- # スキル・アイテムダメージ計算 #-------------------------------------------------------------------------- alias make_obj_damage_value_base_damage_ace make_obj_damage_value def make_obj_damage_value(user, obj) $game_temp.sbd_hash = {:a => user, :b => self, :v => $game_variables} make_obj_damage_value_base_damage_ace(user, obj) $game_temp.sbd_hash = nil end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 基本ダメージ #-------------------------------------------------------------------------- alias base_damage_base_damage_ace base_damage unless $! def base_damage bd = base_damage_base_damage_ace return bd unless bdvxa_flag damage = 0 h = $game_temp.sbd_hash a = h[:a];b = h[:b];v = h[:v] for i in base_damage_vxa;damage += eval(i).to_i rescue nil;end [damage,0].max * (bd < 0 ? -1 : 1) end #-------------------------------------------------------------------------- # 打撃関係度 #-------------------------------------------------------------------------- alias atk_f_base_damage_ace atk_f unless $! def atk_f bdvxa_flag ? 0 : atk_f_base_damage_ace end #-------------------------------------------------------------------------- # 精神関係度 #-------------------------------------------------------------------------- alias spi_f_base_damage_ace spi_f unless $! def spi_f bdvxa_flag ? 0 : spi_f_base_damage_ace end #-------------------------------------------------------------------------- # VXAce風基本ダメージ #-------------------------------------------------------------------------- def bdvxa_flag $game_temp && $game_temp.sbd_hash && !base_damage_vxa.empty? end #-------------------------------------------------------------------------- # VXAce風基本ダメージ #-------------------------------------------------------------------------- def base_damage_vxa @base_damage_vxa ||= create_base_damage_vxa end #-------------------------------------------------------------------------- # VXAce風基本ダメージ作成 #-------------------------------------------------------------------------- def create_base_damage_vxa f = false a = [] self.note.each_line {|l| if /<#{SIDVXAF::Word}>/ =~ l f = !f next end a.push(l) if f } a end end