Advertisement
roninator2

Selchar Equip Repair Addon - Damage repair

Dec 5th, 2024
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 15.79 KB | None | 0 0
  1. # ╔═════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Damage Repair                ║  Version: 1.00     ║
  3. # ║ Author: Roninator2                  ║                    ║
  4. # ╠═════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                           ║   Date Created     ║
  6. # ║   Allow repair and damage           ╠════════════════════╣
  7. # ║   of weapons and armor              ║    26 Dec 2020     ║
  8. # ╚═════════════════════════════════════╩════════════════════╝
  9. # ╔══════════════════════════════════════════════════════════╗
  10. # ║ Script addon to allow for damaging of items or           ║
  11. # ║ partial repair of items or specifying                    ║
  12. # ║ what currency to use for a specific item                 ║
  13. # ║                                                          ║
  14. # ║ Turn switches on to enable Damage and Partial Repair     ║
  15. # ╚══════════════════════════════════════════════════════════╝
  16. # ╔═════════════════════════════════════╗
  17. # ║ Terms of use:                       ║
  18. # ║ Follow the Original Authors terms   ║
  19. # ╚═════════════════════════════════════╝
  20.  
  21. #==============================================================================
  22. # ■ Module for currency repair
  23. #==============================================================================
  24. module TH_Instance
  25.   module Scene_Repair
  26.     Partial = "Partial"
  27.     Damage = "Damage"
  28.     Damage_Item = "Each damage point will recover "
  29.     Allow_Partial = 5 # switch to allow partial repair
  30.     Allow_Damage = 6 # switch to allow damage of items
  31.     Gold_Icon = 361
  32.   end
  33. end
  34.  
  35. #==============================================================================
  36. # ■ Window_RepairCommand
  37. #==============================================================================
  38. class Window_RepairCommand < Window_HorzCommand
  39.   #============================================================================
  40.   # Set max column
  41.   #============================================================================
  42.   def col_max
  43.     col = 2
  44.     col += 1 if $game_switches[TH_Instance::Scene_Repair::Allow_Partial]
  45.     col += 1 if $game_switches[TH_Instance::Scene_Repair::Allow_Damage]
  46.     return col
  47.   end
  48.   #============================================================================
  49.   # Make command list
  50.   #============================================================================
  51.   def make_command_list
  52.     add_command(TH_Instance::Scene_Repair::Vocab,    :repair)
  53.     if $game_switches[TH_Instance::Scene_Repair::Allow_Partial]
  54.       add_command(TH_Instance::Scene_Repair::Partial,    :partial)
  55.     end
  56.     if $game_switches[TH_Instance::Scene_Repair::Allow_Damage]
  57.       add_command(TH_Instance::Scene_Repair::Damage,    :damage)
  58.     end
  59.     add_command(Vocab::ShopCancel, :cancel)
  60.   end
  61. end
  62.  
  63. #==============================================================================
  64. # ■ Scene_RepairEquip
  65. #==============================================================================
  66. class Scene_RepairEquip < Scene_ItemBase
  67.   def start
  68.     super
  69.     create_help_window
  70.     create_gold_window
  71.     create_command_window
  72.     create_item_window
  73.     create_cost_window
  74.   end
  75.   #============================================================================
  76.   # Create command window
  77.   #============================================================================
  78.   def create_command_window
  79.     @command_window = Window_RepairCommand.new(@gold_window.x)
  80.     @command_window.viewport = @viewport
  81.     @command_window.y = @help_window.height
  82.     @command_window.set_handler(:repair, method(:command_repair))
  83.     @command_window.set_handler(:partial, method(:command_partial))
  84.     @command_window.set_handler(:damage, method(:command_damage))
  85.     @command_window.set_handler(:cancel, method(:return_scene))
  86.   end
  87.   #============================================================================
  88.   # Create cost (number) window
  89.   #============================================================================
  90.   def create_cost_window
  91.     wy = @command_window.y
  92.     wh = 160
  93.     @cost_window = Window_ShopNumber.new(50, wy, wh)
  94.     @cost_window.viewport = @viewport
  95.     @cost_window.hide
  96.     @cost_window.set_handler(:ok,     method(:on_number_ok))
  97.     @cost_window.set_handler(:cancel, method(:on_number_cancel))
  98.   end
  99.   #============================================================================
  100.   # Process item ok
  101.   #============================================================================
  102.   def on_item_ok
  103.     case @command_window.current_symbol
  104.     when :repair
  105.       cost = (item.max_durability - item.durability) * item.repair_point
  106.         if cost <= $game_party.gold
  107.           $game_party.lose_gold(item.repair_price)
  108.           item.repair
  109.           @gold_window.refresh
  110.           on_item_sound
  111.           activate_item_window
  112.           @item_window.refresh
  113.         else
  114.           Sound.play_cancel
  115.         end
  116.     when :partial
  117.         @cost_window.set(item, item.max_durability - item.durability, item.repair_point, $game_party.gold)
  118.       @cost_window.show.activate
  119.     when :damage
  120.         @cost_window.set(item, item.durability, item.repair_point, $game_party.gold)
  121.       @cost_window.show.activate
  122.     end
  123.   end
  124.   #============================================================================
  125.   # Process number ok
  126.   #============================================================================
  127.   def on_number_ok
  128.     case @command_window.current_symbol
  129.     when :partial
  130.       cost = @cost_window.number * item.repair_point
  131.         if cost <= $game_party.gold
  132.           item.partial_repair(@cost_window.number)
  133.           $game_party.lose_gold(cost)
  134.           on_item_sound
  135.           activate_item_window
  136.           @item_window.refresh
  137.           end_number_input
  138.         else
  139.           Sound.play_cancel
  140.           @cost_window.activate
  141.         end
  142.     when :damage
  143.       previous = item.repair_price
  144.       item.damage_durability(@cost_window.number)
  145.       current = item.repair_price
  146.       $game_party.gain_gold((current - previous)/2)
  147.       on_item_sound
  148.       activate_item_window
  149.       @item_window.refresh
  150.       end_number_input
  151.     end
  152.     @gold_window.refresh
  153.   end
  154.   #============================================================================
  155.   # Process number cancel
  156.   #============================================================================
  157.   def on_number_cancel
  158.     Sound.play_cancel
  159.     end_number_input
  160.     @item_window.refresh
  161.   end
  162.   #============================================================================
  163.   # Process end number input
  164.   #============================================================================
  165.   def end_number_input
  166.     @cost_window.hide
  167.     @gold_window.refresh
  168.     on_item_sound
  169.     activate_item_window
  170.     @item_window.refresh
  171.   end
  172.   #============================================================================
  173.   # Process item cancel
  174.   #============================================================================
  175.   def on_item_cancel
  176.     @item_window.unselect
  177.     @item_window.deactivate
  178.     @command_window.activate
  179.     @help_window.set_text('')
  180.     @item_window.equip_damage = false
  181.     @item_window.partial_repair = false
  182.     @cost_window.damage_price = false
  183.     @item_window.refresh
  184.   end
  185.   #============================================================================
  186.   # Command for Partial repair
  187.   #============================================================================
  188.   def command_partial
  189.     @item_window.partial_repair = true
  190.     @command_window.deactivate
  191.     @item_window.activate
  192.     @item_window.refresh
  193.     @item_window.select(0)
  194.   end
  195.   #============================================================================
  196.   # Command for Damage item
  197.   #============================================================================
  198.   def command_damage
  199.     @item_window.equip_damage = true
  200.     @cost_window.damage_price = true
  201.     @command_window.deactivate
  202.     @item_window.activate
  203.     @item_window.refresh
  204.     @item_window.select(0)
  205.   end
  206. end
  207.  
  208. #==============================================================================
  209. # ■ Window_ShopNumber
  210. #==============================================================================
  211. class Window_ShopNumber < Window_Selectable
  212.   attr_accessor :damage_price
  213.   #============================================================================
  214.   # Draw the total cost for repair
  215.   #============================================================================
  216.   def draw_total_price
  217.     width = contents_width - 8
  218.     icon_index = TH_Instance::Scene_Repair::Gold_Icon
  219.     icon = draw_icon(icon_index, 260, 70)
  220.     if SceneManager.scene_is?(Scene_RepairEquip)
  221.       if @damage_price
  222.         cost_cut = @item.repair_point / 2
  223.         draw_currency_value(cost_cut * @number, nil, -15, price_y, width)
  224.       else
  225.         draw_currency_value(@item.repair_point * @number, nil, -15, price_y, width)
  226.       end
  227.     else
  228.       draw_currency_value(@price * @number, @currency_unit, 4, price_y, width)
  229.       draw_currency_value(@price * @number, icon, -15, price_y, width)
  230.     end
  231.   end
  232.   def damage_price
  233.     @damage_price
  234.   end
  235. end
  236.  
  237. #==============================================================================
  238. # ■ Window_EquipRepair
  239. #==============================================================================
  240. class Window_EquipRepair < Window_ItemList
  241.   attr_accessor :equip_damage
  242.   attr_accessor :partial_repair
  243.   #============================================================================
  244.   # Is the item enabled?
  245.   #============================================================================
  246.   def enable?(item)
  247.     return true if item.is_a?(RPG::EquipItem) && item.can_repair? && $game_party.gold >=  item.repair_price
  248.     return true if @equip_damage
  249.     return true if @partial_repair && item.can_repair? &&
  250.     $game_party.gold >= item.repair_point
  251.     return false
  252.   end
  253.   #============================================================================
  254.   # Command for Damage item
  255.   #============================================================================
  256.   def equip_damage
  257.     @equip_damage
  258.   end
  259.   #============================================================================
  260.   # Command for Partial repair of item
  261.   #============================================================================
  262.   def partial_repair
  263.     @partial_repair
  264.   end
  265.   #============================================================================
  266.   # Update help for items selected
  267.   #============================================================================
  268.    def update_help
  269.     unless item
  270.       @help_window.set_text(TH_Instance::Scene_Repair::No_Selected_Item)
  271.     else
  272.       base_cost = item.base_cost
  273.       if item.repair_price.zero?
  274.         if equip_damage
  275.           base_cost = base_cost / 2
  276.           @help_window.set_text(TH_Instance::Scene_Repair::Damage_Item + base_cost.to_s + "\nfor each point of damage")
  277.         else
  278.           @help_window.set_text(TH_Instance::Scene_Repair::Can_Not_Repair)
  279.         end
  280.       else
  281.         if partial_repair          
  282.           @help_window.set_text(TH_Instance::Scene_Repair::Selected_Item + base_cost.to_s + " for each point of repair")
  283.         elsif equip_damage
  284.           base_cost = base_cost / 2
  285.           @help_window.set_text(TH_Instance::Scene_Repair::Damage_Item + base_cost.to_s + "\nfor each point of damage")
  286.         else
  287.           @help_window.set_text(TH_Instance::Scene_Repair::Selected_Item + base_cost.to_s + " for each point of repair")
  288.         end
  289.       end
  290.     end
  291.   end
  292.   #============================================================================
  293.   # Include
  294.   #============================================================================
  295.   def include?(item)
  296.     !item.is_a?(RPG::Item) && !item.nil? && (item.use_durability || equip_damage)
  297.   end
  298. end
  299.  
  300. #==============================================================================
  301. # ■ Weapon specify settings
  302. #==============================================================================
  303. class RPG::Weapon
  304.   #============================================================================
  305.   # Partial Repair. for repairing equipment a small amount
  306.   #============================================================================
  307.   def partial_repair(amount = 0)
  308.     @durability += amount
  309.     @durability = max_durability if @durability > max_durability
  310.     refresh_name
  311.     refresh_price
  312.   end
  313.   #============================================================================
  314.   # Damage_Durability
  315.   #============================================================================
  316.   def damage_durability(amount = 0)
  317.     @durability -= amount
  318.     @durability = 0 if @durability < 0
  319.     refresh_name
  320.     refresh_price
  321.   end
  322.   #============================================================================
  323.   # Repair point - finds cost of repairing one point
  324.   #============================================================================
  325.   def repair_point
  326.     adjust = max_durability - @durability
  327.     return @price / 100 if adjust == 0
  328.     return ((@non_durability_price - @price) / adjust).to_i
  329.   end
  330.   #============================================================================
  331.   # Base Cost of repair
  332.   #============================================================================
  333.   def base_cost
  334.     return @non_durability_price / @max_durability
  335.   end
  336. end
  337. #==============================================================================
  338. # ■ Armor specify settings
  339. #==============================================================================
  340. class RPG::Armor
  341.   #============================================================================
  342.   # Partial Repair. for repairing equipment a small amount
  343.   #============================================================================
  344.   def partial_repair(amount = 0)
  345.     @durability += amount
  346.     @durability = max_durability if @durability > max_durability
  347.     refresh_name
  348.     refresh_price
  349.   end
  350.   #============================================================================
  351.   # Damage_Durability
  352.   #============================================================================
  353.   def damage_durability(amount = 0)
  354.     @durability -= amount
  355.     @durability = 0 if @durability < 0
  356.     refresh_name
  357.     refresh_price
  358.   end
  359.   #============================================================================
  360.   # Repair point - finds cost of repairing one point
  361.   #============================================================================
  362.   def repair_point
  363.     adjust = max_durability - @durability
  364.     return @price / 100 if adjust == 0
  365.     return ((@non_durability_price - @price) / adjust).to_i
  366.   end
  367.   #============================================================================
  368.   # Base Cost of repair
  369.   #============================================================================
  370.   def base_cost
  371.     return @non_durability_price / @max_durability
  372.   end
  373. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement