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

Project1

 找回密码
 注册会员
搜索
查看: 46651|回复: 72

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
发表于 2013-4-24 18:54:05 | 显示全部楼层 |阅读模式

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

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

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

大家都知道,VA的技能和物品界面上,在伤害设置一栏中,有着计算公式这一项。
1.png
来一张帮助图
公式帮助.png
使用这一项,可以实现各种各样的功能,比如恢复一定比例损失的hp,mp。
2.png
防御换算成伤害减少系数来减免伤害
3.png


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


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

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



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


首先新建一个技能,把其他乱七八糟设定好,
e1.png
然后开始写公式,这里用的是很常用的条件表达式。   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,只要这样设置:
boss.png
注意,状态抗性0%并不是免疫该状态,你想杀还是可以通过攻击减少hp到0杀死的,
只是不能通过诸如“攻击时附带状态、使用技能时附加状态”之类的手段来秒杀,真正杀不死的是免疫无法战斗状态。
然后测试,通过战斗事件第零回合控血到10%,
如果是boss,(把1号状态抗性设置*0%),没问题
2013-4-24 18-47-10.png
不是boss,被秒杀。
e1resu.png
测试结果还不错,就是没有受到伤害然后被打倒了非常违和。
想办法补救一下,个人采用了非常蛋疼的补救方法,就是给add_state函数加上了一些奇怪的东西
add_sta.png
然后在Game_ActionResult 里面加了一条奇怪的判断
action.png
测试效果拔群!时髦值刷的厉害“xxx就要死了!”
e1_gaijin.png
这里例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

评分

参与人数 5星屑 +710 +1 收起 理由
涅炎 + 1 精品文章
Luciffer + 200 简直赞!
lsu666666 + 150 塞糖
moy + 60 塞糖
feizhaodan + 300 奖赏条里

查看全部评分

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

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

发表于 2013-4-24 22:44:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2013-2-3
帖子
22
发表于 2013-5-4 16:41:49 | 显示全部楼层
大大 能不能把下面几个例子 说明下?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
 楼主| 发表于 2013-5-4 21:51:04 | 显示全部楼层
zhang58604616 发表于 2013-5-4 16:41
大大 能不能把下面几个例子 说明下?

