=begin ◆概要 ステートの重ねがけをできるようにします。 ◆機能 ・ステートのメモ欄に<重ねがけ>と記入することにより、そのステートを二回かけようと したときに重ねがけできるようにします。さらに重ねがけに成功した場合、ターン数が リセットされます。 ・おまけで重ねがけできないステートも重ね掛けしようとするとターン数がリセットされ ます。 ◆仕様 ・何回でも可。 ・同じステートでの能力値上昇は同じ能力値上昇を持った二つのステートをかけたときと 一緒です。 例:攻撃力上昇(150%) * 2 => 150% * 150% => 225% ◆使用上の注意 ・★……エイリアス ●……再定義 ○……新規定義 ・再定義があるので上の方に。 =end class RPG::State #-------------------------------------------------------------------------- # ○ 重ねがけステートか? #-------------------------------------------------------------------------- def double_state return @double_state if !@double_state.nil? @double_state = false self.note.each_line{|line| case line when /<重ねがけ>/ @double_state = true end } return @double_state end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ★ ステートの付加 #-------------------------------------------------------------------------- alias add_state_ds add_state def add_state(state_id) if state?(state_id) state = $data_states[state_id] # ステートデータを取得 return if state == nil # データが無効? return if state_ignore?(state_id) # 無視するべきステート? unless state_offset?(state_id) # 相殺するべきステートではない? @states.push(state_id) # ID を @states 配列に追加 end @state_turns[state_id] = state.hold_turn # 自然解除のターン数を追加 else add_state_ds(state_id) end end #-------------------------------------------------------------------------- # ● ステート変化の適用 # obj : スキル、アイテム、または攻撃者 #-------------------------------------------------------------------------- def apply_state_changes(obj) plus = obj.plus_state_set # ステート変化(+) を取得 minus = obj.minus_state_set # ステート変化(-) を取得 for i in plus # ステート変化 (+) next if state_resist?(i) # 無効化されている? next if dead? # 戦闘不能? next if i == 1 and @immortal # 不死身? if state?(i) # すでに付加されている? if !$data_states[i].double_state @remained_states.push(i) # 変化しなかったステートを記録 @state_turns[i] = $data_states[i].hold_turn # 自然解除のターン数を追加 next end end if rand(100) < state_probability(i) # 確率判定 add_state(i) # ステートを付加 @added_states.push(i) # 付加したステートを記録 end end for i in minus # ステート変化 (-) next unless state?(i) # 付加されていない? remove_state(i) # ステートを解除 @removed_states.push(i) # 解除したステートを記録する end for i in @added_states & @removed_states @added_states.delete(i) # 付加と解除の両方に記録されている @removed_states.delete(i) # ステートがあれば両方削除する end end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● ステートの描画 #-------------------------------------------------------------------------- def draw_actor_state(actor, x, y, width = 96) count = 0 for state in actor.states.uniq draw_icon(state.icon_index, x + 24 * count, y) count += 1 break if (24 * count > width - 24) end end end