Project1

标题: 技能升级脚本 v2.1 [打印本页]

作者: 雪流星    时间: 2012-2-12 06:37
标题: 技能升级脚本 v2.1
本帖最后由 雪流星 于 2012-3-9 21:17 编辑

使用方法:
技能备注里填写 [max_level X]
则某技能最高能够提升到 X 级。
没有填写时默认为 1 ,则不会提升等级。
技能提升时,伤害值提升 当前等级/最高等级 倍
例如:某技能最高等级 10,当前等级 3。
则伤害提升 3/10 = 30%

技能备注里填写 [exp_base X]
则技能升级的熟练度就会变化。没有填写时,默认为30。
熟练度的变化为 X * 技能等级的阶乘(factorial)

技能升级有三种方式:
  1. 事件指令升级
    * 事件调用 gain_skill_level(角色ID, 技能ID[, 升级数])
   
  2. 吸收角色经验值当作熟练度来升级
    * 技能备注里面填写 [exp_part 基础值]
      则角色获得经验值时,技能能够获得 经验值/基础值 的熟练度
      没有填写时,默认为0,则不会吸收经验值
      
      例如:[exp_part 10]
      则角色获得 100 点经验值时,技能获得 100/10=10点熟练度
      
  3. 角色使用技能时,熟练度提升
    * 技能备注里填写 [use_exp X]
      则角色使用技能的时候,可以提升 X 点熟练度。
      使用技能时,若对象超过一个,熟练度也只提升一次。
      使用技能时,若是攻击落空,则熟练度减半。
      若有需要可以填写做 0 ,则使用时不会提升熟练度
      没有填写时,默认为1。

目前跟着技能等级变化的只有伤害值和熟练度
其他会在下一版再加入。

更新日志:
2012-02-11:
  * 修正BUG
     - 修正使用技能而获得熟练度时出错的问题
     - 修正技能介面中,技能等级窗口可能消失的问题

2012-02-12 更新 1.5 版
  * 功能新增:等级提升至 X 级时,变化为另一个技能
     - 技能备注里填写 [on_level X,I]
       则当技能升级到 X 级时,则自动遗忘,并且角色自动学会 I 号技能
     - 技能备注里填写 [inherit Y]
       则其他的设定如最高等级、升级方式、技能熟练度自动继承 Y 号技能
   
  * 功能移除:技能升级时不再增加伤害
  
  * 介面修改:技能等级窗口
     - 窗口下移,随着光标变换位置
     - 移除下一级熟练度
     - 增加技能变化的显示
     - 修改显示/隐藏的呼叫方式,应该能降低冲突造成的问题

2012-02-13 更新 1.5.1 版
  * 介面修改:技能等级窗口
     - 技能无法升级时,显示技能名称和讯息
     - 调整技能熟练度的显示座标

2012-02-14 更新 1.5.2 版
  * 介面修改:技能等级窗口
     - 修正熟练度增加实,经验槽不会填满的问题

2012-02-14 更新 1.5.2 版
  * Bug 修正:技能升级后,熟练度变负数的问题
  * 功能新增:控制技能升级后,是否遗忘原有技能的开关
  * 介面修改:技能等级窗口
    技能升级后,没有遗忘原有技能时,技能熟练度不显示
    调整技能熟练度的显示座标

2012-02-18 更新 2.0 版
  * 功能新增:增加各个技能是否在升级后被遗忘的设定
    技能备注里填写 [no_forget],则升级后不会遗忘
    脚本里可以设定 SKILL_LVUP_NO_FORGET=true 统一不遗忘任何技能
   
  * 功能新增:手动升级技能
    所有无法吸收经验、无法在使用时获得熟练度的技能
    即所有设定为[exp_part 0]、[use_exp 0]的技能
    就是可以手动升级的技能
    也可以在脚本里设定 SKILL_MANUAL_LVUP=true 所有技能全部能手动升级
  
  * 功能新增:角色获得技能升级点数
    技能升级点数无上限,默认获得经验值的一半
    可以在脚本中设定 SKILL_RES_EXP_BASE 来变化
    技能升级点数的名称可以在脚本里修改 SKILL_REXP_VOCAB
    默认名称为 "精元点数"
   
  * 介面修改:技能等级窗口
    调整后置技能的显示座标
    增加技能升级点数
    可以手动升级的技能,升级点数正常显示。
    不能手动升级的技能,升级点数会淡化。
    按 X 键升级技能(可以在脚本里修改 SKILL_MAN_LVUP_KEY 来改变)

2012-03-09 更新 2.1 版
  * 新增功能:增加各个技能升级时,自动赋值的变量,此变量会自动添加进技能的伤害公式之中,增加伤害值
    技能备注里填写 [dmg_var X],则技能升级后,会自动赋值 X+角色ID-1 号变量
    这项设定是为了防止习得同技能的角色同时获得技能升级的效果
    也就是说 X 为 3 ,角色有 5 人时
    那么实际调用的变量如下:
    1号角色 调用 3号变量
    2号角色 调用 4号变量
    ... ... ...
    5号角色 调用 7号变量
    所以在设定时请注意变量ID 的间距
    赋值公式为 1+( 当前等级/最高等级)
   
    例如:技能3号 [dmg_var 3] 最高等级 4
    技能升级为2级之后,伤害提升 1/2 倍
    技能升级为3级之后,伤害提升 3/4 倍
    技能升级为4级之后,伤害提升 1   倍

[attach]98914[/attach]