(a.mat-b.mdf)*(b.gurading? ? 1 : 2)
(a.mat-b.mdf)就是拿a的魔攻减b的魔防,后面再乘一个数,
如果b是在防御的状态下,那么这个数是1,反之则是2,
这个技能对不处于防御状态的敌人有着双倍杀伤力
(防御状态下应该也有默认一半的伤害减免修正,伤害结果应该相差4倍)
换一种思维,也可以作成(a.mat-b.mdf)*(b.gurading? ? 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倍的伤害,这个是我瞎写的{:2_270:} ,没想到有什么用

($game_actors[4].skill_learn? ? 1:1.5)*(a.mat-b.mdf)
这里skill_learn?后面少了参数。。。而且后面的倍速好像也写错了实际上的应用应该是这样
($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 的这个方法进去,那就有点怪怪的)

点评

这么说来,也可以判断是否装备了某些装备?那么请问一下这样的语句是怎样描述?  发表于 2013-5-8 12:09
那个火系精通的话,如果会精通的角色或者法术数量有限,可以给他另外设置技能  发表于 2013-5-8 12:07
一号开关关闭,比如说修罗场开启,则被人痛扁1.5倍伤害  发表于 2013-5-8 12:04
good job!  发表于 2013-5-5 02:22
想想还是把这段整合编辑到上面去了。。  发表于 2013-5-4 21:59
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
发表于 2013-5-8 12:01:33 | 显示全部楼层
首先,很感谢你提供的方法,这让我的思路拓宽了不少,但我毕竟是脚本盲,有一些问题还是存在。
我也有几个问题,
这些公式直接写在公示栏上?但是公式栏的长度有限(因为我使用的公式比较特殊,已经要有一些公式过长写不下了),有没有可以写在其他地方的方法?
另外,如果说((b.hp_rate <= 0.15)&&(b.state_rate(1)!=0))?b.add_state(1):(a.mat-b.mdf),如果说固定伤害,是不是可以写成这样?((b.hp_rate <= 0.15)&&(b.state_rate(1)!=0))?999999:(a.mat-b.mdf),
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
 楼主| 发表于 2013-5-8 14:18:19 | 显示全部楼层
本帖最后由 救世小树 于 2013-5-8 14:25 编辑
lirn 发表于 2013-5-8 12:01
首先,很感谢你提供的方法,这让我的思路拓宽了不少,但我毕竟是脚本盲,有一些问题还是存在。
我也有几个 ...


首先感谢支持。
固定伤害的确可以直接那么写,但要注意由于属性修正,分散度和物理魔法伤害加成修正等因素的存在,伤害不一定就是你写的数值。


关于装备的判断:
#判断50号武器
a.weapons.include?($data_weapons[50]) ? 11111 : 2222
#判断50号防具
a.armors.include?($data_armors[50]) ? 11111 : 2222
同样注意由于怪物是没有武器防具的,我不敢肯定是不是会报错,总之别让怪物使用这种技能。。


然后就是关于公式太长,2L大大说的备注栏没有东西时可以在备注栏写多行是一个解决办法,
但是备注栏经常由于使用脚本而加入一些奇怪的东西(技能cd,物品颜色之类的),
我也不清楚怎样判断来去除,而且备注栏这样写,虽然可以写多行,但是每行写不了多少东西,
而且就像事件里的脚本功能一样,不能像脚本编辑器里那样随便换行(不知道我说的对不对)


所以这个时候就直接进脚本里改吧。
首先设置好伤害类型,伤害值直接0(写啥数其实无所谓)
1.png
然后就打开脚本编辑器吧,找到 Game_Battler 类大约是350行左右
  1.   def make_damage_value(user, item)
  2.     value = item.damage.eval(user, self, $game_variables)
  3.     value *= item_element_rate(user, item)
  4.     value *= pdr if item.physical?
  5.     value *= mdr if item.magical?
  6.     value *= rec if item.damage.recover?
  7.     value = apply_critical(value) if @result.critical
  8.     value = apply_variance(value, item.damage.variance)
  9.     value = apply_guard(value)
  10.     @result.make_damage(value.to_i, item)
  11.   end
复制代码
我们对这一段脚本进行修改,加上判断之类的东西。
首先找到def下的第一行 “value = item.damage.eval(user, self, $game_variables)
其实这一行脚本就是按照公式进行计算。我们在它下面,加上自己的条件语句。
首先判断是否是技能(物品使用也有公式),然后再判断 id,再写公式
这时只要注意将原来公式中的 a、b、v 换成 userself$game_variables 就行了。
然后就随便你写了,想写多长就写多长,还可以换行。
例子:
2.png
可以用 if ,特殊技能比较多时建议用 case 语句
  1. case i
  2.   when 1    # 当 i 为1时执行a
  3.     a
  4.   when 2    # 当 i 为2时执行b
  5.     b
  6.   else         #都不符合,执行c(可省略这两句)
  7.     c
  8. end          #end别漏
复制代码
详见注意事项①


注意事项:
①.如果使用add_state,请勿必加上“.to_i”进行数据类型转换处理(基本上是转成0),不然弹窗报错。(在公式栏里面编辑就不会有这个问题)
3.png
②.关于换行的姿势:(我在测试时偶然发现的)
错.png
换行时要留下一些运算符之类的,要让这个式子没有下面就不完整。(应该是这样吧。。至少我的测试结果两张图是不一样的)

对.png

点评

发的时候没看到点评,抱歉…… 顺便我不喜欢乱改原脚本,在插件脚本处用alias重定义会更好吧?  发表于 2013-12-1 10:57
实在担心换行,就在行尾加一个\,保证换行无压力  发表于 2013-12-1 10:53
↓↓感谢说明,学到新姿势了 ~ @satgo1546  发表于 2013-6-5 14:49
如果换行实在没法用“正确的换行”,可在行尾加上“\”(反斜杠),运行时会自动把下一行拖上来作为一行的。  发表于 2013-6-5 12:54
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复 支持 2 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
发表于 2013-5-8 16:10:31 | 显示全部楼层
如此详细的说明,十分感谢,又有几个补充问题。

1:((b.hp_rate <= 0.15)&&(b.state?(44)!=0))?(a.mat-b.mdf):(a.mat-b.mdf)&&add_state(45)

这个公式是根据你那公式修改的,这种复数的条件附加状态是不是这样写,如果是,他们之间是不是有执行的先后顺序(顺序其实这个问题是跟我另外一个脚本有关)?

2:如果是复数判断条件呢(虽然会因为潜在可能的麻烦不一定会用到)?,比如说,装备了火之心,火系技能伤害为1.5,装备了冰之心之后伤害系数为0.5,不装备则为正常的1


3:关于其他的伤害呢?比如说我有一个技能是造成MP伤害,当MP低于一定数值时则额外造成HP伤害。
回复 支持 0 反对 1

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
 楼主| 发表于 2013-5-8 20:20:20 | 显示全部楼层
本帖最后由 救世小树 于 2013-5-8 20:21 编辑
lirn 发表于 2013-5-8 16:10
如此详细的说明,十分感谢,又有几个补充问题。

1:((b.hp_rate


关于①:
你将 ((b.hp_rate <= 0.15)&&(b.state?(44)!=0)) 作为判断条件,
这里的 b.state?(44) 含义是判断目标是否处于44号状态, 只需要((b.hp_rate <= 0.15)&&(b.state?(44))即可,
若是按照我的例1获取对该状态的抗性,是用 b.state_rate(44),也就是 ((b.hp_rate <= 0.15)&&(b.state_rate(44)!=0))
然后是问号之后的两个式子,冒号之前的式子表示前面的两个条件都满足,
就是目标HP低于15%,且(处于44号状态)(对44号状态抗性不为零),是(a.mat-b.mdf),没问题
冒号之后的式子表示两个条件有一个不满足或都不满足:
(a.mat-b.mdf)&&add_state(45)  
这么写是会出问题的:“&&”这个东西表示“”,用它将两个式子连起来,那么最后它的返回值就一定是“真”或“假”
而我们这里写的是伤害公式,必须让它的结果是一个数字。
我猜你这里是想既造成(a.mat-b.mdf)的伤害,又附加上45号状态,但是公式里写的最后必须能算出数来。
add_state(state_id) 这个方法,是给一个战斗者加上状态用的,在脚本 Game_Battler 第80行定义,没有返回值。
也就是说,如果在公式中加入 add_state(state_id) ,是没有办法算出它的值的。
解决方法有两个:
1.修改脚本,在 Game_Battler 中,给add_state()方法(80行左右)加上返回值“0”(零)就是在 if...end 之后加一行 return 0
  1. def add_state(state_id)
  2.     if state_addable?(state_id)
  3.       add_new_state(state_id) unless state?(state_id)
  4.       reset_state_counts(state_id)
  5.       @result.added_states.push(state_id).uniq!
  6.     end
  7.     return 0
  8.   end
复制代码
然后公式可以写成
((b.hp_rate <= 0.15)&&(b.state_rate(44)!=0))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45))
((b.hp_rate <= 0.15)&&b.state?(44))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45))
2.进行类型转换add_state(45).to_i ,结果应该也是零,和上面一样加上去就行
((b.hp_rate <= 0.15)&&(b.state_rate(44)!=0))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45).to_i)
((b.hp_rate <= 0.15)&&b.state?(44))?(a.mat-b.mdf):((a.mat-b.mdf)+add_state(45).to_i)
最后还有一个注意事项,公式计算是在属性修正,伤害修正,物理魔法修正等等之前的,
如果你的45号状态包含了属性弱化,物理魔法弱化等限制,最终的伤害就会将它们计算在内(减防的限制不算,因为公式里用过了。)


