279 lines
No EOL
10 KiB
Ruby
279 lines
No EOL
10 KiB
Ruby
#==============================================================================
|
||
# ■ 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 |