核心脚本:


  1. module Snstar2006
  2.   module Skill_LvUp
  3.     SKILL_LVUP_NO_FORGET = false # 升级时不遗忘旧技能
  4.     SKILL_MANUAL_LVUP    = false # 手动升级
  5.     SKILL_RES_EXP_BASE   = 2     # 升级点数基数,数字越大,获得越少
  6.     SKILL_MAN_LVUP_KEY   = :X    # 手动升级的按键设定
  7.    
  8.     SKILL_EXP_VOCAB      = "熟练度"   # 技能熟练度术语
  9.     SKILL_REXP_VOCAB     = "精元点数" # 技能提升点数术语
  10.   end
  11. end


  12. class RPG::Skill < RPG::UsableItem
  13.   include Snstar2006::Skill_LvUp
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取技能最高等级
  16.   #--------------------------------------------------------------------------
  17.   def get_max_skill
  18.     self.note.split(/[\r\n]+/).each{ |line|
  19.       if line =~ /\[(?:max_level) (\d+)\]/
  20.         return $1 ? $1.to_i : 1
  21.       end}
  22.     return 1
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 获取技能熟练度基数
  26.   #--------------------------------------------------------------------------
  27.   def get_exp_base
  28.     self.note.split(/[\r\n]+/).each{ |line|
  29.       if line =~ /\[(?:exp_base) (\d+)\]/
  30.         return $1 ? $1.to_i : 30
  31.       end}
  32.     return 30
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取技能吸收角色经验值作为熟练度的基础值
  36.   #--------------------------------------------------------------------------
  37.   def get_exp_part
  38.     self.note.split(/[\r\n]+/).each{ |line|
  39.       if line =~ /\[(?:exp_part) (\d+)\]/
  40.         return $1 ? $1.to_i : 0
  41.       end}
  42.     return 0
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 获取技能使用时获取的熟练度
  46.   #--------------------------------------------------------------------------
  47.   def get_use_exp
  48.     self.note.split(/[\r\n]+/).each{ |line|
  49.       if line =~ /\[(?:use_exp) (\d+)\]/
  50.         return $1 ? $1.to_i : 1
  51.       end}
  52.     return 1
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 获取技能升级后变化的技能
  56.   #--------------------------------------------------------------------------
  57.   def get_on_level(level)
  58.     trans_skill_id = 0
  59.     self.note.split(/[\r\n]+/).each{ |line|
  60.       if line =~ /\[(?:on_level) (\d+)\,(\d+)\]/
  61.         trans_skill_id = $2.to_i if level == $1.to_i
  62.       end}
  63.     return trans_skill_id
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 获取技能升级后变化的技能
  67.   #--------------------------------------------------------------------------
  68.   def get_inherit
  69.     self.note.split(/[\r\n]+/).each{ |line|
  70.       if line =~ /\[(?:inherit) (\d+)\]/
  71.         return $1 ? $1.to_i : 0
  72.       end}
  73.     return 0
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 判断是否升级后遗忘
  77.   #--------------------------------------------------------------------------
  78.   def no_forget?
  79.     self.note.split(/[\r\n]+/).each{ |line|
  80.       if line =~ /\[(?:no_forget)\]/
  81.         return true
  82.       end}
  83.     return false
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 获取技能升级后变化的伤害值基数
  87.   #--------------------------------------------------------------------------
  88.   def get_dmg_var
  89.     self.note.split(/[\r\n]+/).each{ |line|
  90.       if line =~ /\[(?:dmg_var) (\d+)\]/
  91.         return $1 ? $1.to_i : 0
  92.       end}
  93.     return 0
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 判断是否能升级
  97.   #--------------------------------------------------------------------------
  98.   def can_lvup?
  99.     skill_level_initialize # 技能等级初始化
  100.     return @max_level > 1
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 判断是否获取角色经验当作熟练度
  104.   #--------------------------------------------------------------------------
  105.   def get_exp_from_actor?
  106.     return false unless can_lvup?
  107.     return @get_exp > 0
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 判断是否手动升级
  111.   #--------------------------------------------------------------------------
  112.   def manual_lvup?
  113.     return false unless can_lvup?
  114.     return false if transformed
  115.     return true if SKILL_MANUAL_LVUP
  116.     return false if get_exp_from_actor?
  117.     return false if lvup_by_use?
  118.     return true
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 判断是否在使用时提升熟练度
  122.   #--------------------------------------------------------------------------
  123.   def lvup_by_use?
  124.     return false unless can_lvup?
  125.     return @use_exp > 0
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 判断是否继承任何技能设定
  129.   #--------------------------------------------------------------------------
  130.   def inherit?
  131.     @transform_from = get_inherit
  132.     return @transform_from > 0
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 技能等级参数初始化
  136.   #--------------------------------------------------------------------------
  137.   def skill_level_initialize
  138.     return if @skill_level_initialized # 已初始化时跳过
  139.     @max_level = get_max_skill
  140.     @get_exp = get_exp_part
  141.     @use_exp = get_use_exp
  142.     @skill_level_initialized = true
  143.     initialize_skill_transform
  144.     @transformed = false
  145.     @transform_from = 0
  146.     @dmg_var = get_dmg_var
  147.     @fml_altered = false
  148.     if @dmg_var > 0
  149.       $game_variables[@dmg_var]=1
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 技能等级参数继承
  154.   #--------------------------------------------------------------------------
  155.   def skill_level_inherit
  156.     return unless inherit? # 已设定继承时跳过
  157.     old_skill = $data_skills[@transform_from]
  158.     @max_level = old_skill.get_max_skill
  159.     @get_exp = old_skill.get_exp_part
  160.     @use_exp = old_skill.get_use_exp
  161.     initialize_skill_transform
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 获取技能吸取角色经验值的基数
  165.   #--------------------------------------------------------------------------
  166.   def exp_from_actor
  167.     return @get_exp
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 技能变化资讯初始化
  171.   #--------------------------------------------------------------------------
  172.   def initialize_skill_transform
  173.     @skill_transform = []
  174.     1.upto(@max_level){ |level|
  175.       t_id = get_on_level(level)
  176.       if t_id > 0
  177.         @skill_transform = [level, t_id]
  178.         break
  179.       end
  180.     }
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 判断技能是否会变化
  184.   #--------------------------------------------------------------------------
  185.   def transform?
  186.     return !@skill_transform.empty?
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 判断技能是否会在某等级变化
  190.   #--------------------------------------------------------------------------
  191.   def transform_at?(level)
  192.     return false unless transform?
  193.     return @skill_transform[0] == level
  194.   end
  195.   def transform_at
  196.     return @skill_transform[0]
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 获取技能变化后的技能ID
  200.   #--------------------------------------------------------------------------
  201.   def transform_to(level)
  202.     return 0 unless transform_at?(level)
  203.     return @skill_transform[1]
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 判断技能是否有指定伤害变量
  207.   #--------------------------------------------------------------------------
  208.   def dmg_var?
  209.     return @dmg_var>0
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 判断技能是否已修改公式
  213.   #--------------------------------------------------------------------------
  214.   def fml_altered?
  215.     return @fml_altered
  216.   end
  217.   attr_reader :max_level # 获取最高等级
  218.   attr_reader :use_exp   # 使用提升熟练度量
  219.   attr_accessor :transformed # 已变化技能
  220.   attr_accessor :fml_altered # 已修改公式
  221.   attr_reader :dmg_var   # 升级提升伤害的变量ID
  222. end
  223. class Game_Actor < Game_Battler
  224.   include Snstar2006::Skill_LvUp
  225.   #--------------------------------------------------------------------------
  226.   # ● 初始化
  227.   #--------------------------------------------------------------------------
  228.   alias skill_level_initialize initialize
  229.   def initialize(actor_id)
  230.     @skill_level = {}    # 纪录技能等级
  231.     @skill_exp = {}      # 记录技能熟练度
  232.     @skill_exp_base = {} # 记录技能熟练度基数
  233.     @skill_next_exp = {} # 记录技能下一级熟练度
  234.     @skill_dmg_val = {}  # 纪录技能伤害变化的变量ID
  235.     @skill_res_exp = 0   # 纪录获取的技能升级点数
  236.     skill_level_initialize(actor_id)
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● 角色习得技能
  240.   #--------------------------------------------------------------------------
  241.   alias skill_level_learn_skill learn_skill
  242.   def learn_skill(skill_id)
  243.     skill_level_learn_skill(skill_id)
  244.     skill = $data_skills[skill_id]
  245.     if skill.can_lvup? # 判断技能是否可升级
  246.       @skill_level[skill_id] = 1
  247.       @skill_exp[skill_id] = 0
  248.       @skill_exp_base[skill_id] = skill.get_exp_base
  249.       @skill_next_exp[skill_id] = @skill_exp_base[skill_id]
  250.       if skill.dmg_var?
  251.         @skill_dmg_val[skill_id] = skill.dmg_var+@actor_id-1
  252.         alter_damage_formula(skill_id)
  253.       end
  254.     end
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● 修改伤害公式
  258.   #--------------------------------------------------------------------------
  259.   def alter_damage_formula(skill_id)
  260.     skill = $data_skills[skill_id]
  261.     return if skill.fml_altered? # 已修改时返回
  262.     formula = skill.damage.formula # 获取公式
  263.     dmg_var_id = @skill_dmg_val[skill_id]
  264.     skill.damage.formula = "(#{formula})*v[#{dmg_var_id}]"
  265.     skill.fml_altered = true # 标记为已修改
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 判断技能是否能升级
  269.   #--------------------------------------------------------------------------
  270.   def skill_can_lvup?(skill_id)
  271.     return false unless $data_skills[skill_id].can_lvup? # 技能不可升级
  272.     return false unless @skills.include?(skill_id) # 角色未学习此技能
  273.     return @skill_level[skill_id] < max_skill_level(skill_id) # 技能未达最高等级
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 获取技能最高等级
  277.   #--------------------------------------------------------------------------
  278.   def max_skill_level(skill_id)
  279.     return $data_skills[skill_id].max_level
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● 获取技能等级
  283.   #--------------------------------------------------------------------------
  284.   def skill_level(skill_id)
  285.     return 1 unless $data_skills[skill_id].can_lvup?
  286.     return @skill_level[skill_id]
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 获取技能下一级熟练度
  290.   #--------------------------------------------------------------------------
  291.   def skill_next_exp(skill_id)
  292.     return 0 unless skill_can_lvup?(skill_id)
  293.     return @skill_next_exp[skill_id]
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● 获取技能当前熟练度
  297.   #--------------------------------------------------------------------------
  298.   def skill_exp(skill_id)
  299.     return 0 unless skill_can_lvup?(skill_id)
  300.     return @skill_exp[skill_id]
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 角色获得经验值
  304.   #--------------------------------------------------------------------------
  305.   alias skill_level_gain_exp gain_exp
  306.   def gain_exp(exp)
  307.     skill_level_gain_exp(exp)
  308.     gain_skill_res_exp(exp/SKILL_RES_EXP_BASE)
  309.     @skills.each{ |id|
  310.       skill = $data_skills[id]
  311.       if skill.get_exp_from_actor? # 技能是否吸收经验值
  312.           skill_exp = (exp.to_f / skill.exp_from_actor).ceil
  313.           gain_skill_exp(id, skill_exp) # 技能提升熟练度
  314.       end
  315.     }
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ● 角色获得技能熟练度
  319.   #--------------------------------------------------------------------------
  320.   def gain_skill_exp(skill_id, val)
  321.     return unless skill_can_lvup?(skill_id)
  322.     skill = $data_skills[skill_id]
  323.     return if skill.transformed
  324.     return if val == 0
  325.     @skill_exp[skill_id] += val
  326.     if @skill_exp[skill_id] >= @skill_next_exp[skill_id]
  327.       skill_lvup(skill_id)
  328.     end
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 使用技能提升熟练度
  332.   #--------------------------------------------------------------------------
  333.   def gain_skill_exp_by_use(skill)
  334.     @gain_skill_exp = 0
  335.     if skill.is_a?(RPG::Skill) and skill.lvup_by_use?
  336.       @gain_skill_exp = skill.use_exp
  337.     end
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 角色获得技能提升点数
  341.   #--------------------------------------------------------------------------
  342.   def gain_skill_res_exp(val)
  343.     @skill_res_exp += val
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 返回角色的技能提升点数
  347.   #--------------------------------------------------------------------------
  348.   def res_exp
  349.     return @skill_res_exp
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 判断是否能手动升级
  353.   #--------------------------------------------------------------------------
  354.   def can_lv_skill_manually?(skill)
  355.     return false unless skill.manual_lvup?
  356.     return @skill_res_exp > 0
  357.   end
  358.   def has_dmg_var?(skill_id)
  359.     return @skill_dmg_val.keys.include?(skill_id)
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 手动提升熟练度
  363.   #--------------------------------------------------------------------------
  364.   def gain_skill_exp_manual(skill_id)
  365.     skill = $data_skills[skill_id]
  366.     return unless skill.manual_lvup?
  367.     val = [@skill_next_exp[skill_id], @skill_res_exp].min
  368.     @skill_res_exp -= val
  369.     gain_skill_exp(skill_id, val)
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 计算使用技能后提升的最终熟练度
  373.   #--------------------------------------------------------------------------
  374.   def gain_skill_final_exp_by_use(skill, hit)
  375.     return if @gain_skill_exp < 1
  376.     @gain_skill_exp /= 2 unless hit # 若是技能落空则熟练度减半
  377.     gain_skill_exp(skill.id, @gain_skill_exp)
  378.     @gain_skill_exp = 0
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● 角色使用技能,技能获得熟练度
  382.   #--------------------------------------------------------------------------
  383.   alias skill_level_use_item use_item
  384.   def use_item(item)
  385.     skill_level_use_item(item)
  386.     gain_skill_exp_by_use(item)
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 角色技能升级
  390.   #--------------------------------------------------------------------------
  391.   def skill_lvup(skill_id, val=1)
  392.     return unless skill_can_lvup?(skill_id)
  393.     return if $data_skills[skill_id].transformed
  394.     temp_level = @skill_level[skill_id] + val
  395.     max_level = max_skill_level(skill_id)
  396.     @skill_level[skill_id] = [temp_level, max_level].min
  397.     level = @skill_level[skill_id]
  398.     @skill_exp[skill_id] -= @skill_next_exp[skill_id]
  399.     @skill_exp[skill_id] = [@skill_exp[skill_id], 0].max
  400.     @skill_next_exp[skill_id] = @skill_exp_base[skill_id] * factorial(level)
  401.     if has_dmg_var?(skill_id)
  402.       dmg_var_id = @skill_dmg_val[skill_id]
  403.       $game_variables[dmg_var_id] = 1+(level.to_f/max_level)
  404.     end
  405.     process_skill_transform(skill_id, level)
  406.    
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 计算技能伤害
  410.   #--------------------------------------------------------------------------
  411.   alias skill_level_make_damage_value make_damage_value
  412.   def make_damage_value(user, item)
  413.     skill_level_make_damage_value(user, item) # 呼叫原有方法
  414.   end
  415.   def process_skill_transform(skill_id, level)
  416.     skill = $data_skills[skill_id]
  417.     return unless skill.transform_at?(level) # 判断技能是否在这个等级变化
  418.     new_skill_id = skill.transform_to(level) # 获取变化后的技能ID
  419.     skill.transformed = true
  420.     learn_skill(new_skill_id) # 学习新技能
  421.    
  422.     # 将旧技能的等级、熟练度、熟练度基数、下一级熟练度转移到新技能下
  423.     $data_skills[new_skill_id].skill_level_inherit # 变化后的技能设定
  424.     @skill_level[new_skill_id] = @skill_level[skill_id]
  425.     @skill_exp[new_skill_id] = @skill_exp[skill_id]
  426.     @skill_exp_base[new_skill_id] = skill.get_exp_base
  427.     @skill_next_exp[new_skill_id] = @skill_next_exp[skill_id]
  428.     @skill_dmg_val[new_skill_id] = @skill_dmg_val[skill_id]
  429.     alter_damage_formula(new_skill_id) # 调整伤害公式
  430.    
  431.     if SKILL_LVUP_NO_FORGET or skill.no_forget? # 若是设定技能升级时不遗忘旧技能
  432.       @skill_exp[new_skill_id] = 0 # 熟练度归零
  433.     else
  434.       forget_skill(skill_id) # 遗忘旧技能
  435.       # 删除旧技能的等级、熟练度、熟练度基数、下一级熟练度
  436.       @skill_level.delete(skill_id)
  437.       @skill_exp.delete(skill_id)
  438.       @skill_exp_base.delete(skill_id)
  439.       @skill_next_exp.delete(skill_id)
  440.       @skill_dmg_val.delete(skill_id)
  441.     end
  442.   end
  443. end
  444. class Game_Battler < Game_BattlerBase
  445.   #--------------------------------------------------------------------------
  446.   # ● 技能使用对象的效果应用
  447.   #--------------------------------------------------------------------------
  448.   alias skill_level_item_apply item_apply
  449.   def item_apply(user, item)
  450.     skill_level_item_apply(user, item) # 呼叫原有方法
  451.     return unless item.is_a?(RPG::Skill) # 不是使用技能时返回
  452.     return unless user.actor?
  453.     user.gain_skill_final_exp_by_use(item, @result.hit?) # 计算最终熟练度
  454.   end
  455. end
  456. class Game_Interpreter
  457.   #--------------------------------------------------------------------------
  458.   # ● 技能等级提升
  459.   #--------------------------------------------------------------------------
  460.   def gain_skill_level(actor_id, skill_id, value=1)
  461.     $game_actors[actor_id].skill_lvup(skill_id, value)
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 获得技能升级点数
  465.   #--------------------------------------------------------------------------
  466.   def gain_res_exp(actor_id, value=1)
  467.     $game_actors[actor_id].gain_skill_res_exp(value)
  468.   end
  469. end
  470. #--------------------------------------------------------------------------
  471. # ● 计算阶乘(计算技能下一级熟练度使用)
  472. #--------------------------------------------------------------------------
  473. def factorial(val)
  474.   if val <= 1
  475.     return 1
  476.   else
  477.     return factorial(val-2) + factorial(val-1)
  478.   end
  479. end