关于②:
复数条件不能很好地写在一行内,你需要打开脚本编辑器,找到6L所说的地方,使用 if或者case 语句进行判断吧,这里提供一个范例:
按照下脚本,只需要在公式栏写上正常的公式即可,当然特殊的公式也能写。
  1.   def make_damage_value(user, item)
  2.     value = item.damage.eval(user, self, $game_variables)
  3. #---------------------------------------------------------------------------------
  4. #这里写一些比较长的公式
  5. #---------------------------------------------------------------------------------
  6.     if item.is_a?(RPG::Skill)
  7.       case item.id
  8.       when 142
  9.         value = (user.mat - self.mdf) +
  10.                 10086 + (self.hp_rate < 0.3 ? 10086 : 0)
  11.       when 144
  12.         value = ((self.hp_rate <= 0.15) && (self.state_rate(1)!=0)) ?
  13.         self.add_state(1).to_i :
  14.         (user.mat-self.mdf)
  15.       end
  16.     end
  17. #-----------------------------------------------------------------------------------
  18. #这里写大类技能装备修正
  19. #---------------------------------------------------------------------------------
  20.     if item.is_a?(RPG::Skill)
  21.       case item.id
  22.       when 122,123,124,125,126,127,128#假设这些是所谓“火系魔法”
  23.         if user.armors.include?($data_armors[50])#火之心50号
  24.           value *= 1.5
  25.         end
  26.         if user.armors.include?($data_armors[51])#冰之心51号
  27.           value *= 0.5
  28.         end
  29.       when 233,234,235,236,237            #假设这些是对应的冰系技能
  30.         if user.armors.include?($data_armors[50])#火之心50号
  31.           value *= 0.5
  32.         end
  33.         if user.armors.include?($data_armors[51])#冰之心51号
  34.           value *= 1.5
  35.         end
  36.       when 333,334,335
  37.         if user.armors.include?($data_armors[55])
  38.            value *= 1.5
  39.         end
  40.       when 999

  41.       end
  42.     end
  43. #----------------------------------------------------------------------------------------
  44.     value *= item_element_rate(user, item)
  45.     value *= pdr if item.physical?
  46.     value *= mdr if item.magical?
  47.     value *= rec if item.damage.recover?
  48.     value = apply_critical(value) if @result.critical
  49.     value = apply_variance(value, item.damage.variance)
  50.     value = apply_guard(value)
  51.     @result.make_damage(value.to_i, item)
  52.   end
