Advertisement
MrTrivel

MrTS_Spell_Tiers

Jun 9th, 2014
952
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.44 KB | None | 0 0
  1. # )----------------------------------------------------------------------------(
  2. # )--     AUTHOR:     Mr Trivel                                              --(
  3. # )--     NAME:       Skill Tiers                                            --(
  4. # )--     CREATED:    2014-06-12                                             --(
  5. # )--     VERSION:    1.1a                                                   --(
  6. # )----------------------------------------------------------------------------(
  7. # )--                         VERSION HISTORY                                --(
  8. # )--  1.1a - selection fix.                                                 --(
  9. # )--  1.1 - Completely rewritten with less and lighter code. Removed Tier   --(
  10. # )--  limit of 8. Tiers are limitless now. Also removed battle system       --(
  11. # )--  overwriting.                                                          --(
  12. # )----------------------------------------------------------------------------(
  13. # )--                          DESCRIPTION                                   --(
  14. # )--  Your Actors are now limited to only 3 spells per tier! Spells have    --(
  15. # )--  their tier and Actors have Max Tier. So Actor with Max Tier of 5 can't--(
  16. # )--  learn a skill that is Tier 6.                                         --(
  17. # )----------------------------------------------------------------------------(
  18. # )--                          INSTRUCTIONS                                  --(
  19. # )-- Use <Max Tier: X> in class' Note Box to set maximum skill tier for that--(
  20. # )-- class.                                                                 --(
  21. # )-- Use <Tier: X> in skill's Note Box to set that skill's Tier.            --(
  22. # )----------------------------------------------------------------------------(
  23. # )--                          LICENSE INFO                                  --(
  24. # )--    http://mrtrivelvx.wordpress.com/terms-of-use/                       --(
  25. # )----------------------------------------------------------------------------(
  26.  
  27.  
  28. module MrTS
  29.   module Spell_Tiers
  30.     # Default tier of the actor if Max Tier is not set
  31.     DEFAULT_TIER = 2
  32.    
  33.     # Default tier of the spell if Tier is not set
  34.     DEFAULT_SPELL_TIER = 1
  35.    
  36.     # Letter for Tier in menus
  37.     TIER_LETTER = "T"
  38.   end
  39. end
  40.  
  41. # some stuff that I will need later, not you, probably
  42. $imported = {} if $imported.nil?
  43. $imported["MrTS_Spell_Tiers"] = true
  44.  
  45. # )-------------------------(
  46. # )--  Class: Game_Actor  --(
  47. # )-------------------------(
  48. class Game_Actor < Game_Battler
  49.   # )---------------------------------(
  50.   # )--  Public Instance Variables  --(
  51.   # )---------------------------------(
  52.   attr_reader :max_tier
  53.  
  54.   # )-------------------------------(
  55.   # )--  Overwrite Method: setup  --(
  56.   # )-------------------------------(
  57.   def setup(actor_id)
  58.     @actor_id = actor_id
  59.     @name = actor.name
  60.     @nickname = actor.nickname
  61.     init_graphics
  62.     @class_id = actor.class_id
  63.     @level = actor.initial_level
  64.     @exp = {}
  65.     @equips = []
  66.     @max_tier = self.class.note =~ /<max\s*tier\s*:\s*(\d+)>/i ? $1.to_i : MrTS::Spell_Tiers::DEFAULT_TIER
  67.     init_exp
  68.     init_skills
  69.     init_equips(actor.equips)
  70.     clear_param_plus
  71.     recover_all
  72.   end
  73.  
  74.   # )-------------------------------(
  75.   # )--  New Method: learn_skill  --(
  76.   # )-------------------------------(
  77.   def learn_skill(skill_id)
  78.     skill = $data_skills[skill_id]
  79.     unless skill_learn?(skill) || tier_full?(skill.tier) || skill.tier > @max_tier
  80.       @skills.push(skill_id)
  81.       @skills.sort!
  82.     end
  83.   end
  84.  
  85.   # )------------------------------(
  86.   # )--  New Method: tier_full?  --(
  87.   # )------------------------------(
  88.   def tier_full?(tier)
  89.     in_tier = 0
  90.     @skills.each do |skill|
  91.       if $data_skills[skill].tier == tier
  92.         in_tier += 1
  93.       end
  94.     end
  95.     if in_tier >= 3
  96.       true
  97.     else
  98.       false
  99.     end
  100.   end
  101.  
  102.   # )------------------------------------(
  103.   # )--  New Method: can_learn_skill?  --(
  104.   # )------------------------------------(
  105.   def can_learn_skill?(skill_id)
  106.     skill = $data_skills[skill_id]
  107.     !tier_full?(skill.tier) && skill.tier <= @max_tier && !@skills.include?(skill_id)
  108.   end
  109. end
  110.  
  111. # )-------------------------(
  112. # )--  Class: RPG::Skill  --(
  113. # )-------------------------(
  114. class RPG::Skill < RPG::UsableItem
  115.  
  116.   # )------------------------(
  117.   # )--  New Method: tier  --(
  118.   # )------------------------(
  119.   def tier
  120.     tmp_tier = note =~ /<tier\s*:\s*(\d+)>/i ? $1.to_i : MrTS::Spell_Tiers::DEFAULT_SPELL_TIER
  121.     return tmp_tier
  122.   end
  123. end
  124.  
  125. # )--------------------------(
  126. # )--  Class: Scene_Skill  --(
  127. # )--------------------------(
  128. class Scene_Skill < Scene_ItemBase
  129.  
  130.   # )-------------------------------(
  131.   # )--  Overwrite Method: start  --(
  132.   # )-------------------------------(
  133.   def start
  134.     super
  135.     create_help_window
  136.     create_status_window
  137.     create_item_window
  138.     @item_window.activate
  139.     @item_window.select(0)
  140.   end
  141.  
  142.   # )--------------------------------------------(
  143.   # )--  Overwrite Method: create_status_window--(
  144.   # )--------------------------------------------(
  145.   def create_status_window
  146.     y = @help_window.height
  147.     @status_window = Window_SkillStatus.new(0, 0)
  148.     @status_window.width = Graphics.width
  149.     @status_window.viewport = @viewport
  150.     @status_window.actor = @actor
  151.     @help_window.y = Graphics.height - @help_window.height
  152.   end
  153.  
  154.   # )--------------------------------------------(
  155.   # )--  Overwrite Method: create_item_window  --(
  156.   # )--------------------------------------------(
  157.   def create_item_window
  158.     wx = 0
  159.     wy = @status_window.y + @status_window.height
  160.     ww = Graphics.width
  161.     wh = Graphics.height - wy - @help_window.height
  162.     @item_window = Window_SkillList.new(wx, wy, ww, wh)
  163.     @item_window.actor = @actor
  164.     @item_window.viewport = @viewport
  165.     @item_window.help_window = @help_window
  166.     @item_window.set_handler(:ok,     method(:on_item_ok))
  167.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  168.   end
  169.  
  170.   # )----------------------------------------(
  171.   # )--  Overwrite Method: on_item_cancel  --(
  172.   # )----------------------------------------(
  173.   def on_item_cancel
  174.     return_scene
  175.   end
  176.  
  177.   # )-----------------------------------------(
  178.   # )--  Overwrite Method: on_actor_change  --(
  179.   # )-----------------------------------------(
  180.   def on_actor_change
  181.     @command_window.actor = @actor
  182.     @status_window.actor = @actor
  183.     @item_window.actor = @actor
  184.     @item_window.activate
  185.   end
  186. end
  187.  
  188. # )-------------------------------(
  189. # )--  Class: Window_SkillList  --(
  190. # )-------------------------------(
  191. class Window_SkillList < Window_Selectable
  192.   # )---------------------------------(
  193.   # )--  Overwrite Method: col_max  --(
  194.   # )---------------------------------(
  195.   def col_max
  196.     return 3
  197.   end
  198.  
  199.   # )----------------------------------------(
  200.   # )--  Overwrite Method: make_item_list  --(
  201.   # )----------------------------------------(
  202.   def make_item_list
  203.     @data = []
  204.     tier = []
  205.     @actor.max_tier.times do |i|
  206.       tier[i] = []
  207.     end
  208.    
  209.     @actor.skills.each do |skill|
  210.       tt = skill.tier-1
  211.       tier[tt].push(skill)
  212.     end
  213.    
  214.     tier.each do |t|
  215.       t.push(nil) while t.size < 3
  216.       @data += t
  217.     end
  218.   end
  219.  
  220.   # )---------------------------------(
  221.   # )--  Overwrite Method: refresh  --(
  222.   # )---------------------------------(
  223.   def refresh
  224.     make_item_list
  225.     create_contents
  226.     draw_all_items
  227.     draw_levels
  228.   end
  229.  
  230.   # )-------------------------------(
  231.   # )--  New Method: draw_levels  --(
  232.   # )-------------------------------(
  233.   def draw_levels
  234.     @actor.max_tier.times do |i|
  235.       change_color(normal_color)
  236.       draw_text(0, line_height*i, 24, line_height, MrTS::Spell_Tiers::TIER_LETTER+(i+1).to_s)
  237.     end
  238.   end
  239.  
  240.   # )-----------------------------------(
  241.   # )--  Overwrite Method: item_rect  --(
  242.   # )-----------------------------------(
  243.   def item_rect(index)
  244.     rect = Rect.new
  245.     rect.width = item_width + 12
  246.     rect.height = item_height
  247.     rect.x = index % col_max * (item_width + spacing - 20) + 24
  248.     rect.y = index / col_max * item_height
  249.     rect
  250.   end
  251. end
  252.  
  253. # )-----------------------------(
  254. # )--  Class: Scene_ItemBase  --(
  255. # )-----------------------------(
  256. class Scene_ItemBase < Scene_MenuBase
  257.  
  258.   # )--------------------------------------(
  259.   # )--  Overwrite Method: item_usable?  --(
  260.   # )--------------------------------------(
  261.   def item_usable?
  262.     learn_skill_effect = nil
  263.     item.effects.each do |eff|
  264.       if eff.code == 43
  265.         learn_skill_effect = eff
  266.       end
  267.     end
  268.     if learn_skill_effect != nil
  269.       user.usable?(item) && item_effects_valid? && can_learn_skill?(learn_skill_effect.data_id)
  270.     else
  271.       user.usable?(item) && item_effects_valid?
  272.     end
  273.   end
  274.  
  275.   # )------------------------------------(
  276.   # )--  New Method: can_learn_skill?  --(
  277.   # )------------------------------------(
  278.   def can_learn_skill?(skill_id)
  279.  
  280.     item_target_actors.any? do |target|
  281.       target.can_learn_skill?(skill_id)
  282.     end
  283.   end
  284. end
  285.  
  286. # )---------------------------(
  287. # )--  Class: Scene_Battle  --(
  288. # )---------------------------(
  289. class Scene_Battle < Scene_Base
  290.   # )-------------------------------(
  291.   # )--  Alias to: command_skill  --(
  292.   # )-------------------------------(
  293.   alias mrts_command_skill command_skill
  294.   def command_skill
  295.     mrts_command_skill
  296.     @skill_window.select(0)
  297.   end
  298. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement