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

Project1

 找回密码
 注册会员
搜索
查看: 3077|回复: 31

[交流讨论] 伤害公式教程/交流讨论贴

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
发表于 2017-7-17 17:44:13 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 300英雄 于 2017-7-19 10:45 编辑

VX ACE教程帖求加精。
理由:学问大。相对新手能够从这里解决很多问题
开始教学
放上脚本
RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2. def make_damage_value(user, item)
  3.     value = item.damage.eval(user, self, $game_variables)
  4.     value *= item_element_rate(user, item)
  5.     value *= pdr if item.physical?
  6.     value *= mdr if item.magical?
  7.     value *= rec if item.damage.recover?
  8.     value = apply_critical(value) if @result.critical
  9.     value = apply_variance(value, item.damage.variance)
  10.     value = apply_guard(value)
  11.  
  12. value = value.to_i
  13. self.hp = self.hp.to_i
  14. user.hp = user.hp.to_i
  15.     @result.make_damage(value.to_i, item)
  16.   end
  17. end

一切东西写在value = value.to_i前面虽然@result.make_damage(value.to_i, item)也行,但是我们有时候计算是小数点很多


基础判定
if X.属性 >= Y

end
X:user/self/$game_actors[ID].....
属性:数据库里面那些atk.mat.def.mdf.agi.luk.hp.mp.tp.mhp.mmp
Y就是一个公式,这个脑洞就很大了。各种各样的公式均可写入

if X.state?(ID)

end
X同上
ID:数据库状态的ID
if X.weapons.include?($data_weapons[ID])  武器

end

if X.armors.include?($data_armors[ID]) 防具

end

if X.skills.include?($data_skills[ID]) 技能

end
X和ID均同上对应即可

ID判定

if X.ID == Y

end
X同上
Y:那个人的ID号码(埃里克就是1,史莱姆也是1,默认情况啊)

if $game_variables[ID] >= Y

end
ID就是变量的ID号码。脚本里面可是无限呢 $233,$RM都可以算变量呢
Y:一个公式。自己脑洞了

  if $game_switches[ID] == true

end

ID:开关ID
== 切记不要写成=。==是判定用的。如果是=那么是赋值,这句话就变成了开关变成这样的状态
true : true是开启,false是关闭

判定算结束了。看看还有什么我会加入

效果类
X.hp += Y
X同user/self/$game_actors[ID].....

value += X
伤害加上 X

X.add_state(ID)
X同user/self/$game_actors[ID].....

$game_variables[ID] += X
变量ID加上X

rand(X)
0-X


               if item.is_a?(RPG::Skill)
             case Z
             when X

end
end

case Z
Z可以为item.id style.id element.id
对应:技能ID,技能方式ID  元素ID

附加品
text = sprintf("%s",1) 设定TXET内容 %s要一个",和内容"   例子:text = sprintf("%sA%sB%sC",1,2,3),结果是1A2B3C分别对应
SceneManager.scene.instance_variable_get(:@log_window).add_text(text) 加入TXT内容的战斗日志(支持颜色不过要\\C,双斜杠C)
self.create_popup(text, "风")(如果你用了Yanfly Engine Ace - Ace Battle Engine 这个东西) text内容就是上面 “风"是Yanfly Engine Ace - Ace Battle Engine系统里面的调用方式(    POPUP_SETTINGS ={   里面)



更新到这里,还有别的可以补充啊,我会更新多种例子以后
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我

Lv3.寻梦者

火烧大神

梦石
0
星屑
1803
在线时间
940 小时
注册时间
2012-1-1
帖子
1777
发表于 2017-7-17 22:33:31 | 显示全部楼层
感觉有点过于复杂,VA开始就自带伤害计算公式,可以在数据库直接设置而不需要修改脚本
数值策划又是另外一门学问了

最后还是支持一下,感谢作者分享

点评

感谢光顾,我就是把比较基础的拿过来分享一下,最近有人问吸血装备的问题,麻烦点的效果,数据库做不到了,就很难。所以放出这个给他们看看。  发表于 2017-7-18 10:38

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

使用道具 举报

Lv2.观梦者

梦石
0
星屑
310
在线时间
44 小时
注册时间
2017-7-8
帖子
28
发表于 2017-7-18 00:28:52 | 显示全部楼层
你确定这是新手教程?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
发表于 2017-7-18 06:31:41 | 显示全部楼层
本帖最后由 jhhuang 于 2017-7-18 08:21 编辑

有漏洞吧- -
X.hp += Y?
X.add_state(ID)?
你确定这些东西能乱写进去make_damage_value方法或计算公式?
你确定Game_Action类不会带来的影响?
如果考虑到敌人AI和玩家队伍有自动战斗的人物,在评价行动的价值时会进行测试所有技能,
如果测试=号操作和add_state之类的方法,在测试过程中就会进行实际执行,后果可想而知。
要用这样的方法,估计就必须添加测试标志之类的。例如make_damage_value(user, item, btest = false)
又或者写进use_item方法里面。

效果类水深,请谨慎。
教学贴,最后支持一下。

点评

话说新来的人“是找不到其他的东西的吧”我这边介绍的东西他们能看懂啊。然后他们不懂脚本应该不会去乱找。  发表于 2017-7-18 10:49
主要我X大概介绍了一些东西,他们应该不会去找其他东西  发表于 2017-7-18 10:36
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1294
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

发表于 2017-7-18 08:40:43 | 显示全部楼层
其实坛子里有更酷更详细的link

点评

不考虑评价测试,是什么意思啊。我觉得达到目标了。他要什么目标我给了他什么讲解了。我的错???  发表于 2017-7-18 10:29
那我做错了????  发表于 2017-7-18 10:28
= =b 我也是这样的还以为说我呢。。  发表于 2017-7-18 09:02
好像误会了,我说1楼楼主  发表于 2017-7-18 09:01
因为感觉应该是这样就懒得开工程测试啦哈哈主要是懒嘛。。  发表于 2017-7-18 08:58
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
 楼主| 发表于 2017-7-18 10:48:06 | 显示全部楼层
本帖最后由 300英雄 于 2017-7-18 19:39 编辑

下面介绍几种装备
1.吸血装备(攻击者附带ID为105的防具,吸血100点血量)
   if user.armors.include?($data_armors[105]) 判断使用者是否拥有105号ID的防具
       if self.enemy? 判断目标是否为敌人
user.hp += 100 攻击者的血量加上100
end
     end
思路:先判定是否拥有该防具——>判断是否为敌人(考虑到回血的技能 目标是角色而不是敌人)——>攻击者血量增加100。通过回血来表示从目标那里得到100血量。实际上就是扣血+回血233



2.暴伤增幅状态(2号状态持有增加50%暴击伤害)
if user.state?(2)判断使用者是否拥有2号ID的防具
       if self.enemy? 判断目标是否为敌人 (可加可不加,加了那么只有角色持有才会暴击增伤。不加角色敌人均有效)
if @result.critical 判断是否暴击了
value *= 1.5 或者 value += value * 0.5
end
end
end

思路——>判断攻击者是否存在2号状态——>判断是否为敌人(随意,加不加无所谓)——>判定是否暴击>>>>>>>成功了就是伤害增加50%

3.反伤的武器(ID72武器,反伤全额伤害好了)
if self.weapons.include?($data_weapons[72]) 判断目标是否拥有72号武器
user.hp -= value   攻击者减少血量伤害的数值
end
思路——>判定目标是否拥有武器72号——>攻击者血量减少"一个公式(不管你怎么计算,结果要为一个数值就行)"的数值。>>>>>>成功就达到要求了!!!!

特别说明
这里的所有条件达到就可以生效。不管是使用技能还是道具,哪怕不做出任何行为(攻击者-装备,目标-敌人。似乎必须要弄一个角色使用的,要攻击敌人的技能/道具,不然好像你不做任何行为达不到self.enemy?,攻击者装备倒是到达了),却符合了要求都可触发。如果仅仅是技能类生效,每一个判定最上面的if额外写一条         if item.is_a?(RPG::Skill) skill是技能,物品生效改为item即可

点评

