#============================================================================== # ■ RGSS3 ステートスワップ・ステートインポーズ Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 対象と自分のステート・強化・弱体の状態を入れ替えるスキル・アイテムを作成できます。 # 有効度が1以上あれば、付与に失敗することはありません。 # (運によるステート耐性・弱体耐性は完全に無視します) # # また、ステートのメモ欄に<スワップ禁止>と書き込む事で # そのステートが入れ替え・押し付けの対象にならないようにする事が出来ます。 # # なお、入れ替えようとする相手の # ステート有効度が0もしくは無効の場合や弱体有効度が0の場合は # 使用者からはそのステート・弱体は消滅しますが、相手に付与されることはありません。 # # また、性質上、敵単体もしくは味方単体用スキルとしての使用を想定しています。 # 複数ランダムや全体など、二体以上の相手を対象とした場合は考慮していませんので # 予めご了承ください。 # # 使用例.スキルのメモ欄にそれぞれ以下のように記述。 # # <ステートスワップ:0> # # 使用者と対象のステートを入れ替えます。 # # <ステートスワップ:1> # # 使用者と対象の強化・弱体を入れ替えます。 # # <ステートスワップ:2> # # 使用者と対象のステート・強化・弱体を入れ替えます。 # # <ステートインポーズ:0> # # 使用者のステートを対象に押し付けます。 # (自分のステートは解除されます) # # <ステートインポーズ:1> # # 使用者の強化・弱体を対象に押し付けます。 # (自分の強化・弱体は解除されます) # # <ステートインポーズ:2> # # 使用者のステート・強化・弱体を対象に押しつけます。 # (自分のステート・強化・弱体は解除されます) # #============================================================================== module STATE_SWAP #ステート・強化・弱体の入れ替え用キーワードを設定します。 WORD1 = "ステートスワップ" #ステート・強化・弱体の押しつけ用キーワードを設定します。 WORD2 = "ステートインポーズ" #ステートの入れ替え・押し付け禁止用キーワードを設定します。 WORD3 = "<スワップ禁止>" #強化の最高段階を確認しています。 #強化の最高段階を変更するスクリプトを導入されている場合は #この数値を変更して下さい。 BUFF_MAX = 2 #弱体の最高段階を確認しています。 #弱体の最高段階を変更するスクリプトを導入されている場合は #この数値を変更して下さい。 BUFF_MIN = 2 #ステートの入れ替えメッセージを設定します。 MESSAGE1 = "とステートが入れ替わった!" #強化・弱体の入れ替えメッセージを設定します。 MESSAGE2 = "と強化・弱体が入れ替わった!" #ステート・強化・弱体の入れ替えメッセージを設定します。 MESSAGE3 = "とステート・強化・弱体が入れ替わった!" #ステートの押し付けメッセージを設定します。 MESSAGE4 = "にステートを移した!" #強化・弱体の押し付けメッセージを設定します。 MESSAGE5 = "に強化・弱体を移した!" #ステート・強化・弱体の押し付けメッセージを設定します。 MESSAGE6 = "にステート・強化・弱体を移した!" end class Game_Battler < Game_BattlerBase def state_turns @state_turns end def state_steps @state_steps end def buffs @buffs end def buff_turns @buff_turns end def buff_swap(swap1,swap2) for i in 0..7 next if swap1[i].to_i < 0 && debuff_rate(i) <= 0 @buffs[i] = swap1[i].to_i @buff_turns[i] = swap2[i].to_i end end alias item_has_any_valid_effects_state_swap? item_has_any_valid_effects? def item_has_any_valid_effects?(user, item) return true if item.note.include?(STATE_SWAP::WORD1) return true if item.note.include?(STATE_SWAP::WORD2) item_has_any_valid_effects_state_swap?(user, item) end #-------------------------------------------------------------------------- # ● スキル/アイテムの効果適用 #-------------------------------------------------------------------------- alias item_apply_state_swap item_apply def item_apply(user, item) item_apply_state_swap(user, item) if @result.used == true && @result.missed == false && @result.evaded == false data = item.note.scan(/<#{STATE_SWAP::WORD1}[::](\S+)>/) data = data.flatten if data != nil and not data.empty? return state_swap_execute(user, data[0].to_i) end data = item.note.scan(/<#{STATE_SWAP::WORD2}[::](\S+)>/) data = data.flatten if data != nil and not data.empty? return state_push_execute(user, data[0].to_i) end end end def add_state_swap(state_id) @states.push(state_id) end def remove_state_swap(state_id) @states.delete(state_id) end def state_swap_execute(user, type) @result.success = true user_state = user.states.clone user_state_turn = user.state_turns.clone user_state_step = user.state_steps.clone user_buff = user.buffs.clone user_buff_turn = user.buff_turns.clone self_state = @states.clone self_state_turn = @state_turns.clone self_state_step = @state_steps.clone self_buff = @buffs.clone self_buff_turn = @buff_turns.clone neo_user_state = [] neo_self_state = [] neo_user_state_turn = {} neo_user_state_step = {} neo_self_state_turn = {} neo_self_state_step = {} if type != 1 for state in user_state next if state.note.include?(STATE_SWAP::WORD3) unless state_resist_set.include?(state.id) && state_rate(state.id) <= 0 neo_self_state.push(state.id) neo_self_state_turn[state.id] = user_state_turn[state.id] neo_self_state_step[state.id] = user_state_step[state.id] end user.remove_state_swap(state.id) end for state in self_state next if $data_states[state].note.include?(STATE_SWAP::WORD3) unless user.state_resist_set.include?(state) && user.state_rate(state) <= 0 neo_user_state.push(state) neo_user_state_turn[state] = self_state_turn[state] neo_user_state_step[state] = self_state_step[state] end remove_state_swap(state) end if !neo_self_state.empty? for state_id in neo_self_state add_state_swap(state_id) if !@states.include?(state_id) @state_turns[state_id] = neo_self_state_turn[state_id] @state_steps[state_id] = neo_self_state_step[state_id] end end if !neo_user_state.empty? for state_id in neo_user_state user.add_state_swap(state_id) if !user.states.include?($data_states[state_id]) user.state_turns[state_id] = neo_user_state_turn[state_id] user.state_steps[state_id] = neo_user_state_step[state_id] end end end if type != 0 buff_swap(user_buff, user_buff_turn) user.buff_swap(self_buff, self_buff_turn) end end def state_push_execute(user, type) @result.success = true if type != 1 user_state = user.states.clone user_state_turn = user.state_turns.clone user_state_step = user.state_steps.clone for state in user_state next if state.note.include?(STATE_SWAP::WORD3) unless state_resist_set.include?(state.id) && state_rate(state.id) <= 0 add_state_swap(state.id) if !@states.include?(state.id) @state_turns[state.id] = user_state_turn[state.id] @state_steps[state.id] = user_state_step[state.id] end user.remove_state_swap(state.id) end end if type != 0 for i in 0..7 next if user.buffs[i] == 0 unless @buffs[i].to_i < 0 && debuff_rate(i) <= 0 @buffs[i] += user.buffs[i].to_i @buff_turns[i] = @buff_turns[i].to_i + user.buff_turns[i].to_i @buffs[i] = [[@buffs[i],STATE_SWAP::BUFF_MAX].min, -STATE_SWAP::BUFF_MIN].max end user.erase_buff(i) end end end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ● 影響を受けたステータスの表示 #-------------------------------------------------------------------------- alias display_affected_status_state_swap display_affected_status def display_affected_status(target, item) display_affected_status_state_swap(target, item) if target.result.success == true && (item.note.include?(STATE_SWAP::WORD1) or item.note.include?(STATE_SWAP::WORD2)) display_state_swap(target,item) end end def display_state_swap(target,item) data = item.note.scan(/<#{STATE_SWAP::WORD1}[::](\S+)>/) data = data.flatten if data != nil and not data.empty? type = data[0].to_i end if type == nil data = item.note.scan(/<#{STATE_SWAP::WORD2}[::](\S+)>/) data = data.flatten if data != nil and not data.empty? type = data[0].to_i + 3 end end return if type == nil case type when 0 add_text(target.name + STATE_SWAP::MESSAGE1) when 1 add_text(target.name + STATE_SWAP::MESSAGE2) when 2 add_text(target.name + STATE_SWAP::MESSAGE3) when 3 add_text(target.name + STATE_SWAP::MESSAGE4) when 4 add_text(target.name + STATE_SWAP::MESSAGE5) when 5 add_text(target.name + STATE_SWAP::MESSAGE6) end end end