复制代码
介面:

  1. class Window_SkillLevel < Window_Base
  2.   include Snstar2006::Skill_LvUp
  3.   attr_reader :skill # 返回当前显示的技能
  4.   #--------------------------------------------------------------------------
  5.   # ● 初始化
  6.   #--------------------------------------------------------------------------
  7.   def initialize(x, y, actor, skill=nil)
  8.     super(x, y, Graphics.width/2, fitting_height(6))
  9.     @actor = actor
  10.     @skill = skill
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 设定显示的技能
  14.   #--------------------------------------------------------------------------
  15.   def skill=(skill)
  16.     #return if @skill == skill
  17.     @skill = skill
  18.     refresh
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 设定当前显示的角色
  22.   #--------------------------------------------------------------------------
  23.   def actor=(actor)
  24.     return if @actor == actor
  25.     @actor = actor
  26.     refresh
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 窗口刷新
  30.   #--------------------------------------------------------------------------
  31.   def refresh
  32.     contents.clear
  33.     return unless @skill
  34.     draw_skill_name(@skill, 0, 0)
  35.     if @skill.can_lvup?
  36.       draw_skill_max_level(@skill, 24, line_height)
  37.       draw_skill_exp(@skill, 24, line_height*2)
  38.       draw_actor_res_exp(24, line_height*3)
  39.       draw_skill_transform(@skill, 24, line_height*4)
  40.     else
  41.       text = "此技能无法升级"
  42.       draw_text(24, line_height, text_width(text), line_height, text)
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 绘制技能名称
  47.   #--------------------------------------------------------------------------
  48.   def draw_skill_name(skill, x, y, enabled = true)
  49.     return unless skill
  50.     return unless skill.is_a?(RPG::Skill)
  51.     draw_icon(skill.icon_index, x, y, enabled)
  52.     change_color(normal_color, enabled)
  53.     skill_name = skill.name
  54.     skill_name += " (#{@actor.skill_level(skill.id)}级)" if skill.can_lvup?
  55.     text = skill_name
  56.     draw_text(x + 24, y, text_width(text), line_height, text)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 绘制技能最高等级
  60.   #--------------------------------------------------------------------------
  61.   def draw_skill_max_level(skill, x, y)
  62.     return unless skill.can_lvup?
  63.     change_color(system_color)
  64.     text = "最高等级"
  65.     draw_text(x, y, text_width(text), line_height, text)
  66.     change_color(normal_color)
  67.     text = "#{skill.max_level} 级"
  68.     draw_text(x+108, y, text_width(text), line_height, text)
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 绘制技能熟练度
  72.   #--------------------------------------------------------------------------
  73.   def draw_skill_exp(skill, x, y)
  74.     return unless skill.can_lvup?
  75.     return if skill.transformed
  76.     change_color(system_color)
  77.     text = SKILL_EXP_VOCAB
  78.     draw_text(x, y, text_width(text), line_height, text)
  79.     change_color(normal_color)
  80.     color1 = text_color(18)
  81.     color2 = text_color(20)
  82.     current = @actor.skill_exp(skill.id)
  83.     if @actor.skill_can_lvup?(skill.id)
  84.       max = @actor.skill_next_exp(skill.id)
  85.       rate = current.to_f / max
  86.       draw_gauge(x+103, y, 120, rate, color1, color2)
  87.       draw_current_and_max_values(x+76, y, 150, current, max, normal_color, normal_color)
  88.     else
  89.       draw_current_and_max_values(x+76, y, 150, "--", "--", normal_color, normal_color)
  90.     end
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 绘制技能变化技
  94.   #--------------------------------------------------------------------------
  95.   def draw_skill_transform(skill, x, y)
  96.     return unless skill.transform?
  97.     change_color(system_color)
  98.     level = skill.transform_at
  99.     new_skill = $data_skills[skill.transform_to(level)]
  100.     text = sprintf("升至%s级则习得", level)
  101.     draw_text(x, y, text_width(text), line_height, text)
  102.     change_color(normal_color)
  103.     draw_item_name(new_skill, x+12, y+line_height)
  104.   end
  105.   def draw_actor_res_exp(x, y)
  106.     enabled = @skill.manual_lvup?
  107.     text = SKILL_REXP_VOCAB
  108.     change_color(system_color, enabled)
  109.     draw_text(x, y, text_width(text), line_height, text)
  110.     change_color(normal_color, enabled)
  111.     text = @actor.res_exp
  112.     draw_text(x+108, y, text_width(text), line_height, text)
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 获得文字宽度
  116.   #--------------------------------------------------------------------------
  117.   def text_width(text)
  118.     return text_size(text).width*1.5
  119.   end
  120. end
  121. class Window_SkillList < Window_Selectable
  122.   include Snstar2006::Skill_LvUp
  123.   attr_reader   :skill_level_window # 返回技能等级窗口
  124.   #--------------------------------------------------------------------------
  125.   # ● 选择技能
  126.   #--------------------------------------------------------------------------
  127.   alias skill_level_select select
  128.   def select(index)
  129.     skill_level_select(index)
  130.     if !$game_party.in_battle
  131.       @skill_level_window.skill = item
  132.       @skill_level_window.refresh
  133.       if index % 2 == 0
  134.         @skill_level_window.x = Graphics.width/2
  135.       else
  136.         @skill_level_window.x = 0
  137.       end
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 设定技能等级窗口
  142.   #--------------------------------------------------------------------------
  143.   def skill_level_window=(skill_level_window)
  144.     @skill_level_window = skill_level_window
  145.     call_skill_level
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 呼叫技能窗口更新
  149.   #--------------------------------------------------------------------------
  150.   def call_skill_level
  151.     update_skill_level if active && @skill_level_window
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 技能窗口更新
  155.   #--------------------------------------------------------------------------
  156.   def update_skill_level
  157.     @skill_level_window.clear
  158.   end
  159.   alias skill_level_deactivate deactivate
  160.   def deactivate
  161.     skill_level_deactivate
  162.     return unless @skill_level_window
  163.     @skill_level_window.hide
  164.   end
  165.   alias skill_level_activate activate
  166.   def activate
  167.     skill_level_activate
  168.     return unless @skill_level_window
  169.     @skill_level_window.show
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 处理句柄
  173.   #--------------------------------------------------------------------------
  174.   alias skill_level_process_handling process_handling
  175.   def process_handling
  176.     skill_level_process_handling
  177.     return manual_skill_lvup  if Input.trigger?(SKILL_MAN_LVUP_KEY)
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 执行手动升级
  181.   #--------------------------------------------------------------------------
  182.   def manual_skill_lvup
  183.     if item.manual_lvup? && @actor.can_lv_skill_manually?(item)
  184.       Sound.play_ok
  185.       @actor.gain_skill_exp_manual(item.id)
  186.       refresh
  187.       @skill_level_window.skill = item
  188.     else
  189.       Sound.play_buzzer
  190.     end
  191.     Input.update
  192.   end
  193. end
  194. class Scene_Skill < Scene_ItemBase
  195.   #--------------------------------------------------------------------------
  196.   # ● 场景开始
  197.   #--------------------------------------------------------------------------
  198.   alias skill_level_start start
  199.   def start
  200.     skill_level_start
  201.     create_skill_level_window
  202.     @skill_level_window.z = 200
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 创建技能等级窗口
  206.   #--------------------------------------------------------------------------
  207.   def create_skill_level_window
  208.     y = @help_window.height + 120
  209.     @skill_level_window = Window_SkillLevel.new(Graphics.width/2, y, @actor)
  210.     @item_window.skill_level_window = @skill_level_window
  211.     @skill_level_window.hide
  212.   end
  213. end
