【RGSS3】スクリプトでのダメージ計算式について

せくもん
記事: 72
登録日時: 2018年6月09日(土) 21:48

【RGSS3】スクリプトでのダメージ計算式について

投稿記事by せくもん » 2022年1月29日(土) 10:09

いつもお世話になっております。
RPGツクールVXaceのダメージ計算でスキルやアイテムの計算式欄に

[a.atk * 4 - b.def * 2 , 1].max

の様に記述しても、相手の防御や属性有効度で半減されるとノーダメージになったり
先に防御力で減算してからクリティカルで3倍にするという計算方式が釈然としなかったので
全てのスキル・アイテムのダメージ計算式欄から『- b.def * 2 』『- b.mdf * 2 』の表記を削除し
Game_Battler の347行目以降を下記の様に改変しました。

コード: 全て選択

  #--------------------------------------------------------------------------
  # ●ダメージ計算
  #--------------------------------------------------------------------------
  def make_damage_value(user, item) #user=攻撃者 item=スキル self=攻撃された側
    value = item.damage.eval(user, self, $game_variables) #基本計算
    value = apply_critical(value) if @result.critical                  #クリティカルなら補正
    value -= (self.def + self.def) if item.physical?                      #物理攻撃の防御力減算
    value -= (self.mdf + self.mdf ) if item.magical?                   #魔法攻撃の防御力減算
    value = apply_variance(value, item.damage.variance)  #分散度による補正
    value = apply_guard(value)                                                       #ガード状態なら補正
    value = 1 if value < 1                                                                      #防御では0にしない
    value *= item_element_rate(user, item)                              #属性による補正
    value *= pdr if item.physical?                                                   #物理ダメージ率による補正
    value *= mdr if item.magical?                                                  #魔法ダメージ率による補正
    value = 1 if value < 1 && value > 0                                           #0%以外の時は1ダメージ
    value *= rec if item.damage.recover?                                   #回復スキルなら回復率による補正
    @result.make_damage(value.to_i, item)
  end
 


この内、7行目と8行目について
『クリティカルの時』と『スキル・アイテムのメモ欄に<防具貫通>の文字列がある時』に
防御力や魔法防御力による減算を行わない(value -=0として計算)様にするには
どのように記述すればよいでしょうか?

奈々(なな)
記事: 103
登録日時: 2016年11月06日(日) 16:57

Re: 【RGSS3】スクリプトでのダメージ計算式について

投稿記事by 奈々(なな) » 2022年1月29日(土) 11:02

私が書くなら

コード: 全て選択

unless (@result.critical || item.note.include?("<防具貫通>"))     #クリティカルか防御貫通スキルでない場合
    value -= (self.def + self.def) if item.physical?                      #物理攻撃の防御力減算
    value -= (self.mdf + self.mdf ) if item.magical?                   #魔法攻撃の防御力減算
end
という書き方ががシンプルですかね。

同じようにif修飾子の一行で書くなら

コード: 全て選択

 value -= (self.def + self.def) if (item.physical? && !@result.critical && !item.note.include?("<防具貫通>"))                      #物理攻撃の防御力減算
 value -= (self.mdf + self.mdf ) if (item.magical? && !@result.critical && !item.note.include?("<防具貫通>"))                   #魔法攻撃の防御力減算
という書き方もできます。

後のことを考えると、自分が分かりやすかった方で書いた方が良いですよ。
(時間が経つと、何をしているのか読み解きなおしになるので)
大丈夫だと思いますが、テストをしていないので凡ミスでエラーが出たらごめんなさい。
------------------------------------------------------------------------------------
へぷたなすくろーる
http://heptanas.mamagoto.com/

VXAceのスクリプト素材及びイベント講座などをやっています。
------------------------------------------------------------------------------------
せくもん
記事: 72
登録日時: 2018年6月09日(土) 21:48

Re: 【RGSS3】スクリプトでのダメージ計算式について

投稿記事by せくもん » 2022年1月29日(土) 11:57

奈々(なな)様、ご返答ありがとうございます。

こちらで動作テストを行った所、無事に想定通りの挙動を確認できました。
『!@result.critical』の後ろに『?』を付けては駄目だったのですね…(汗)

どうもありがとうございました。

“VX / Ace:質問” へ戻る