Project1

标题: 仿VA自定义技能公式 [打印本页]

作者: 719783572    时间: 2019-5-1 23:56
标题: 仿VA自定义技能公式
首先附上自己瞎写的脚本,这个是配合沉影不器大大的读取备注栏脚本写的,思路大概就是自己定义攻防精神系数来自定义技能伤害(仿VA MV)
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● VX版重新定义技能  by ZYYNOV  需要配合读取备注栏脚本使用
  3.   #     power => 技能基础伤害
  4.   #     atk_ef => 攻击系数
  5.   #     def_ef => 防御系数
  6.   #     spi_ef => 精神攻击系数
  7.   #     mdef_ef => 精神防御系数
  8.   # 按照这个格式写到技能的备注栏中,就可以自己定义技能伤害公式了。
  9.   #--------------------------------------------------------------------------
  10. class Game_Battler
  11.   def make_obj_damage_value(user, obj)
  12.     damage = obj.read_note('power') # 基础计算
  13.     if damage > 0                                   # 若伤害为正
  14.       damage += user.atk * obj.read_note('atk_ef') * obj.atk_f / 100      # 使用者攻击力关系度
  15.       damage += user.spi * obj.read_note('spi_ef') * obj.spi_f / 100      # 使用者精神力关系度
  16.       unless obj.ignore_defense                     # 除非无视防御力
  17.         damage -= self.def * obj.read_note('def_ef') * obj.atk_f / 100    # 目标攻击力关系度
  18.         damage -= self.spi * obj.read_note('mdef_ef') * obj.spi_f / 100    # 目标精神力关系度
  19.       end
  20.       damage = 0 if damage < 0                      # 设负数伤害为0
  21.     elsif damage < 0                                # 若伤害为负
  22.       damage -= user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
  23.       damage -= user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
  24.     end
  25.     damage *= elements_max_rate(obj.element_set)    # 属性校正
  26.     damage /= 100
  27.     damage = apply_variance(damage, obj.variance).to_i# 分散度
  28.     damage = apply_guard(damage)                    # 防御校正
  29.     if obj.damage_to_mp  
  30.       @mp_damage = damage                           # 伤害魔力
  31.     else
  32.       @hp_damage = damage                           # 伤害体力
  33.     end
  34.   end
  35. end


目前测试下来暂时没什么问题,唯一问题就是,假如我要实现角色的最大生命这些特殊属性作为技能伤害,那备注栏写法理论来说应该是
atk_ef = 0
def_ef = 0
spi_ef = 0
mdef_ef = 0
power = user.maxhp
但是这样肯定出错,毕竟读取备注栏的module没有定义user这个东西,但user在Game_Battler里面是定义过的,所以现在很尴尬,如果用全局变量比如power =  $game_actors[1].maxhp
的话肯定是没问题的,但这样只能一个角色用用这个技能了......

1.PNG (74.52 KB, 下载次数: 11)

1.PNG

作者: KB.Driver    时间: 2019-5-2 00:34
直接用eval有什么不好
尽管安全性差一点,但VA的实现就是eval(只不过稍微加以封装)

既然已经能读注释了,就自己定义一个正则,直接读取字符串用来eval
作者: 719783572    时间: 2019-5-2 00:50
KB.Driver 发表于 2019-5-2 00:34
直接用eval有什么不好
尽管安全性差一点,但VA的实现就是eval(只不过稍微加以封装)

谢谢啦!差不多搞定了已经~




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