复制代码

001.png (125.04 KB, 下载次数: 128)

001.png

作者: xuzhengchi    时间: 2012-2-12 08:39
先顶一个~话说每次升级的熟练度都一样吗?还是和经验条一样曲线变化的?
PS:如果改成VA版的就好了
作者: IamI    时间: 2012-2-12 09:15
我只是来看望老人的。话说只是提升伤害似乎显得有些无聊?
作者: xuzhengchi    时间: 2012-2-12 09:55
本帖最后由 xuzhengchi 于 2012-2-12 10:10 编辑


人物框把技能升级框挡住了肿么办?


有时候打怪会出来这个
作者: 雪流星    时间: 2012-2-12 10:18
xuzhengchi 发表于 2012-2-11 19:55
人物框把技能升级框挡住了肿么办?

多谢抓虫,已经修正。

* 2012-02-11:修正BUG
  - 修正使用技能而获得熟练度时出错的问题

至於被挡住的情况...你用的是默认脚本吗?
什么情况下会被挡住?
作者: xuzhengchi    时间: 2012-2-12 10:28
雪流星 发表于 2012-2-12 10:18
多谢抓虫,已经修正。

* 2012-02-11:修正BUG

挡住的情况就在第一次进游戏的时候发生过,使用一次技能之后就好了,应该是和我自己的脚本冲突了,sorry。
PS:不知道能否实现在战斗选技能的时候也看到技能等级呢?
作者: fangqing9    时间: 2012-2-12 11:38
我测试的时后出了问题了   如果在战斗中不没用升级的技能的话  貌似就不会刷新?
这个图是一开始的  没有问题

