#==============================================================================
# 「攻撃を受けてから反撃」(ACE) Ver.1.4
# 製作者:奈々(なな)
# へぷたなすくろーる http://heptanas.mamagoto.com/
#
# ◇使用規約
# 使用される場合はスクリプト作成者として「奈々」を明記して下さい。
# スクリプトの改変は自由に行って頂いて構いませんが
# その場合も元のスクリプトの作成者として名前を載せて下さい。
# また配布前に必ず、ブログにある利用規約を確認して下さい。
#
#------------------------------------------------------------------------------
#
# デフォルトの「反撃」は相手の攻撃を無効にして反撃しますが
# これを相手の攻撃を受けた上で行動可能なら反撃するように変更します。
# また、反撃にもアニメーションが表示されるようになります。
#
# 技能和物品备注栏
# <反撃不可> <反撃可能>
# 就是无法反击的技能和必定命中技能可以被物理反击。
#
# データベースのメモ欄に
# <反撃スキル n>
# 放角色,职业,装备,敌人,装备里,效果是反击的时候用n里面写的ID的技能
# 如果有好几个技能ID,会用最大的那个
# 不论什么技能,随机,多次或者全体都是不行的,只会反击攻击你的敌人一次(用追加行动也没用)
#
# 放技能里使用的,配合上面的
# <確定反撃> 如果你使用这个技能进行反击,即使你失去行动能力,反击也会被激活。
# <先行反撃> 如果你使用这个技能进行反击,你会先反击,然后被敌人攻击。
# <従来反撃> 使用该技能进行反击时,与以往规格一样,敌人的攻击无效。
# <固有文章> 显示技能使用信息而不是反击信息
# と記述して仕様を調整できます。
#
#==============================================================================
#==============================================================================
# ■ RPG::BaseItem
#------------------------------------------------------------------------------
# アクター・装備・ステートなどを総括して扱うデータクラス。
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ● 反撃スキルの指定
#--------------------------------------------------------------------------
def cnt_atk_skill_id
@note[/\<\s*反撃スキル\s*(\d+)\s*\>/]
return $1 ? $1.to_i : 0
end
end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
# スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● スキル/アイテムの反撃率計算
#--------------------------------------------------------------------------
alias item_cnt_mod item_cnt
def item_cnt(user, item)
return 0 unless opposite?(user) # 味方には反撃しない
return 0 if item.note.include?("<反撃不可>")
return cnt if item.note.include?("<反撃可能>")
return item_cnt_mod(user, item)
end
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
# の内部で使用され、Game_Party クラス($game_party)からも参照されます。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 反撃のスキル ID を取得
#--------------------------------------------------------------------------
def cnt_atk_skill_id
list = []
self.states.each do |state|
next unless state
list.push(state.cnt_atk_skill_id)
end
self.equips.each do |equip|
next unless equip
list.push(equip.cnt_atk_skill_id)
end
list.push(self.actor.cnt_atk_skill_id)
list.push(self.class.cnt_atk_skill_id)
return list.sort.reverse[0] > 0 ? list.sort.reverse[0] : attack_skill_id
end
end
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
# 敵キャラを扱うクラスです。このクラスは Game_Troop クラス($game_troop)の
# 内部で使用されます。
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 反撃のスキル ID を取得
#--------------------------------------------------------------------------
def cnt_atk_skill_id
list = []
self.states.each do |state|
next unless state
list.push(state.cnt_atk_skill_id)
end
list.push(self.enemy.cnt_atk_skill_id)
return list.sort.reverse[0] > 0 ? list.sort.reverse[0] : attack_skill_id
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 反撃の発動
#--------------------------------------------------------------------------
def invoke_counter_attack(target, item)
attack_skill = $data_skills[target.cnt_atk_skill_id]
#反撃前に攻撃を適用
if !attack_skill.note.include?("<先行反撃>") && !attack_skill.note.include?("<従来反撃>")
apply_item_effects(apply_substitute(target, item), item)
end
if target.movable? || (target.alive? && attack_skill.note.include?("<確定反撃>"))
#反撃メッセージを表示
if attack_skill.note.include?("<固有文章>")
@log_window.display_use_item(target, attack_skill)
else
@log_window.display_counter(target, item)
end
#反撃のアニメーションを追加
show_animation_counter(target, attack_skill.animation_id)
#反撃
@subject.item_apply(target, attack_skill)
refresh_status
@log_window.display_action_results(@subject, attack_skill)
end
#反撃後に攻撃を適用
if @subject.movable? && attack_skill.note.include?("<先行反撃>")
apply_item_effects(apply_substitute(target, item), item)
end
end
#--------------------------------------------------------------------------
# ● 反撃用アニメーションの表示
#--------------------------------------------------------------------------
def show_animation_counter(target, animation_id)
if animation_id < 0
if target.actor?
show_normal_animation([@subject], target.atk_animation_id1, false)
show_normal_animation([@subject], target.atk_animation_id2, true)
else
Sound.play_enemy_attack
abs_wait_short
end
else
show_normal_animation([@subject], animation_id)
end
@log_window.wait
wait_for_animation
end
end