【解決済み】【RGSS3】会心時・弱点属性攻撃時にステート付与

タツミ
記事: 30
登録日時: 2015年12月29日(火) 23:51

【解決済み】【RGSS3】会心時・弱点属性攻撃時にステート付与

投稿記事by タツミ » 2022年11月04日(金) 17:24

こげ兎ザブロゥ 様『クリティカルand弱点攻撃時ステート付与』の使用を考えていたのですが、
付与率が設定できず、耐性を貫通して付与されるのでゲームのバランス調整が難しく諦めました。

攻撃が『会心の一撃になった』又は『弱点属性を突いた』際にステート付与するスクリプトをお願いします。
・ステート付与率が設定できる
・ステート耐性が反映される
最後に編集したユーザー タツミ on 2022年11月05日(土) 18:05 [ 編集 1 回目 ]

DEDEN
記事: 51
登録日時: 2018年8月25日(土) 15:06

Re: 【RGSS3】会心時・弱点属性攻撃時にステート付与

投稿記事by DEDEN » 2022年11月04日(金) 23:27

タツミ 様
スクリプトを作成してみました
スキルのメモ欄に<critical_state>と記述すると
クリティカル時のみステート付与処理を行います
ステート付与確率等は従来通りに使用効果欄で設定してください
何かあればいつでもどうぞ

追記:弱点を突いた時を忘れていたので機能追加します
申し訳ありませんが少々お待ちください

コード: 全て選択

#==============================================================================
# ■ クリティカル時のみステートを付与するスキル
#------------------------------------------------------------------------------
#  <critical_state>とメモ欄に記述するとクリティカル時にのみステート付与処理を
#   行います
#==============================================================================
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)
      if rand < chance
        add_state(state_id,item)
        @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)
    if rand < chance
      add_state(effect.data_id,item,user)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加
  #--------------------------------------------------------------------------
  def add_state(state_id,item = nil,user = nil)
    if state_addable?(state_id,item,user)
      add_new_state(state_id) unless state?(state_id)
      reset_state_counts(state_id)
      @result.added_states.push(state_id).uniq!
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加可能判定
  #--------------------------------------------------------------------------
  def state_addable?(state_id,item,user = nil)
    alive? && $data_states[state_id] && !state_resist?(state_id) &&
      !state_removed?(state_id) && !state_restrict?(state_id) && critical_check(item,user)
  end
  #--------------------------------------------------------------------------
  # ● クリティカルチェック
  #--------------------------------------------------------------------------
  def critical_check(item,user)
    return true if item.nil?
    if /^\<critical_state>/ =~ item.note
      @result.critical ? true : false
    else
      true
    end
  end
end
DEDEN
記事: 51
登録日時: 2018年8月25日(土) 15:06

Re: 【RGSS3】会心時・弱点属性攻撃時にステート付与

投稿記事by DEDEN » 2022年11月05日(土) 01:19

大変お待たせしました
<cri_weak_state>とメモ欄に記述すればクリティカルか弱点攻撃時にステート付与処理を行います

コード: 全て選択

#==============================================================================
# ■ クリティカル/弱点攻撃時のみステートを付与するスキル
#------------------------------------------------------------------------------
#  <cri_weak_state>とメモ欄に記述するとクリティカルか弱点攻撃時にのみ
#    ステート付与処理を行います
#==============================================================================
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)
      if rand < chance
        add_state(state_id,item)
        @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)
    if rand < chance
      add_state(effect.data_id,item,user)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加
  #--------------------------------------------------------------------------
  def add_state(state_id,item = nil,user = nil)
    if state_addable?(state_id,item,user)
      add_new_state(state_id) unless state?(state_id)
      reset_state_counts(state_id)
      @result.added_states.push(state_id).uniq!
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加可能判定
  #--------------------------------------------------------------------------
  def state_addable?(state_id,item,user = nil)
    alive? && $data_states[state_id] && !state_resist?(state_id) &&
      !state_removed?(state_id) && !state_restrict?(state_id) && critical_check(item,user)
  end
  #--------------------------------------------------------------------------
  # ● クリティカルチェック
  #--------------------------------------------------------------------------
  def critical_check(item,user)
    return true if item.nil?
    if /^\<cri_weak_state>/ =~ item.note
      @result.critical ? true : false || weak?
    else
      true
    end
  end
  #--------------------------------------------------------------------------
  # ● 弱点属性チェック
  #--------------------------------------------------------------------------
  def weak?
    @weak
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの属性修正値を取得
  #--------------------------------------------------------------------------
  def item_element_rate(user, item)
    if item.damage.element_id < 0
      rate = user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements)
    else
      rate = element_rate(item.damage.element_id)
    end
    rate > 1.0 ? @weak = true : @weak = false
    return rate
  end
