#============================================================================== # # ■付与者解除ステート □Ver1.00 □製作者:月紳士 # # ・RPGツクールVX用 RGSS2スクリプト # # ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド # #============================================================================== =begin  ステートを与えた者が戦闘不能になると、  与えたステートが解除される「付与者解除ステート」を作成出来ます。  ステートのメモ欄に  <付与者解除>  と記述してください。  (記述するメモ欄は“ステート”です。スキルやアイテムでは機能しません)  戦闘時の解除処理のみ対応しています。  「戦闘終了時に解除」チェックをするステートへの使用を想定しています。 =end #============================================================================== # ■ RPG::State #============================================================================== class RPG::State #-------------------------------------------------------------------------- # ○ 付与者解除ステート判定 #-------------------------------------------------------------------------- def enchant? return true if @note[/^[<<]付[加与]者解除[>>]/] return false end end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :state_enchanters # ステートの付与者記録 (ハッシュ) #-------------------------------------------------------------------------- # ◎ オブジェクト初期化 #-------------------------------------------------------------------------- alias tig_cbs_initialize initialize def initialize tig_cbs_initialize @enchanter = nil # ステートの付与者 @state_enchanters = {} # ステートの付与者記録 (ハッシュ) end #-------------------------------------------------------------------------- # ◎ 通常攻撃の効果適用 # attacker : 攻撃者 #-------------------------------------------------------------------------- alias tig_cbs_attack_effect attack_effect def attack_effect(attacker) @enchanter = attacker tig_cbs_attack_effect(attacker) @enchanter = nil end #-------------------------------------------------------------------------- # ◎ スキルの効果適用 # user : スキルの使用者 # skill : スキル #-------------------------------------------------------------------------- alias tig_cbs_skill_effect skill_effect def skill_effect(user, skill) @enchanter = user tig_cbs_skill_effect(user, skill) @enchanter = nil end #-------------------------------------------------------------------------- # ◎ アイテムの効果適用 # user : アイテムの使用者 # item : アイテム #-------------------------------------------------------------------------- alias tig_cbs_item_effect item_effect def item_effect(user, item) @enchanter = user tig_cbs_item_effect(user, item) @enchanter = nil end #-------------------------------------------------------------------------- # ◎ ステートの付加 # state_id : ステート ID #-------------------------------------------------------------------------- alias tig_cbs_add_state add_state def add_state(state_id) tig_cbs_add_state(state_id) if $data_states[state_id].enchant? and @enchanter @state_enchanters[state_id] = @enchanter end end #-------------------------------------------------------------------------- # ○ 付与者ステート解除 #-------------------------------------------------------------------------- def remove_enchant_state(state_id) remove_state(state_id) @removed_states.push(state_id) @state_enchanters.delete(state_id) # ステートの付与者記憶用ハッシュから削除 end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ◎ 戦闘行動の処理 #-------------------------------------------------------------------------- alias tig_cbs_process_action process_action def process_action tig_cbs_process_action remove_enchanter_states_all end #-------------------------------------------------------------------------- # ○ 全体の付与者ステート自然解除 #-------------------------------------------------------------------------- def remove_enchanter_states_all $game_party.existing_members.each{|member|remove_enchanter_states(member)} $game_troop.existing_members.each{|member|remove_enchanter_states(member)} end #-------------------------------------------------------------------------- # ○ 付与者ステート自然解除 #-------------------------------------------------------------------------- def remove_enchanter_states(battler) last_st = battler.states battler.state_enchanters.each do |state_id, enchanter| next if $game_party.existing_members.include?(enchanter) next if $game_troop.existing_members.include?(enchanter) battler.remove_enchant_state(state_id) end if battler.states != last_st wait(5) display_state_changes(battler) wait(30) @message_window.clear end end end