#============================================================================== # ■ RGSS3 レベル/成長リセット機能 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 対象のレベルを指定したレベルに変更したり # 成長効果を初期化する効果を持つアイテム/スキルを作成できます。 # また、同様の機能を持つイベントコマンドも使用できます。 #------------------------------------------------------------------------------ # ★アイテム/スキルに設定する場合(アイテム/スキルのメモ欄を使用) # # 例1.レベル5に変更し、成長効果は初期化しない場合 # # <転生:5,false> # # 例2.レベル1に変更し、成長効果を初期化する場合 # # <転生:1,true> # # 例3.レベルを変更せず、成長効果のみを初期化する場合 # # <転生:0,true> #------------------------------------------------------------------------------ # ★イベントコマンドで設定する場合(イベントコマンドのスクリプトを使用) # # 例1.ID1のアクターのレベルを5に変更し、成長効果は初期化しない場合 # # reincarnate(1,5,false) # # 例2.ID2のアクターのレベルを1に変更し、成長効果を初期化する場合 # # reincarnate(2,1,true) # # 例3.ID3のアクターのレベルを変更せず、成長効果のみを初期化する場合 # # reincarnate(3,0,true) # # 例4.パーティ全体のレベルを1に変更し、成長効果を初期化する場合 # # reincarnate(0,1,true) #============================================================================== # Ver1.01 レベル変更時、レベル毎の習得スキルを再取得するように変更しました。 #============================================================================== module REINCARNATE_STATUS WORD = "転生" end class Game_Interpreter def reincarnate(actor_id, data1, data2) #ダミーのアイテムオブジェクトを生成。 item = RPG::UsableItem.new #メモ欄を作成。 item.note = "<転生:" + data1.to_s + "," + data2.to_s + ">" #アクターIDが0の場合はパーティメンバー全体に。 #そうでない場合は指定したIDのアクターに反映。 if actor_id == 0;$game_party.all_members.each {|m| $game_actors[m.id].reincarnate_status(item)} elsif actor_id > 0;$game_actors[actor_id].reincarnate_status(item) end end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 転生効果 #-------------------------------------------------------------------------- def reincarnate_status(item) #転生レベルが設定されており、なおかつレベルがその値でない時 #レベルを変更し、EXPをそのレベルの物にする。 if item.reincarnate_status[1] > 0 && @level != item.reincarnate_status[1] @level = 1 number = item.reincarnate_status[1] - 1 number.times {level_up} if number > 0 init_exp end #成長効果を初期化する場合は、成長効果の初期化を行う。 clear_param_plus if item.reincarnate_status[2] #リフレッシュしておく。 refresh end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # 使用効果のテスト #-------------------------------------------------------------------------- alias item_effect_test_reincarnate_status item_effect_test def item_effect_test(user, item, effect) #本来の効果が有効な場合はtrueを返す。 return true if item_effect_test_reincarnate_status(user, item, effect) #転生効果を持つアイテムの場合は転生効果のテストを。 #そうでない場合はfalseを返す。 item.reincarnate_status[0] ? reincarnate_test(item) : false end #-------------------------------------------------------------------------- # 転生効果のテスト #-------------------------------------------------------------------------- def reincarnate_test(item) #アクターではない場合はfalseを返す。 return false unless self.actor? #アイテムの転生レベルと自分のレベルが異なる場合は有効とする。 return true if item.reincarnate_status[1] > 0 && @level != item.reincarnate_status[1] #成長初期化効果を持つ場合、成長効果を受けている場合は有効とする。 8.times {|i| return true if @param_plus[i] > 0} if item.reincarnate_status[2] #効果がない場合はfalseを返す。 false end #-------------------------------------------------------------------------- # 使用効果の適用 #-------------------------------------------------------------------------- alias item_effect_apply_reincarnate_status item_effect_apply def item_effect_apply(user, item, effect) #本来の処理を実行。 item_effect_apply_reincarnate_status(user, item, effect) #転生アイテムなら転生用処理を実行。 reincarnate_status(item) if item.reincarnate_status[0] && self.actor? end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 転生効果 #-------------------------------------------------------------------------- def reincarnate_status #キャッシュがある場合はキャッシュを返す。 return @reincarnate_status if @reincarnate_status != nil #配列を作成。 @reincarnate_status = [false, 0, false] #メモ欄からデータを作成。 memo = self.note.scan(/<#{REINCARNATE_STATUS::WORD}[::](\S+),(\S+)>/).flatten #転生用配列の中身をデータに即した物に変更。 @reincarnate_status = [true, memo[0].to_i, memo[1] == "true"] if (memo != nil && memo.size == 2) #データを返す。 @reincarnate_status end end