roninator2

Revive Actor on Death

Dec 10th, 2024
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 10.62 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Revive Actor After Death               ║  Version: 1.01     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║     Battle Manager & Game_Battler             ╠════════════════════╣
  7. # ║     Adjust process die                        ║    27 Dec 2021     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Revive after death in battle                                 ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   A script to revive an actor that has fallen - X times            ║
  20. # ║   When correct armour is equipped the actor is revived             ║
  21. # ║  FYI                                                               ║
  22. # ║   Variable array is formatted like this                            ║
  23. # ║   [0,0] = [revives left, reached 0 (1 = true)]                     ║
  24. # ║   array is reset at the start of battle                            ║
  25. # ║                                                                    ║
  26. # ║   This can be customized, but I've designed it to revive           ║
  27. # ║   in stages. First death = 100%, second death = 50%                ║
  28. # ║   Third death = 10%, Fourth death = dead                           ║
  29. # ║   The actor can still be revived by revive spell after this        ║
  30. # ╚════════════════════════════════════════════════════════════════════╝
  31. # ╔════════════════════════════════════════════════════════════════════╗
  32. # ║ Updates:                                                           ║
  33. # ║ 1.00 - 27 Dec 2021 - Script finished                               ║
  34. # ║ 1.01 - 27 Dec 2021 - Fixed issue                                   ║
  35. # ║                                                                    ║
  36. # ╚════════════════════════════════════════════════════════════════════╝
  37. # ╔════════════════════════════════════════════════════════════════════╗
  38. # ║ Credits and Thanks:                                                ║
  39. # ║   Roninator2                                                       ║
  40. # ║                                                                    ║
  41. # ╚════════════════════════════════════════════════════════════════════╝
  42. # ╔════════════════════════════════════════════════════════════════════╗
  43. # ║ Terms of use:                                                      ║
  44. # ║  Follow the original Authors terms of use where applicable         ║
  45. # ║    - When not made by me (Roninator2)                              ║
  46. # ║  Free for all uses in RPG Maker except nudity                      ║
  47. # ║  Anyone using this script in their project before these terms      ║
  48. # ║  were changed are allowed to use this script even if it conflicts  ║
  49. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  50. # ║  No part of this code can be used with AI programs or tools        ║
  51. # ║  Credit must be given                                              ║
  52. # ╚════════════════════════════════════════════════════════════════════╝
  53.  
  54. # just set and forget
  55. module R2_Recover_Death
  56.     Revive_Equip = 6                # equipment that will recover party member
  57.     Equip_Type = 1                # 0 = weapon, 1 = armor
  58.     Reset_After_Battle = false  # will start fresh on the next battle
  59.     Lose_Item = true                # remove item after last revive
  60.     Repeat = 3                      # specify how many times to use
  61.     # repeats     0   1   2   3
  62.     # repeat 3 = [1, 10, 50, 75]
  63.     #          Stage 0   1   2   3
  64.     Stage_Percent = [5, 25, 50, 75] # Percent of HP recovered each time
  65.     # stage 3 = 75%, stage 2 = 50% etc
  66.     Revive_Var = 19         # variable used to track uses
  67.     Preserve_Buffs = true   # will save buffs from getting removed on death
  68.     Preserve_States = true  # will save states from getting removed on death
  69.     # these will be cleared when the actor has 0 recovers left
  70.     # unless you have another script to preserve them.
  71.     # no guarantees that they will be compatible
  72.     Message = "The Amulet revived " # message + actors name
  73.     Lost_Item = "The Amulet Broke"  # when item is expired
  74. end
  75.  
  76. class Game_Battler < Game_BattlerBase
  77.   def die
  78.     @hp = 0
  79.     if SceneManager.scene_is?(Scene_Battle)
  80.       chkact = enemy? ? false : true
  81.       if chkact == true
  82.         reset_revive_count if $game_variables[R2_Recover_Death::Revive_Var] == 0
  83.         i = actor.id
  84.         array = $game_variables[R2_Recover_Death::Revive_Var]
  85.         item = array[i]
  86.         if !item.nil?
  87.           if item[1] != 1
  88.             remove_state(death_state_id)
  89.             perc = (R2_Recover_Death::Stage_Percent[item[0]].to_f / 100)
  90.             $game_party.battle_members.each do |act|
  91.               next if act.id != i
  92.               $game_message.add(sprintf(R2_Recover_Death::Message + actor.name, actor.name))
  93.               act.hp += [(act.mhp * perc).to_i - 1, act.mhp].min
  94.             end
  95.             item[0] -= 1
  96.             item[1] = 1 if item[0] < 0
  97.             if item[1] == 1
  98.               if R2_Recover_Death::Lose_Item
  99.                                 litem = r2_equip_type_check
  100.                 actor_index = $game_actors[actor.id]
  101.                 actor_index.equips.each_with_index do |eq, slot|
  102.                   next if eq.nil?
  103.                   etype_id = eq.etype_id ? eq.etype_id : eq.itype_id
  104.                   case etype_id
  105.                   when 0
  106.                     li = $data_weapons[eq.id]
  107.                   else
  108.                     li = $data_armors[eq.id]
  109.                   end
  110.                   actor_index.discard_equip(li) if li == litem
  111.                 end
  112.                 $game_message.add(sprintf(R2_Recover_Death::Lost_Item, actor.name))
  113.               end
  114.             end
  115.             array[i] = item
  116.             $game_variables[R2_Recover_Death::Revive_Var] = array
  117.           end
  118.         end
  119.         clear_states if R2_Recover_Death::Preserve_States == false && item[1] != 1 && !item.nil?
  120.         clear_buffs if R2_Recover_Death::Preserve_Buffs == false && item[1] != 1 && !item.nil?
  121.       else
  122.         clear_states
  123.         clear_buffs
  124.       end
  125.     else
  126.       clear_states
  127.       clear_buffs
  128.     end
  129.   end
  130.   def r2_equip_type_check
  131.         case R2_Recover_Death::Equip_Type
  132.         when 0
  133.             item = $data_weapons[R2_Recover_Death::Revive_Equip]
  134.         when 1
  135.             item = $data_armors[R2_Recover_Death::Revive_Equip]
  136.         end
  137.         return item
  138.     end
  139.   def reset_revive_count
  140.     array = []
  141.     $game_party.battle_members.each do |actor|
  142.       i = actor.id
  143.             item = r2_equip_type_check
  144.       if actor.equips.include?(item)
  145.         array[i] = [0,0]
  146.         array[i][0] = R2_Recover_Death::Repeat
  147.         array[i][1] = 0
  148.       end
  149.       $game_variables[R2_Recover_Death::Revive_Var] = array
  150.     end
  151.   end
  152. end
  153.  
  154. module BattleManager
  155.   class << self
  156.     alias :reset_recover_armor_victory  :process_victory
  157.     alias :reset_recover_armor_escape   :process_escape
  158.     alias :reset_recover_armor_abort    :process_abort
  159.     alias :reset_recover_armor_defeat   :process_defeat
  160.   end
  161.   def self.process_victory
  162.     $game_variables[R2_Recover_Death::Revive_Var] = 0 unless R2_Recover_Death::Reset_After_Battle == false
  163.     reset_recover_armor_victory
  164.   end
  165.   def self.process_escape
  166.     $game_variables[R2_Recover_Death::Revive_Var] = 0 unless R2_Recover_Death::Reset_After_Battle == false
  167.     reset_recover_armor_escape
  168.   end
  169.   def self.process_abort
  170.     $game_variables[R2_Recover_Death::Revive_Var] = 0 unless R2_Recover_Death::Reset_After_Battle == false
  171.     reset_recover_armor_abort
  172.   end
  173.   def self.process_defeat
  174.     $game_variables[R2_Recover_Death::Revive_Var] = 0 unless R2_Recover_Death::Reset_After_Battle == false
  175.     reset_recover_armor_defeat
  176.   end
  177. end
Add Comment
Please, Sign In to add comment