复制代码


③.这个就不仅仅是修一下公式就能见效的了。
其实这个东西我也一直在想。我是想做一个魔法盾的状态,有这个状态,伤害就按比例转到mp上,
mp不足就计算剩余的mp能承受多少伤害并从总伤害里扣除,然后一直不懂战斗提示信息该怎么搞。。
比起大神来我还是差得远的,至于你这里的,我可以耍耍小聪明修改一些地方来实现这个效果。。
(很坑的方法)以140号技能为例
脚本Game_ActionResult里如图所示70行左右,加些东西($开头的表示全局变量,随意命名,但注意$必须是英文输入法状态下输入的半角字符。)
  1.     if item.is_a?(RPG::Skill) && item.id == 140
  2.       $法力燃烧hp = [@mp_damage - @battler.mp,0].max
  3.     else
  4.       $法力燃烧hp = 0
  5.     end
复制代码
1.png

再往下,找到140行左右,加些东西
  1.     if $法力燃烧hp != 0
  2.       fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
  3.       fmt = sprintf(fmt,  @battler.name, Vocab::mp, @mp_damage)
  4.       fmt += "\n" + (@battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage)
  5.       re=sprintf(fmt, @battler.name, $法力燃烧hp)
  6.       $法力燃烧hp = 0
  7.       return re
  8.     end
