SHARE
TWEET

Untitled

a guest Sep 22nd, 2015 105 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Skill Trees or Something v1.0
  2. #----------#
  3. #Features: Basic skill trees! Earn skill points, spend skill points,
  4. #           get abilities! Enjoy.
  5. #
  6. #Usage:   Set up your skill trees, knock yourself out.
  7. #          Script calls:
  8. #           SceneManager.call(Scene_SkillTree)
  9. #           $game_actors[actor_id].add_skill_tree(tree_id)
  10. #
  11. #          Notetags (Actors):
  12. #       <SP_PER #>  - sets the amount of sp earned per gain (overrides default)
  13. #       <SP_LEVEL #> - Overrides how many levels between each sp gain
  14. #       <SKILL_TREE #> - Sets the actors default skill tree
  15. #
  16. #          Notetags (Classes):
  17. #       <SKILL_TREES [#,#..]> - An array of trees for a class
  18. #         Example: <SKILL_TREES [0,1,24]>
  19. #
  20. #          Notetags (Items):
  21. #       <SKILL_BOOK> - Will add value of grow feature in skill points instead.
  22. #      Example: Set an item with the feature grow MHP 5 and gain 5 skill points.
  23. #
  24. #
  25. #~ #----------#
  26. #-- Script by: V.M of D.T
  27. #
  28. #- Questions or comments can be:
  29. #    given by email: sumptuaryspade@live.ca
  30. #    provided on facebook: http://www.facebook.com/DaimoniousTailsGames
  31. #
  32. #--- Free to use in any project, commercial or non-commercial, with credit given
  33. # - - Though a donation's always a nice way to say thank you~ (I also accept actual thank you's)
  34.  
  35. #Default SP earned every gain
  36. DEFAULT_POINTS_GAINED = 5
  37. #Default levels between each SP gain (2 means every two levels, 3 means 3, etc.)
  38. DEFAULT_LEVEL_MOD = 2
  39. #The Skill Trees!
  40. # id# => { :name => "Tree name",
  41. #   :desc => "Description of tree",
  42. #   :icon => id,
  43. #   :background => "image_name",
  44. #   :skills => {
  45. #     :skillname => { :name => "Skill Name",
  46. #       :skillids => [skill1,skill2,...],
  47. #       :replace => true/false
  48. #       :spcost => #,
  49. #       :splock => #, :prevlock => [:skill1,:skill2,...],
  50. #       :row => #, :col => #
  51. #     },
  52. #   },
  53. #  },
  54. #
  55. # Look at how confusing that can be! I either hate you all or this is the easiest
  56. #  setup for me! I'll let you decide later. Anywho, on to the explanation:
  57. # id# is the the number of the skill tree, just a number
  58. # :name is just the name of the skill tree
  59. # :skills is where you set up each branch of the tree
  60. #   :skillname is just a simple identifier, can be anything
  61. #   :name is the name of the branch that appears in the menu
  62. #   :icon is the id of the icon to be displayed in the tree selection
  63. #   :background is the image to be displayed behind the tree (Graphics/System)
  64. ###   :background can also be set to :simple for a simple rowed background
  65. #   :skillids is the list of skills learned, more skills = more ranks
  66. #   :replace - skill from next rank will replace skill from previous rank
  67. #   :spcost is the cost in SP it takes to learn one rank of a branch
  68. #   :splock means you have to have spent that much SP to learn that branch
  69. #   :prevlock is a list of :skillnames that have to be learnt to learn that branch
  70. #   :row is the vertical position of the branch (it's # * 24)
  71. #   :col is the horizontal position of the branch (also # * 24)
  72. #
  73. # I'll have to explain this better at some point, but I can't get around it right
  74. #  now. The example below should be able to provide a lot of answers!
  75.  
  76. SKILL_TREES = {
  77.  
  78.   0 => {
  79.     :name => "Paladin",
  80.     :desc => "The mighty Paladin, master of sword and holy magic.",
  81.     :icon => 15,
  82.     :background => :simple,
  83.     :skills => {
  84.       :hpboost => { :name => "HP Boost [Passive]",
  85.         :skillids => [76,77,78],
  86.         :replace => true,
  87.         :row => 0, :col => 3
  88.       },
  89.       :combostrike => { :name => "Combo Strike [Ability]",
  90.         :skillids => [80], :spcost => 2,
  91.         :row => 0, :col => 6
  92.       },
  93.       :cover => { :name => "Cover [Ability]",
  94.         :skillids => [90], :spcost => 2,
  95.         :splock => 3, :statlock => [[:hp,750],[:def, 25]],
  96.         :row => 2, :col => 2
  97.       },
  98.       :cure1 => { :name => "Minor Cure [Spell]",
  99.         :skillids => [31], :spcost => 3,
  100.         :splock => 3, :statlock => [[:int, 25]],
  101.         :row => 2, :col => 5
  102.       },
  103.       :cleave => { :name => "Cleave [Ability]",
  104.         :skillids => [81], :spcost => 2,
  105.         :splock => 3, :lvllock => 10,
  106.         :row => 2, :col => 8
  107.       },
  108.       :provoke => { :name => "Provoke [Ability]",
  109.         :skillids => [91], :spcost => 2,
  110.         :splock => 10, :prevlock => [:cover,:cleave],
  111.         :row => 4, :col => 3
  112.       },
  113.       :defup => { :name => "Def Boost [Passive]",
  114.         :skillids => [72,73,74],
  115.         :splock => 10, :lvllock => 15,
  116.         :row => 4, :col => 6
  117.       },
  118.       :cure2 => { :name => "Super Cure [Spell]",
  119.         :skillids => [32], :spcost => 4,
  120.         :splock => 17, :prevlock => [:cure1],
  121.         :row => 6, :col => 5
  122.       }
  123.     },
  124.   },
  125.  
  126. }
  127.  
  128. class Game_Actor
  129.   attr_accessor :active_skill_tree
  130.   attr_accessor :skill_points
  131.   attr_accessor :spent_skill_points
  132.   alias sktree_init initialize
  133.   def initialize(*args)
  134.     sktree_init(*args)
  135.     @active_skill_tree = {}
  136.     @skill_points = 0
  137.     @spent_skill_points = {}
  138.     $data_classes[@class_id].skill_trees.each do |id|
  139.       add_skill_tree(id)
  140.     end
  141.     add_skill_tree(actor.skill_tree) if actor.skill_tree
  142.   end
  143.   def add_skill_tree(id)
  144.     skill_tree = SKILL_TREES[id].clone
  145.     skill_tree[:skills].each do |key,hash|
  146.       hash[:rank] = 0
  147.     end
  148.     @active_skill_tree[id] = skill_tree
  149.     @spent_skill_points[id] = 0
  150.   end
  151.   def remove_skill_tree(id)
  152.     reset_skill_tree(id)
  153.     @active_skill_tree.delete(id)
  154.     @spent_skill_points.delete(id)
  155.   end
  156.   def skill_upgrade_valid?(tree_id, skill_id)
  157.     if skill_id.is_a?(Integer)
  158.       skill_id = @active_skill_tree[tree_id][:skills].keys[skill_id]
  159.     end
  160.     sktree = @active_skill_tree[tree_id][:skills][skill_id]
  161.     return false if @skill_points < (sktree[:spcost] ? sktree[:spcost] : 1)
  162.     return false if sktree[:rank] >= sktree[:skillids].size
  163.     if sktree[:lvllock]
  164.       return false if @level < sktree[:lvllock]
  165.     end
  166.     if sktree[:statlock]
  167.       id = [:hp,:mp,:atk,:def,:int,:wis,:agi,:luk]
  168.       sktree[:statlock].each do |array|
  169.         return false if param(id.index(array[0])) < array[1]
  170.       end
  171.     end
  172.     if sktree[:splock]
  173.       return false if @spent_skill_points[tree_id] < sktree[:splock]
  174.     end
  175.     if sktree[:prevlock]
  176.       sktree[:prevlock].each do |key|
  177.         nextskill = @active_skill_tree[tree_id][:skills][key]
  178.         return false if nextskill[:rank] < nextskill[:skillids].size
  179.       end
  180.     end
  181.     return true
  182.   end
  183.   def increase_rank(tree_id, skill_id)
  184.     if skill_id.is_a?(Integer)
  185.       skill_id = @active_skill_tree[tree_id][:skills].keys[skill_id]
  186.     end
  187.     sktree = @active_skill_tree[tree_id][:skills][skill_id]
  188.     if sktree[:replace] && sktree[:rank] > 0
  189.       forget_skill(sktree[:skillids][sktree[:rank]-1])
  190.     end
  191.     learn_skill(sktree[:skillids][sktree[:rank]])
  192.     sktree[:rank] += 1
  193.     @skill_points -= (sktree[:spcost] ? sktree[:spcost] : 1)
  194.     @spent_skill_points[tree_id] += (sktree[:spcost] ? sktree[:spcost] : 1)
  195.   end
  196.   def reset_skill_tree(id)
  197.     @active_skill_tree[id][:skills].keys.each do |key|
  198.       sktree = @active_skill_tree[id][:skills][key]
  199.       while sktree[:rank] > 0
  200.         sktree[:rank] -= 1
  201.         forget_skill(sktree[:skillids][sktree[:rank]])
  202.         @skill_points += (sktree[:spcost] ? sktree[:spcost] : 1)
  203.         @spent_skill_points[id] -= (sktree[:spcost] ? sktree[:spcost] : 1)
  204.       end
  205.     end
  206.   end
  207.   def increase_skill_points(amount)
  208.     @skill_points += amount
  209.   end
  210.   alias sktree_level_up level_up
  211.   def level_up
  212.     sktree_level_up
  213.     if @level % actor.spoint_level == 0
  214.       increase_skill_points(actor.spoint_gain)
  215.     end
  216.   end
  217.   alias skill_change_class change_class
  218.   def change_class(class_id, keep_exp = false)
  219.     old_trees = $data_classes[@class_id].skill_trees
  220.     new_trees = $data_classes[class_id].skill_trees
  221.     skill_change_class(class_id, keep_exp)
  222.     (new_trees - old_trees).each do |id|
  223.       add_skill_tree(id)
  224.     end
  225.     (old_trees - new_trees).each do |id|
  226.       remove_skill_tree(id)
  227.     end
  228.   end
  229.   def item_effect_grow(user, item, effect)
  230.     if item.skill_book
  231.       increase_skill_points(effect.value1.to_i)
  232.     else
  233.       add_param(effect.data_id, effect.value1.to_i)
  234.     end
  235.     @result.success = true
  236.   end
  237. end
  238.  
  239. class RPG::Item
  240.   def skill_book
  241.     self.note =~ /<SKILL_BOOK>/ ? true : false
  242.   end
  243. end
  244.  
  245. class RPG::Class
  246.   def skill_trees
  247.     self.note =~ /<SKILL_TREES (.+)>/ ? eval($1) : []
  248.   end
  249. end
  250.  
  251.  
  252. class RPG::Actor
  253.   def spoint_gain
  254.     self.note =~ /<SP_PER (\d+)>/ ? $1.to_i : DEFAULT_POINTS_GAINED
  255.   end
  256.   def spoint_level
  257.     self.note =~ /<SP_LEVEL (\d+)>/ ? $1.to_i : DEFAULT_LEVEL_MOD
  258.   end
  259.   def skill_tree
  260.     self.note =~ /<SKILL_TREE (\d+)>/ ? $1.to_i : false
  261.   end
  262. end
  263.  
  264. class Scene_SkillTree < Scene_MenuBase
  265.   def start
  266.     super
  267.     @actor = $game_party.menu_actor
  268.     @help_window = Window_Help.new(1)
  269.     @category_window = Window_STCat.new
  270.     @category_window.set_handler(:ok, method(:cat_ok))
  271.     @category_window.set_handler(:cancel, method(:cat_cancel))
  272.     @tree_window = Window_STTree.new(cur_item)
  273.     @tree_window.set_handler(:ok, method(:on_tree_ok))
  274.     @tree_window.set_handler(:cancel, method(:on_tree_cancel))
  275.     @actor_window = Window_STActor.new
  276.     @skill_window = Window_STSkill.new(cur_item)
  277.     @text = ""
  278.   end
  279.   def cat_ok
  280.     @tree_window.activate
  281.     @tree_window.select(0)
  282.   end
  283.   def on_tree_ok
  284.     @tree_window.activate
  285.     return Sound.play_buzzer unless @actor.skill_upgrade_valid?(cur_item,@tree_window.index)
  286.     @actor.increase_rank(cur_item,@tree_window.index)
  287.     Sound.play_ok
  288.     @tree_window.refresh
  289.     @skill_window.refresh
  290.     @actor_window.refresh
  291.     Sound.play_buzzer
  292.   end
  293.   def cur_item
  294.     @category_window.cur_item
  295.   end
  296.   def cat_cancel
  297.     SceneManager.return
  298.   end
  299.   def on_tree_cancel
  300.     @category_window.activate
  301.     @tree_window.select(-1)
  302.   end
  303.   def update
  304.     super
  305.     if @tree_window.current_tree != cur_item
  306.       @tree_window.current_tree = cur_item
  307.       @skill_window.current_tree = cur_item
  308.       @tree_window.refresh
  309.       @skill_window.refresh
  310.     end
  311.     @skill_window.set_skill(@tree_window.current_item)
  312.     return unless @actor.active_skill_tree[cur_item]
  313.     sym = @actor.active_skill_tree[cur_item][:skills].keys[@tree_window.index]
  314.     if @actor.active_skill_tree[cur_item][:desc]
  315.       text = @actor.active_skill_tree[cur_item][:desc]
  316.     else
  317.       text = ""
  318.     end
  319.     if @text != text
  320.       @text = text
  321.       @help_window.set_text(@text)
  322.     end
  323.   end
  324.   def terminate
  325.     super
  326.   end
  327. end
  328.  
  329. class Window_STCat < Window_HorzCommand
  330.   def initialize
  331.     super(0,48) #,Graphics.width/2,48)
  332.     @actor = $game_party.menu_actor
  333.     @index = 0
  334.     activate
  335.     refresh
  336.   end
  337.   def col_max; 3; end
  338.   def ensure_cursor_visible2
  339.     self.top_col = index - 1 if index < top_col
  340.     self.bottom_col = index + 1 if index > bottom_col
  341.   end
  342.   def window_width; Graphics.width/2; end
  343.   def window_height; 48; end
  344.   def item_max
  345.     @actor ? @actor.active_skill_tree.keys.size : 0
  346.   end
  347.   def current_item
  348.     @actor.active_skill_tree[cur_item][:name]
  349.   end
  350.   def cur_item
  351.     @actor.active_skill_tree.keys[index]
  352.   end
  353.   def item(id)
  354.     @actor.active_skill_tree[@actor.active_skill_tree.keys[id]]
  355.   end
  356.   def spacing; 12; end
  357.   def draw_item(index)
  358.     rect = item_rect(index)
  359.     item = item(index)
  360.     draw_icon(item[:icon],rect.x,rect.y) if item[:icon]
  361.     rect.x += 24;rect.width -= 24
  362.     draw_text(rect,item[:name])
  363.   end
  364.   def current_item_enabled?
  365.     !cur_item.nil?
  366.   end
  367. end
  368.  
  369. class Window_STTree < Window_Selectable
  370.   attr_accessor :current_tree
  371.   def initialize(tree)
  372.     super(0,48*2,Graphics.width/2,Graphics.height-48*2)
  373.     @actor = $game_party.menu_actor
  374.     @index = -1
  375.     @current_tree = tree
  376.     refresh
  377.   end
  378.   def ensure_cursor_visible
  379.   end
  380.   def item_width; 48; end
  381.   def item_height; 24; end
  382.   def item_rect(index)
  383.     Rect.new(current_item[:col]*24,current_item[:row]*24,48,24)
  384.   end
  385.   def item_max
  386.     return 0 unless @actor
  387.     @actor.active_skill_tree[@current_tree][:skills].values.size
  388.   end
  389.   def current_item
  390.     return nil unless @actor
  391.     return nil if @index == -1
  392.     @actor.active_skill_tree[@current_tree][:skills].values[@index]
  393.   end
  394.   def refresh
  395.     contents.clear
  396.     return unless @actor
  397.     skilltree = @actor.active_skill_tree[@current_tree]
  398.     return unless skilltree
  399.     if skilltree[:background]
  400.       if skilltree[:background] == :simple
  401.         (contents.height/24).times do |i|
  402.           i % 2 == 0 ? color = Color.new(150,150,150,75) : color = Color.new(150,150,150,30)
  403.           contents.fill_rect(0,24*i,contents.width,24,color)
  404.         end
  405.       else
  406.         bitmap = Cache.system(skilltree[:background])
  407.         contents.blt(0,0,bitmap,bitmap.rect)
  408.       end
  409.     end
  410.     skilltree[:skills].each do |key, skillhash|
  411.       change_color(normal_color, @actor.skill_upgrade_valid?(@current_tree,key))
  412.       skill = $data_skills[skillhash[:skillids][0]]
  413.       x, y = skillhash[:col] * 24, skillhash[:row] * 24
  414.       draw_icon(skill.icon_index,x,y,@actor.skill_upgrade_valid?(@current_tree,key))
  415.       draw_text(x+24,y,24,24,skillhash[:rank].to_s + "/" + skillhash[:skillids].size.to_s)
  416.     end
  417.     contents.font.size = 20
  418.     change_color(system_color)
  419.     draw_text(0,contents.height-20,contents.width,20,"SP Spent: ")
  420.     change_color(normal_color)
  421.     draw_text(0,contents.height-20,contents.width/2,20,@actor.spent_skill_points[@current_tree],2)
  422.     reset_font_settings
  423.   end
  424.   def process_ok
  425.     if current_item_enabled?
  426.       Input.update
  427.       deactivate
  428.       call_ok_handler
  429.     else
  430.       Sound.play_buzzer
  431.     end
  432.   end
  433.   def cursor_up(wrap = false)
  434.     next_skill = nil
  435.     next_key = nil
  436.     tree = @actor.active_skill_tree[@current_tree][:skills]
  437.     curr_skill = tree[@actor.active_skill_tree[@current_tree][:skills].keys[@index]]
  438.     tree.each do |key, hash|
  439.       next if hash[:row] >= curr_skill[:row]
  440.       if next_skill == nil
  441.         next_skill = tree[key]
  442.         next_key = key
  443.         next
  444.       else
  445.         if next_skill[:row] == hash[:row]
  446.           if (curr_skill[:col] - hash[:col]).abs < (curr_skill[:col] - next_skill[:col]).abs
  447.             next_skill = tree[key]
  448.             next_key = key
  449.           end
  450.         end
  451.         if hash[:row] > next_skill[:row] && hash[:row] < curr_skill[:row]
  452.           next_skill = tree[key]
  453.           next_key = key
  454.         end
  455.         next
  456.       end
  457.     end
  458.     if next_key
  459.       select(@actor.active_skill_tree[@current_tree][:skills].keys.index(next_key))
  460.     end
  461.   end
  462.   def cursor_down(wrap = false)
  463.     next_skill = nil
  464.     next_key = nil
  465.     tree = @actor.active_skill_tree[@current_tree][:skills]
  466.     curr_skill = tree[@actor.active_skill_tree[@current_tree][:skills].keys[@index]]
  467.     tree.each do |key, hash|
  468.       next if hash[:row] <= curr_skill[:row]
  469.       if next_skill == nil
  470.         next_skill = tree[key]
  471.         next_key = key
  472.         next
  473.       else
  474.         if next_skill[:row] == hash[:row]
  475.           if (curr_skill[:col] - hash[:col]).abs < (curr_skill[:col] - next_skill[:col]).abs
  476.             next_skill = tree[key]
  477.             next_key = key
  478.           end
  479.         end
  480.         if hash[:row] < next_skill[:row] && hash[:row] > curr_skill[:row]
  481.           next_skill = tree[key]
  482.           next_key = key
  483.         end
  484.         next
  485.       end
  486.     end
  487.     if next_key
  488.       select(@actor.active_skill_tree[@current_tree][:skills].keys.index(next_key))
  489.     end
  490.   end
  491.   def cursor_left(wrap = false)
  492.     next_skill = nil
  493.     next_key = nil
  494.     tree = @actor.active_skill_tree[@current_tree][:skills]
  495.     curr_skill = tree[@actor.active_skill_tree[@current_tree][:skills].keys[@index]]
  496.     tree.each do |key, hash|
  497.       next if hash[:col] >= curr_skill[:col]
  498.       next if hash[:row] != curr_skill[:row]
  499.       if next_skill == nil
  500.         next_skill = tree[key]
  501.         next_key = key
  502.         next
  503.       else
  504.         if hash[:col] > next_skill[:col]
  505.           next_skill = tree[key]
  506.           next_key = key
  507.         end
  508.         next
  509.       end
  510.     end
  511.     if next_key
  512.       select(@actor.active_skill_tree[@current_tree][:skills].keys.index(next_key))
  513.     end
  514.   end
  515.   def cursor_right(wrap = false)
  516.     next_skill = nil
  517.     next_key = nil
  518.     tree = @actor.active_skill_tree[@current_tree][:skills]
  519.     curr_skill = tree[@actor.active_skill_tree[@current_tree][:skills].keys[@index]]
  520.     tree.each do |key, hash|
  521.       next if hash[:col] <= curr_skill[:col]
  522.       next if hash[:row] != curr_skill[:row]
  523.       if next_skill == nil
  524.         next_skill = tree[key]
  525.         next_key = key
  526.         next
  527.       else
  528.         if hash[:col] < next_skill[:col]
  529.           next_skill = tree[key]
  530.           next_key = key
  531.         end
  532.         next
  533.       end
  534.     end
  535.     if next_key
  536.       select(@actor.active_skill_tree[@current_tree][:skills].keys.index(next_key))
  537.     end
  538.   end
  539. end
  540.  
  541. class Window_STActor < Window_Base
  542.   def initialize
  543.     super(Graphics.width/2,48,Graphics.width/2,96+24)
  544.     @actor = $game_party.menu_actor
  545.     refresh
  546.   end
  547.   def set_actor(actor)
  548.     return if actor == @actor
  549.     @actor = actor
  550.     refresh
  551.   end
  552.   def refresh
  553.     contents.clear
  554.     return unless @actor
  555.     draw_actor_face(@actor,0,0)
  556.     draw_actor_name(@actor,96+12,0)
  557.     draw_actor_level(@actor,96+12,24)
  558.     draw_text(96+12,24*2,contents.width,24,"SP: " + @actor.skill_points.to_s)
  559.   end
  560. end
  561.  
  562. class Window_STSkill < Window_Base
  563.   attr_accessor :current_tree
  564.   def initialize(tree)
  565.     super(Graphics.width/2,48+96+24,Graphics.width/2,Graphics.height-48-96-24)
  566.     @skill = nil
  567.     @current_tree = tree
  568.     @actor = $game_party.menu_actor
  569.     contents.font.size = line_height
  570.     refresh
  571.   end
  572.   def set_actor(actor)
  573.     return if actor == @actor
  574.     @actor = actor
  575.   end
  576.   def set_skill(skill)
  577.     return if @skill == skill
  578.     @skill = skill
  579.     refresh
  580.   end
  581.   def line_height
  582.     20
  583.   end
  584.   def refresh
  585.     contents.clear
  586.     return unless @skill
  587.     change_color(system_color)
  588.     draw_text(0,0,contents.width,24,"SP Cost:")
  589.     draw_text(0,line_height,contents.width,line_height,"Current:")
  590.     draw_text(0,line_height*4,contents.width,line_height,"Next:")
  591.     draw_text(0,line_height*7,contents.width,line_height,"Requirements:")
  592.     change_color(normal_color)
  593.     draw_text(0,0,contents.width,line_height,(@skill[:spcost] ? @skill[:spcost] : 1).to_s,2)
  594.     if @skill[:rank] > 0
  595.       skill = $data_skills[@skill[:skillids][@skill[:rank]-1]]
  596.       draw_icon(skill.icon_index,contents.width-text_size(skill.name).width-24,line_height)
  597.       draw_text(0,line_height,contents.width,line_height,skill.name,2)
  598.       draw_text_ex(0,line_height*2,skill.description)
  599.     else
  600.       draw_text_ex(0,line_height*2,"   -----")
  601.     end
  602.     if @skill[:rank] < @skill[:skillids].size
  603.       skill = $data_skills[@skill[:skillids][@skill[:rank]]]
  604.       draw_icon(skill.icon_index,contents.width-text_size(skill.name).width-24,line_height*4)
  605.       draw_text(0,line_height*4,contents.width,line_height,skill.name,2)
  606.       draw_text_ex(0,line_height*5,skill.description)
  607.     else
  608.       draw_text_ex(0,line_height*5,"   -----")
  609.     end
  610.     if @skill[:splock] || @skill[:prevlock] || @skill[:lvllock] || @skill[:statlock]
  611.       yy = line_height * 8
  612.       if @skill[:splock]
  613.         change_color(normal_color, @actor.spent_skill_points[@current_tree] >= @skill[:splock])
  614.         draw_text(12,yy,contents.width-12,line_height,"SP Spent: " + @skill[:splock].to_s)
  615.         yy += line_height
  616.       end
  617.       if @skill[:lvllock]
  618.         change_color(normal_color, @actor.level >= @skill[:lvllock])
  619.         draw_text(12,yy,contents.width-12,line_height,"Level: " + @skill[:lvllock].to_s)
  620.         yy += line_height
  621.       end
  622.       if @skill[:statlock]
  623.         xx = 12
  624.         id = [:hp,:mp,:atk,:def,:int,:wis,:agi,:luk]
  625.         @skill[:statlock].each do |array|
  626.           param_id = id.index(array[0])
  627.           change_color(normal_color,@actor.param(param_id) >= array[1])
  628.           text = Vocab::param(param_id) + ":" + array[1].to_s
  629.           width = text_size(text).width
  630.           if xx + width > contents.width
  631.             xx = 12; yy += line_height
  632.           end
  633.           draw_text(xx,yy,contents.width,line_height,text)
  634.           xx += width + 6
  635.         end
  636.       end
  637.       if @skill[:prevlock]
  638.         xx = 12
  639.         @skill[:prevlock].each do |sym|
  640.           olskill = @actor.active_skill_tree[@current_tree][:skills][sym]
  641.           text = "["+olskill[:name]+"]"
  642.           width = text_size(text).width
  643.           if xx + width > contents.width
  644.             xx = 12
  645.             yy += line_height
  646.           end
  647.           change_color(normal_color, olskill[:rank] >= olskill[:skillids].size)
  648.           draw_text(xx,yy,contents.width,line_height,text)
  649.           xx += width
  650.         end
  651.       end
  652.     else
  653.       draw_text(0,line_height*8,contents.width,line_height,"None")
  654.     end
  655.   end
  656.   def draw_text_ex(x, y, text)
  657.     text = convert_escape_characters(text)
  658.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  659.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  660.   end
  661. end
  662.  
  663. class Window_MenuCommand < Window_Command
  664.   alias sktree_aoc add_original_commands
  665.   def add_original_commands
  666.     sktree_aoc
  667.     add_command("Skill Tree", :skilltree)
  668.   end
  669. end
  670.  
  671. class Scene_Menu
  672.   alias sktree_ccw create_command_window
  673.   def create_command_window
  674.     sktree_ccw
  675.     @command_window.set_handler(:skilltree,    method(:command_personal))
  676.   end
  677.   alias sktree_opo on_personal_ok
  678.   def on_personal_ok
  679.     sktree_opo
  680.     SceneManager.call(Scene_SkillTree) if @command_window.current_symbol == :skilltree
  681.   end
  682. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top