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

Project1

 找回密码
 注册会员
搜索
查看: 50232|回复: 72
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
跳转到指定楼层
发表于 2013-4-24 18:54:05 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 救世小树 于 2013-5-14 12:58 编辑

大家都知道,VA的技能和物品界面上,在伤害设置一栏中,有着计算公式这一项。

来一张帮助图

使用这一项,可以实现各种各样的功能,比如恢复一定比例损失的hp,mp。

防御换算成伤害减少系数来减免伤害



但是,还不够!我想要更多、更奇怪的功能。。。


所谓按公式计算,就是讲公式作为脚本来执行一遍,算出它的值并返回,
那么,只要稍微懂一点点脚本,就可以直接对公式“下手”,做出特殊的效果来。

在公式中,使用者为a,目标为b,这里的a和b实际上就是 Game_Battle 类的对象,可以是玩家,也可以是敌人。
那么在脚本编辑器里把 Game_Battle 和 Game_BattlerBase 翻上一遍就可以找到各种可以调用的方法。



下面我来抛砖引玉:
例1:
做一个技能,如果对方的HP低于一定比例,则直接秒杀,对BOSS无效。


首先新建一个技能,把其他乱七八糟设定好,

然后开始写公式,这里用的是很常用的条件表达式。   a?b:c   如果a为真则执行b不然则执行c
RUBY 代码复制
  1. ((b.hp_rate <= 0.15)&&(b.state_rate(1)!=0))?b.add_state(1):(a.mat-b.mdf)

(我也只是略懂一点,所以)为了保险起见加了很多括号。
上面的公式大致的意思就是
如果b(目标)的hp_rate(hp比率)小于等于0.15并且b(目标)对1号状态的抗性不为零
这两个条件同时满足,就执行b.add_state(1) 给目标附加1号状态;
如果不都满足,就执行(a.mat-b.mdf)来计算伤害,当然这里也可以替换成别的公式。
这里的1号状态就是大家都知道的无法战斗状态了,如果要把一个怪物设置成boss,只要这样设置:

注意,状态抗性0%并不是免疫该状态,你想杀还是可以通过攻击减少hp到0杀死的,
只是不能通过诸如“攻击时附带状态、使用技能时附加状态”之类的手段来秒杀,真正杀不死的是免疫无法战斗状态。
然后测试,通过战斗事件第零回合控血到10%,
如果是boss,(把1号状态抗性设置*0%),没问题

不是boss,被秒杀。

测试结果还不错,就是没有受到伤害然后被打倒了非常违和。
想办法补救一下,个人采用了非常蛋疼的补救方法,就是给add_state函数加上了一些奇怪的东西

然后在Game_ActionResult 里面加了一条奇怪的判断

测试效果拔群!时髦值刷的厉害“xxx就要死了!”

这里例1就算是完成啦,仿照这个例1,可以做出诸如“如果目标处于某状态,那么就秒杀”等等的技能效果


例2例3例4……

手动删除线【(a.mat-b.mdf)*(b.gurading? ? 1 : 2)】
gurad拼错了。。。还有就是va是没有 guarding? 函数的,这里应该是
(a.mat-b.mdf)*(b.gurad? ? 1 : 2)

(a.mat-b.mdf)就是拿a的魔攻减b的魔防,后面再乘一个数,
如果b是在防御的状态下,那么这个数是1,反之则是2,
这个技能对不处于防御状态的敌人有着双倍杀伤力
(防御状态下应该也有默认一半的伤害减免修正,伤害结果应该相差4倍)
换一种思维,也可以作成(a.mat-b.mdf)*(b.guard? ? 2 : 1)这种伪的“防御无效”的效果,
甚至对防御状态敌人打出更高伤害的特殊技能

(b.mhp-b.hp)*(b.hp_rate <= 0.3 ? 0.15 : 0.10)
(b.mhp-b.hp)即目标缺失的HP,后面条件表达式意思是如果b的hp_rate(就是hp与上限之比)小于等于30,那么乘以0.15,反之乘以0.1
这个技能可以作为恢复技能,如果目标血量小于30%,则回复15%缺失的hp,反之则回复10%缺失的hp

a.state?(44) ? a.mat : (a.mat-b.mdf)
如果发动者a处于44号状态,那么伤害公式为a.mat,反之则a.mat-b.mdf
这个比较奇葩,如果发动者处于某状态,那么这个技能将无视目标的魔防造成伤害,
(想想其实可以改为b.state?(44)这样目标处于某状态,某技能将无视魔防造成伤害之类的)

($game_switches[1] ? 1 : 1.5) * (a.mat-b.mdf)
如果一号开关关闭,则技能造成开关打开状态下1.5倍的伤害,这个是我瞎写的 ,没想到有什么用

($game_actors[4].skill_learn?($data_skills[44]) ? 1.5:1)*(a.mat-b.mdf)
如果4号角色学会了44号技能,那么技能伤害增加到原来的1.5倍。
这样可以做一个“火系魔法精通”的被动技能然后在所有你定义的火系魔法里加上这个判断,
这样做的缺点就是4号角色一旦学会了这个技能,其它角色甚至敌人施放此技能也有了1.5倍伤害。。。

解决方法是用 a.skill_learn?($data_skills[44]) 直接判断使用者是否学会44号技能,
不过由于Game_Enemy类是没有skill_learn?这个方法的,敌人使用此技能就要报错,设置敌人行动时要特别注意。
也可以人为在脚本Game_Enemy里添加一个永远return false 的这个方法进去,那就有点怪怪的)

各种效果,
我也想不出别的什么玩法了),大家发挥想象力吧,VA的公式功能比想象的要强大啊!


↓↓其实我也想过直接b.hp的,但是考虑到有属性修正啦,物理魔法伤害加成修正啦等等等等
↓↓于是就干脆地直接加上死亡状态了,然后又用奇葩的方法刷时髦值(笑)


公式写得太长写不下的解决方法见6楼

点评

對了!這樣的話分散度要改一下....  发表于 2013-4-25 06:37
貌似把b.add_state(1)改成b.hp就很美好了阿....  发表于 2013-4-25 06:36

评分

参与人数 6星屑 +710 +2 收起 理由
不汐汐 + 1 我很赞同,终于找到了!
涅炎 + 1 精品文章
Luciffer + 200 简直赞!
lsu666666 + 150 塞糖
moy + 60 塞糖
feizhaodan + 300 奖赏条里

查看全部评分

研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的

Lv3.寻梦者

梦石
0
星屑
1083
在线时间
140 小时
注册时间
2019-5-12
帖子
57
72
发表于 2019-10-3 11:40:31 | 只看该作者
分享个自己研究的公式:
a.atk*4/(b.hp/b.mhp+0.2)-b.def*2    #随着目标生命值降低提高伤害,上限是5倍,在80%及以上(无增幅还会减伤)50%(1.4倍左右)25%(2倍+)10%(3倍+)
因为单纯的按已损失血量打BOSS太BUG才研究的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1083
在线时间
140 小时
注册时间
2019-5-12
帖子
57
71
发表于 2019-7-17 15:58:22 | 只看该作者
本帖最后由 真の玛娜君 于 2019-7-17 15:59 编辑
造小梦 发表于 2019-7-17 15:40
我想做一个技能,当敌人处于0号状态时技能必定暴击,这种技能该怎么做?


状态:X属性伤害*200%
技能:属性:X属性
公式大概只能这么做,事件虽然可能能做,但是限制很大,只能你自己写脚本了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1583
在线时间
266 小时
注册时间
2019-1-18
帖子
202
70
发表于 2019-7-17 15:40:54 | 只看该作者
我想做一个技能,当敌人处于0号状态时技能必定暴击,这种技能该怎么做?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
24 小时
注册时间
2016-1-13
帖子
1
69
发表于 2018-10-27 00:45:12 | 只看该作者
本帖最后由 cm128696 于 2018-10-27 23:55 编辑

想請教一下,假設自己在用完技能後給予敵人傷害並同時提高自己的強化狀態要怎麼寫??
自己用 t = 100 + a.atk * 4 - b.def * 2; a.add_buff(1 ); t
打出來被隔檔沒傷害


自己研究了解決方法才發現少打了東西
x.add_buff(能力提升ID,回合數)
這樣才是對的
noShade>

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
704
在线时间
91 小时
注册时间
2018-9-30
帖子
56
68
发表于 2018-10-14 05:17:52 | 只看该作者
赞啊啊啊啊啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
621
在线时间
7 小时
注册时间
2013-7-28
帖子
1
67
发表于 2015-10-18 12:35:41 | 只看该作者
本帖最后由 1119062604 于 2015-10-18 12:41 编辑

对不起挖坟了,我做了一个技能,效果是让自身所有剑系技能获得伤害加成,但每使用一次会获得debuff。
可是我一但使用这个技能就会报错。
技能公式是:a.state?(56) ? 250 + a.atk * 1.85 a.add_state(47) : (250 + a.atk * 1.45)

制作成功了,对不起,如果我再仔细研究就不会挖坟了……(;´Д`)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2015-8-12
帖子
77
66
发表于 2015-8-19 11:59:44 | 只看该作者
greelmr1981 发表于 2014-1-5 16:09
那么如果我想在使用技能后同时使某个变量改变(加减)该如何写呢?

我试了在技能的伤害计算公式空格处写了 ...

如果我的变量赋值为1,我书写为10 * a.luk * v[1],为什么没有伤害
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
65
发表于 2015-4-26 15:13:24 | 只看该作者
突然想到……虽然也可能有其他人想到过了……
判断是否存在某状态,是则解除该状态,否则附加该状态是不是也可以实现?
通过状态可以做出开关类型的技能了嗯。只要不选战斗结束时解除……

点评

嗯,昨天已经研制成功了……  发表于 2015-4-27 06:39
这个当然是可行的啊,VA的技能公式就是将部分词汇改变了一下的脚本框呢。  发表于 2015-4-27 00:29
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2012-10-4
帖子
193
64
发表于 2015-2-24 13:37:40 | 只看该作者
請問若是要做出類似神奇寶貝的捨身攻擊,攻擊敵人時自己也會受一點傷害
是否也修改公式就行了?

点评

一个是16樓的,一个是17樓的~兩个网址應該会自动跳去的說  发表于 2015-2-24 19:10
請問是哪一樓?那頁幾乎每樓都有程式碼,看得有點眼花撩亂  发表于 2015-2-24 17:13
http://rm.66rpg.com/forum.php?mod=redirect&goto=findpost&ptid=319304&pid=2226801 http://rm.66rpg.com/forum.php?mod=redirect&goto=findpost&ptid=319304&pid=2227164  发表于 2015-2-24 14:09
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1511
在线时间
254 小时
注册时间
2014-11-23
帖子
60

开拓者

63
发表于 2015-2-9 23:05:40 | 只看该作者
楼楼,我想问一个问题
怎么实现回合的计算呢?
比如治疗术:目标每回合恢复20%的血值,持续3回合
       祝福术:目标物理攻击上升10%,持续3回合

点评

用狀態就行了吧?  发表于 2015-2-10 13:51
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-2 20:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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