再说我那个游戏。用这种方式制作被动技能还没出过问题呢。持有技能——回血/增伤什么的能有什么问题。只要达到要求就触发。  发表于 2017-7-18 16:14
有心发出被人喷,再说我这样足够了达到他们的要求了。大大们难道还有更简单的方法??两位估计比我用的方法更深奥。然后新手都看不懂  发表于 2017-7-18 16:13
其实列出的这些效果我那楼的帖子都能做到还不需要修改原脚本= =b  发表于 2017-7-18 14:33
例:测试攻击者攻击敌人,你的判定是“攻击是否装备防具,目标是都敌人”。2个条件都满足,然后不就执行user.hp += 100了吗  发表于 2017-7-18 12:15
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
发表于 2017-7-18 11:44:23 | 显示全部楼层
300英雄 发表于 2017-7-18 10:48
下面介绍几种装备
1.吸血装备(攻击者附带ID为105的防具,吸血100点血量)
   if user.armors.include?($da ...

刚回来,评价测试就是指AI。
我没记错的话,敌人和自动战斗的角色都有AI,自动使用价值最高的技能,
而这个价值就是通过对所有行动执行make_damage_value返回的。
可以全域搜索make_damage_value自己研究都有什么地方会用到这个方法。

如果测试中执行user.hp += 100,那么user的生命值就会+100,哪怕实际上你没有使用这个技能。

点评

我说了只要装备,装备上了,目标是敌人就能够触发。你和我说攻击和技能是什么鬼。我难道是说这样不能放技能??大大别乱说啊。我说很清楚了  发表于 2017-7-18 16:10
然后你一直说什么行为评价太过于深奥,再说我没说不能使用技能和攻击,还有对于一般人来说这样足够了,你们这些大神个个比我强  发表于 2017-7-18 16:08
我说的问题跟你说的判定没有关系,我是说你遇到需要进行行为评价的情况,你加了判定就不能使用技能了吗?不能攻击了吗?只要你能,就会测试  发表于 2017-7-18 12:11
我加了判定兄弟。这个装备的话,无论什么情况只要攻击者装了装备然后目标为敌人就行。物品目测都可以。只要达到这个条件  发表于 2017-7-18 12:02
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
 楼主| 发表于 2017-7-18 16:22:24 | 显示全部楼层
VA计算公式赞那个帖子,东西太多也感觉很乱。而且很多判定也并没有。我列出整合了又怎么了。你们也是那边写的啊。我又举了例子给他们讲解难道又错了???@VIPArcher  VIP大大在的话帮忙说一下吧。现在感觉我发这帖子明显我的错一样。我比较希望稳那种问题的人,能通过这个帖子解决自己的问题。再说什么AI什么的有必要那么深奥讲解?我说了什么判定什么效果,你只要达到他的要求他自动会触发了
刚回来,评价测试就是指AI。
我没记错的话,敌人和自动战斗的角色都有AI,自动使用价值最高的技能,
而这个价值就是通过对所有行动执行make_damage_value返回的。
可以全域搜索make_damage_value自己研究都有什么地方会用到这个方法。

如果测试中执行user.hp += 100,那么user的生命值就会+100,哪怕实际上你没有使用这个技能。
只要达到装备了那个ID的装备,目标为敌人就可以触发。就算你用了观望这种根本没有效果的东西,话说一个user一个self肯定要弄一个双向单位(一个角色和一个敌人/一个角色)才能触发。
正常玩的话你对自己使用user和self均为自己肯定不会触发,但是你用了对敌人技能,不管有没有伤害均可触发。只要达到那个要求。所以大大们不要喷了我也是好心发出这个内容的,按照VA提问贴——不懂脚本的人提出的要求。我也做到他们想要的结果。我解释过——达到要求均可触发。哪怕实际上你没有使用这个技能(装备ID加目标为敌人根本就没说技能的要求)

点评

然后如果真的这样的话,好像一定要用技能/物品去弄敌人才能触发回血100.假命题请举出来,满足装备和目标。但他不是技能/物品  发表于 2017-7-18 19:27
风铃我只是说了,装备确定和目标确定,他撤了技能出来。全部条件达到,你不放技能当然能够触发。不过好像这种类型必须要角色——>敌人  发表于 2017-7-18 19:26
嘛嘛 大热的天两位都别动肝火 楼主我支持你 不只是帮助别人的这种热心  发表于 2017-7-18 17:59
搞的VA公式那帖子不长一样。再说我那边达到条件就能触发为什么要拉上技能这个东西。我没说技能啊。装备有了目标确定了。有说技能???  发表于 2017-7-18 17:42
指出技术上的问题怎么变成喷了- -另外帖子太长看着累我就不讨论下去了,你要是有兴趣可以去研究下行动处理的类Game_Action。  发表于 2017-7-18 16:50
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
帖子
813

开拓者

发表于 2017-7-19 10:19:20 | 显示全部楼层
标题改成《伤害公式讨论帖》好点,因为很少有人会说自己完全正确,作为教程的话应该非常详尽并一点不错才行,毕竟教程是新手看的,新手根本不知道哪里会有问题。
我估计,新手连self都不知道是什么意思吧……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
 楼主| 发表于 2017-7-19 10:25:22 | 显示全部楼层
可以的。不过我还是比较倾向这个帖子是教新手们的
其实我那边红字什么都标注好了。他们应该会对应看的,user/self我说明过了是攻击者/目标
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-28 23:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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