RGSS2備忘録その8 回避率を敏捷性依存にする

こんばんわー( ^ω^)
Quest Mania公式ホームページでは、これからクエストを作り始めますとかって
書いてありますが、実はまだぜんぜん作り始めてません(´;ω;`)スミマセン

で、今日は通常攻撃の回避率を敏捷性に依存させるって言うのをやります。
噛み砕いて言うと、もともと回避率は装備してるアイテムによって決められますが、
今回はスクリプトをいじって、敏捷性が高いほど、回避率が高くなるようにさせます。
っていうのをやります。

まずは、ヒット率の変更から

class Game_Battler

 def calc_hit(user, obj = nil)
    hit = 100
    if obj == nil                           # 通常攻撃の場合 
     elsif obj.is_a?(RPG::Skill)             # スキルの場合
      hit = obj.hit                         # 成功率を取得 
    else                                    # アイテムの場合
      hit = 100                             # 命中率を 100% とする 
    end 
    return hit
  end
end


スキル使用時だけはその成功率を適応させます。それ以外はすべて100%にします。
次に回避率の定義ですが、
回避率=(1-攻撃者の敏捷性/自分の敏捷性)×75
で、最大95%、最小5%にします。
というふうにします。
自分の敏捷性が攻撃者の敏捷性の3倍だったら半分の回避できるという計算になります。

class Game_Battler

 def calc_eva(user, obj = nil)
    user_agi = user.agi * 1.00
    user_agi /= 4 if user.reduce_hit_ratio?
    eva = (1 - (user_agi / self.agi)) * 75
    eva = [[eva, 5].max, 95].min
    unless obj == nil                       # 通常攻撃ではない場合
      eva = 0 unless obj.physical_attack    # 物理攻撃以外なら 0% とする
    end
    unless parriable?                       # 回避不可能な状態の場合
      eva = 0                               # 回避率を 0% とする
    end
    return eva
  end
end

これで敏捷性が高ければ高いほど回避率が高くなります。(^▽^)ヤッタネ
さーて、そろそろほんとうにクエストつくるかな(´・ω・`) まじで
では、またー(^▽^)ノシ

スポンサーサイト

テーマ : RPGツクール
ジャンル : ゲーム

コメントの投稿

管理者にだけ表示を許可する

回避率計算式について

>回避率=(1-攻撃者の敏捷性/自分の敏捷性)×75
の内容で質問なんですが。

攻撃者の敏捷性が自分の敏捷性より大きい値の場合、
例:攻撃者=20、自分=10
(1-20/10)×75=(1-2)×75=-75%
といったよ様に回避率が負の値になりませんか!?
よく理解できなくてスミマセン・・・

回避率計算式について

そのとおりです。
そこで算出された値は、attack_effectメソッドで
rand(100)との比較を行うだけなので、
負の値になっても特に問題はないと思います。
ただ、ここで負の値、つまり全く回避不可能っていうのでは面白みが
ないので、eva = [[eva, 5].max, 95].min
で上限と下限を設定してあります。

回避率を敏捷性依存について

この計算法で算出された回避率に
デフォルト状態のスクリプトで初期設定されている回避率や
盾などの装備に設定されている回避率をプラスさせるには
どういじったら良いのか、宜しければ教えていただけませんか?

それともこの計算法で既に反映されるようになっていますか?

回避率を敏捷性依存について

言うのを忘れましたが、このスクリプトは装備品の命中率や
回避率は、排除しています。
このスクリプトに装備品に設定されてる回避率を反映させるには
self.eva でそのプラス分が算出されるので、
eva += self.eva をお好きな位置にいれればいいです。
俺的には
eva = [[eva, 5].max, 95].minの前の行に挿入するのが
いいんじゃないかなと思います。

ちなみにself.evaのままだと、エネミーの場合も、エネミーで設定した
回避率が加算されてしまうので、
アクターだけに反映させたい場合は、
eva += self.eva if self.class == Game_Actor
という風にすればいいと思います。

訂正

上のコメントの最後から2番目の行の
self.class == Game_Actor は、
self.is_a?(Game_Actor) に直さないとうまく
反映されません。
self.class といれると、自分の職業を返してくるようです。
プロフィール

Suppon

Author:Suppon
すっぽんでーす。(^▽^)
カルドラ鋭意制作中( ・`ω・´)
Twitter => suppon01
メールはこちらへ
suppon2008@gmail.com

Twitter...

Twitter Reload

最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
ブロとも申請フォーム

この人とブロともになる