ページ 12

属性依存のカウンターシステム

Posted: 2017年5月02日(火) 17:18
by shimei
特定の属性にだけ反応して発動する、カウンタースクリプトがほしいです
できれば、カウンターを行うアクター・バトラーが対象じゃなくても発動するのが望ましいです。
お願いします

Re: 属性依存のカウンターシステム

Posted: 2017年5月04日(木) 22:07
by TOMO
とりあえず作りましたが、これでいいですか?

コード: 全て選択

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの発動
  #--------------------------------------------------------------------------
  alias tomo_element_counter_attack_invoke_item invoke_item
  def invoke_item(target, item)
    if target.states.any? do |state|
        state.note.match(/<属性依存反撃:(\d+)>/i) &&
        $1.to_i == item.damage.element_id
      end
      invoke_counter_attack(target, item)
      @subject.last_target_index = target.index
    else
      tomo_element_counter_attack_invoke_item(target, item)
    end
  end
end

ステートのメモ欄に『<属性依存反撃:3>』と書いてください
(数値は属性ID)

その属性の攻撃に対し、
物理・魔法関係なく100%の確率で、「通常攻撃」で反撃します


「カウンターシステム」と言われても、
「物理限定や魔法限定で発動するタイプ」とか、
「属性別に反撃率を設定するタイプ」とか色々あるので、
出来れば詳しく書いてください
(コチラのような、ダメージを受けて反撃するタイプもあります)

Re: 属性依存のカウンターシステム

Posted: 2017年5月05日(金) 03:02
by shimei
TOMOさま>
ありがとうございます
たとえば、
カウンター発動者自身が対象じゃなくても、火属性の(スキル、武器、アイテム)をだれか(バトラーA、アクターA)が使用した場合、カウンター的に爆発して相手方全員にダメージを与え、戦闘不能になるバトラーB/アクターBを造りたいのです

また、タイトルとは違いますが、「特定のバトラーA/アクターAのHPが一定以下になったときに、カウンター的に攻撃力が激増するバトラーB/アクターB」というのも作りたいです

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 02:08
by TOMO
とりあえず前者の方を作りました

コード: 全て選択

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの発動
  #--------------------------------------------------------------------------
  alias tomo_element_counter_attack_invoke_item invoke_item
  def invoke_item(target, item)
    if target.states.any? do |state|
        state.note.match(/<属性依存反撃:(\d+),(\d+)>/i) &&
        (item.damage.element_id < 0 ? @subject.atk_elements.include?($1.to_i) :
        $1.to_i == item.damage.element_id)
      end
      target.force_action($2.to_i, target.index)
      process_forced_action
      @subject.last_target_index = target.index
    else
      tomo_element_counter_attack_invoke_item(target, item)
    end
  end
end

ステートのメモ欄に『<属性依存反撃:3,20>』と書いてください
(数値は左から属性ID,スキルIDです)

これと、星潟様の「アイテム・スキル使用者ステート・能力変化」を使えば出来ると思います
(対象スキルのメモ欄に『<使用者ステート:1,100>』と書けば可能)

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 10:27
by faida
後者はここのトピックで見かけたような気がします。
viewtopic.php?f=46&t=2666

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 18:21
by shimei
お二人ともありがとうございます!

>TOMO様 う~ん、当方の環境では機能してないような…?

>faida様 このスクリプトは、たとえば蜂の巣(バトラー)が1でもダメージを受けたら、一緒にでてきたキラービー(バトラー)の攻撃力が倍になるとかそういう使い方もできますかね?

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 18:48
by TOMO
私の方で試した方法は、
まず炎属性(属性ID:3)に反応して反撃するステートのメモ欄に「<属性依存反撃:3,128>」と書き、
スキルID:128に自爆スキルを作成し、
そのスキルのメモ欄に「<使用者ステート:1,100>」と書きます

そして「ダメージ計算式の「属性」が炎のスキル」または「攻撃時属性が炎のキャラ」で攻撃して試してました


私のスクリプトの中身としては、
特定属性の攻撃だった場合に、指定したスキルで「戦闘行動の強制」をし、即時発動させてるだけです

その後、星潟様のスクリプトの効果で、反撃したキャラを「戦闘不能」にしてます

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 19:03
by shimei
TOMOさま>
なるほど、どうやらスクリプトが機能してない(ように見えた)のは、属性依存カウンターを発動する側の敏捷性が、炎属性攻撃をする側より早かったからのようです。
敏捷性を修正したら機能しました。ありがとうございました

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 20:46
by faida
わざわざスクリプトに頼らずとも、バトルイベントでできるような気がしますが……。
条件を「蜂の巣のHPが99%以下」にして、ステートを付加するとか。

Re: 属性依存のカウンターシステム

Posted: 2017年5月06日(土) 22:54
by TOMO
先に行動していても発動するようにしました

コード: 全て選択

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの発動
  #--------------------------------------------------------------------------
  alias tomo_element_counter_attack_invoke_item invoke_item
  def invoke_item(target, item)
    if target.states.any? do |state|
        state.note.match(/<属性依存反撃:(\d+),(\d+)>/i) &&
        (item.damage.element_id < 0 ? @subject.atk_elements.include?($1.to_i) :
        $1.to_i == item.damage.element_id)
      end
      invoke_element_counter_attack(target, $2.to_i)
      @subject.last_target_index = target.index
    else
      tomo_element_counter_attack_invoke_item(target, item)
    end
  end
  #--------------------------------------------------------------------------
  # ● 属性依存反撃の発動
  #--------------------------------------------------------------------------
  def invoke_element_counter_attack(user, skill_id)
    item = $data_skills[skill_id]
    @log_window.display_use_item(user, item)
    user.use_item(item)
    refresh_status
   
    action = Game_Action.new(user)
    action.set_skill(skill_id)
    targets = action.make_targets.compact
   
    show_animation(targets, item.animation_id)
    targets.each {|target| item.repeats.times {
      apply_item_effects(apply_substitute(target, item), item)
    } }
    begin # 星潟様のスクリプトがある場合
      user.ba_item_self_effect(item, false)
    rescue
    end
  end
end

ただし、「敵単体」などで「属性攻撃してきた相手」に反撃する事は出来ず、
対象選択はAI任せとなっています