【RGSS3】パーティ中、独りにしか掛けられないステート

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

【RGSS3】パーティ中、独りにしか掛けられないステート

投稿記事by せくもん » 2019年8月02日(金) 23:14

いつもお世話になっております。

現在製作中のゲームに『ロックオン』というスキルが登場します。
これは『対象の狙われ率を1000%にするステートを掛ける』という物で

①主人公以外の味方キャラは『強撃』や『ファイア』等、スキルの種類は選べるが
 攻撃対象はランダムであり、主人公が『ロックオン』を使用してターゲットを誘導する事が出来る。

②本体は攻撃をせず、毎ターンひたすら『ロックオン』をランダムに掛け
 大量に引き連れた雑魚がロックオンされたアクターに集中攻撃を仕掛けるタイプのボスキャラ。

…等の効果をもたらしたいと考えています。


例えば敵A、敵B、敵Cのパーティが居て敵Aに『ロックオン』を掛け
敵AのHPが無くなるまでそのままなら特に問題は無いのですが
敵Aがまだ生存中の際に敵Bや敵Cに『ロックオン』を掛けてしまうと
狙われ率1000%のバトラーがパーティ内に2名以上存在する事になり
本来意図した挙動になってくれません。(特に②のケースでは全く脅威が無くなります。)

『一旦、全員のステートを解除し、新たに掛け直す』というのも試したのですが
これだと敵Bが回避に成功したり、敵Cにロックオン無効の特徴があった場合
何の関係も無い敵Aのロックオンだけが解除されるという結果になってしまいます。

基本的に『最後にステート付加に成功した対象が優先』という形で
アクターが使用者の場合はエネミー1体のみ
エネミーが使用者の場合はアクター1体のみにステートを掛けるには
どの様にしたらよいでしょうか?


※『アクター1』と『エネミーB』等、パーティが異なる場合は
 同じステートを付加された対象が同時に存在しても問題ないものとします。

ぽんぽこねるそん
記事: 53
登録日時: 2018年10月26日(金) 12:24

Re: 【RGSS3】パーティ中、独りにしか掛けられないステート

投稿記事by ぽんぽこねるそん » 2019年8月03日(土) 00:26

せくもんさん、こんばんは。
メモ欄ででもパーティ内で重複しないステートか判別できるようにして
そのステートが新しく付加された時に自分以外のパーティメンバーに対して解除を行えばいいかと思います。

コード: 全て選択

#パーティ内で特定のステートを重複できないようにします
#(ステートが付加された時に自分以外のパーティメンバーに対してステート解除を行います)
#重複させたくないステートのメモ欄に <パーティ重複不可> と記述してください
#敵グループも同様に重複しないようになります
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 新しいステートの付加
  #--------------------------------------------------------------------------
  alias org_add_new_state add_new_state
  def add_new_state(state_id)
    org_add_new_state(state_id)
    friends_remove_state(state_id) if $data_states[state_id] && $data_states[state_id].note.include?("<パーティ重複不可>")
  end
  #--------------------------------------------------------------------------
  # ● 仲間のステートの解除
  #--------------------------------------------------------------------------
  def friends_remove_state(state_id)
    (friends_unit.members - [self]).each {|member| member.remove_state(state_id)}
  end
end
せくもん
記事: 72
登録日時: 2018年6月09日(土) 21:48

Re: 【RGSS3】パーティ中、独りにしか掛けられないステート

投稿記事by せくもん » 2019年8月03日(土) 22:05

ぽんぽこねるそん様、ご返答ありがとうございます。

ステートの解除をスキル使用者の側がするという考え方に囚われていたので
『ステートを掛けられた側が自分以外の味方を解除する』という発想は正に目から鱗でした。

スクリプトを導入して色々と試してみたところ『敵1体のみに掛けられるステート』だけでなく
『味方一人にしか掛けられない強化バフ』や
デフォルトの『挑発』で『味方に掛けられたロックオンを解除しつつ、攻撃対象を自分に向ける』
といった使い方も出来るみたいです。

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

“VX / Ace:質問” へ戻る