第一次战斗中用了一次可以升级的技能也没问题

第二次的战斗中没有用到可以升级的技能   技能信息背覆盖了

也有可能是我插入别的脚本出的问题  不过还是请LZ在测试下把。

作者: 彩虹色的猪    时间: 2012-2-12 13:26
支持~~~~熟练度升级神马的最喜欢了~
作者: 杂兵天下    时间: 2012-2-12 13:43
其实我觉得技能位这么多都用不上
不如这样
  1. class RPG::Skill < RPG::UsableItem
  2.   def get_exp_base
  3.     self.note.split(/[\r\n]+/).each{ |line|
  4.       if line =~ /\[(?:exp_base) (\d+)\]/
  5.         p $1
  6.         return $1 ? $1.to_i : 30
  7.       end}
  8.     return 30
  9.   end
  10.   def get_exp_part
  11.     self.note.split(/[\r\n]+/).each{ |line|
  12.       if line =~ /\[(?:exp_part) (\d+)\]/
  13.         return $1 ? $1.to_i : 0
  14.       end}
  15.     return 0
  16.   end
  17.   def get_use_exp
  18.     self.note.split(/[\r\n]+/).each{ |line|
  19.       if line =~ /\[(?:use_exp) (\d+)\]/
  20.         return $1 ? $1.to_i : 1
  21.       end}
  22.     return 1
  23.   end
  24.   def can_lvup?
  25.     skill_level_initialize
  26.     return $skill_lvupskill[@id]!=nil
  27.   end
  28.   def get_exp_from_actor?
  29.     return false unless can_lvup?
  30.     return @get_exp > 0
  31.   end
  32.   def lvup_by_use?
  33.     return false unless can_lvup?
  34.     return @use_exp > 0
  35.   end
  36.   def skill_level_initialize
  37.     return if @skill_level_initialized
  38.     @get_exp = get_exp_part
  39.     @use_exp = get_use_exp
  40.     @skill_level_initialized = true
  41.   end
  42.   def exp_from_actor
  43.     return @get_exp
  44.   end
  45.   attr_reader :max_level
  46.   attr_reader :use_exp
  47. end
  48. class Game_Actor < Game_Battler
  49.   alias skill_level_initialize initialize
  50.   def initialize(actor_id)
  51.     @skill_exp = {}
  52.     @skill_exp_base = {}
  53.     @skill_next_exp = {}
  54.     $skill_lvupskill = []
  55.     #比如说ID为5的技能的前置技能是ID为3的技能,后置技能是ID为7的技能。
  56.     #升级后自动遗忘原先技能。
  57.     #则写:
  58.     #@skill_lvupskill[5] = [3,7,true]
  59.     $skill_lvupskill[80] = [nil,82,true]
  60.     skill_level_initialize(actor_id)
  61.   end
  62.   alias skill_level_learn_skill learn_skill
  63.   def learn_skill(skill_id)
  64.     skill_level_learn_skill(skill_id)
  65.     skill = $data_skills[skill_id]
  66.     if skill.can_lvup?
  67.       @skill_exp[skill_id] = 0
  68.       @skill_exp_base[skill_id] = skill.get_exp_base
  69.       @skill_next_exp[skill_id] = @skill_exp_base[skill_id]
  70.     end
  71.   end
  72.   def skill_can_lvup?(skill_id)
  73.     return false unless $data_skills[skill_id].can_lvup?
  74.     return false unless @skills.include?(skill_id)
  75.     return true
  76.   end
  77.   def skill_next_exp(skill_id)
  78.     return 0 unless skill_can_lvup?(skill_id)
  79.     return @skill_next_exp[skill_id]
  80.   end
  81.   def skill_exp(skill_id)
  82.     return 0 unless skill_can_lvup?(skill_id)
  83.     return @skill_exp[skill_id]
  84.   end
  85.   alias skill_level_gain_exp gain_exp
  86.   def gain_exp(exp)
  87.     skill_level_gain_exp(exp)
  88.     @skills.each{ |id|
  89.       skill = $data_skills[id]
  90.       if skill.get_exp_from_actor?
  91.           skill_exp = (exp.to_f / skill.exp_from_actor).ceil
  92.           gain_skill_exp(id, skill_exp)
  93.       end
  94.     }
  95.   end
  96.   def gain_skill_exp(skill_id, val)
  97.     return unless skill_can_lvup?(skill_id)
  98.     @skill_exp[skill_id] += val
  99.     while @skill_exp[skill_id] >= @skill_next_exp[skill_id]
  100.       skill_lvup(skill_id)
  101.       @skill_exp[skill_id] -= @skill_next_exp[skill_id]
  102.     end
  103.   end
  104.   def gain_skill_exp_by_use(skill)
  105.     @gain_skill_exp = 0
  106.     if skill.is_a?(RPG::Skill) and skill.lvup_by_use?
  107.       @gain_skill_exp = skill.use_exp
  108.     end
  109.   end
  110.   def gain_skill_final_exp_by_use(skill, hit)
  111.     return if @gain_skill_exp < 1
  112.     @gain_skill_exp /= 2 unless hit
  113.     gain_skill_exp(skill.id, @gain_skill_exp)
  114.     @gain_skill_exp = 0
  115.   end
  116.   alias skill_level_use_item use_item
  117.   def use_item(item)
  118.     skill_level_use_item(item)
  119.     gain_skill_exp_by_use(item)
  120.   end
  121.   def skill_lvup(skill_id)
  122.     return unless skill_can_lvup?(skill_id)
  123.     forget_skill(skill_id) if $skill_lvupskill[skill_id][2]==true
  124.     learn_skill($skill_lvupskill[skill_id][1]) unless $skill_lvupskill[skill_id][1]==nil
  125.   end
  126.   def skill_lvdown(skill_id)
  127.     return unless skill_can_lvup?(skill_id)
  128.     forget_skill(skill_id)
  129.     learn_skill($skill_lvupskill[skill_id][0]) unless $skill_lvupskill[skill_id][0]==nil
  130.   end
  131. end
  132. class Game_Battler < Game_BattlerBase
  133.   alias skill_level_item_apply item_apply
  134.   def item_apply(user, item)
  135.     skill_level_item_apply(user, item)
  136.     return unless item.is_a?(RPG::Skill)
  137.     return unless user.is_a?(Game_Actor)
  138.     user.gain_skill_final_exp_by_use(item, @result.hit?)
  139.   end
  140. end
  141. class Game_Interpreter
  142.   def gain_skill_level(actor_id, skill_id, value=1)
  143.     value.times do
  144.       $game_actors[actor_id].skill_lvup(skill_id)
  145.     end
  146.   end
  147.   def lose_skill_level(actor_id, skill_id, value=1)
  148.     value.times do
  149.       $game_actors[actor_id].skill_lvdown(skill_id)
  150.     end
  151.   end
  152. end
