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