いつもお世話になっております。
現在製作中のゲームでタンク役のスキルを充実させる為に下記の様なスキルを制作しました。
『スーパーガード』はかばうの上位互換で味方の身代わりをしつつ
物理ダメージ率0%、魔法ダメージ率0%で必中攻撃以外を完全にシャットアウトします。
『マルチカウンター』は反撃と魔法反射を併せ持ったスキルで
必中攻撃以外を無効化し、カウンター攻撃を仕掛けます。
どちらもそのままでは強力過ぎるので、かばう・反撃・魔法反射との差別化を考えて
一度スキルが発動したらステートを解除する仕様にしたいのですが
『ダメージで解除』のチェックを入れても、そもそもダメージを受けていないので解除出来ません。
継続ターン数経過前でも、一度スキルが発動した時点で『ダメージで解除』と同様に
ステートを解除させるには、どの様にしたら良いのでしょうか?
【RGSS3】ダメージ0でも解除されるステート
Re: 【RGSS3】ダメージ0でも解除されるステート
せくもん様
スクリプトエディタ中で
on_damage(@result.hp_damage) if @result.hp_damage > 0
を検索して該当した行のif @result.hp_damage > 0をif @result.hp_damage >= 0すれば
ダメージが0の時でもダメージ時のステート解除判定が処理されます。
コメントアウトしてしまう場合は回復時にも処理されるので注意してください。
バリア系のスクリプトは探せばありそうなので
この方法で不満がある場合は探してみてもよいと思います。
僕はそんな時間はかけてませんが、見つけられませんでした。
スクリプトエディタ中で
on_damage(@result.hp_damage) if @result.hp_damage > 0
を検索して該当した行のif @result.hp_damage > 0をif @result.hp_damage >= 0すれば
ダメージが0の時でもダメージ時のステート解除判定が処理されます。
コメントアウトしてしまう場合は回復時にも処理されるので注意してください。
バリア系のスクリプトは探せばありそうなので
この方法で不満がある場合は探してみてもよいと思います。
僕はそんな時間はかけてませんが、見つけられませんでした。
RPGで笑顔を・・・
ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup
github
https://github.com/mattuup/RPGMakerMZ
ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup
github
https://github.com/mattuup/RPGMakerMZ
Re: 【RGSS3】ダメージ0でも解除されるステート
単純にスーパーカードやマルチカウンターのステートを解除する効果をすべての攻撃スキルに持たせてはどうでしょうか。
「ダメージで解除」の条件に0ダメージを含めてしまうと、今後0ダメージでは解除したくないステートが登場した時に面倒なことになりそうです。
「ダメージで解除」の条件に0ダメージを含めてしまうと、今後0ダメージでは解除したくないステートが登場した時に面倒なことになりそうです。
-
- 記事: 715
- 登録日時: 2018年12月23日(日) 13:55
Re: 【RGSS3】ダメージ0でも解除されるステート
メモ欄に、ステート解除用の文字列を設定する形で、スクリプトを試作してみたので、
試してください。
なお、マルチカウンター用の、反撃、及び、魔法反射のステートは本来のものとは別に作成することを推奨します。
追記:
文字列判定をしている部分を変更しましたので、差し替えてください。
試してください。
コード: 全て選択
=begin
#-------------------------------------------------------------------------
◆被攻撃時、反撃時、魔法反射時にステートを解除するスクリプト
#-------------------------------------------------------------------------
ステートのメモ欄に以下を記述することで、表題の動作を設定します。
※デフォルト時の文言です。
文言は、文字列を設定するモジュールで、自由に変更できます。
<0ダメージ解除>: ダメージを受けていなくても攻撃が命中した場合はステート解除。
相手がミスしたとき、プレイヤーが回避したときは解除しない。
『ダメージで解除』の項目が設定されている必要があるので注意。
<反撃解除> : 反撃時にステート解除
<反射解除> : 魔法反射時にステート解除
#-------------------------------------------------------------------------
=end
if true #スクリプトを有効にするならtrue
#-----------------------------------------------------------------------------
# ■メモ欄に記述する文字列を設定するモジュール
#-----------------------------------------------------------------------------
module Remove_Strings
STR_REMOVE_DAMAGE0 = "<0ダメージ解除>" #ノーダメージでも解除する文字列
STR_REMOVE_COUNTER = "<反撃解除>" #反撃時に解除する文字列
STR_REMOVE_REFLECT = "<反射解除>" #魔法反射時に解除する文字列
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● ダメージの処理
# 呼び出し前に @result.hp_damage @result.mp_damage @result.hp_drain
# @result.mp_drain が設定されていること。
#--------------------------------------------------------------------------
def execute_damage(user)
on_damage(@result.hp_damage) if @result.hp_damage >= 0 #ノーダメージを含める
self.hp -= @result.hp_damage
self.mp -= @result.mp_damage
user.hp += @result.hp_drain
user.mp += @result.mp_drain
end
#--------------------------------------------------------------------------
# ● 被ダメージ時の処理
#--------------------------------------------------------------------------
def on_damage(value)
if value > 0 #ダメージあり?
remove_states_by_damage #通常のダメージでのステート解除
charge_tp_by_damage(value.to_f / mhp)
else
remove_states_by_damage_0 #ノーダメージでのステート解除
end
end
#--------------------------------------------------------------------------
# ● ダメージ 0 によるステート解除
#--------------------------------------------------------------------------
def remove_states_by_damage_0
states.each do |state|
#メモ欄にノーダメージでも解除する用の文字列が記述があり、
#ダメージで解除』項目が設定されていて、
#乱数の値(0~99)が、設定した%の数字を下回っている場合は解除
state.note.each_line{ |line|
if /^#{Remove_Strings::STR_REMOVE_DAMAGE0}(?![\S]).*/ =~ line &&
state.remove_by_damage && rand(100) < state.chance_by_damage
remove_state(state.id)
end }
end
end
#--------------------------------------------------------------------------
# ● 反撃によるステート解除
#--------------------------------------------------------------------------
def remove_states_by_counter
states.each do |state|
#メモ欄に反撃時解除用の文字列が記述されているなら解除
state.note.each_line{ |line|
remove_state(state.id) if /^(#{Remove_Strings::STR_REMOVE_COUNTER})(?![\S]).*/ =~ line }
end
end
#--------------------------------------------------------------------------
# ● 魔法反射によるステート解除
#--------------------------------------------------------------------------
def remove_states_by_reflection
states.each do |state|
#メモ欄に魔法反射時解除用の文字列が記述されているなら解除
state.note.each_line{ |line|
remove_state(state.id) if /^(#{Remove_Strings::STR_REMOVE_REFLECT})(?![\S]).*/ =~ line }
end
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 反撃の発動
#--------------------------------------------------------------------------
alias invoke_counter_attack_o invoke_counter_attack
def invoke_counter_attack(target, item)
invoke_counter_attack_o(target, item)
target.remove_states_by_counter
end
#--------------------------------------------------------------------------
# ● 魔法反射の発動
#--------------------------------------------------------------------------
alias invoke_magic_reflection_o invoke_magic_reflection
def invoke_magic_reflection(target, item)
invoke_magic_reflection_o(target, item)
target.remove_states_by_reflection
end
end
end
追記:
文字列判定をしている部分を変更しましたので、差し替えてください。
Re: 【RGSS3】ダメージ0でも解除されるステート
皆様、ご返答ありがとうございます。
ecf5DTTzl6h6lJj02さんの作られたスクリプトを導入した所、無事想定通りの仕様に出来ました。
まっつUPさん、u-kunさんの方法も試したのですが『スーパーガード』に関してはステート解除出来るのですが
どうやらツクールの仕様で反撃や反射ではresult.hp_damageは発生しないらしく
『マルチカウンター』の方ではステートを解除する事が出来ないみたいです。
とはいえ、ご意見をいただけた事には感謝いたします。ありがとうございました。
>まっつUPさん
バリア系のスクリプトを探しているとの事ですが、自分は素材サイトに関してはあまり詳しくないので
とりあえず、検索して出てきた物を見繕ってみました。
バリア&対バリアシステム
http://artificialprovidence.web.fc2.co ... 3B_AB.txt
耐久力のあるバリア
https://faida.wiki.fc2.com/wiki/%E8%80 ... %E3%82%A2
一定以下のダメージを無効化(ツクマテ内のトピックです)
https://tm.yumineko.com/viewtopic.php?t=4043
単純に物理や魔法のダメージを0にしたいだけでしたら弊トピックでの『スーパーガード』は
デフォルトの特殊能力値である物理ダメージ率、魔法ダメージ率を0%に設定するだけで
スクリプトの導入無しに簡単に再現出来ますので参考になさって下さい。
ecf5DTTzl6h6lJj02さんの作られたスクリプトを導入した所、無事想定通りの仕様に出来ました。
まっつUPさん、u-kunさんの方法も試したのですが『スーパーガード』に関してはステート解除出来るのですが
どうやらツクールの仕様で反撃や反射ではresult.hp_damageは発生しないらしく
『マルチカウンター』の方ではステートを解除する事が出来ないみたいです。
とはいえ、ご意見をいただけた事には感謝いたします。ありがとうございました。
>まっつUPさん
バリア系のスクリプトを探しているとの事ですが、自分は素材サイトに関してはあまり詳しくないので
とりあえず、検索して出てきた物を見繕ってみました。
バリア&対バリアシステム
http://artificialprovidence.web.fc2.co ... 3B_AB.txt
耐久力のあるバリア
https://faida.wiki.fc2.com/wiki/%E8%80 ... %E3%82%A2
一定以下のダメージを無効化(ツクマテ内のトピックです)
https://tm.yumineko.com/viewtopic.php?t=4043
単純に物理や魔法のダメージを0にしたいだけでしたら弊トピックでの『スーパーガード』は
デフォルトの特殊能力値である物理ダメージ率、魔法ダメージ率を0%に設定するだけで
スクリプトの導入無しに簡単に再現出来ますので参考になさって下さい。