复制代码

作者: ♂雨    时间: 2012-2-12 14:16
哇,VA的脚本数量正在飞速前进耶!
作者: 彩虹色的猪    时间: 2012-2-12 16:33
本帖最后由 彩虹色的猪 于 2012-2-12 23:50 编辑

当进入技能选单时,假如该角色无技能,便会报错【如图】

另:不知道为什么 我设定技能最大等级为10,但技能升级后伤害并未提升

QQ截图20120212163231.png (7.47 KB, 下载次数: 201)

QQ截图20120212163231.png

作者: 雪流星    时间: 2012-2-13 12:08
2012-02-12 更新 1.5 版
  * 功能新增:等级提升至 X 级时,变化为另一个技能
     - 技能备注里填写 [on_level X,I]
       则当技能升级到 X 级时,则自动遗忘,并且角色自动学会 I 号技能
     - 技能备注里填写 [inherit Y]
       则其他的设定如最高等级、升级方式、技能熟练度自动继承 Y 号技能
   
  * 功能移除:技能升级时不再增加伤害
  
  * 介面修改:技能等级窗口
     - 窗口下移,随着光标变换位置
     - 移除下一级熟练度
     - 增加技能变化的显示
     - 修改显示/隐藏的呼叫方式,应该能降低冲突造成的问题
