#==============================================================================
# 「HP/MPプール」(ACE) Ver.1.0
# 製作者:奈々(なな)
# へぷたなすくろーる http://heptanas.mamagoto.com/
#
# ◇使用規約
# 使用される場合はスクリプト作成者として「奈々」を明記して下さい。
# スクリプトの改変は自由に行って頂いて構いませんが
# その場合も元のスクリプトの作成者として名前を載せて下さい。
# また配布前に必ず、ブログにある利用規約を確認して下さい。
#
#------------------------------------------------------------------------------
#
# デフォルトの仕様では最大HP/MPを超えたHP/MPは破棄され
# 最大HP/MPが増えた場合でも現在HP/MPはそのままでした。
#
# このため、例えば最大HP/MPを減らす装備を付け外しすると
# HP/MPが減ってしまうため、特に装備には使いにくい仕様でした。
# このスクリプトではそれを改善します。
#
# 最大HP/MPが下がり現在HP/MPを下回った場合
# その差を一時的にプール(保管)しておきます。
# 逆に最大HP/MPが上がったときに、プールした分が補填されます。
#
# 初期設定でプールしたHP/MPのリセットを設定できます。
# また、イベントコマンドのスクリプトで
# 「n7_reset_pool」と入れると手動リセットができます。
# プールが悪用できそうな場合は、適度リセットを掛けてください。
#
#==============================================================================
#初期設定
module N7_POOL
#プールしたHP/MPのリセットタイミング(true / false)
#戦闘に入ったとき
BATTLE = false
#メニューを閉じたとき
MENU = false
#イベントコマンド「全回復」をしたとき
EVENT = false
end
#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
# バトラーを扱う基本のクラスです。主に能力値計算のメソッドを含んでいます。こ
# のクラスは Game_Battler クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :pooled_hp # プールHP
attr_accessor :pooled_mp # プールMP
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias n7_pool_initialize initialize
def initialize
n7_pool_initialize
reset_pool
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
state_resist_set.each {|state_id| erase_state(state_id) }
pool_hp_mp
@hp = [[@hp, mhp].min, 0].max
@mp = [[@mp, mmp].min, 0].max
@hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
end
#--------------------------------------------------------------------------
# ● HP/MPのプール
#--------------------------------------------------------------------------
def pool_hp_mp
gap = mhp - @hp
if gap > 0
if @pooled_hp > gap
@pooled_hp -= gap
@hp = mhp
else
@hp += @pooled_hp
@pooled_hp = 0
end
else
@pooled_hp -= gap
end
gap = mmp - @mp
if gap > 0
if @pooled_mp > gap
@pooled_mp -= gap
@mp = mmp
else
@mp += @pooled_mp
@pooled_mp = 0
end
else
@pooled_mp -= gap
end
end
#--------------------------------------------------------------------------
# ● プールのリセット
#--------------------------------------------------------------------------
def reset_pool
@pooled_hp = 0
@pooled_mp = 0
end
#--------------------------------------------------------------------------
# ● 全回復
#--------------------------------------------------------------------------
alias n7_pool_recover_all recover_all
def recover_all
n7_pool_recover_all
reset_pool if N7_POOL::EVENT
end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● プールの手動リセット
#--------------------------------------------------------------------------
def n7_reset_pool
$game_party.members.each do |actor|
actor.reset_pool
end
$game_troop.members.each do |enemy|
enemy.reset_pool
end
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 開始後処理
#--------------------------------------------------------------------------
alias n7_pool_post_start post_start
def post_start
n7_pool_post_start
if N7_POOL::BATTLE
$game_party.members.each do |actor|
actor.reset_pool
end
end
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 終了前処理
#--------------------------------------------------------------------------
alias n7_pool_pre_terminate pre_terminate
def pre_terminate
n7_pool_pre_terminate
if N7_POOL::MENU
$game_party.members.each do |actor|
actor.reset_pool
end
end
end
end