end
タツミ
記事: 30
登録日時: 2015年12月29日(火) 23:51

Re: 【RGSS3】会心時・弱点属性攻撃時にステート付与

投稿記事by タツミ » 2022年11月05日(土) 14:54

DEDEN 様、ありがとうございます。

もしよろしければ、<critical_state>と <weak_state>は個別に設定できるようにお願いします。
DEDEN
記事: 51
登録日時: 2018年8月25日(土) 15:06

Re: 【RGSS3】会心時・弱点属性攻撃時にステート付与

投稿記事by DEDEN » 2022年11月05日(土) 16:47

タツミ 様
対応させたのでご確認下さい

コード: 全て選択

#==============================================================================
# ■ クリティカル/弱点攻撃時のみステートを付与するスキル
#------------------------------------------------------------------------------
#  <critical_state>とメモ欄に記述するとクリティカル時にのみ
#    ステート付与処理を行います
#   <weak_state>とメモ欄に記述すると弱点攻撃時にのみ
#    ステート付与処理を行います
#   この2つは重複可能です
#==============================================================================
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)
      if rand < chance
        add_state(state_id,item)
        @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)
    if rand < chance
      add_state(effect.data_id,item,user)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加
  #--------------------------------------------------------------------------
  def add_state(state_id,item = nil,user = nil)
    if state_addable?(state_id,item,user)
      add_new_state(state_id) unless state?(state_id)
      reset_state_counts(state_id)
      @result.added_states.push(state_id).uniq!
    end
  end
  #--------------------------------------------------------------------------
  # ● ステートの付加可能判定
  #--------------------------------------------------------------------------
  def state_addable?(state_id,item,user = nil)
    alive? && $data_states[state_id] && !state_resist?(state_id) &&
      !state_removed?(state_id) && !state_restrict?(state_id) && critical_weak_check(item,user)
  end
  #--------------------------------------------------------------------------
  # ● クリティカル/弱点チェック
  #--------------------------------------------------------------------------
  def critical_weak_check(item,user)
    return true if item.nil?
    if /^\<critical_state>/ =~ item.note && /^\<weak_state>/ =~ item.note
      @result.critical ? true : false || @weak
    elsif /^\<critical_state>/ =~ item.note
      @result.critical ? true : false
    elsif /^\<weak_state>/ =~ item.note
      weak? ? true : false
    else
      true
    end
  end
  #--------------------------------------------------------------------------
  # ● 弱点属性チェック
  #--------------------------------------------------------------------------
  def weak?
    @weak
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの属性修正値を取得
  #--------------------------------------------------------------------------
  def item_element_rate(user, item)
    if item.damage.element_id < 0
      rate = user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements)
    else
      rate = element_rate(item.damage.element_id)
    end
    rate > 1.0 ? @weak = true : @weak = false
    return rate
  end
end
タツミ
記事: 30
登録日時: 2015年12月29日(火) 23:51

Re: 【RGSS3】会心時・弱点属性攻撃時にステート付与

投稿記事by タツミ » 2022年11月05日(土) 18:04

DEDEN 様、使いやすくて助かります、ありがとうございました。

“VX / Ace:スクリプト素材のリクエスト” へ戻る