复制代码
2.png
再找到 Game_Battler 图示位置,添加黄色高亮
  1. self.hp -= $法力燃烧hp
复制代码
2.5.png
再找到 Window_BattleLog 图示位置,添加黄色高亮
  1. return if item.is_a?(RPG::Skill) && item.id == 140
复制代码
3.png
  1.     if item.is_a?(RPG::Skill) && item.id == 140
  2.       add_text(target.result.mp_damage_text)
  3.       wait
  4.       return
  5.     end
复制代码
4.png
具体行数可能会有部分差异。

评分

参与人数 3星屑 +412 +1 收起 理由
zyzzyzzyzzyz + 1 精品文章
lirn + 12 上限了
feizhaodan + 400 好详细0 0

查看全部评分

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
发表于 2013-5-11 21:57:55 | 显示全部楼层
本帖最后由 lirn 于 2013-5-12 09:41 编辑

对了,你这个能做到几率发动或者几率附加状态吗?

1:技能一定几率会附带的冰冻,如果是非BOSS,会是行动限制,如果是BOSS,几率附带另一状态。

2:比如说像梦幻西游天庭的五雷轰顶,成功则对扣减目标25%的当前血量,不成功则造成相当低的伤害。也就是成功的公式与不成功的公式不一致。

3:属性抗性是element_rate吧,那么可以不可以写成,(element_rate(10) >=100)?(a.mat-b.mdf):add_state(45).to_i + variables (6) +=1
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
582
在线时间
917 小时
注册时间
2013-3-13
帖子
557
发表于 2013-5-11 23:53:32 | 显示全部楼层
楼主的例子用纯事件就可以实现,好比我在我的游戏中设置的“感电状态”,搭配横版“0回合解除”,可以实现很多奇思妙想。
【例】具体步骤如下:
1、设置100号状态名称为:伤害判别。该状态战斗后解除、无法抵抗、能被1号状态解除、对行动无任何限制。
2、在横版设定中将上述100号状态设定:"0回合解除",就是附加该状态后轮到下一个角色行动时即解除该状态。
3、设定100号技能附加100号状态。
4、将100号状态的名称改为空白,"无POP”
5、设定必杀几率,假设是10%,那么
    100号技能执行公共事件:
    如果敌人1附加伤害判别状态
        变量500号在1--100之间取随机值
        当变量500号的值≤10时
        敌人1附加1号状态
    如果敌人2附加伤害判别状态
        变量500号在1--100之间取随机值
        当变量500号的值≤10时
        敌人2附加1号状态
    如果敌人3附加伤害判别状态
        变量500号在1--100之间取随机值
        当变量500号的值≤10时
        敌人3附加1号状态
    。。。。。。

如果要设定BOSS免疫秒杀技能,就再加一个状态设定。
接上面的例子:
1、设定200号状态名称为“秒杀”。该状态受怪物抗性影响,可以被抵抗。BOSS对此状态的抗性为F。即免疫。
2、设定100号技能再附加200号状态。
3、100号技能执行公共事件:
    如果敌人1附加伤害判别状态
        如果敌人1附加秒杀状态
        敌人1附加1号状态
    如果敌人2附加伤害判别状态
        如果敌人1附加秒杀状态
        敌人2附加1号状态
    如果敌人3附加伤害判别状态
        如果敌人3附加秒杀状态
        敌人3附加1号状态
    。。。。。。

        

点评

巨巨~你太厉害了  发表于 2013-9-22 00:04
条条道路通罗马嘛。事件做起来略麻烦但是不容易出错。  发表于 2013-5-13 19:00
毕竟,太麻烦了。  发表于 2013-5-12 09:26
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 23:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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