楼主: 救世小树

[原创发布] 我跟你讲,VA的计算公式,赞!通过公式实现一些功能

[复制链接]
梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
回帖
128
 楼主| 发表于 2013-7-6 09:46:42 | 显示全部楼层
ninesound 发表于 2013-7-5 12:56
谢谢回答
可是还有一些问题

可以变通一下,用技能编号来分歧~注意各种细节上的变化~

  1.   def make_damage_extra(user,item)
  2.     if item.is_a?(RPG::Skill)
  3.       case item.id
  4.       when 235
  5.         value = user.mat - self.mdf if self.state?(29)   
  6.       when 236
  7.         value = 2*user.mat - self.mdf if self.state?(29)
  8.       end
  9.       value *= item_element_rate(user, item)
  10.       value *= pdr if item.physical?
  11.       value *= mdr if item.magical?
  12.       value *= rec if item.damage.recover?
  13.       value = apply_critical(value) if @result.critical
  14.       value = apply_variance(value, item.damage.variance)
  15.       value = apply_guard(value)
  16.       @result.hp_damage = value.to_i
  17.     end
复制代码
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复

使用道具 举报

梦石
0
星屑
50
在线时间
189 小时
注册时间
2013-1-26
回帖
31
发表于 2013-7-6 14:18:31 | 显示全部楼层
本帖最后由 ninesound 于 2013-7-6 14:32 编辑
救世小树 发表于 2013-7-6 09:46
可以变通一下,用技能编号来分歧~注意各种细节上的变化~


非常感谢哦
如果要再加入判断武器
是不是我这样子写就可以了?


[pre lang="ruby" line="1"]  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    if item.is_a?(RPG::Skill)
      case item.id
      when 101,102
        if user.armors.include?($data_armors[50])
           value 101= 1.5
           end
       if user.weapons.include?($data_weapons[51])
          value 102 = 2.5
        end
      when 999
      end
    end #判断武器防具
####################
      when 235
        if self.state?(57)
           make_damage_extra(user,item)
         end
         ####################
      when 232
        if self.state?(57)
           make_damage_extra(user,item)
        end
      ####################
      end
    end
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    @result.make_damage(value.to_i, item)
  end
  def make_damage_extra(user,item)
        if item.is_a?(RPG::Skill)
      case item.id
      when 235
        value = user.mat * 10
      when 232
        value =  ( a.atk* 5 + a.mat * 9 ) * 1.5
        #↑↑↑↑↑↑↑↑写hp伤害的公式,底下的各种修正很据情况可删可留
        #user→a  self→b
    end
      value *= item_element_rate(user, item)
      value *= pdr if item.physical?
      value *= mdr if item.magical?
      value *= rec if item.damage.recover?
      value = apply_critical(value) if @result.critical
      value = apply_variance(value, item.damage.variance)
      value = apply_guard(value)
      @result.hp_damage = value.to_i
    end   
    end[/pre]

点评

就是101号技能对应50号装备,102对应51号  发表于 2013-7-6 15:45
那个1.5,2.5我打错了,那个是伤害公式,这样子的话哪里还有问题吗  发表于 2013-7-6 15:41
所以也不是特别好帮你纠正~  发表于 2013-7-6 15:13
判断武器防具两个if是没错,但是里面的 value 101 = 1.5 是想表达什么,这式子是有问题的,还有外面的语句结构也有问题,我不是特别清楚你是什么意思  发表于 2013-7-6 15:12
回复

使用道具 举报

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
回帖
128
 楼主| 发表于 2013-7-6 17:44:31 | 显示全部楼层
ninesound 发表于 2013-7-6 14:18
非常感谢哦
如果要再加入判断武器
是不是我这样子写就可以了?

额,其实问题还是不少,
第7行和第10行:value 101= 公式1
                           value 102= 公式2
这样的写法是不对的, value 就是计算结果,后面再加个101,102 什么的电脑就不认了,也没有必要加这玩意儿。
我们再来从头理一遍。
首先这个脚本修改是未来做一个法力燃烧的技能,这个技能造成mp伤害,当目标处在某状态时,额外在造成hp伤害。
然后我们想要把两个公式(hp伤害和mp伤害)写出来,这一段脚本中有两个方法,make_damage_value 和 make_damage_extra
其中 make_damage_value 是原本的计算伤害的公式,我们所编辑的技能的设定就是造成mp伤害,因此这里的value是mp伤害的计算,
这个公式是直接在技能编辑面板的公式框里写的,如果你是想写hp伤害的公式,就务必看下面那个
def make_damage_extra - end 。

运行原理是在计算伤害时施加判定,如果自身处于某种状态,那么就利用 make_damage_extra 来附加额外的hp伤害

然后是语句结构, if-end、case-end 是成对出现的,其中 when 只能出现在某对 case-end 之间,你脚本中的第一个 when 235 when 232 都是错误语句,运行会报错
捕获.PNG


我重新写了一下,注意注释

  1. def make_damage_value(user, item)
  2.     value = item.damage.eval(user, self, $game_variables)
  3.     if item.is_a?(RPG::Skill)

  4. #================================
  5.       case item.id
  6.       when 101,102
  7.         if user.armors.include?($data_armors[50])
  8.           value =公式1
  9.        end
  10.        if user.weapons.include?($data_weapons[51])
  11.          value = 公式2
  12.        end
  13.       #这里的公式是101,102号技能的对mp伤害(如果你的技能面板就是那样设定的话)
  14.       #并且覆盖了你在技能数据库里设定的101,102号技能的原公式,
  15.       #如果不需要,请从case item.id 到 when 999 end都删除吧
  16.       when 999
  17.       end
  18. #================================

  19.       if self.state?(57) or self.state?(58)  #这里写下你需要的特殊状态
  20.         make_damage_extra(user,item)
  21.       end

  22.     end

  23.     value *= item_element_rate(user, item)
  24.     value *= pdr if item.physical?
  25.     value *= mdr if item.magical?
  26.     value *= rec if item.damage.recover?
  27.     value = apply_critical(value) if @result.critical
  28.     value = apply_variance(value, item.damage.variance)
  29.     value = apply_guard(value)
  30.     @result.make_damage(value.to_i, item)
  31.   end
  32.   def make_damage_extra(user,item)
  33.     if item.is_a?(RPG::Skill)
  34.       case item.id
  35.       when 235
  36.         value = user.mat * 10
  37.       when 232
  38.         value =  ( a.atk* 5 + a.mat * 9 ) * 1.5
  39.         #↑↑↑↑↑↑↑↑写hp伤害的公式,底下的各种修正很据情况可删可留
  40.         #user→a  self→b
  41.       when 101,102  #写在这里就算是hp伤害了
  42.         if user.armors.include?($data_armors[50])
  43.           value =公式1
  44.        end
  45.        if user.weapons.include?($data_weapons[51])
  46.          value = 公式2
  47.       else
  48.         return#添加了这个,如果以上的情况都不符合,那么直接结束这个方法
  49.       end
  50.       value *= item_element_rate(user, item)
  51.       value *= pdr if item.physical?
  52.       value *= mdr if item.magical?
  53.       value *= rec if item.damage.recover?
  54.       value = apply_critical(value) if @result.critical
  55.       value = apply_variance(value, item.damage.variance)
  56.       value = apply_guard(value)
  57.       @result.hp_damage = value.to_i
  58.     end   
  59.   end
复制代码
emmm没啥可说的了,个人觉得你可以先去学一下脚本,至少把变量控制语句什么的搞清楚,再来修改脚本就事倍功半了,磨刀不误砍柴工嘛~
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复

使用道具 举报

david_ng223 该用户已被删除
发表于 2013-7-8 10:08:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
回帖
693
发表于 2013-7-8 13:11:35 | 显示全部楼层
最近看到别人对于回避之后发生的事情,那么理论上,应该也能够做得出,当必杀发生时,会额外附加效果的吧。

点评

self.add_state(55) if @result.critical【】【】user.hp += user.mhp/20 if @result.critical  发表于 2013-7-9 12:37
回复

使用道具 举报

梦石
0
星屑
48
在线时间
560 小时
注册时间
2012-12-29
回帖
1003
发表于 2013-7-8 18:00:44 | 显示全部楼层
给个范例不

点评

都是些零零碎碎的数据库设定加脚本修改,解决各种实际问题的,这要我怎么做范例啊。。。  发表于 2013-7-9 12:38
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
回帖
693
发表于 2013-7-10 00:17:36 | 显示全部楼层
david_ng223 发表于 2013-7-8 10:08
我的遊戲中有數百個技能,
剛設置了個叫飛翔的狀態(各回避率+100%,即所有技能都不能擊中),
請問怎樣使敵 ...

那样直接写公式里可以?

点评

@救世小树 我的意思是,当某一技能暴击时会产生什么,但似乎暴击相关的数值只有SELF,而没有USER  发表于 2013-7-11 11:49
放在脚本里 value = apply_critical(value) if @result.critical 这一行的附近就行~  发表于 2013-7-11 11:36
回复

使用道具 举报

火烧大神

梦石
0
星屑
1916
在线时间
954 小时
注册时间
2012-1-1
回帖
1767
发表于 2013-7-10 21:56:43 | 显示全部楼层
狮驼岭的技能也行吗?
就是一个技能要在某号状态下才能使用,没有这个状态就不能用。

点评

我怎么就没想到!!!谢谢了!  发表于 2013-7-11 13:03
最简单的方法是,在该状态设置一个添加该技能。这样只有该状态存在的情况下,才能使用该技能  发表于 2013-7-10 22:23

火兔游戏官网上线啦!!
戳 >>> www.huotuyouxi.com <<<戳
回复

使用道具 举报

梦石
0
星屑
275
在线时间
54 小时
注册时间
2012-12-28
回帖
19
发表于 2013-9-5 11:11:35 | 显示全部楼层
既然可以透過
判定 是否能力強化、狀態 改變計算公式
可否做到判定 是否能力強化、狀態 等改變該技能命中率?

例: 對方敏捷上升時 命中率增加 else 命中率不變?

点评

現在是b.buff?(6) ? a.atk : (a.atk-b.def) 如果對方敏捷上升 無視防守 可是我想要的效果是: 如果對方敏捷上升 自己這次技能的命中率提升.如果做到,要怎麼改?   发表于 2013-9-5 12:46
可以用 if.state  发表于 2013-9-5 11:22
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
回帖
693
发表于 2013-9-9 16:06:36 | 显示全部楼层
wai781300 发表于 2013-9-5 11:11
既然可以透過
判定 是否能力強化、狀態 改變計算公式
可否做到判定 是否能力強化、狀態 等改變該技能命中率 ...

关于增加暴击,增加命中率的方法不能在公式里直接实现,但可以实现,你可以爬爬楼,应该在3-4楼里我说过的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部