king-exit/Scripts/_.65.rb
2024-08-31 14:17:23 -05:00

279 lines
No EOL
10 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ 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