#============================================================================== # ■ RGSS3 ステート/強化/弱体ターン変更アイテム/スキル Ver1.00 by 星潟 #------------------------------------------------------------------------------ # 既に特定のステート/強化/弱体が付与されている時 # そのステート/強化/弱体の残り効果ターンを # 操作する効果を設定できるようになります。 #============================================================================== # アイテム/スキルのメモ欄に指定。 #------------------------------------------------------------------------------ # ★共通事項 # この効果により残りターンが0になった場合、そのステート/強化/弱体は解除されます。 # ただし、何らかの素材の効果により「解除効果を無効」等が存在する場合は # 解除されるとは限りません。 # # 1番目にステートID、2番目に変更内容の式を設定します。 # この式の中では「stu」という代数を使用出来ます。 # stuは現在のステートターンを示します。 # ダメージ式と同じように、aで使用者、bで対象者の情報を引き出せます。 #------------------------------------------------------------------------------ # <ステートターン変更:2,20> # # 既にステートID2が付与されている場合 # ステートID2の残りターン数を20ターンにします。 #------------------------------------------------------------------------------ # <ステートターン変更:3,stu+5> # # 既にステートID3が付与されている場合 # ステートID3の残りターン数を現在の残りターン数+5ターンにします。 #------------------------------------------------------------------------------ # <ステートターン変更:4,stu-2> # # 既にステートID4が付与されている場合 # ステートID4の残りターン数を現在の残りターン数−2ターンにします。 #------------------------------------------------------------------------------ # <ステートターン変更:5,stu*2> # # 既にステートID5が付与されている場合 # ステートID5の残りターン数を現在の残りターン数×2ターンにします。 #------------------------------------------------------------------------------ # <ステートターン変更:6,stu/2> # # 既にステートID6が付与されている場合 # ステートID6の残りターン数を現在の残りターン数÷2ターンにします。 #------------------------------------------------------------------------------ # <ステートターン変更:7,stu+[(a.luk-b.luk)/20,0].max> # # 既にステートID7が付与されている場合 # ステートID7の残りターン数を現在の残りターン数+ # 使用者と対象の運の差を20で割った数(ただし0未満の場合は0になる)にします。 #------------------------------------------------------------------------------ # <強化ターン変更:2,20> # # 既にパラメータID2の能力強化(攻撃力)が付与されている時 # 残りターン数を20にする。 #------------------------------------------------------------------------------ # <強化ターン変更:3,stu+5> # # 既にパラメータID3の能力強化(防御力)が付与されている時 # 残りターン数を5ターン増やす。 #------------------------------------------------------------------------------ # <弱体ターン変更:4,stu-5> # # 既にパラメータID4の能力弱体(魔法力)が付与されている時 # 残りターン数を5ターン減らす。 #------------------------------------------------------------------------------ # <弱体ターン変更:5,stu+rand(10)> # # 既にパラメータID5の能力弱体(魔法防御)が付与されている時、 # 残りターン数を0〜9ターン増やす。 #============================================================================== module StateTurnLS #ステートターン操作のキーワードを指定。 Word1 = "ステートターン変更" #強化ターン操作のキーワードを指定。 Word2 = "強化ターン変更" #弱体ターン操作のキーワードを指定。 Word3 = "弱体ターン変更" #強化ターン増加時に能力値の後につける単語を指定。 Buff = "強化" #弱体ターン増加時に能力値の後につける単語を指定。 Debuff = "弱体" #ステート/強化/弱体ターン増加時のメッセージを指定。 Message1 = "%sの%sの残りターン数が増加した!" #ステート/強化/弱体ターン減少時のメッセージを指定。 Message2 = "%sの%sの残りターン数が減少した!" #ステート/強化/弱体ターン操作による残りターン数上限を指定します。 #無制限にしたい場合はnilに変更して下さい。 #ステート/強化/弱体ターン数の表示を行うシステムがある場合は #上限値が指定してあったほうが良いと思います。 Max = 99 end class Game_ActionResult attr_accessor :longed_states attr_accessor :shorted_states attr_accessor :longed_buffs attr_accessor :shorted_buffs attr_accessor :longed_debuffs attr_accessor :shorted_debuffs #-------------------------------------------------------------------------- # クリア #-------------------------------------------------------------------------- alias clear_state_turn_ls clear def clear clear_state_turn_ls clear_all_state_turn_ls end #-------------------------------------------------------------------------- # 残り効果時間の初期化 #-------------------------------------------------------------------------- def clear_all_state_turn_ls @longed_states = [] @shorted_states = [] @longed_buffs = [] @shorted_buffs = [] @longed_debuffs = [] @shorted_debuffs = [] end #-------------------------------------------------------------------------- # 何らかのステータス(能力値かステート)が影響を受けたかの判定 #-------------------------------------------------------------------------- alias status_affected_state_turn_ls? status_affected? def status_affected? status_affected_state_turn_ls? or !@longed_states.empty? or !@shorted_states.empty? or !@longed_buffs.empty? or !@shorted_buffs.empty? or !@longed_debuffs.empty? or !@shorted_debuffs.empty? end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムに有効な使用効果が一つでもあるかを判定 #-------------------------------------------------------------------------- alias item_has_any_valid_effects_state_turn_ls? item_has_any_valid_effects? def item_has_any_valid_effects?(user, item) r = item_has_any_valid_effects_state_turn_ls?(user, item) return true if r item.state_turn_ls.keys.any? {|k| state?(k)} or item.buff_turn_ls.keys.any? {|k| buff?(k)} or item.debuff_turn_ls.keys.any? {|k| debuff?(k)} end #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_state_turn_ls item_user_effect def item_user_effect(user, item) item_user_effect_state_turn_ls(user, item) state_buff_debuff_turn_ls(user, item) end #-------------------------------------------------------------------------- # ステート/弱体/強化ターン変更の適用 #-------------------------------------------------------------------------- def state_buff_debuff_turn_ls(user, item) max = StateTurnLS::Max a = user b = self item.state_turn_ls.each {|k,v| next unless state?(k) stu = @state_turns[k] last_turn = @state_turns[k] @state_turns[k] = eval(v).to_i @state_turns[k] = max if max && @state_turns[k] > max if @state_turns[k] <= 0 remove_state(k) @result.success = true end if state?(k) && last_turn != @state_turns[k] if last_turn < @state_turns[k] @result.longed_states.push(k) else @result.shorted_states.push(k) end @result.success = true end} item.buff_turn_ls.each {|k,v| next unless buff?(k) stu = @buff_turns[k] last_turn = @buff_turns[k] @buff_turns[k] = eval(v).to_i @buff_turns[k] = max if max && @buff_turns[k] > max if @buff_turns[k] <= 0 remove_buff(k) @result.success = true end if buff?(k) && last_turn != @buff_turns[k] if last_turn < @buff_turns[k] @result.longed_buffs.push(k) else @result.shorted_buffs.push(k) end @result.success = true end} item.debuff_turn_ls.each {|k,v| next unless debuff?(k) stu = @buff_turns[k] last_turn = @buff_turns[k] @buff_turns[k] = eval(v).to_i @buff_turns[k] = max if max && @buff_turns[k] > max if @buff_turns[k] <= 0 remove_buff(k) @result.success = true end if debuff?(k) && last_turn != @buff_turns[k] if last_turn < @buff_turns[k] @result.longed_debuffs.push(k) else @result.shorted_debuffs.push(k) end @result.success = true end} end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # ステートターン変更データ #-------------------------------------------------------------------------- def state_turn_ls @state_turn_ls ||= create_state_turn_ls end #-------------------------------------------------------------------------- # ステートターン変更データ作成 #-------------------------------------------------------------------------- def create_state_turn_ls h = {} note.each_line {|l| h[$1.to_i] = $2.to_s if /<#{StateTurnLS::Word1}[::](\d+),(\S+)>/ =~ l} h end #-------------------------------------------------------------------------- # 強化変更データ #-------------------------------------------------------------------------- def buff_turn_ls @buff_turn_ls ||= create_buff_turn_ls end #-------------------------------------------------------------------------- # 強化変更データ作成 #-------------------------------------------------------------------------- def create_buff_turn_ls h = {} note.each_line {|l| h[$1.to_i] = $2.to_s if /<#{StateTurnLS::Word2}[::](\d+),(\S+)>/ =~ l} h end #-------------------------------------------------------------------------- # 弱体変更データ #-------------------------------------------------------------------------- def debuff_turn_ls @debuff_turn_ls ||= create_debuff_turn_ls end #-------------------------------------------------------------------------- # 弱体変更データ作成 #-------------------------------------------------------------------------- def create_debuff_turn_ls h = {} note.each_line {|l| h[$1.to_i] = $2.to_s if /<#{StateTurnLS::Word3}[::](\d+),(\S+)>/ =~ l} h end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ステート付加/解除の表示 #-------------------------------------------------------------------------- alias display_changed_states_state_turn_ls display_changed_states def display_changed_states(target) display_changed_states_state_turn_ls(target) display_state_turn_ls(target) end #-------------------------------------------------------------------------- # ステートターン変動の表示 #-------------------------------------------------------------------------- def display_state_turn_ls(target) if !StateTurnLS::Message1.empty? target.result.longed_states.each {|i| replace_text(sprintf(StateTurnLS::Message1, target.name,$data_states[i].name)) wait wait_for_effect} end if !StateTurnLS::Message2.empty? target.result.shorted_states.each {|i| replace_text(sprintf(StateTurnLS::Message2, target.name,$data_states[i].name)) wait wait_for_effect} end end #-------------------------------------------------------------------------- # 強化/弱体の表示 #-------------------------------------------------------------------------- alias display_changed_buffs_state_turn_ls display_changed_buffs def display_changed_buffs(target) display_changed_buffs_state_turn_ls(target) display_all_buff_turn_ls(target) end #-------------------------------------------------------------------------- # 強化/弱体ターン変動の表示 #-------------------------------------------------------------------------- def display_all_buff_turn_ls(target) display_buff_turn_ls(target) display_debuff_turn_ls(target) end #-------------------------------------------------------------------------- # 強化ターン変動の表示 #-------------------------------------------------------------------------- def display_buff_turn_ls(target) if !StateTurnLS::Message1.empty? target.result.longed_buffs.each {|i| replace_text(sprintf(StateTurnLS::Message1, target.name,Vocab.param(i) + StateTurnLS::Buff)) wait wait_for_effect} end if !StateTurnLS::Message2.empty? target.result.shorted_buffs.each {|i| replace_text(sprintf(StateTurnLS::Message2, target.name,Vocab.param(i) + StateTurnLS::Buff)) wait wait_for_effect} end end #-------------------------------------------------------------------------- # 弱体ターン変動の表示 #-------------------------------------------------------------------------- def display_debuff_turn_ls(target) if !StateTurnLS::Message1.empty? target.result.longed_debuffs.each {|i| replace_text(sprintf(StateTurnLS::Message1, target.name,Vocab.param(i) + StateTurnLS::Debuff)) wait wait_for_effect} end if !StateTurnLS::Message2.empty? target.result.shorted_debuffs.each {|i| replace_text(sprintf(StateTurnLS::Message2, target.name,Vocab.param(i) + StateTurnLS::Debuff)) wait wait_for_effect} end end end