先制で『きあいパンチ』のステートになるスキルを使用した後、ステート発動タイミングがターン終了時かつステートが解除されていなかった場合、ターン終了のタイミングできあいパンチを放てる・・・といった挙動を実現したいです。
このようなスクリプトはないでしょうか?
ステートの効果を行動の強制に入れ替えるスクリプト【解決済み】
ステートの効果を行動の強制に入れ替えるスクリプト【解決済み】
最後に編集したユーザー ズッキー [ 2022年12月06日(火) 23:25 ], 累計 1 回
Re: ステートの効果を行動の強制に入れ替えるスクリプト
Game_Battler#on_turn_end...ではなくScene_Battle#turn_endを改造すれば出来そうな気がしますね。
ターンエンド処理が完了するまでに
@subjectにバトラーを入れて処理を中断すれば動きそうなので。
ベタ書きだとこんな感じじゃないですか。
30は判定に用いるステート,69は発動させるスキル,-1はターゲット(ランダム)ですね。
ターンエンド処理が完了するまでに
@subjectにバトラーを入れて処理を中断すれば動きそうなので。
コード: 全て選択
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ○ ターン終了
#--------------------------------------------------------------------------
alias :_old_turn_end :turn_end
def turn_end
battler = all_battle_members.find{|battler| battler.state?(30)}
if battler
battler.remove_state(30)
battler.force_action(69, -1)
@subject = battler
return
end
_old_turn_end
end
end
30は判定に用いるステート,69は発動させるスキル,-1はターゲット(ランダム)ですね。
Re: ステートの効果を行動の強制に入れ替えるスクリプト
名無し蛙様
ご返信ありがとうございます。
試してみたところうまく起動しました。
効果のバリエーションを増やすには
battler = all_battle_members.find{|battler| battler.state?(30)}
if battler
battler.remove_state(30)
battler.force_action(69, -1)
@subject = battler
return
end
の記述を増やせばよいでしょうか?
ご返信ありがとうございます。
試してみたところうまく起動しました。
効果のバリエーションを増やすには
battler = all_battle_members.find{|battler| battler.state?(30)}
if battler
battler.remove_state(30)
battler.force_action(69, -1)
@subject = battler
return
end
の記述を増やせばよいでしょうか?
Re: ステートの効果を行動の強制に入れ替えるスクリプト
どれくらい増やすかにもよりますねぇ
愚直に増やしても良いんですけど(その場合はaliasの名前が被らないように)
マジックナンバー抜き出してハッシュと配列使ってforeachで判定増やしても良いです。
愚直に増やしても良いんですけど(その場合はaliasの名前が被らないように)
マジックナンバー抜き出してハッシュと配列使ってforeachで判定増やしても良いです。
コード: 全て選択
TURN_END_SKILLS = [
{state_id: 30, skill_id: 69, target: -1},
{state_id: 31, skill_id: 69, target: -1},
{state_id: 32, skill_id: 69, target: -1},
{state_id: 33, skill_id: 69, target: -1},
]
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ○ ターン終了
#--------------------------------------------------------------------------
alias :_old_turn_end :turn_end
def turn_end
TURN_END_SKILLS.each do |tes|
battler = all_battle_members.find{|battler| battler.state?(tes[:state_id])}
if battler
battler.remove_state(tes[:state_id])
battler.force_action(tes[:skill_id], tes[:target])
@subject = battler
return
end
end
_old_turn_end
end
end
Re: ステートの効果を行動の強制に入れ替えるスクリプト
名無し蛙様
かなり使いやすくなりそうです。
ありがとうございます。
ところで質問したいのですが、このスクリプトで対象ステートをターン終了時に解除する処理はどこに記述しているのでしょうか?
ついでのようで悪いのですがおねがいします。
かなり使いやすくなりそうです。
ありがとうございます。
ところで質問したいのですが、このスクリプトで対象ステートをターン終了時に解除する処理はどこに記述しているのでしょうか?
ついでのようで悪いのですがおねがいします。
Re: ステートの効果を行動の強制に入れ替えるスクリプト
それは当然battler.remove_state(tes[:state_id])です
これがないと無限循環するんじゃないですかね
これがないと無限循環するんじゃないですかね
Re: ステートの効果を行動の強制に入れ替えるスクリプト
名無し蛙様
返信ありがとうございます。
はい、実際にターンエンドスキルに『対象ステートを100%味方に付与』を設定したところ無限ループが発生しておりました。
出来る事なら効果を2ターン継続できるものを作ってみたかったのですが、ステートを残したままループを抜け出す事は難しいのですね。
ですが副産物として、この性質を利用して面白いものが作れそうです。
今回はありがとうございました。
返信ありがとうございます。
はい、実際にターンエンドスキルに『対象ステートを100%味方に付与』を設定したところ無限ループが発生しておりました。
出来る事なら効果を2ターン継続できるものを作ってみたかったのですが、ステートを残したままループを抜け出す事は難しいのですね。
ですが副産物として、この性質を利用して面白いものが作れそうです。
今回はありがとうございました。