Project1

标题: ACE职业等级系统 [打印本页]

作者: xmheart    时间: 2012-1-23 18:49
标题: ACE职业等级系统
本帖最后由 xmheart 于 2012-1-23 18:59 编辑

新人第一次发帖,这个脚本是在日站找到的,然后加上自己渣一般的汉化能力重新弄了一下说明弄出来的,希望有什么问题提出来吧。(我是脚本盲= =)
原地址:http://www.tekepon.net/fsm/modul ... d=2211&forum=12
  1. #==============================================================================
  2. #  ■职业等级系统 for RGSS3 Ver1.02  by kure
  3. #
  4. #     功能: 1.把角色等级分成基本等级和职业等级.
  5. #          2.可以根据角色职业等级自定义习得技能.
  6. #==============================================================================
  7. # 使用说明:
  8. #   ★设置职业等级经验值.
  9. #       在数据库-敌人-备注里写入下面格式的内容
  10. #         <职业Exp 经验值>    如果不写则默认和通常经验值相同
  11. #   ★设置职业等级最大值.请不要设定在99级以上.
  12. #         MAX_JOBLV = 値
  13. #   ★基本等级の经验值曲线根据职业ID设置.
  14. #      设置为0的时候.作为职业经验值曲线来使用
  15. #      设置基本等级经验值曲线用附加一个替代职业来设置比较好
  16. #   ★设置角色固有技能.
  17. #      这里可以设置角色根据基本等级习得技能
  18. #         ACTOR_SKILL[角色ID] = [[技能ID,习得等级],[技能ID,习得等级],…]

  19. #==============================================================================

  20. module KURE
  21.   module JobLvSystem
  22.   #--------------------------------------------------------------------------
  23.   # ● 基本设置(新增定义)
  24.   #--------------------------------------------------------------------------
  25.   # 初期设置(不能改变)
  26.   ACTOR_SKILL = []  
  27.   
  28.   # 最大职业等级
  29.   MAX_JOBLV = 99
  30.   
  31.   # 设置基本等级经验值曲线
  32.   # 职业等级的经验值曲线为职业原来的经验值曲线来使用
  33.   # 因此,角色成长经验值曲线请用附加一个替代职业来设置
  34.   # USE_EXP_CURVE = [角色1,角色2,…]
  35.   USE_EXP_CURVE = [1,1,1,1,1,1,1,1,1,1]
  36.   
  37.   # 角色固有技能
  38.   # ACTOR_SKILL[角色ID] = [[技能ID,习得等级],[技能ID,习得等级],…]
  39.   ACTOR_SKILL[4] = [[76,1],[77,1],[78,1]]
  40.   
  41.   end
  42. end

  43. #==============================================================================
  44. # ■ Vocab(追加定义)
  45. #==============================================================================
  46. module Vocab
  47.   ObtainJobExp       = "获得了%s职业经验值!"
  48. end

  49. #==============================================================================
  50. # ■ RPG::Enemy(追加定义)
  51. #==============================================================================
  52. class RPG::Enemy < RPG::BaseItem
  53.   #--------------------------------------------------------------------------
  54.   # ● 初期化(别名重定义)
  55.   #--------------------------------------------------------------------------  
  56.   alias kure_jobLv_before_initialize initialize
  57.   def initialize
  58.     kure_jobLv_before_initialize
  59.     @jobexp = 0
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 职业经验值定义(追加定义)
  63.   #--------------------------------------------------------------------------  
  64.   def jobexp
  65.     if @note != ""
  66.       cheack_note = @note
  67.       cheack_note.match(/^<职业Exp\s?(\d+)>/)
  68.       if $1 == nil
  69.         return @exp   
  70.       else
  71.         return jobexp = $1.to_i
  72.       end
  73.     else
  74.       return @exp
  75.     end
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 职业经验值定义(重定义)
  79.   #--------------------------------------------------------------------------  
  80.   def jobexp=(jobexp)
  81.     @jobexp = jobexp
  82.   end
  83. end

  84. #==============================================================================
  85. # ■ Game_Enemy(追加定义)
  86. #==============================================================================
  87. class Game_Enemy < Game_Battler
  88.   #--------------------------------------------------------------------------
  89.   # ● 职业经验值取得
  90.   #--------------------------------------------------------------------------
  91.   def jobexp
  92.     enemy.jobexp
  93.   end
  94. end

  95. #==============================================================================
  96. # ■ Game_Troop(追加定义)
  97. #==============================================================================
  98. class Game_Troop < Game_Unit
  99.   #--------------------------------------------------------------------------
  100.   # ● 经验值合计计算
  101.   #--------------------------------------------------------------------------
  102.   def jobexp_total
  103.     dead_members.inject(0) {|r, enemy| r += enemy.jobexp }
  104.   end
  105. end  
  106.   
  107. #==============================================================================
  108. # ■ BattleManager(重定义)
  109. #==============================================================================
  110. module BattleManager
  111.   #--------------------------------------------------------------------------
  112.   # ● 获得经验值显示(重定义)
  113.   #--------------------------------------------------------------------------
  114.   def self.display_exp
  115.     if $game_troop.exp_total > 0
  116.       text = sprintf(Vocab::ObtainExp, $game_troop.exp_total)
  117.       $game_message.add('\.' + text)
  118.     end   
  119.     if $game_troop.jobexp_total > 0
  120.       text2 = sprintf(Vocab::ObtainJobExp, $game_troop.jobexp_total)
  121.       $game_message.add('\.' + text2)
  122.     end
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 经验值获得和等级上升显示(重定义)
  126.   #--------------------------------------------------------------------------
  127.   def self.gain_exp
  128.     $game_party.all_members.each do |actor|
  129.       actor.gain_exp($game_troop.exp_total,$game_troop.jobexp_total)
  130.     end
  131.     wait_for_message
  132.   end
  133. end

  134. #==============================================================================
  135. # ■ Game_Actor(别名重定义)
  136. #==============================================================================
  137. class Game_Actor < Game_Battler
  138.   attr_reader   :joblevel                    # 职业等级
  139.   #--------------------------------------------------------------------------
  140.   # ● 准备(别名重定义)
  141.   #--------------------------------------------------------------------------
  142.   alias kure_jobLv_before_setup setup
  143.   def setup(actor_id)  
  144.     @joblevel = 1
  145.     @jobexp = {}
  146.     kure_jobLv_before_setup(actor_id)
  147.     init_jobexp
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ▼ 指定等级上升必要累积经验值取得(重定义)
  151.   #--------------------------------------------------------------------------
  152.   def exp_for_level(level)
  153.     if @actor_id > 0
  154.       if KURE::JobLvSystem::USE_EXP_CURVE[@actor_id - 1] != 0
  155.         $data_classes[KURE::JobLvSystem::USE_EXP_CURVE[@actor_id - 1]].exp_for_level(level)
  156.       else
  157.         self.class.exp_for_level(level)
  158.       end
  159.     else
  160.       self.class.exp_for_level(level)
  161.     end
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 指定职业等级上升必要累积经验值取得(追加定义)
  165.   #--------------------------------------------------------------------------
  166.   def jobexp_for_level(level)
  167.     self.class.exp_for_level(level)
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 技能初期化(重定义)
  171.   #--------------------------------------------------------------------------
  172.   def init_skills
  173.     @skills = []
  174.    
  175.     #处理职业等级1所掌握的技能
  176.     self.class.learnings.each do |learning|
  177.       learn_skill(learning.skill_id) if learning.level <= @joblevel
  178.     end
  179.    
  180.     #处理基本等级1所掌握的固有技能
  181.     if KURE::JobLvSystem::ACTOR_SKILL[@actor_id] != nil
  182.       for i in 0..KURE::JobLvSystem::ACTOR_SKILL[@actor_id].size - 1
  183.         if @level >= KURE::JobLvSystem::ACTOR_SKILL[@actor_id][i][1]
  184.           learn_skill(KURE::JobLvSystem::ACTOR_SKILL[@actor_id][i][0])
  185.         end
  186.       end
  187.     end
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 职业经验值初期化(追加定义)
  191.   #--------------------------------------------------------------------------
  192.   def init_jobexp
  193.     @jobexp[@class_id] = current_joblevel_exp
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 职业经验值取得(追加定义)
  197.   #--------------------------------------------------------------------------
  198.   def jobexp
  199.     @jobexp[@class_id]
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 现在职业等级最低经验值取得(追加定义)
  203.   #--------------------------------------------------------------------------
  204.   def current_joblevel_exp
  205.     jobexp_for_level(@joblevel)
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 下次等级经验值取得(追加定义)
  209.   #--------------------------------------------------------------------------
  210.   def next_joblevel_exp
  211.     jobexp_for_level(@joblevel + 1)
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 最大职业等级(追加定义)
  215.   #--------------------------------------------------------------------------
  216.   def max_joblevel
  217.     KURE::JobLvSystem::MAX_JOBLV
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 判定最大职业等级(追加定义)
  221.   #--------------------------------------------------------------------------
  222.   def max_joblevel?
  223.     @joblevel >= max_joblevel
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 职业经验值变更(追加定义)
  227.   #     show : 等级上升显示标记
  228.   #--------------------------------------------------------------------------
  229.   def change_jobexp(jobexp, show)
  230.     @jobexp[@class_id] = [jobexp, 0].max
  231.     last_level = @joblevel
  232.     last_skills = skills
  233.     joblevel_up while !max_joblevel? && self.jobexp >= next_joblevel_exp
  234.     joblevel_down while self.jobexp < current_joblevel_exp
  235.     display_joblevel_up(skills - last_skills) if show && @joblevel > last_level
  236.     refresh
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● 等级上升(重定义)
  240.   #--------------------------------------------------------------------------
  241.   def level_up
  242.     @level += 1
  243.     #检查是否存在固有技能目录
  244.     if KURE::JobLvSystem::ACTOR_SKILL[@actor_id] != nil
  245.       for i in 0..KURE::JobLvSystem::ACTOR_SKILL[@actor_id].size - 1
  246.         if @level == KURE::JobLvSystem::ACTOR_SKILL[@actor_id][i][1]
  247.           learn_skill(KURE::JobLvSystem::ACTOR_SKILL[@actor_id][i][0])
  248.         end
  249.       end
  250.     end
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 职业等级上升(追加定义)
  254.   #--------------------------------------------------------------------------
  255.   def joblevel_up
  256.     @joblevel += 1
  257.     self.class.learnings.each do |learning|
  258.       learn_skill(learning.skill_id) if learning.level == @joblevel
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 职业等级下降(追加定义)
  263.   #--------------------------------------------------------------------------
  264.   def joblevel_down
  265.     @joblevel -= 1
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 职业等级上升信息显示(追加定义)
  269.   #     new_skills : 排列新习得技能
  270.   #--------------------------------------------------------------------------
  271.   def display_joblevel_up(new_skills)
  272.     $game_message.new_page
  273.     $game_message.add(sprintf(Vocab::LevelUp, @name, "职业等级", @joblevel))
  274.     new_skills.each do |skill|
  275.       $game_message.add(sprintf(Vocab::ObtainSkill, skill.name))
  276.     end
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 经验值获得(考虑经验获得率)(重定义)
  280.   #--------------------------------------------------------------------------
  281.   def gain_exp(exp,jobexp)
  282.     change_exp(self.exp + (exp * final_exp_rate).to_i, true)
  283.     change_jobexp(self.jobexp + (jobexp * final_exp_rate).to_i, true)
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● 职业变更(重定义)
  287.   #     keep_exp : 继承经验值
  288.   #--------------------------------------------------------------------------
  289.   def change_class(class_id, keep_exp = true)
  290.     @exp[class_id] = exp if keep_exp
  291.     @class_id = class_id
  292.     change_exp(@exp[@class_id] || 0, false)
  293.     change_jobexp(@jobexp[@class_id] || 0, false)
  294.    
  295.     self.class.learnings.each do |learning|
  296.       learn_skill(learning.skill_id) if learning.level == @joblevel
  297.     end
  298.    
  299.     refresh
  300.   end
  301. end

  302. #==============================================================================
  303. # ■ Window_Base
  304. #==============================================================================
  305. class Window_Base < Window
  306.   #--------------------------------------------------------------------------
  307.   # ● 等级描绘
  308.   #--------------------------------------------------------------------------
  309.   alias kure_jobLv_before_draw_actor_level draw_actor_level
  310.   def draw_actor_level(actor, x, y)
  311.     kure_jobLv_before_draw_actor_level(actor, x, y)
  312.     draw_text(x + 56, y, 12, line_height, "/", 2)
  313.     draw_text(x + 68, y, 24, line_height, actor.joblevel, 2)
  314.   end
  315. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1