作者: 彩虹色的猪    时间: 2012-2-13 18:01
本帖最后由 彩虹色的猪 于 2012-2-13 19:38 编辑
雪流星 发表于 2012-2-13 12:08
2012-02-12 更新 1.5 版
  * 功能新增:等级提升至 X 级时,变化为另一个技能
     - 技能备注里填写 [on_l ...


哈 测试下~LZ辛苦了~


‘‘

升级所需经验值未显示(图一),不知道是不是字体的关系?
如果技能最高等级为一,则显示空白框(图二),建议改为显示技能名称+该技能无法升级之类的提示语






──彩虹色的猪于2012-2-13 19:36补充以上内容’’
作者: 雪流星    时间: 2012-2-14 10:25
彩虹色的猪 发表于 2012-2-13 04:01
哈 测试下~LZ辛苦了~

已经更新
作者: 彩虹色的猪    时间: 2012-2-14 19:14
雪流星 发表于 2012-2-14 10:25
已经更新

战斗中技能升级报错



另:技能熟练度后面跟的黑框是经验槽么?(纯属脚本盲猜测...)
       不过不会随技能熟练度的增长而填充颜色



ps:我是找茬王
作者: 雪流星    时间: 2012-2-14 22:07
彩虹色的猪 发表于 2012-2-14 05:14
战斗中技能升级报错

经验槽的问题已经修正

战斗中报错的问题测试不出来,什么情况下出错??
作者: 彩虹色的猪    时间: 2012-2-14 23:57
雪流星 发表于 2012-2-14 22:07
经验槽的问题已经修正

战斗中报错的问题测试不出来,什么情况下出错?? ...

LZ效率好高啊~
战斗中报错是在技能升级时发生的
    如我上图的技能,经验为2/3,战斗时再放一次技能,再技能动画过后就报错了
    是因为刚好放完技能之后,该技能就升级变成了新衍生技能的缘故么?(猜测)
    有试过将技能改为升到3级后衍生新技能,然后1-2的时候正常,该升三级的时候又报错
另:当我设置技能升级基数为1时,技能升到2级后显示熟练度为“-1/2” (如图)


作者: 幻倾城    时间: 2012-2-15 00:34
能不能改成  当技能升级到 X 级时,不遗忘,而角色自动学会 I 号技能
作者: 雪流星    时间: 2012-2-15 01:48
彩虹色的猪 发表于 2012-2-14 09:57
LZ效率好高啊~
战斗中报错是在技能升级时发生的
    如我上图的技能,经验为2/3,战斗时再放一次技能,再 ...

嗯嗯,所以是戰鬥中升級時出錯...
還有熟練度變成負數的問題,我應該知道是哪裡出錯了{:1_1:}@


‘‘

2012-02-14 更新 1.5.2 版
  * Bug 修正:技能升级后,熟练度变负数的问题
  * 功能新增:控制技能升级后,是否遗忘原有技能的开关
  * 介面修改:技能等级窗口
    技能升级后,没有遗忘原有技能时,技能熟练度不显示
    调整技能熟练度的显示座标


还是测试不出战斗中升级时出错的问题
不知道跟熟练度变负数的问题有没有关系...
修改後行号也变了,彩虹猪再来测试看看吧


──雪流星于2012-2-14 19:40补充以上内容’’
作者: 彩虹色的猪    时间: 2012-2-15 13:06
雪流星 发表于 2012-2-15 01:48
嗯嗯,所以是戰鬥中升級時出錯...
還有熟練度變成負數的問題,我應該知道是哪裡出錯了

哇哈 LZ那么晚还更新啊 赞~
下班回家测试下~


‘‘

回来的晚了……
初步测试暂未发现问题
战斗时技能衍生所产生的报错也不复存在{:4_131:}

问下衍生新技能后,是否保留原技能的开关只能全局更改么?
是否可以单个技能独立设置呢?(就是在技能备注里写的那种~)



──彩虹色的猪于2012-2-15 22:48补充以上内容’’
作者: 雪流星    时间: 2012-2-16 22:40
彩虹色的猪 发表于 2012-2-14 23:06
哇哈 LZ那么晚还更新啊 赞~
下班回家测试下~

单独设置技能,那就要再另外加入了,我再看看
作者: 彩虹色的猪    时间: 2012-2-16 22:48
雪流星 发表于 2012-2-16 22:40
单独设置技能,那就要再另外加入了,我再看看

LZ辛苦了~~
作者: 疯狂异形    时间: 2012-2-16 22:51
本帖最后由 疯狂异形 于 2012-2-16 15:02 编辑

好脚本!楼主辛苦了。
作者: 九夜神尊    时间: 2012-2-17 12:09
其实技能升级加伤害,那叫一个蛋疼啊,我说的不是这个脚本,而是说的RM的结构,于是这脚本必须牵扯到技能伤害脚本,因此会与不少战斗系统脚本打架。
我也头疼,好多想法都卡在这里。
作者: 867984056    时间: 2012-2-18 10:53
希望能够做个范例工程……
作者: 雪流星    时间: 2012-2-19 06:59
2012-02-18 更新 2.0 版
  * 功能新增:增加各个技能是否在升级后被遗忘的设定
    技能备注里填写 [no_forget],则升级后不会遗忘
    脚本里可以设定 SKILL_LVUP_NO_FORGET=true 统一不遗忘任何技能
   
  * 功能新增:手动升级技能
    所有无法吸收经验、无法在使用时获得熟练度的技能
    即所有设定为[exp_part 0]、[use_exp 0]的技能
    就是可以手动升级的技能
    也可以在脚本里设定 SKILL_MANUAL_LVUP=true 所有技能全部能手动升级
  
  * 功能新增:角色获得技能升级点数
    技能升级点数无上限,默认获得经验值的一半
    可以在脚本中设定 SKILL_RES_EXP_BASE 来变化
    技能升级点数的名称可以在脚本里修改 SKILL_REXP_VOCAB
    默认名称为 "精元点数"
   
  * 介面修改:技能等级窗口
    调整后置技能的显示座标
    增加技能升级点数
    可以手动升级的技能,升级点数正常显示。
    不能手动升级的技能,升级点数会淡化。
    按 X 键升级技能(可以在脚本里修改 SKILL_MAN_LVUP_KEY 来改变)

功能应该差不多了,开始制作演示工程
作者: gxtsjs    时间: 2012-2-19 10:23
期待下一版,真是羡慕脚本高手
作者: a827594998    时间: 2012-3-4 20:24
技能介绍界面能不能按一下X在弹出来,这么修改?
作者: 562305484    时间: 2012-3-5 12:11
这个不是VA的 么,以后大神们多做做VA的好脚本啊
作者: gyzjj71    时间: 2012-3-7 17:15
很华丽的脚本支持
作者: 魔潘安    时间: 2012-3-8 20:19
QQ...請問技能升級後,提昇威力被移除了是嗎?
可以還原這項功能嗎...
不然只是升級卻都沒有強化到威力...有點可惜!!


就是這個功能

技能备注里填写 [max_level X]
则某技能最高能够提升到 X 级。
没有填写时默认为 1 ,则不会提升等级。
技能提升时,伤害值提升 当前等级/最高等级 倍
例如:某技能最高等级 10,当前等级 3。
则伤害提升 3/10 = 30%


麻煩大大了~~~~~!!感恩~~~~~!!

作者: 雪流星    时间: 2012-3-10 02:07
本帖最后由 雪流星 于 2012-3-9 21:18 编辑
魔潘安 发表于 2012-3-8 06:19
QQ...請問技能升級後,提昇威力被移除了是嗎?
可以還原這項功能嗎...
不然只是升級卻都沒有強化到威力... ...


2012-03-09 更新 2.1 版
  * 新增功能:增加各个技能升级时,自动赋值的变量,此变量会自动添加进技能的伤害公式之中,增加伤害值
    技能备注里填写 [dmg_var X],则技能升级后,会自动赋值 X+角色ID-1 号变量
    这项设定是为了防止习得同技能的角色同时获得技能升级的效果
    也就是说 X 为 3 ,角色有 5 人时
    那么实际调用的变量如下:
    1号角色 调用 3号变量
    2号角色 调用 4号变量
    ... ... ...
    5号角色 调用 7号变量
    所以在设定时请注意变量ID 的间距
    赋值公式为 1+( 当前等级/最高等级)
   
    例如:技能3号 [dmg_var 3] 最高等级 4
    技能升级为2级之后,伤害提升 1/2 倍
    技能升级为3级之后,伤害提升 3/4 倍
    技能升级为4级之后,伤害提升 1   倍
作者: 杂兵天下    时间: 2012-3-10 10:56
感觉2.1的更新实在是摸不着头脑
赋值这个变量有什么意义呢?
作者: 雪流星    时间: 2012-3-10 11:16
杂兵天下 发表于 2012-3-9 20:56
感觉2.1的更新实在是摸不着头脑
赋值这个变量有什么意义呢?


忘了說明,是增加傷害用的
作者: 彩虹色的猪    时间: 2012-3-16 18:51
咦,又更新啦~
看了v2.1的说明,是指之前的版本,当两名角色拥有同一技能时,只要其中一名角色使技能升级,另一角色的技能等级也会随之上升么?

PS:升级增加伤害的功能也终于又复活啦,这样就有了双重选择,可以省去设置多个新技能的时间了。
作者: yachilo    时间: 2012-4-16 23:05
Bug回報:
1.利用技能升級學到的技能,對敵人傷害為0,但是如果是正常情況下學得的則無影響。
2.技能選單中的精元點數無法使用(X鍵按了無反應)
3.如果技能升級後,在平時選單的技能選項,進入後預設項目會變成第二項(魔法),出現條件不明。

作者: saturnfjh    时间: 2012-5-7 22:21
BUG:
手动升级模式下,技能等级MAX之后再按升级键,精元点数会继续减少。
作者: 飒沓    时间: 2012-5-13 12:23
脚本很好,唯一的问题就是手动升级无法用,按x键自动返回上一页,换成其他键则没反应,技能点数有了也没用
作者: s05s0039    时间: 2012-5-19 15:25
其實我還搞不懂這個

2012-03-09 更新 2.1 版
  * 新增功能:增加各个技能升级时,自动赋值的变量,此变量会自动添加进技能的伤害公式之中,增加伤害值
    技能备注里填写 [dmg_var X],则技能升级后,会自动赋值 X+角色ID-1 号变量
    这项设定是为了防止习得同技能的角色同时获得技能升级的效果
    也就是说 X 为 3 ,角色有 5 人时
    那么实际调用的变量如下:
    1号角色 调用 3号变量
    2号角色 调用 4号变量
    ... ... ...
    5号角色 调用 7号变量
    所以在设定时请注意变量ID 的间距
    赋值公式为 1+( 当前等级/最高等级)
   
    例如:技能3号 [dmg_var 3] 最高等级 4
    技能升级为2级之后,伤害提升 1/2 倍
    技能升级为3级之后,伤害提升 3/4 倍
    技能升级为4级之后,伤害提升 1   倍

那到底X是用來分隔不同角色還是設定傷害提升公式?
作者: yuyinwww    时间: 2012-6-4 09:09
为啥加了备注没效果
作者: august    时间: 2012-6-7 12:10
本帖最后由 august 于 2012-6-7 12:11 编辑

大大,为什么我这里会出现这种错误?脚本盲求解释啊。
如下图『见附件』

貌似因为我把  普通【攻击】 禁止的缘故,角色受到 普通【攻击】 后反击时,就会出现这种错误
如果没有把【攻击】禁止,就不会报错······

QQ截图20120607115955.jpg (13.95 KB, 下载次数: 20)

QQ截图20120607115955.jpg

QQ截图20120607120017.jpg (54.4 KB, 下载次数: 19)

QQ截图20120607120017.jpg

作者: liboyun    时间: 2012-7-24 15:08
这个脚本改完技能后打怪时技能名消失了怎么处理呢楼主!
作者: 风雪优游    时间: 2012-8-5 09:09
事件调用 gain_skill_level(角色ID, 技能ID[, 升级数])


好似有BUG一调用就死
作者: heng5465518    时间: 2012-8-5 17:38
好棒哦少时诵诗书
作者: frostkankan    时间: 2012-8-8 11:16
麻烦楼主看下这是什么问题

未命名.jpg (18.27 KB, 下载次数: 24)

未命名.jpg

作者: ♂雨    时间: 2012-8-9 12:11
本帖最后由 ♂雨 于 2012-8-9 12:13 编辑

请问,能帮我解决这个问题吗?这个脚本和装备强化系统有些冲突,用了后就覆盖技能说明了!
作者: 1035041075    时间: 2012-8-26 14:49
♂雨 发表于 2012-8-9 12:11
请问,能帮我解决这个问题吗?这个脚本和装备强化系统有些冲突,用了后就覆盖技能说明了! ...

改一下坐标就行了
作者: 艾拉·贝尔    时间: 2012-8-26 16:09
有没有关于XP的? 我想要XP的
作者: 200928326    时间: 2012-9-2 20:58
我用在了生活技能上,然后事件升级,结果报错了!说GAME_INTERPRETER的1411行发生:syntaxError
作者: 游系风    时间: 2012-11-6 17:40
脚本小白,求楼主帮忙……
1、我设定的技能伤害无论是多少,在第一级都打人时都是没有伤害的。不知道为什么…………
我的技能备注这么写的
[dmg_var 2]
[max_level 2]
[use_exp 300]
为了快速测试脚本所以获得经验很快。

2、那个“精元点数”(技能点数)我用不到,请问怎么才能让它不显示呢?

作者: 袁仕枫    时间: 2012-12-9 08:17
为什么我把脚本插进去后测试时技能显示“此技能无法升级”?
作者: 夕阳幻光    时间: 2012-12-17 16:26
技能升级后获得的技能没有伤害,请问什么情况
作者: 夕阳幻光    时间: 2012-12-18 12:41
技能升级后获得的另一个技能不能升级了
作者: 你最珍贵    时间: 2012-12-18 12:59
有xp的吗? 我想要的就是这个
作者: jerrypan    时间: 2013-1-17 19:05
请问我用了数据库列表127以后的技能,
但为什么熟练度会不存在?(如图)

界面.jpg (76.14 KB, 下载次数: 18)

界面.jpg

作者: jerrypan    时间: 2013-1-21 18:47
本帖最后由 jerrypan 于 2013-1-21 18:48 编辑
jerrypan 发表于 2013-1-17 19:05
请问我用了数据库列表127以后的技能,
但为什么熟练度会不存在?(如图) ...


发现问题了:似乎在数据库【角色】的【特性】中添加的技能无法升级。{:2_274:}
作者: eric4514    时间: 2013-3-20 20:50
請問樓主:
為什麼設置升級後的技能都不會有傷害都一直是:未受到傷害
作者: eric4514    时间: 2013-3-20 20:52
夕阳幻光 发表于 2012-12-17 16:26
技能升级后获得的技能没有伤害,请问什么情况

我也適


作者: 奥特曼盖亚    时间: 2013-8-7 19:56
我用一楼的脚本照他说的做结果技能题目没了到了第二个技能以后不是升不了第三个技能就是变量出错怎么办一楼加我QQ火速QQ:1286124843验证填写技能熟练度
作者: 奥特曼盖亚    时间: 2013-8-8 09:14
一楼的脚本用了角色技能等级到X级以后遗忘变另外一个技能这个效果时技能颜色变黑在战斗中看不了技能名称只有图片
作者: sens1992    时间: 2013-8-11 21:26
这辈子没见过这么多BUG的脚本
我搞了一下午还以为是自己的其他脚本不兼容,删减了一大堆东西,后来干脆之留这么一个脚本去试验,结果还是没一个功可以用的?发来逗大伙玩的?一年都不回复一次?能删了这坑人的玩意儿吗?
作者: 屈风    时间: 2013-10-9 12:25
我咋一次性就能用........啥都没改
作者: skyboy1283    时间: 2013-10-11 10:27
遇到这个问题,请问怎么解决?

QQ截图20131011102750.jpg (16.8 KB, 下载次数: 26)

QQ截图20131011102750.jpg

作者: jxy    时间: 2013-10-13 15:30
  include Snstar2006::Skill_LvUp错误!
作者: jkpingkl111    时间: 2013-10-19 23:04
{:2_271:}怎么用
作者: 午睡的风铃    时间: 2013-11-16 12:41
在这里按手动升级键

和在这里按手动升级键

结果会


是下边的那个脚本,184行写的是这个
if item.manual_lvup? && @actor.can_lv_skill_manually?(item)

作者: xingmot    时间: 2014-1-28 17:11
我的菜单终于又可以再赛点东西进去了...
作者: 千昭    时间: 2014-2-1 01:54
本帖最后由 千昭 于 2014-2-1 02:08 编辑

只是想求个范例工程

FF2普通攻击也有熟练度等级····
作者: longty9413    时间: 2014-2-27 18:25
謝謝分享 ~ 十分實用
作者: hzf2257    时间: 2014-2-27 20:17
好像很给力的样子
作者: nukeralf1    时间: 2014-6-26 08:39
精元点数到底什么用啊?一直是灰的放着好碍眼……
作者: nukeralf1    时间: 2014-7-19 15:00
很实用的脚本,就是有2个地方不太明白。
1.技能备注里填写 [dmg_var X],则技能升级后,会自动赋值 X+角色ID-1 号变量
这是不是意味着我有多少角色就要把相对应的变量留空?比如我有100个角色,如果我技能设定dmg_var 10的话,就要把11-110的变量位置留空出来?
2.按x键手动升级技能
我按x键出来的是系统菜单,按其他键也都没反应,试着把x改成其他字母,也没反应……

作者: 哔哔小菌    时间: 2014-7-21 16:44
熟练度有什么用?是不是可以用多了,然后就升级伤害?
或者变换招式的特效?求解答~
作者: 哔哔小菌    时间: 2014-7-21 22:00
雪流星大大,请问在脚本的哪里改技能的名字?
我想改技能的名字?而且角色开始的时候是没技能的,是不是要学习或者什么滴!
求回复~(・(ェ)・) o(≧v≦)o
作者: 向天攻柚子    时间: 2015-2-3 13:56
能放个范例吗 ==
作者: yunxin0111    时间: 2015-2-4 09:48
向天攻柚子 发表于 2015-2-3 13:56
能放个范例吗 ==

他的说明貌似说的很清楚吧 技能哪里按照说明写 游戏里试一下就明白咯
作者: 1140038    时间: 2016-2-4 07:15
版主什么时候来了给我个信息,有个问题麻烦你解决
作者: asdxjp233    时间: 2016-12-18 19:28
这页数惊人阿...
作者: asdxjp233    时间: 2016-12-18 19:29
771389.....
作者: DIKETOU    时间: 2017-4-4 12:46
为什么用了之后熟练度还是不显示啊?是哪里没设定吗?
作者: lpqlpqlpq123    时间: 2018-5-9 21:57
找這個很久了, 感謝!




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