Advertisement
Guest User

Untitled

a guest
Nov 29th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 32.03 KB | None | 0 0
  1. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
  2. #  ▼ Skill Upgrade
  3. #  Author: Kread-EX
  4. #  Version 1.07
  5. #  Release date: 24/12/2012
  6. #
  7. #  For Rukaroa.
  8. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
  9.  
  10. #------------------------------------------------------------------------------
  11. #  ▼ UPDATES
  12. #------------------------------------------------------------------------------
  13. # # 06/02/2013. Fixed compatibility issue with Yanfly's Autobattle.
  14. # # 29/12/2012. Added the option to have negative values for MP/TP inflation.
  15. # # 28/12/2012. Fixed a bug with the JP display when Ace Menu Engine isn't
  16. # # installed.  Fixed a bug in the skill list when no skill is present.
  17. # #             Fixed a bug with non numerical damage values.
  18. # # 26/12/2012. Added the option to disable downgrades.
  19. # # 26/12/2012. Fixed another bug with JP.
  20. # # 26/12/2012. Fixed a bug with the level window.
  21. #------------------------------------------------------------------------------
  22. #  ▼ TERMS OF USAGE
  23. #------------------------------------------------------------------------------
  24. # #  You are free to adapt this work to suit your needs.
  25. # #  You can use this work for commercial purposes if you like it.
  26. # #  Credit is appreciated.
  27. # #
  28. # # For support:
  29. # # grimoirecastle.wordpress.com
  30. # # rpgmakerweb.com
  31. #------------------------------------------------------------------------------
  32. #  ▼ INTRODUCTION
  33. #------------------------------------------------------------------------------
  34. # # Allows to upgrade/downgrade skills with either JP, gold, or a game
  35. # # variable.
  36. #------------------------------------------------------------------------------
  37. #  ▼ INSTRUCTIONS
  38. #------------------------------------------------------------------------------
  39. # # Before everything, you should put this script below the JP Manager if you
  40. # # intend to use JP for upgrade.
  41. # #
  42. # # Start by visiting the configuration section of the script to set up the
  43. # # default parameters. They're all commented and apply to every skill.
  44. # #
  45. # # In order to customize the system for each skill, you will use notetags in
  46. # # the skills' notebox.
  47. # #
  48. # # <upgrade_cost: x>
  49. # # This is the base cost for a skill upgrade.
  50. # #
  51. # # <upgrade_formula: string>
  52. # # How the cost rises after each upgrade. You need some basic Ruby syntax
  53. # # knowledge in order to use this option but there are two specific words:
  54. # # cost refers to the base cost.
  55. # # level refers to the next skill level.
  56. # #
  57. # # <max_level: x>
  58. # # The maximum level a skill can attain.
  59. # #
  60. # # <upgrade_damage: x>
  61. # # The percentage of damage bonus per level.
  62. # #
  63. # # <upgrade_mp: x>
  64. # # The percentage of additional MP cost per level.
  65. # #
  66. # # <upgrade_tp: x>
  67. # # The percentage of additional TP cost per level.
  68. # #
  69. # # <level_morph: x, y>
  70. # # At level X, skill will transform into skill Y. This is a one-way process,
  71. # # so downgrade won't be allowed after a morph.
  72. #------------------------------------------------------------------------------
  73. #  ▼ COMPATIBILITY
  74. #------------------------------------------------------------------------------
  75. # # Compatible with Yanfly's JP Manager and Ace Menu Engine
  76. # #
  77. # # List of new classes:
  78. # #
  79. # # Scene_Upgrade
  80. # # Window_UpgradeStats
  81. # # Window_UpgradeList
  82. # # Window_UpgradeSkillCommand
  83. # # Window_UpgradeStatus
  84. # # Window_UpgradeCommand
  85. # #
  86. # # List of aliases and overwrites:
  87. # #
  88. # # DataManager
  89. # # load_database (alias)
  90. # # load_supgrade_notetags (new method)
  91. # #
  92. # # RPG::Skill
  93. # # load_supgrade_notetags (new method)
  94. # # upgrade_data (new method)
  95. # # make_cost (new method)
  96. # #
  97. # # Game_Battler
  98. # # make_damage_value (alias)
  99. # #
  100. # # Game_Actor
  101. # # skill_level (new method)
  102. # # skill_mp_cost (alias)
  103. # # skill_tp_cost (alias)
  104. # # upgrade_skill (new method)
  105. # # downgrade_skill (new method)
  106. # # mod_skill_level (new method)
  107. #------------------------------------------------------------------------------
  108.  
  109. $imported = {} if $imported.nil?
  110. $imported['KRX-SkillUpgrade'] = true
  111.  
  112. puts 'Load: Skill Upgrade v1.07 by Kread-EX'
  113.  
  114. module KRX
  115. #===========================================================================
  116. # ■ CONFIGURATION
  117. #===========================================================================
  118.   # The 'currency' used to upgrade skills.
  119.   # :jp requires Yanfly's JP Manager.
  120.   # :gold just uses the party's gold.
  121.   # :variable uses a game variable.
  122.   UPGRADE_CURRENCY = :jp
  123.  
  124.   # The ID of the variable used as currency (if :variable is used).
  125.   UPGRADE_VARIABLE_ID = 91
  126.  
  127.   # Set to true to disable the downgrade option.
  128.   DISABLE_DOWNGRADE = true
  129.  
  130.   # Default max level.
  131.   SKILL_MAX_LEVEL = 6
  132.  
  133.   # Default upgrade cost.
  134.   UPGRADE_COST = 100
  135.  
  136.   # Default upgrade formula.
  137.   UPGRADE_FORMULA = "cost*level+cost*(level*level)/2"
  138.  
  139.   # Default damage inflation.
  140.   UPGRADE_DAMAGE = 10
  141.  
  142.   # Default MP inflation.
  143.   UPGRADE_MP = 10
  144.  
  145.   # Default TP inflation
  146.   UPGRADE_TP = 0
  147.  
  148.   # Percentage of the currency NOT retrieved when downgrading skills.
  149.   DOWNGRADE_MALUS = 30
  150.  
  151.   # X offset in the upgrade menu.
  152.   UPGRADE_X_OFFSET = 96
  153.  
  154.   module VOCAB
  155.    
  156.     SKILL_MAX_LV = 'Maîtrisé'
  157.     SKILL_MIN_LV = 'Min'
  158.     SKILL_COST = 'Coût  :'
  159.     SKILL_DAMAGE = '% Dégâts :'
  160.     UPGRADE_SKILL = 'Améliorer'
  161.     DOWNGRADE_SKILL = 'Diminuer'
  162.    
  163.   end
  164. #===========================================================================
  165. # ■ CONFIGURATION ENDS HERE
  166. #===========================================================================
  167.   module REGEXP
  168.     SU_COST = /<upgrade_cost:[ ]*(\d+)>/i
  169.     SU_FORMULA = /<upgrade_formula:[ ]*(.+)>/i
  170.     SU_LEVEL_MAX = /<max_level:[ ]*(\d+)>/i
  171.     SU_MORPH = /<level_morph:[ ]*(\d+)[,]?[ ]*(\d+)/i
  172.     SU_DAMAGE = /<upgrade_damage:[ ]*(\d+)>/i
  173.     SU_MP = /<upgrade_mp:[ ]*(-?\d+)>/i
  174.     SU_TP = /<upgrade_tp:[ ]*(-?\d+)>/i
  175.   end
  176. end
  177.  
  178. # JP Manager check
  179. if KRX::UPGRADE_CURRENCY == :jp && !$imported["YEA-JPManager"]
  180.   msgbox("You need the JP Manager to use JP for skill upgrade.\n" +
  181.   "The option has been reverted to Gold instead.")
  182.   KRX::UPGRADE_CURRENCY = :gold
  183. end # End JP Manager check
  184.  
  185. #===========================================================================
  186. # ■ DataManager
  187. #===========================================================================
  188.  
  189. module DataManager  
  190.     #--------------------------------------------------------------------------
  191.     # ● Loads the database
  192.     #--------------------------------------------------------------------------
  193.     class << self; alias_method(:krx_supgrade_dm_ld, :load_database); end
  194.     def self.load_database
  195.         krx_supgrade_dm_ld
  196.         load_supgrade_notetags
  197.     end  
  198.     #--------------------------------------------------------------------------
  199.     # ● Loads the note tags
  200.     #--------------------------------------------------------------------------
  201.     def self.load_supgrade_notetags
  202.     for obj in $data_skills
  203.       next if obj.nil?
  204.       obj.load_supgrade_notetags
  205.     end
  206.         puts "Read: Skill Upgrade Notetags"
  207.     end
  208. end
  209.  
  210. #==========================================================================
  211. # ■ RPG::Skill
  212. #==========================================================================
  213.  
  214. class RPG::Skill < RPG::UsableItem
  215.     #--------------------------------------------------------------------------
  216.     # ● Loads the note tags
  217.     #--------------------------------------------------------------------------
  218.     def load_supgrade_notetags
  219.         @note.split(/[\r\n]+/).each do |line|
  220.             case line
  221.       when KRX::REGEXP::SU_COST
  222.         @upgrade_cost = $1.to_i
  223.       when KRX::REGEXP::SU_FORMULA
  224.         @upgrade_formula = $1
  225.       when KRX::REGEXP::SU_LEVEL_MAX
  226.         @upgrade_maxlv = $1.to_i
  227.       when KRX::REGEXP::SU_MORPH
  228.         @upgrade_morph = [$1.to_i, $2.to_i]
  229.       when KRX::REGEXP::SU_DAMAGE
  230.         @upgrade_damage = $1.to_i
  231.       when KRX::REGEXP::SU_MP
  232.         @upgrade_mp = $1.to_i
  233.       when KRX::REGEXP::SU_TP
  234.         @upgrade_tp = $1.to_i
  235.             end
  236.         end
  237.   end
  238.     #--------------------------------------------------------------------------
  239.     # ● Returns upgrade data
  240.     #--------------------------------------------------------------------------
  241.     def upgrade_data
  242.     return @upgrade_data if @upgrade_data
  243.     cost = @upgrade_cost || KRX::UPGRADE_COST
  244.     formula = @upgrade_formula || KRX::UPGRADE_FORMULA
  245.     lv = @upgrade_maxlv || KRX::SKILL_MAX_LEVEL
  246.     damage = @upgrade_damage || KRX::UPGRADE_DAMAGE
  247.     mp = @upgrade_mp || KRX::UPGRADE_MP
  248.     tp = @upgrade_tp || KRX::UPGRADE_TP
  249.     morph = @upgrade_morph || 0
  250.     @upgrade_data = {
  251.       :cost => cost,
  252.       :formula => formula,
  253.       :lv => lv,
  254.       :morph => morph,
  255.       :damage => damage,
  256.       :mp => mp,
  257.       :tp => tp
  258.     }
  259.     @upgrade_data
  260.   end
  261.     #--------------------------------------------------------------------------
  262.     # ● Returns the actual cost, based on the formula
  263.     #--------------------------------------------------------------------------
  264.   def make_cost(level)
  265.     formula = upgrade_data[:formula]
  266.     cost = upgrade_data[:cost]
  267.     return eval(formula)
  268.   end
  269. end
  270.  
  271. #==========================================================================
  272. # ■ Game_Battler
  273. #==========================================================================
  274.  
  275. class Game_Battler < Game_BattlerBase
  276.   #--------------------------------------------------------------------------
  277.   # ● Calculate the damage dealt
  278.   #--------------------------------------------------------------------------
  279.   alias_method(:krx_supgrade_gb_mdv, :make_damage_value)
  280.   def make_damage_value(user, item)
  281.     krx_supgrade_gb_mdv(user, item)
  282.     if user.actor? && item.is_a?(RPG::Skill)
  283.       value = @result.hp_damage if item.damage.to_hp?
  284.       value = @result.mp_damage if item.damage.to_mp?
  285.       return if value.nil? || value == 0
  286.       base = item.upgrade_data[:damage]
  287.       lv = user.skill_level(item)
  288.       value += (value * base * lv / 100.00).round
  289.       @result.make_damage(value.to_i, item)
  290.     end
  291.   end
  292. end
  293.  
  294. #==========================================================================
  295. # ■ Game_Actor
  296. #==========================================================================
  297.  
  298. class Game_Actor < Game_Battler
  299.   #--------------------------------------------------------------------------
  300.   # ● Returns the current skill level
  301.   #--------------------------------------------------------------------------
  302.   def skill_level(skill)
  303.     @skill_level ||= {}
  304.     @skill_level[skill.id] || 0
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● Returns the MP cost for a skill
  308.   #--------------------------------------------------------------------------
  309.   alias_method(:krx_supgrade_ga_smc, :skill_mp_cost)
  310.   def skill_mp_cost(skill)
  311.     cost = krx_supgrade_ga_smc(skill)
  312.     cost += (skill.upgrade_data[:mp] * skill_level(skill) * cost / 100.00).round
  313.     cost = [cost, 0].max
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● Returns the TP cost for a skill
  317.   #--------------------------------------------------------------------------
  318.   alias_method(:krx_supgrade_ga_stc, :skill_tp_cost)
  319.   def skill_tp_cost(skill)
  320.     cost = krx_supgrade_ga_stc(skill)
  321.     cost += (skill.upgrade_data[:tp] * skill_level(skill) * cost / 100.00).round
  322.     cost = [[cost, 0].max, max_tp].min
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● Upgrades a skill
  326.   #--------------------------------------------------------------------------
  327.   def upgrade_skill(skill)
  328.     @skill_level[skill.id] ||= 0
  329.     @skill_level[skill.id] += 1
  330.     mid = skill.upgrade_data[:morph][0]
  331.     if mid > 0 && skill_level(skill) == mid
  332.       morph = $data_skills[skill.upgrade_data[:morph][1]]
  333.       ind = @skills.index(skill.id)
  334.       @skills[ind] = morph.id
  335.       @skill_level[morph.id] ||= 0
  336.     end
  337.     cur = KRX::UPGRADE_CURRENCY
  338.     lose_jp(skill.make_cost(skill_level(skill))) if cur == :jp
  339.     $game_party.lose_gold(skill.make_cost(skill_level(skill))) if cur == :gold
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● Downgrades a skill
  343.   #--------------------------------------------------------------------------
  344.   def downgrade_skill(skill)
  345.     cost = skill.make_cost(skill_level(skill))
  346.     cost -= cost.to_f * KRX::DOWNGRADE_MALUS / 100
  347.     cur = KRX::UPGRADE_CURRENCY
  348.     earn_jp(cost.round) if cur == :jp
  349.     $game_party.gain_gold(cost.round) if cur == :gold
  350.     if cur == :variable
  351.       var = $game_variables[KRX::UPGRADE_VARIABLE_ID]
  352.       var += cost.round
  353.     end
  354.     @skill_level[skill.id] -= 1
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ● Alter skill level without any currency effect
  358.   #--------------------------------------------------------------------------
  359.   def mod_skill_level(skill, lv)
  360.     @skill_level[skill.id] ||= 0
  361.     @skill_level[skill.id] += lv
  362.   end
  363. end
  364.  
  365. #==============================================================================
  366. # ■ Window_UpgradeCommand
  367. #==============================================================================
  368.  
  369. class Window_UpgradeCommand < Window_HorzCommand
  370.   #--------------------------------------------------------------------------
  371.   # ● Get window width
  372.   #--------------------------------------------------------------------------
  373.   def window_width
  374.     return Graphics.width / 2
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ● Get number of columns
  378.   #--------------------------------------------------------------------------
  379.   def col_max
  380.     return 2
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● Make the command list
  384.   #--------------------------------------------------------------------------
  385.   def make_command_list
  386.     add_command(KRX::VOCAB::UPGRADE_SKILL, :upgrade)
  387.     add_command(KRX::VOCAB::DOWNGRADE_SKILL, :downgrade)
  388.   end
  389. end
  390.  
  391. #==============================================================================
  392. # ■ Window_UpgradeStatus
  393. #==============================================================================
  394.  
  395. class Window_UpgradeStatus < Window_SkillStatus
  396.   #--------------------------------------------------------------------------
  397.   # ● Refresh
  398.   #--------------------------------------------------------------------------
  399.   def refresh
  400.     super
  401.     return unless @actor
  402.     cur = KRX::UPGRADE_CURRENCY
  403.     cy = $imported["YEA-AceMenuEngine"] ? line_height * 3 : 0
  404.     draw_actor_jp(@actor, 0, cy, contents_width) if cur == :jp
  405.     if cur == :gold
  406.       voc = Vocab.currency_unit
  407.       value = $game_party.gold
  408.       draw_currency_value(value, voc, 4, cy, contents.width - 8)
  409.     end
  410.     if cur == :variable
  411.       var = $game_variables[KRX::UPGRADE_VARIABLE_ID]
  412.       name = $data_system.variables[KRX::UPGRADE_VARIABLE_ID]
  413.       cx = text_size(name).width
  414.       change_color(normal_color)
  415.       draw_text(0, cy, contents_width - cx - 2, line_height, var, 2)
  416.       change_color(system_color)
  417.       draw_text(0, cy, contents_width, line_height, name, 2)
  418.     end
  419.   end
  420. end
  421.  
  422. #==============================================================================
  423. # ■ Window_UpgradeSkillCommand
  424. #==============================================================================
  425.  
  426. class Window_UpgradeSkillCommand < Window_SkillCommand
  427.   #--------------------------------------------------------------------------
  428.   # ● Makes the command list
  429.   #--------------------------------------------------------------------------
  430.   def make_command_list
  431.     return unless @actor
  432.     @actor.added_skill_types.sort.each do |stype_id|
  433.       name = $data_system.skill_types[stype_id]
  434.       add_command(name, :skill, true, stype_id)
  435.     end
  436.   end
  437. end
  438.  
  439. #==============================================================================
  440. # ■ Window_UpgradeList
  441. #==============================================================================
  442.  
  443. class Window_UpgradeList < Window_SkillList
  444.   #--------------------------------------------------------------------------
  445.   # ● Get mode
  446.   #--------------------------------------------------------------------------
  447.   def mode
  448.     @mode || :upgrade
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● Set mode
  452.   #--------------------------------------------------------------------------
  453.   def mode=(x)
  454.     @mode = x
  455.     refresh
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● Get number of columns
  459.   #--------------------------------------------------------------------------
  460.   def col_max
  461.     return 1
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● Determine if a skill is greyed out
  465.   #--------------------------------------------------------------------------
  466.   def enable?(item)
  467.     return false if item.nil?
  468.     return false if max_level?(item)
  469.     return false if cannot_pay?(item)
  470.     true
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● Determine if the skill level is maxed
  474.   #--------------------------------------------------------------------------
  475.   def max_level?(item)
  476.     if mode == :upgrade
  477.       level = @actor.skill_level(item)
  478.       max = item.upgrade_data[:lv]
  479.       return (level + 1) == max
  480.     end
  481.     @actor.skill_level(item) == 0
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ● Determine if the cost can't be payed
  485.   #--------------------------------------------------------------------------
  486.   def cannot_pay?(skill)
  487.     return false if mode == :downgrade
  488.     cost = skill.make_cost(@actor.skill_level(skill) + 1)
  489.     cur = KRX::UPGRADE_CURRENCY
  490.     now_cur = @actor.jp if cur == :jp
  491.     now_cur = $game_party.gold if cur == :gold
  492.     now_cur = $game_variables[KRX::UPGRADE_VARIABLE_ID] if cur == :variable
  493.     now_cur < cost
  494.   end
  495.   #--------------------------------------------------------------------------
  496.   # ● Draw the JP, gold or variable cost
  497.   #--------------------------------------------------------------------------
  498.   def draw_skill_cost(rect, skill)
  499.     if mode == :upgrade
  500.       text = skill.make_cost(@actor.skill_level(skill) + 1)
  501.       text = KRX::VOCAB::SKILL_MAX_LV if max_level?(skill)
  502.       draw_text(rect, text, 2)
  503.       return
  504.     end
  505.     cost = skill.make_cost(@actor.skill_level(skill))
  506.     cost -= cost.to_f * KRX::DOWNGRADE_MALUS / 100
  507.     text = cost.round.to_s
  508.     text = KRX::VOCAB::SKILL_MIN_LV if @actor.skill_level(skill) == 0
  509.     draw_text(rect, text, 2)
  510.   end
  511. end
  512.  
  513. #==============================================================================
  514. # ■ Window_UpgradeStats
  515. #==============================================================================
  516.  
  517. class Window_UpgradeStats < Window_Base
  518.   #--------------------------------------------------------------------------
  519.   # ● Public instance variables
  520.   #--------------------------------------------------------------------------
  521.   attr_accessor  :actor
  522.   attr_accessor  :skill_window
  523.   #--------------------------------------------------------------------------
  524.   # ● Object initialization
  525.   #--------------------------------------------------------------------------
  526.   def initialize(x, y, w, h)
  527.     super(x, y, w, h)
  528.     refresh
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● Frame Update
  532.   #--------------------------------------------------------------------------
  533.   def update
  534.     super
  535.     @actor = $game_party.menu_actor
  536.     refresh if @skill_window && @skill_window.item != @last_item
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # ● Return the current skill
  540.   #--------------------------------------------------------------------------
  541.   def item
  542.     @morph_item || @last_item
  543.   end
  544.   #--------------------------------------------------------------------------
  545.   # ● Refresh
  546.   #--------------------------------------------------------------------------
  547.   def refresh
  548.     @last_item = @skill_window.item if @skill_window
  549.     @morph_item = @last_item
  550.     contents.clear
  551.     draw_background
  552.     return if @last_item.nil?
  553.     draw_legends(1)
  554.     draw_current_level
  555.     draw_legends(5)
  556.     draw_next_level if @skill_window.mode == :upgrade
  557.     draw_previous_level if @skill_window.mode == :downgrade
  558.   end
  559.   #--------------------------------------------------------------------------
  560.   # ● Draw the background bars (easy integration with YF menus)
  561.   #--------------------------------------------------------------------------
  562.   def draw_background
  563.     color = Color.new(0, 0, 0, translucent_alpha / 2)
  564.     rect = Rect.new(1, line_height + 1, contents_width - 2, line_height - 2)
  565.     (0..6).each do |i|
  566.       unless i == 3 || ((@skill_window && @skill_window.mode == :downgrade) &&
  567.       [2, 6].include?(i))
  568.         contents.fill_rect(rect, color)
  569.       end
  570.       rect.y += line_height
  571.     end
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ● Draw the legends
  575.   #--------------------------------------------------------------------------
  576.   def draw_legends(line)
  577.     cap = "#{Vocab.tp_a} #{KRX::VOCAB::SKILL_COST}" if item.tp_cost >= 0
  578.     cap = "#{Vocab.mp_a} #{KRX::VOCAB::SKILL_COST}" if item.mp_cost > 0
  579.     change_color(system_color)
  580.     y = line_height * line
  581.     draw_text(4, y, contents_width, line_height, cap)
  582.     cap = KRX::VOCAB::SKILL_DAMAGE
  583.     y += line_height
  584.     draw_text(4, y, contents_width, line_height, cap)
  585.     return if @skill_window.mode == :downgrade
  586.     cap = case KRX::UPGRADE_CURRENCY
  587.       when :jp; YEA::JP::VOCAB
  588.       when :gold; Vocab.currency_unit
  589.       when :variable; $data_system.variables[KRX::UPGRADE_VARIABLE_ID]
  590.     end
  591.     y += line_height
  592.     draw_text(4, y, contents_width, line_height, cap + ' ' + KRX::VOCAB::SKILL_COST)
  593.     y += line_height
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● Draw the current skill level
  597.   #--------------------------------------------------------------------------
  598.   def draw_current_level
  599.     change_color(normal_color)
  600.     name = item.name.dup
  601.     if @actor.skill_level(item) > 0
  602.       name << ' (+' + @actor.skill_level(item).to_s + ')'
  603.     end
  604.     tw = text_size(name).width
  605.     draw_icon(item.icon_index, (contents_width - tw) / 2 - 12, 0)
  606.     draw_text(28, 0, contents_width - 28, line_height, name, 1)
  607.     y = line_height
  608.     draw_tp_mp(0, y)
  609.     y += line_height
  610.     draw_damage(@actor.skill_level(item), y)
  611.     y += line_height
  612.     draw_cost(@actor.skill_level(item), y)
  613.   end
  614.   #--------------------------------------------------------------------------
  615.   # ● Draw the next skill level
  616.   #--------------------------------------------------------------------------
  617.   def draw_next_level
  618.     mid = item.upgrade_data[:morph][0]
  619.     if mid > 0 && @actor.skill_level(item) + 1 == mid
  620.       @morph_item = $data_skills[item.upgrade_data[:morph][1]]
  621.     end
  622.     change_color(normal_color)
  623.     name = item.name.dup
  624.     unless @morph_item != @last_item
  625.       name << ' (+' + (@actor.skill_level(item) + 1).to_s + ')'
  626.     end
  627.     tw = text_size(name).width
  628.     y = line_height * 4
  629.     draw_icon(item.icon_index, (contents_width - tw) / 2 - 12, y)
  630.     draw_text(28, y, contents_width - 28, line_height, name, 1)
  631.     y += line_height
  632.     draw_tp_mp(1, y)
  633.     y += line_height
  634.     draw_damage(@actor.skill_level(item) + 1, y)
  635.     y += line_height
  636.     draw_cost(@actor.skill_level(@last_item) + 1, y)
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ● Draw the previous skill level
  640.   #--------------------------------------------------------------------------
  641.   def draw_previous_level
  642.     change_color(normal_color)
  643.     return if @actor.skill_level(item) == 0
  644.     name = @last_item.name.dup
  645.     unless @actor.skill_level(item) == 1
  646.       name << ' (+' + (@actor.skill_level(item) - 1).to_s + ')'
  647.     end
  648.     tw = text_size(name).width
  649.     y = line_height * 4
  650.     draw_icon(item.icon_index, (contents_width - tw) / 2 - 12, y)
  651.     draw_text(28, y, contents_width - 28, line_height, name, 1)
  652.     y += line_height
  653.     draw_tp_mp(-1, y)
  654.     y += line_height
  655.     draw_damage(@actor.skill_level(item) - 1, y)
  656.     y += line_height
  657.     draw_cost(@actor.skill_level(item) - 1, y)
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ● Draw MP/TP rate
  661.   #--------------------------------------------------------------------------
  662.   def draw_tp_mp(level, y)
  663.     @actor.mod_skill_level(item, level) unless @morph_item != @last_item
  664.     cost = '---'
  665.     cost = @actor.skill_tp_cost(item) if item.tp_cost > 0
  666.     cost = @actor.skill_mp_cost(item) if item.mp_cost > 0
  667.     @actor.mod_skill_level(item, -level) unless @morph_item != @last_item
  668.     x = KRX::UPGRADE_X_OFFSET
  669.     draw_text(x, y, 128, line_height, cost)
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● Draw damage rate
  673.   #--------------------------------------------------------------------------
  674.   def draw_damage(level, y)
  675.     rate = 100
  676.     level -= 1 if @morph_item != @last_item
  677.     if item.damage.to_hp?
  678.       rate += level * item.upgrade_data[:damage]
  679.     else
  680.       rate = '---'
  681.     end
  682.     rate = rate.to_s + '%' if rate.is_a?(Numeric)
  683.     x = KRX::UPGRADE_X_OFFSET
  684.     draw_text(x, y, 128, line_height, rate)
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ● Draw cost
  688.   #--------------------------------------------------------------------------
  689.   def draw_cost(level, y)
  690.     return if @skill_window.mode == :downgrade
  691.     cost = @last_item.make_cost(level)
  692.     cost = KRX::VOCAB::SKILL_MAX_LV if @skill_window.max_level?(item)
  693.     cost = KRX::VOCAB::SKILL_MIN_LV if level == 0
  694.     x = KRX::UPGRADE_X_OFFSET
  695.     draw_text(x, y, 128, line_height, cost)
  696.   end
  697. end
  698.  
  699. #==============================================================================
  700. # ■ Scene_Upgrade
  701. #==============================================================================
  702.  
  703. class Scene_Upgrade < Scene_Skill
  704.   #--------------------------------------------------------------------------
  705.   # ● Start scene
  706.   #--------------------------------------------------------------------------
  707.   def start
  708.     super
  709.     create_param_window
  710.     create_upgrade_window
  711.   end
  712.   #--------------------------------------------------------------------------
  713.   # ● Create the command window
  714.   #--------------------------------------------------------------------------
  715.   def create_command_window
  716.     wy = @help_window.height
  717.     @command_window = Window_UpgradeSkillCommand.new(0, wy)
  718.     @command_window.viewport = @viewport
  719.     @command_window.help_window = @help_window
  720.     @command_window.actor = @actor
  721.     @command_window.set_handler(:skill,    method(:command_skill))
  722.     @command_window.set_handler(:cancel,   method(:return_scene))
  723.     @command_window.set_handler(:pagedown, method(:next_actor))
  724.     @command_window.set_handler(:pageup,   method(:prev_actor))
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # ● Create the upgrade command window
  728.   #--------------------------------------------------------------------------
  729.   def create_upgrade_window
  730.     y = @status_window.y + @status_window.height
  731.     @upgrade_window = Window_UpgradeCommand.new(0, y)
  732.     @upgrade_window.viewport = @viewport
  733.     @upgrade_window.deactivate
  734.     if KRX::DISABLE_DOWNGRADE
  735.       @upgrade_window.hide
  736.       return
  737.     end
  738.     @upgrade_window.set_handler(:upgrade,   method(:command_upgrade))
  739.     @upgrade_window.set_handler(:downgrade, method(:command_downgrade))
  740.     @upgrade_window.set_handler(:cancel,    method(:cancel_upgrade))
  741.     @item_window.y += @upgrade_window.height
  742.     @item_window.height -= @upgrade_window.height
  743.     @item_window.refresh
  744.   end
  745.   #--------------------------------------------------------------------------
  746.   # ● Create the status window
  747.   #--------------------------------------------------------------------------
  748.   def create_status_window
  749.     y = @help_window.height
  750.     @status_window = Window_UpgradeStatus.new(@command_window.width, y)
  751.     @status_window.viewport = @viewport
  752.     @status_window.actor = @actor
  753.   end
  754.   #--------------------------------------------------------------------------
  755.   # ● Create the upgrade list window
  756.   #--------------------------------------------------------------------------
  757.   def create_item_window
  758.     y = @status_window.y + @status_window.height
  759.     w = Graphics.width / 2
  760.     h = Graphics.height - y
  761.     @item_window = Window_UpgradeList.new(0, y, w, h)
  762.     @item_window.viewport = @viewport
  763.     @item_window.actor = @actor
  764.     @item_window.help_window = @help_window
  765.     @item_window.set_handler(:ok,     method(:on_item_ok))
  766.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  767.     @command_window.skill_window = @item_window
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # ● Create the parameter view window
  771.   #--------------------------------------------------------------------------
  772.   def create_param_window
  773.     x = Graphics.width / 2
  774.     y = @item_window.y
  775.     h = @item_window.height
  776.     @param_window = Window_UpgradeStats.new(x, y, x, h)
  777.     @param_window.viewport = @viewport
  778.     @param_window.skill_window = @item_window
  779.     @param_window.actor = @actor
  780.   end
  781.   #--------------------------------------------------------------------------
  782.   # ● Command skill
  783.   #--------------------------------------------------------------------------
  784.   def command_skill
  785.     if KRX::DISABLE_DOWNGRADE
  786.       command_upgrade
  787.       return
  788.     end
  789.     @upgrade_window.activate
  790.   end
  791.   #--------------------------------------------------------------------------
  792.   # ● Command upgrade
  793.   #--------------------------------------------------------------------------
  794.   def command_upgrade
  795.     @item_window.activate.select_last
  796.     @item_window.mode = :upgrade
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # ● Command downgrade
  800.   #--------------------------------------------------------------------------
  801.   def command_downgrade
  802.     @item_window.activate.select_last
  803.     @item_window.mode = :downgrade
  804.   end
  805.   #--------------------------------------------------------------------------
  806.   # ● Cancel upgrade/downgrade selection
  807.   #--------------------------------------------------------------------------
  808.   def cancel_upgrade
  809.     @command_window.activate
  810.   end
  811.   #--------------------------------------------------------------------------
  812.   # ● Validate skill selection
  813.   #--------------------------------------------------------------------------
  814.   def on_item_ok
  815.     @actor.upgrade_skill(@item_window.item) if @item_window.mode == :upgrade
  816.     @actor.downgrade_skill(@item_window.item) if @item_window.mode == :downgrade
  817.     @item_window.refresh
  818.     @item_window.activate
  819.     @param_window.refresh
  820.     @status_window.refresh
  821.   end
  822.   #--------------------------------------------------------------------------
  823.   # ● Cancel skill selection
  824.   #--------------------------------------------------------------------------
  825.   def on_item_cancel
  826.     @item_window.unselect
  827.     if KRX::DISABLE_DOWNGRADE
  828.       cancel_upgrade
  829.       return
  830.     end
  831.     @upgrade_window.activate
  832.   end
  833. end
  834.  
  835. ## Menu inclusion, with Yanfly's Ace Menu Engine
  836. if $imported["YEA-AceMenuEngine"]
  837.  
  838. #==========================================================================
  839. # ■ Scene_Menu
  840. #==========================================================================
  841.    
  842. class Scene_Menu < Scene_MenuBase
  843.     #--------------------------------------------------------------------------
  844.     # ● Switch to the upgrade scene
  845.     #--------------------------------------------------------------------------
  846.     def command_skill_upgrade
  847.     SceneManager.call(Scene_Upgrade)
  848.   end
  849. end
  850.  
  851. end ## End of Yanfly's Menu inclusion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement