设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 救世小树
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
31
 楼主| 发表于 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
复制代码
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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


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


RUBY 代码复制
  1. def make_damage_value(user, item)
  2.     value = item.damage.eval(user, self, $game_variables)
  3.     if item.is_a?(RPG::Skill)
  4.       case item.id
  5.       when 101,102
  6.         if user.armors.include?($data_armors[50])
  7.            value 101= 1.5
  8.            end
  9.        if user.weapons.include?($data_weapons[51])
  10.           value 102 = 2.5
  11.         end
  12.       when 999
  13.       end
  14.     end #判断武器防具
  15. ####################
  16.       when 235
  17.         if self.state?(57)
  18.            make_damage_extra(user,item)
  19.          end
  20.          ####################
  21.       when 232
  22.         if self.state?(57)
  23.            make_damage_extra(user,item)
  24.         end
  25.       ####################
  26.       end
  27.     end
  28.     value *= item_element_rate(user, item)
  29.     value *= pdr if item.physical?
  30.     value *= mdr if item.magical?
  31.     value *= rec if item.damage.recover?
  32.     value = apply_critical(value) if @result.critical
  33.     value = apply_variance(value, item.damage.variance)
  34.     value = apply_guard(value)
  35.     @result.make_damage(value.to_i, item)
  36.   end
  37.   def make_damage_extra(user,item)
  38.         if item.is_a?(RPG::Skill)
  39.       case item.id
  40.       when 235
  41.         value = user.mat * 10
  42.       when 232
  43.         value =  ( a.atk* 5 + a.mat * 9 ) * 1.5
  44.         #↑↑↑↑↑↑↑↑写hp伤害的公式,底下的各种修正很据情况可删可留
  45.         #user→a  self→b
  46.     end
  47.       value *= item_element_rate(user, item)
  48.       value *= pdr if item.physical?
  49.       value *= mdr if item.magical?
  50.       value *= rec if item.damage.recover?
  51.       value = apply_critical(value) if @result.critical
  52.       value = apply_variance(value, item.damage.variance)
  53.       value = apply_guard(value)
  54.       @result.hp_damage = value.to_i
  55.     end   
  56.     end

点评

就是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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
33
 楼主| 发表于 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 都是错误语句,运行会报错



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

  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 该用户已被删除
34
发表于 2013-7-8 10:08:35 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
35
发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
560 小时
注册时间
2012-12-29
帖子
1075
36
发表于 2013-7-8 18:00:44 | 只看该作者
给个范例不

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
37
发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

火烧大神

梦石
0
星屑
1823
在线时间
942 小时
注册时间
2012-1-1
帖子
1777
38
发表于 2013-7-10 21:56:43 | 只看该作者
狮驼岭的技能也行吗?
就是一个技能要在某号状态下才能使用,没有这个状态就不能用。

点评

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

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
185
在线时间
54 小时
注册时间
2012-12-28
帖子
31
39
发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 14:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表