roninator2

Yanfly Class System Addons - Skills no JP

Jun 11th, 2026
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.20 KB | Gaming | 0 0
  1. #==============================================================================
  2. #
  3. # ▼ Yanfly Engine Ace - JP Manager v1.06 Addon for subclass - no skill JP
  4. # -- Last Updated: 2019.10.13
  5. # -- Requires: Yanfly Class System
  6. #              Estriole Subclass Addon
  7. #              Yanfly JP Manager
  8. # -- addon created by: Roninator2
  9. #==============================================================================
  10. # ▼ Updates
  11. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  12. # 2019.10.05 - Started Script
  13. # 2019.10.06 - Added support for subclass to earn battle jp
  14. #            - Added name size cuting for long class names. Display issue
  15. # 2019.10.07 - Fixed several bugs
  16. # 2019.10.09 - Removed global variables
  17. # 2019.10.10 - Fixed JP gain by subclass
  18. # 2019.10.12 - Fixed maintain_levels no longer needs to be false
  19. # 2019.10.13 - Fixed skill cost for Maintain_levels
  20. # 2019.10.13 - Restored support for yanfly Menu system
  21. #==============================================================================
  22. # ▼ Introduction
  23. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  24. # Allow Subclass to gain JP
  25. #==============================================================================
  26.  
  27. module R2_subclass_battle_jp
  28.   Gain_JP = true        # if you want subclasses to gain JP from battles
  29.   JP_factor = 0.50      # JP earned to subclass (value * factor) 10 * 0.5 = 5
  30.   Cut_text = true       # cut the class name if it is too long. Fixes display
  31.   Name_length = 7       # first number of characters in the actors class name
  32. end
  33.  
  34. class Game_Interpreter
  35.   def command_316
  36.    value = operate_value(@params[2], @params[3], @params[4])
  37.    iterate_actor_var(@params[0], @params[1]) do |actor|
  38.      actor.sublevelup = true
  39.      actor.sublevelcnt = value
  40.      actor.change_level(actor.level + value, @params[5])
  41.    end
  42.   end
  43. end
  44.  
  45. class Game_Actor < Game_Battler
  46.  
  47.   attr_accessor   :sublevelup
  48.   attr_accessor   :sublevelcnt
  49.   attr_accessor   :lostjp
  50.  
  51.   def init_jp
  52.     @jp = {}
  53.     @jp[@class_id] = 0
  54.     @jp[@subclass_id] = 0
  55.     @sublevelup = false
  56.     @sublevelcnt = 0
  57.     @lostjp = false
  58.   end
  59.    
  60.   alias r2_game_actor_level_up_jp level_up
  61.   def level_up
  62.     r2_game_actor_level_up_jp
  63.     lose_jp(YEA::JP::LEVEL_UP) if SceneManager.scene_is?(Scene_Class)
  64.     return if !@subclass_id
  65.     return if @subclass_id == 0
  66.                                                
  67.     if @sublevelup == true
  68.       @exp[@subclass_id] = exp_for_level(class_level(@subclass_id).to_i + @sublevelcnt)
  69.     elsif @exp[@subclass_id] == exp_for_level(class_level(@subclass_id).to_i + 1)
  70.       @sublevelup = true
  71.       class_level(@subclass_id).to_i + 1
  72.       @sublevelcnt += 1
  73.     end
  74.     subclass_add_exp(@subclass_id,0)
  75.     if @sublevelup
  76.       @jp[@subclass_id] += YEA::JP::LEVEL_UP * @sublevelcnt
  77.       @sublevelup = false
  78.       @sublevelcnt = 0
  79.     end
  80.   end
  81.  
  82.   def gain_jp(jp, class_id = nil)
  83.     init_jp if @jp.nil?
  84.     class_id = @class_id if class_id.nil?
  85.     battlejp = jp
  86.     @jp[class_id] = 0 if @jp[class_id].nil?
  87.     @jp[class_id] += jp.to_i
  88.     @jp[class_id] = [[@jp[class_id], YEA::JP::MAX_JP].min, 0].max
  89.     return if @lostjp
  90.     if $game_party.in_battle && R2_subclass_battle_jp::Gain_JP
  91.       jp = (jp * R2_subclass_battle_jp::JP_factor).round
  92.       @jp[@subclass_id] += jp.to_i if (@subclass_id != nil || 0)
  93.     elsif R2_subclass_battle_jp::Gain_JP && YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
  94.       @jp[@subclass_id] = 0 if @jp[@subclass_id].nil?
  95.       @jp[@subclass_id] += jp.to_i
  96.       @jp[@subclass_id] = [[@jp[@subclass_id], YEA::JP::MAX_JP].min, 0].max
  97.     end
  98.     @battle_jp_earned = 0 if @battle_jp_earned.nil? && $game_party.in_battle
  99.     @battle_jp_earned += battlejp.to_i if $game_party.in_battle
  100.   end
  101.  
  102.   alias r2_subclass_add_ecp_82v7b4  subclass_add_exp
  103.   def subclass_add_exp(class_id,value)
  104.     if @subclass_id != nil && @subclass_id != 0
  105.       last_level = class_level(@subclass_id).to_i
  106.       last_skills = skills
  107.       r2_subclass_add_ecp_82v7b4(@subclass_id,value)
  108.     else
  109.       return if !@subclass_id
  110.       return if @subclass_id == 0
  111.       return if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
  112.       last_level = class_level(class_id).to_i
  113.       last_skills = skills
  114.       exprate = sub_exp_rate(class_id)
  115.       expvalue = (value * exprate).to_i
  116.       expvalue = [expvalue,1].max if ESTRIOLE::SUBCLASS_MIN_1_EXP && value != 0
  117.       @exp[class_id] = @exp[class_id] + expvalue
  118.       @exp[class_id] = [@exp[class_id],subclass.exp_for_level(subclass_max_level)].min
  119.                                                    
  120.                                                                                          
  121.                                                                                                                      
  122.                                                                                                          
  123.                                                                                                        
  124.                                                                                                        
  125.                  
  126.              
  127.                                                                                            
  128.     end
  129.     self.subclass.learnings.each do |learning|
  130.       learn_skill(learning.skill_id) if learning.level <= class_level(class_id).to_i
  131.       if @extra_features && class_level(class_id).to_i > last_level && learning.note =~ /<extratrait (.*)>/i
  132.         @extra_features.features += $data_weapons[$1.to_i].features if EXTRA_FEATURES_SOURCE == 0
  133.         @extra_features.features += $data_armors[$1.to_i].features if EXTRA_FEATURES_SOURCE == 1
  134.         @extra_features.features += $data_states[$1.to_i].features if EXTRA_FEATURES_SOURCE == 2
  135.       end
  136.     end
  137.     display_level_up_sub(skills - last_skills) if class_level(class_id).to_i > last_level
  138.     if R2_subclass_battle_jp::Gain_JP
  139.       sublevelcnt = class_level(class_id).to_i - last_level
  140.       @jp[class_id] += YEA::JP::LEVEL_UP * sublevelcnt if last_level < class_level(class_id).to_i
  141.     end
  142.   end
  143.  
  144. end # Game_Actor
  145.  
  146. class Window_Base < Window
  147.  
  148.   if $imported["YEA-AceMenuEngine"]
  149.     def draw_actor_simple_status(actor, dx, dy)
  150.       dy -= line_height / 2
  151.       draw_actor_name(actor, dx, dy)
  152.       draw_actor_level(actor, dx, dy + line_height * 1)
  153.       draw_actor_icons(actor, dx, dy + line_height * 2)
  154.       dx = dx + 25
  155.       dw = contents.width - dx - 124
  156.       draw_actor_class(actor, dx + 120, dy, dw)
  157.       draw_actor_hp(actor, dx + 120, dy + line_height * 1, dw)
  158.       if YEA::MENU::DRAW_TP_GAUGE && actor.draw_tp? && !actor.draw_mp?
  159.         draw_actor_tp(actor, dx + 120, dy + line_height * 2, dw)
  160.       elsif YEA::MENU::DRAW_TP_GAUGE && actor.draw_tp? && actor.draw_mp?
  161.         if $imported["YEA-BattleEngine"]
  162.           draw_actor_tp(actor, dx + 120, dy + line_height * 2, dw/2 - 1)
  163.           draw_actor_mp(actor, dx + 120 + dw/2, dy + (line_height * 2), dw/2 + 1)
  164.         else
  165.           draw_actor_mp(actor, dx + 120, dy + line_height * 2, dw/2 - 1)
  166.           draw_actor_tp(actor, dx + 120 + dw/2, dy + line_height * 2, dw/2 + 1)
  167.         end
  168.       elsif YEA::MENU::DRAW_TP_GAUGE && actor.draw_mp?
  169.         draw_actor_mp(actor, dx + 120, dy + line_height * 2, dw)
  170.       end
  171.     end
  172.   end
  173.  
  174.   alias r2_draw_actor_class_924v  draw_actor_simple_status
  175.   def draw_actor_simple_status(actor, dx, dy)
  176.     r2_draw_actor_class_924v(actor, dx, dy)
  177.     @class_id = actor.class_id
  178.     @sublass_id = actor.subclass.nil? ? nil : actor.subclass.id
  179.     dy = dy - 10
  180.     draw_actor_jp_class(actor, @class_id, dx, dy + line_height * 2)
  181.     if !actor.subclass.nil?
  182.     draw_actor_jp_subclass(actor, @subclass_id, dx, dy + line_height * 3)
  183.     end
  184.   end
  185.  
  186.   def draw_actor_jp_class(actor, class_id, dx, dy, dw = 112)
  187.     draw_icon(Icon.jp, dx + dw - 24, dy) if Icon.jp > 0
  188.     dw -= 24 if Icon.jp > 0
  189.     change_color(system_color)
  190.     dw = dw - 10
  191.     dy = dy + 5
  192.     if R2_subclass_battle_jp::Cut_text
  193.       text = actor.class.name
  194.       text = text[0..(R2_subclass_battle_jp::Name_length - 1)]
  195.       draw_text(dx, dy, dw, line_height, text, 3)
  196.     else
  197.       draw_text(dx, dy, dw, line_height, actor.class.name, 3)
  198.     end
  199.     dw = dw + 20
  200.     dx = dx + 20 if $imported["YEA-AceMenuEngine"]
  201.     draw_text(dx, dy, dw, line_height, Vocab::jp, 2)
  202.     dw -= text_size(Vocab::jp).width
  203.     change_color(normal_color)
  204.     draw_text(dx, dy, dw, line_height, actor.jp(class_id).group, 2)
  205.   end
  206.  
  207.   def draw_actor_jp_subclass(actor, subclass_id, dx, dy, dw = 112)
  208.     draw_icon(Icon.jp, dx + dw - 24, dy) if Icon.jp > 0
  209.     dw -= 24 if Icon.jp > 0
  210.     change_color(system_color)
  211.     dw = dw - 10
  212.     if R2_subclass_battle_jp::Cut_text
  213.       text = actor.subclass.name
  214.       text = text[0..(R2_subclass_battle_jp::Name_length - 1)]
  215.       draw_text(dx, dy, dw, line_height, text, 3)
  216.     else
  217.       draw_text(dx, dy, dw, line_height, actor.subclass.name, 3)
  218.     end
  219.     dw = dw + 20
  220.     dx = dx + 20 if $imported["YEA-AceMenuEngine"]
  221.     draw_text(dx, dy, dw, line_height, Vocab::jp, 2)
  222.     dw -= text_size(Vocab::jp).width
  223.     change_color(normal_color)
  224.     draw_text(dx, dy, dw, line_height, actor.jp(actor.subclass.id).group, 2)
  225.   end
  226.  
  227. end # Window_Base
  228.  
  229. class Scene_LearnSkill < Scene_Skill
  230.   def on_cost_ok
  231.     Sound.play_use_skill
  232.     skill = @item_window.item
  233.     @actor.learn_skill(skill.id)
  234.     cost = skill.learn_cost[0]
  235.     case skill.learn_cost[1]
  236.     when :jp
  237.         @actor.lostjp = true
  238.         @actor.lose_jp(cost, @cost_front.skill_class)
  239.         @actor.lostjp = false
  240.     when :exp
  241.       @actor.lose_exp_class(cost, @cost_front.skill_class)
  242.     when :gold
  243.       $game_party.lose_gold(cost)
  244.     end
  245.     on_cost_cancel
  246.     refresh_windows
  247.   end
  248. end
Advertisement
Add Comment
Please, Sign In to add comment