(解決済み)【RGSS3】ステート付加における確率をあげたい

ジェルグ
記事: 6
登録日時: 2021年5月12日(水) 14:51

(解決済み)【RGSS3】ステート付加における確率をあげたい

投稿記事by ジェルグ » 2021年5月12日(水) 15:04

職業や装備品に「該当するステート付与成功率UP」の効果を付けたいのですが、やり方が解りません。
能力値「運」に関すること以外で教えて欲しいです。「運」では他のステートを付加する確率も上がってしまいますので。
最後に編集したユーザー ジェルグ on 2021年6月15日(火) 15:28 [ 編集 1 回目 ]

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】ステート付加における確率をあげたい

投稿記事by 名無し蛙 » 2021年5月12日(水) 23:14

こんばんは
適当ですけど誰がやっても似たような改造に落ち着くんじゃないかと思います

コード: 全て選択

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● ステート付与成功率UPの取得
  #--------------------------------------------------------------------------
  def add_state_rate_ex(state_id)
    ([self.class] + self.equips.compact).inject(1.0) do |r, obj|
      if obj.note =~ /\<ステート付与成功率UP\:(\d+)\:(\d+)\%\>/ && $1.to_i == state_id
        r + $2.to_i * 0.01
      else
        r
      end
    end
  end
end


class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ○ 使用効果[ステート付加]:通常攻撃
  #--------------------------------------------------------------------------
  def item_effect_add_state_attack(user, item, effect)
    user.atk_states.each do |state_id|
      chance = effect.value1
      chance *= state_rate(state_id)
      chance *= user.atk_states_rate(state_id)
      chance *= luk_effect_rate(user)
      chance *= user.add_state_rate_ex(state_id) if user.actor?
      if rand < chance
        add_state(state_id)
        @result.success = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ 使用効果[ステート付加]:通常
  #--------------------------------------------------------------------------
  def item_effect_add_state_normal(user, item, effect)
    chance = effect.value1
    chance *= state_rate(effect.data_id) if opposite?(user)
    chance *= luk_effect_rate(user)      if opposite?(user)
    chance *= user.add_state_rate_ex(effect.data_id) if user.actor?
    if rand < chance
      add_state(effect.data_id)
      @result.success = true
    end
  end
end

<ステート付与成功率UP:4:50%>とか書けば反映されると思います。
左がステートIDで右が上昇成功確率(%表記)

ステート付与成功率に干渉する方法はitem_effect_add_state_attack、及びitem_effect_add_state_normalの二つ。
それぞれ通常攻撃の追加効果で発動するステート付与と
スキル/アイテムの使用効果で発動するステート付与で処理が微妙に異なります。
都合上aliasが使えないので競合リスクが高いですが基本的にここ以外改造ポイントは無いと思います。
メモ欄からのパラメータ取得(add_state_rate_ex)はこちらでも書いた事の流用ですね。
ジェルグ
記事: 6
登録日時: 2021年5月12日(水) 14:51

Re: 【RGSS3】ステート付加における確率をあげたい

投稿記事by ジェルグ » 2021年5月13日(木) 14:09

名無し蛙様。私の要望に応えて頂き、誠にありがとうございます。
ですが頂いたスクリプト素材を新規プロジェクトを立ち上げた状態に導入して、「<ステート付与成功率UP:2:100%>を書き記した職業のアクターが毒(ステートid2)を0%の確率で付与するスキルを使った場合」で試した所、「スライムAには効かなかった」という結果が出ました。

厚かましいお願いですが、ステート付加成功率0%のスキルを100%まで底上げする手段を教えていただけないでしょうか?
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】ステート付加における確率をあげたい

投稿記事by 名無し蛙 » 2021年5月13日(木) 17:13

既存のステート付与の成功確率は
A×B×(※C)×D×E
A...アイテム/スキルの「使用効果」ステート付与率
B...対象者のステート有効度(何も書いてない場合は100%)
(※C)...(スキルが通常攻撃属性であり、特徴「攻撃時ステート」が設定されている場合、特徴設定値の総和を乗算)
D...運補正。右の計算式の通り微々たるもの(1.0 +(行動者の運-対象者の運)* 0.001)
E...今回作った補正率。1.0+総和を乗算しています。

で、乗算ならどこに挿し込んでも変わらないですけど加算だと挿入タイミングによって計算結果が変わります。
とりあえず(A+E)×B×(※C)×Dにしておくのでそれで気になるようならご自分で調整した方が良いと思います。

コード: 全て選択

      chance = effect.value1 # A
      chance += user.add_state_rate_ex(state_id) if user.actor?  # E
      chance *= state_rate(state_id) # B
      chance *= user.atk_states_rate(state_id) # C
      chance *= luk_effect_rate(user) # D
とか書いてあるのがそれです。二ヶ所あります。

コード: 全て選択

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● ステート付与成功率UPの取得
  #--------------------------------------------------------------------------
  def add_state_rate_ex(state_id)
    ([self.class] + self.equips.compact).inject(0.0) do |r, obj|
      if obj.note =~ /\<ステート付与成功率UP\:(\d+)\:(\d+)\%\>/ && $1.to_i == state_id
        r + $2.to_i * 0.01
      else
        r
      end
    end
  end
end
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ○ 使用効果[ステート付加]:通常攻撃
  #--------------------------------------------------------------------------
  def item_effect_add_state_attack(user, item, effect)
    user.atk_states.each do |state_id|
      chance = effect.value1
      chance += user.add_state_rate_ex(state_id) if user.actor?
      chance *= state_rate(state_id)
      chance *= user.atk_states_rate(state_id)
      chance *= luk_effect_rate(user)
      if rand < chance
        add_state(state_id)
        @result.success = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ 使用効果[ステート付加]:通常
  #--------------------------------------------------------------------------
  def item_effect_add_state_normal(user, item, effect)
    chance = effect.value1
    chance += user.add_state_rate_ex(effect.data_id) if user.actor?
    chance *= state_rate(effect.data_id) if opposite?(user)
    chance *= luk_effect_rate(user)      if opposite?(user)
    if rand < chance
      add_state(effect.data_id)
      @result.success = true
    end
  end
end
ジェルグ
記事: 6
登録日時: 2021年5月12日(水) 14:51

Re: 【RGSS3】ステート付加における確率をあげたい

投稿記事by ジェルグ » 2021年5月13日(木) 20:01

名無し蛙様。頂いたスクリプト素材で試した所、無事機能しました。
このスクリプトが無かったら非常に面倒な手順で付与の確率を操作せざる負えないどころか、ダメージ計算を伴うステート付与スキルとステート付与成功確率UPのコンボが成立しないという有様になるところでした。
本当にありがとうございます。

“VX / Ace:質問” へ戻る