反撃行動を拡張するスクリプトを作って頂きたいです。
アクターによって、反撃時に防御したり、回復したり、アイテムを使用できるようにしていただきたいです。宜しくお願いします。
解決済み)反撃スキル
解決済み)反撃スキル
最後に編集したユーザー なたね [ 2018年6月19日(火) 22:17 ], 累計 1 回
Re: 反撃スキル
一つだけ。
デフォルトだと「反撃」する際は「相手の攻撃をキャンセル」するので、「反撃時に防御」ってやっても防御してくれません。
もう少し正確に言えば「攻撃に反応して防御や回復はするけど、攻撃がそもそも当たらないから防御や回復の意味があんまりない」
ってことです。
それでも大丈夫なんですかね。
ちなみに反撃時のスキルを通常攻撃以外にするならすぐできます。
まぁ対象が攻撃してきた敵になっちゃうんですけど。
デフォルトだと「反撃」する際は「相手の攻撃をキャンセル」するので、「反撃時に防御」ってやっても防御してくれません。
もう少し正確に言えば「攻撃に反応して防御や回復はするけど、攻撃がそもそも当たらないから防御や回復の意味があんまりない」
ってことです。
それでも大丈夫なんですかね。
ちなみに反撃時のスキルを通常攻撃以外にするならすぐできます。
まぁ対象が攻撃してきた敵になっちゃうんですけど。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 反撃スキル
faida様、そうでした。vxaceはダメージを受けないんでしたね。すっかり忘れていました。
ダメージを受けて防御や回復を行うと言うのは難しいんでしょうか?
ダメージを受けて防御や回復を行うと言うのは難しいんでしょうか?
Re: 反撃スキル
なんかできたのでとりあえずどうぞ。
※一応旧バージョンに需要があるかもしれないので残しておきますって書くの忘れたので2回です
コード: 全て選択
=begin
◆概要
特殊な反撃を作成します。
◆機能
・メモ欄に<攻撃前反撃 a, b, c, ..., n%>と記入すると、敵の行動前にn%の確率で
a, b, c, ...のスキルのどれかを発動します。
・メモ欄に<攻撃後反撃 a, b, c, ..., n%>と記入すると、敵の攻撃後にn%の確率で
a, b, c, ...のスキルのどれかを発動します。
・メモ欄に<回避反撃 a, b, c, ..., n%>と記入すると、敵の攻撃後にn%の確率で
a, b, c, ...のスキルのどれかを発動します。
・a, b, c, ...を負にするとアイテムになります。
・メモ欄に<反撃スキル n>と記入すると、「通常の」反撃の際にIDnのスキルで反撃
します。アイテムは不可能です。
例:<攻撃後反撃 1, 50%> やられたらやり返すかもしれない
<攻撃前反撃 2, 50%> やられる前に身を守るかもしれない
<攻撃後反撃 -1, -2, -3, 100%> オートポーション
◆仕様
・攻撃前って書いてるけど攻撃じゃなくても反応します。
・味方には反撃しません。
◆使用上の注意
・★……エイリアス ●……再定義 ○……新規定義
◆作者:faida @faida3983
◆更新履歴
ver1.0 : 公開
ver1.1 : Ruby1.9に存在しないメソッドがあったので修正
=end
module FAI_CNT_EX
# 設定項目:反撃スキルの機能を使う
# 機能を切ることで競合が起こりにくくなったりするかもしれません。「かも」ですが。
USE_CNT_SKL = false
# 設定項目:魔法とか必中攻撃とかでも反撃する
# 普通の反撃は魔法とか必中攻撃とかでは反撃できません。
BEF_CNT_FOR_CERT = true
HIT_CNT_FOR_CERT = true
EVA_CNT_FOR_CERT = false
BEF_CNT_FOR_MAG = true
HIT_CNT_FOR_MAG = true
EVA_CNT_FOR_MAG = false
BEF_CNT = /<攻撃前反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
HIT_CNT = /<攻撃後反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
EVA_CNT = /<回避反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
CNT_SKL = /<反撃スキル\s*(\d+)>/
BEF_CNT_PLUS = /<攻撃前反撃率\s*([\+\-]?\d+)[%%]>/
HIT_CNT_PLUS = /<攻撃後反撃率\s*([\+\-]?\d+)[%%]>/
EVA_CNT_PLUS = /<回避反撃率\s*([\+\-]?\d+)[%%]>/
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ メモ取得
#--------------------------------------------------------------------------
def fai_cnt_ex_note
@before_counter = []
@hit_counter = []
@evade_counter = []
@counter_skill = 0
note.each_line{|line|
case line
when FAI_CNT_EX::BEF_CNT
n = $2.to_i
@before_counter << [$1.scan(/\-?\d+/).map{|n|n.to_i}, n / 100.0]
when FAI_CNT_EX::HIT_CNT
n = $2.to_i
@hit_counter << [$1.scan(/\-?\d+/).map{|n|n.to_i}, n / 100.0]
when FAI_CNT_EX::EVA_CNT
n = $2.to_i
@evade_counter << [$1.scan(/\-?\d+/).map{|n|n.to_i}, n / 100.0]
when FAI_CNT_EX::CNT_SKL
@counter_skill = $1.to_i
when FAI_CNT_EX::BEF_CNT_PLUS
@before_counter << [0, $1.to_i / 100.0]
when FAI_CNT_EX::HIT_CNT_PLUS
@hit_counter << [0, $1.to_i / 100.0]
when FAI_CNT_EX::EVA_CNT_PLUS
@evade_counter << [0, $1.to_i / 100.0]
end
}
end
#--------------------------------------------------------------------------
# ○ パラメータ
#--------------------------------------------------------------------------
def before_counter
fai_cnt_ex_note if !@before_counter
@before_counter
end
def hit_counter
fai_cnt_ex_note if !@hit_counter
@hit_counter
end
def evade_counter
fai_cnt_ex_note if !@evade_counter
@evade_counter
end
def counter_skill
fai_cnt_ex_note if !@counter_skill
@counter_skill
end
end
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# ○ パラメータ
#--------------------------------------------------------------------------
def before_counter
feature_objects.collect{|a|a.before_counter}.flatten(1)
end
def bcr # before_counter_rate
feature_objects.inject(0.0){|r, a|
r + (((a.before_counter.find{|arr|arr[0] == 0} || [0])[1]) || 0)
}
end
def hit_counter
feature_objects.collect{|a|a.hit_counter}.flatten(1)
end
def hcr # hit_counter_rate
feature_objects.inject(0.0){|r, a|
r + (((a.hit_counter.find{|arr|arr[0] == 0} || [0])[1]) || 0)
}
end
def evade_counter
feature_objects.collect{|a|a.evade_counter}.flatten(1)
end
def ecr # evade_counter_rate
feature_objects.inject(0.0){|r, a|
r + (((a.evade_counter.find{|arr|arr[0] == 0} || [0])[1]) || 0)
}
end
#--------------------------------------------------------------------------
# ○ IDからオブジェクトを取得
#--------------------------------------------------------------------------
def use_cnt_item(id)
id >= 0 ? $data_skills[id] : $data_items[-id]
end
#--------------------------------------------------------------------------
# ○ 反撃スキルとか確率とか
#--------------------------------------------------------------------------
def item_bef_cnt(user, item)
return nil if !opposite?(user)
return nil if !FAI_CNT_EX::BEF_CNT_FOR_CERT && item.certain?
return nil if !FAI_CNT_EX::BEF_CNT_FOR_MAG && item.magical?
(before_counter.find{|arr|
arr[0].any?{|i|usable?(use_cnt_item(i))} && arr[1] + bcr >= rand} || [0]
)[0]
end
def item_hit_cnt(user, item)
return nil if !@result.hit? || !opposite?(user)
return nil if !FAI_CNT_EX::HIT_CNT_FOR_CERT && item.certain?
return nil if !FAI_CNT_EX::HIT_CNT_FOR_MAG && item.magical?
(hit_counter.find{|arr|
arr[0].any?{|i|usable?(use_cnt_item(i))} && arr[1] + hcr >= rand} || [0]
)[0]
end
def item_eva_cnt(user, item)
return nil if !@result.evaded || !opposite?(user)
return nil if !FAI_CNT_EX::EVA_CNT_FOR_CERT && item.certain?
return nil if !FAI_CNT_EX::EVA_CNT_FOR_MAG && item.magical?
(evade_counter.find{|arr|
arr[0].any?{|i|usable?(use_cnt_item(i))} && arr[1] + ecr >= rand} || [0]
)[0]
end
def counter_skill
feature_objects.collect{|a|a.counter_skill}.sample
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ★ スキル/アイテムの効果を適用
#--------------------------------------------------------------------------
alias fai_cnt_ex_apply_item_effects apply_item_effects
def apply_item_effects(target, item)
process_counter_ex(target, target.item_bef_cnt(@subject, item))
fai_cnt_ex_apply_item_effects(target, item)
process_counter_ex(target, target.item_hit_cnt(@subject, item))
process_counter_ex(target, target.item_eva_cnt(@subject, item))
end
#--------------------------------------------------------------------------
# 〇 特殊反撃の共通処理
#--------------------------------------------------------------------------
def process_counter_ex(target, arr)
return if !arr || arr == 0
id = arr.find{|i|target.usable?(target.use_cnt_item(i))}
return if !id || id == 0
item = target.use_cnt_item(id)
action = Game_Action.new(target)
item.is_a?(RPG::Item) ? action.set_item(item.id) : action.set_skill(item.id)
ts = action.make_targets.compact
@log_window.display_use_item(target, item)
target.use_item(item)
refresh_status
show_animation(ts, item.animation_id)
ts.each{|t|
t.item_apply(target, item)
refresh_status
@log_window.display_action_results(t, item)
}
end
if FAI_CNT_EX::USE_CNT_SKL
#--------------------------------------------------------------------------
# ● 反撃の発動
#--------------------------------------------------------------------------
def invoke_counter_attack(target, item)
@log_window.display_counter(target, item)
attack_skill = $data_skills[target.counter_skill]
@subject.item_apply(target, attack_skill)
refresh_status
@log_window.display_action_results(@subject, attack_skill)
end
end # <= if FAI_CNT_EX::USE_CNT_SKL
end
最後に編集したユーザー faida [ 2018年4月30日(月) 16:26 ], 累計 2 回
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 反撃スキル
faida様。この度は作製していただきありがとうございました。
思っていた動作ができたので、本当に嬉しいです。
半ば諦めていた事なので、とても感謝しています。
本当にありがとうございました。
思っていた動作ができたので、本当に嬉しいです。
半ば諦めていた事なので、とても感謝しています。
本当にありがとうございました。
Re: 反撃スキル
お世話になっております。
こちらのスクリプトを利用させていただいているのですが、
「反撃を受けない攻撃」または「特定の属性のダメージを受けた後に反撃」を実装していただく事は可能でしょうか?
宜しくお願いいたします。
こちらのスクリプトを利用させていただいているのですが、
「反撃を受けない攻撃」または「特定の属性のダメージを受けた後に反撃」を実装していただく事は可能でしょうか?
宜しくお願いいたします。
Re: 反撃スキル
お世話になっております。
こちらのスクリプトのテストを行っていたのですが、
こちらのスクリプトを適用後、デフォルトの「反撃率」によって反撃を行う際にエラーが起きることを確認いたしました。
エラーメッセージは以下になります。
------------------------------------------
スクリプト '反撃スキル' の 173 行目で NoMethodError が発生しました。
undefined method `choice' for [0, 0, 0, 0, 0, 0]:Array
------------------------------------------
お手数ですが、上記と合わせてご確認の検討をお願いいたします。
こちらのスクリプトのテストを行っていたのですが、
こちらのスクリプトを適用後、デフォルトの「反撃率」によって反撃を行う際にエラーが起きることを確認いたしました。
エラーメッセージは以下になります。
------------------------------------------
スクリプト '反撃スキル' の 173 行目で NoMethodError が発生しました。
undefined method `choice' for [0, 0, 0, 0, 0, 0]:Array
------------------------------------------
お手数ですが、上記と合わせてご確認の検討をお願いいたします。
Re: 反撃スキル
なんやかんや色々考慮した結果変なことになりました。説明するのも面倒なくらい機能を詰め込んだので何か不明点があれば遠慮なくどうぞ。
コード: 全て選択
=begin
◆概要
特殊な反撃を作成します。
◆機能
・メモ欄に<通常反撃 a, b, c, ..., n%>と記入すると、n%の確率で敵の物理攻撃を
キャンセルし、a, b, c, ...のスキルのどれかを発動します。
上記仕様に伴い、デフォルトの反撃率の設定は<通常反撃 1 n%>とほぼ同じになります。
・メモ欄に<攻撃前反撃 a, b, c, ..., n%>と記入すると、敵の行動前にn%の確率で
a, b, c, ...のスキルのどれかを発動します。
・メモ欄に<攻撃後反撃 a, b, c, ..., n%>と記入すると、敵の攻撃後にn%の確率で
a, b, c, ...のスキルのどれかを発動します。
・メモ欄に<回避反撃 a, b, c, ..., n%>と記入すると、敵の攻撃回避後にn%の確率で
a, b, c, ...のスキルのどれかを発動します。
・a, b, c, ...を負にするとアイテムになります。
例:<攻撃後反撃 1, 50%> やられたらやり返すかもしれない
<攻撃前反撃 2, 50%> やられる前に身を守るかもしれない
<攻撃後反撃 -1, -2, -3, 100%> オートポーション
・メモ欄に<条件付反撃 str>と記入すると、「直後に」設定した反撃は
strを満たす場合のみ発動します。strは条件式を入れます。
・メモ欄に<全条件付反撃 str>と記入すると、「以降、このメモ欄に」設定した反撃は全て
strを満たす場合のみ発動します。strは条件式を入れます。
例:敵の攻撃力が自分の攻撃力より上→user.atk > self.atk
ID3の属性攻撃に対しての反撃→item.damage.element_id == 3
「この」スキルを指定する場合の例→s.tp_cost <= self.tp / 2
適当に設定項目作れば簡略化も可→eval(FAI_CNT_EX::CND_CNT_LIST[1])
・メモ欄に<反撃不可>と記入すると、そのバトラーが行う攻撃に対して一切の反撃が
できなくなります。これはスキル系・ステート系のどちらでも有効です。
・メモ欄に<反撃不可 :normal>と記入すると、通常の反撃ができなくなります。
・メモ欄に<反撃不可 :attack>と記入すると、敵に対する反撃ができなくなり
ます。これらと以下のスクリプトでだいたい察してください。
◆仕様
・攻撃前って書いてるけど攻撃じゃなくても反応します。
・味方には反撃しません。
・デフォルトの反撃率の設定は<通常反撃 1 n%>と同じですが、他の反撃率とは違い
反撃率設定が複数ある場合は<通常反撃 1 n%>のn%が上昇するのみです。
また、別のスクリプトで通常攻撃スキルが変更されている場合、デフォルトの反撃も
通常攻撃スキルを発動します。
例:<通常反撃 1 20%>を持つ武具を3つ装備すると、この発動率は理論上
100 - (100-20) ^ 3 = 48.8 %となりますが、
デフォルトの反撃率20%を持つ武具を3つ装備すると、この発動率は理論も何もなく
20 * 3 = 60 % となります。
・<全条件付反撃 str>を設定中に<条件付反撃 str>を設定すると、直後の反撃のみ
<条件付反撃 str>が適用されます。それ以外は<全条件付反撃 str>が適用されます。
◆使用上の注意
・★……エイリアス ●……再定義 ○……新規定義
◆作者:faida @faida3983
◆更新履歴
ver1.0 : 公開
ver2.0 : 全体的に構造を見直したので一気にバージョンが上がりました。
=end
module FAI_CNT_EX
# 設定項目:魔法とか必中攻撃とかでも反撃する
# 普通の反撃は魔法とか必中攻撃とかでは反撃できません。
BEF_CNT_FOR_CERT = true
HIT_CNT_FOR_CERT = true
EVA_CNT_FOR_CERT = false
BEF_CNT_FOR_MAG = true
HIT_CNT_FOR_MAG = true
EVA_CNT_FOR_MAG = false
NOT_CNT_TYPE = {}
NOT_CNT_TYPE[:all] = [[:normal, :before, :hit, :evade], []]
NOT_CNT_TYPE[:normal] = [[:normal], []]
NOT_CNT_TYPE[:before] = [[:before], []]
NOT_CNT_TYPE[:hit] = [[:hit], []]
NOT_CNT_TYPE[:evade] = [[:evade], []]
NOT_CNT_TYPE[:attack] = [[:normal, :before, :hit, :evade],
["s.for_opponent?"]]
NOT_CNT_TYPE[:defence] = [[:normal, :before, :hit, :evade],
["s.for_friend?"]]
CND_CNT_LIST = []
CND_CNT_LIST[0] = "[3,4,5,6,7,8,9,10].include?(item.damage.element_id)"
CND_CNT = /<条件付反撃\s*(.+)>/
ACND_CNT = /<全条件付反撃\s*(.+)>/
NOR_CNT = /<通常反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
BEF_CNT = /<攻撃前反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
HIT_CNT = /<攻撃後反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
EVA_CNT = /<回避反撃\s*(\-?\d+(?:\,\s*\-?\d+)*)\s*\,\s*(\d+)[%%]>/
NOT_CNT = /<反撃不可\s*(?:\:(.+))*>/
NOR_CNT_PLUS = /<通常反撃率\s*([\+\-]?\d+)[%%]>/
BEF_CNT_PLUS = /<攻撃前反撃率\s*([\+\-]?\d+)[%%]>/
HIT_CNT_PLUS = /<攻撃後反撃率\s*([\+\-]?\d+)[%%]>/
EVA_CNT_PLUS = /<回避反撃率\s*([\+\-]?\d+)[%%]>/
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ メモ取得
#--------------------------------------------------------------------------
def fai_cnt_ex_note
@normal_counter = []
@before_counter = []
@hit_counter = []
@evade_counter = []
@forbid_counter = []
@_condition_counter = nil
@_condition_counter_all = nil
note.each_line{|line|
case line
when FAI_CNT_EX::CND_CNT
next @_condition_counter = $1
when FAI_CNT_EX::ACND_CNT
@_condition_counter_all = $1
when FAI_CNT_EX::NOR_CNT
rate = $2.to_i; skill_ids = $1.scan(/\-?\d+/).map{|n|n.to_i}
@normal_counter << fai_cnt_note_ex_arr(skill_ids, rate)
when FAI_CNT_EX::BEF_CNT
rate = $2.to_i; skill_ids = $1.scan(/\-?\d+/).map{|n|n.to_i}
@before_counter << fai_cnt_note_ex_arr(skill_ids, rate)
when FAI_CNT_EX::HIT_CNT
rate = $2.to_i; skill_ids = $1.scan(/\-?\d+/).map{|n|n.to_i}
@hit_counter << fai_cnt_note_ex_arr(skill_ids, rate)
when FAI_CNT_EX::EVA_CNT
rate = $2.to_i; skill_ids = $1.scan(/\-?\d+/).map{|n|n.to_i}
@evade_counter << fai_cnt_note_ex_arr(skill_ids, rate)
when FAI_CNT_EX::NOT_CNT
@forbid_counter << ($1 || "all").to_sym
when FAI_CNT_EX::NOR_CNT_PLUS
@normal_counter << fai_cnt_note_ex_arr(0, $1.to_i)
when FAI_CNT_EX::BEF_CNT_PLUS
@before_counter << fai_cnt_note_ex_arr(0, $1.to_i)
when FAI_CNT_EX::HIT_CNT_PLUS
@hit_counter << fai_cnt_note_ex_arr(0, $1.to_i)
when FAI_CNT_EX::EVA_CNT_PLUS
@evade_counter << fai_cnt_note_ex_arr(0, $1.to_i)
end
@_condition_counter = nil
}
@_condition_counter_all = nil
end
def fai_cnt_note_ex_cnd
if @_condition_counter; @_condition_counter
elsif @_condition_counter_all; @_condition_counter_all
else; "true"
end
end
def fai_cnt_note_ex_arr(skill_id, rate)
[skill_id, rate / 100.0, fai_cnt_note_ex_cnd]
end
#--------------------------------------------------------------------------
# ○ パラメータ
#--------------------------------------------------------------------------
def normal_counter
fai_cnt_ex_note if !@normal_counter
@normal_counter
end
def before_counter
fai_cnt_ex_note if !@before_counter
@before_counter
end
def hit_counter
fai_cnt_ex_note if !@hit_counter
@hit_counter
end
def evade_counter
fai_cnt_ex_note if !@evade_counter
@evade_counter
end
def forbid_counter
fai_cnt_ex_note if !@forbid_counter
@forbid_counter
end
end
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# ○ パラメータ
#--------------------------------------------------------------------------
def normal_counter
arr = cnt > 0 ? [[[attack_skill_id], cnt, "true"]] : []
arr + feature_objects.collect{|a|a.normal_counter}.flatten(1)
end
def ncr # normal_counter_rate
feature_objects.inject(0.0){|r, a|
r + (a.normal_counter.find{|arr|arr[0] == 0} || [0, 0])[1]
}
end
def before_counter
feature_objects.collect{|a|a.before_counter}.flatten(1)
end
def bcr # before_counter_rate
feature_objects.inject(0.0){|r, a|
r + (a.before_counter.find{|arr|arr[0] == 0} || [0, 0])[1]
}
end
def hit_counter
feature_objects.collect{|a|a.hit_counter}.flatten(1)
end
def hcr # hit_counter_rate
feature_objects.inject(0.0){|r, a|
r + (a.hit_counter.find{|arr|arr[0] == 0} || [0, 0])[1]
}
end
def evade_counter
feature_objects.collect{|a|a.evade_counter}.flatten(1)
end
def ecr # evade_counter_rate
feature_objects.inject(0.0){|r, a|
r + (a.evade_counter.find{|arr|arr[0] == 0} || [0, 0])[1]
}
end
def forbid_counter(item)
(feature_objects+[item]).inject([]){|r, a| r | a.forbid_counter }
end
#--------------------------------------------------------------------------
# ○ IDからオブジェクトを取得
#--------------------------------------------------------------------------
def use_cnt_item(id)
id >= 0 ? $data_skills[id] : $data_items[-id]
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
attr_reader :set_counter_skills
#--------------------------------------------------------------------------
# ○ 反撃可能かチェック
#--------------------------------------------------------------------------
def counterable?(type, user, item, cnt_skill_id, str)
s = use_cnt_item(cnt_skill_id)
return false if !usable?(s) || !eval(str)
user.forbid_counter(item).each{|symbol|
cond = FAI_CNT_EX::NOT_CNT_TYPE[symbol]
return false if cond[0].include?(type) && (cond[1].empty? ||
cond[1].any?{|st|eval(st)})
}
end
#--------------------------------------------------------------------------
# ★ スキル/アイテムの反撃率計算
#--------------------------------------------------------------------------
alias fai_cnt_ex_item_cnt item_cnt
def item_cnt(user, item)
@set_counter_skills = nil
return 0 unless opposite?(user) && item.physical?
ids = (normal_counter.find{|arr|
arr[0].any?{|i|
counterable?(:normal, user, item, i, arr[2])} && arr[1] + ncr >= rand
} || [0]
)[0]
@set_counter_skills = ids == 0 ? nil : ids
return @set_counter_skills ? 1.0 : 0.0
fai_cnt_ex_item_cnt(user, item)
end
#--------------------------------------------------------------------------
# ○ 反撃スキルとか確率とか
#--------------------------------------------------------------------------
def item_bef_cnt(user, item)
return nil if !opposite?(user)
return nil if !FAI_CNT_EX::BEF_CNT_FOR_CERT && item.certain?
return nil if !FAI_CNT_EX::BEF_CNT_FOR_MAG && item.magical?
(before_counter.find{|arr|
arr[0].any?{|i|
counterable?(:before, user, item, i, arr[2])} && arr[1] + bcr >= rand
} || [0]
)[0]
end
def item_hit_cnt(user, item)
return nil if !@result.hit? || !opposite?(user)
return nil if !FAI_CNT_EX::HIT_CNT_FOR_CERT && item.certain?
return nil if !FAI_CNT_EX::HIT_CNT_FOR_MAG && item.magical?
(hit_counter.find{|arr|
arr[0].any?{|i|
counterable?(:hit, user, item, i, arr[2])} && arr[1] + hcr >= rand
} || [0]
)[0]
end
def item_eva_cnt(user, item)
return nil if !@result.evaded || !opposite?(user)
return nil if !FAI_CNT_EX::EVA_CNT_FOR_CERT && item.certain?
return nil if !FAI_CNT_EX::EVA_CNT_FOR_MAG && item.magical?
(evade_counter.find{|arr|
arr[0].any?{|i|
counterable?(:evade, user, item, i, arr[2])} && arr[1] + ecr >= rand
} || [0]
)[0]
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ★ スキル/アイテムの効果を適用
#--------------------------------------------------------------------------
alias fai_cnt_ex_apply_item_effects apply_item_effects
def apply_item_effects(target, item)
process_counter_ex(target, target.item_bef_cnt(@subject, item))
fai_cnt_ex_apply_item_effects(target, item)
process_counter_ex(target, target.item_hit_cnt(@subject, item))
process_counter_ex(target, target.item_eva_cnt(@subject, item))
end
#--------------------------------------------------------------------------
# 〇 特殊反撃の共通処理
#--------------------------------------------------------------------------
def process_counter_ex(target, arr)
return if !arr || arr == 0
id = arr.find{|i|target.usable?(target.use_cnt_item(i))}
return if !id || id == 0
item = target.use_cnt_item(id)
action = Game_Action.new(target)
item.is_a?(RPG::Item) ? action.set_item(item.id) : action.set_skill(item.id)
if item.need_selection?
action.target_index = item.for_friend? ? target.index : @subject.index
end
ts = action.make_targets.compact
if id == target.attack_skill_id
@log_window.display_counter(target, item)
else
@log_window.display_use_item(target, item)
subject, @subject = @subject, target
show_animation(ts, item.animation_id)
@subject = subject
end
target.use_item(item)
refresh_status
ts.each{|t|
t.item_apply(target, item)
refresh_status
@log_window.display_action_results(t, item)
}
end
#--------------------------------------------------------------------------
# ● 反撃の発動
#--------------------------------------------------------------------------
def invoke_counter_attack(target, item)
process_counter_ex(target, target.set_counter_skills)
end
end
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 解決済み)反撃スキル
恐れ入ります。
こちらのスクリプトなのですが、以下のケースを修正いただくことは可能でしょうか?
反撃状態のアクターに対し、エネミーが反撃条件を含む連続攻撃を行った際、連続回数で指定した回数分の反撃が発動するが、反撃スキルでエネミーを撃破してしまうと、残りの反撃スキルが別のエネミーへと飛び火して発動してしまう。
VXaceに元々ある反撃のステートでテストしてみたところ、通常は連続回数ぶんの反撃を繰り出した際に、途中でエネミーを撃破すると、残りの反撃攻撃はヒットせずに空振りに終わる模様です。
もし可能であれば、連続攻撃への反撃中にエネミーを倒しても別のエネミーに反撃のとばっちりが行かないようにしてもらえると嬉しいです。
こちらのスクリプトなのですが、以下のケースを修正いただくことは可能でしょうか?
反撃状態のアクターに対し、エネミーが反撃条件を含む連続攻撃を行った際、連続回数で指定した回数分の反撃が発動するが、反撃スキルでエネミーを撃破してしまうと、残りの反撃スキルが別のエネミーへと飛び火して発動してしまう。
VXaceに元々ある反撃のステートでテストしてみたところ、通常は連続回数ぶんの反撃を繰り出した際に、途中でエネミーを撃破すると、残りの反撃攻撃はヒットせずに空振りに終わる模様です。
もし可能であれば、連続攻撃への反撃中にエネミーを倒しても別のエネミーに反撃のとばっちりが行かないようにしてもらえると嬉しいです。