找回密码
 点一下
查看: 8821|回复: 64

纯数据编辑器版通用致命一击[作废]

[复制链接]
发表于 2010-12-23 14:44:01 | 显示全部楼层 |阅读模式
本贴作废,因为找到了更好的实现方案:
http://bbs.islga.org/read-htm-tid-51988.html


这个是我打算放进GAx3 Mod里的其中一个通用被动技能。

加给任何能攻击的单位都有效。拥有该行为的单位攻击时有30%几率致命一击。另外如果某次攻击是致命一击,那么该次攻击就算造成多次伤害也同样是致命一击。


其实上次我本来是想搞个活动,让大家来比赛谁能做出通用的纯数据编辑器版致命一击,不过结果那次活动因为种种原因不了了之了。




想要修改这个被动技能的几率,直接修改Apply Crit 30% Chance这个效果的几率即可。

致命一击影响的伤害类型可以在Crit 100%这个行为里改,目前是设为能影响近战、远程、溅射类型,无法影响法术类型。因此像虚光舰这种不会造成致命一击,不过可以修改。


以下是演示。可以看到当飞弹塔造成致命一击的时候必定是一下跳两个双倍数字,因为飞弹塔每次攻击是造成两次伤害的(有两个飞弹嘛)。


Screenshot2010-12-23 14_33_05.jpg


   Screenshot2010-12-23 14_31_24.jpg


实现过程及其简单,但是其原理在war3里是无法找到先例的。大家看了我这个演示的实现方法以后可能会觉得奇怪,因为“看上去有漏洞啊” 。

大家看了这个演示后可以说明一下自己理解的实现原理。讲对而且讲得完整的同学有加分哦。




顺便,由于这个致命一击是纯数据版的,所以无法用于需要用触发器动态控制致命几率的场合。因此GAx3库中还会加入一个触发版的可动态控制几率的致命一击。并将采用完全不同的原理(其实本演示的原理如果用到触发器里是会死人的)。

而那个触发器版的致命一击实现原理才是我要讲解的重头,不过实在没什么时间最近可能要拖到春节后。

30% Crit Strike.SC2Map

16 KB, 下载次数: 55

 楼主| 发表于 2010-12-23 14:47:01 | 显示全部楼层
之所以要在GAx3库里放两个版本是因为一个是纯数据版的,易于修改和移植。另一个是触发版的,易于操控几率。

而且两个致命一击的实现方式分别包含了SC2里两个大系统的一些知识。
回复

使用道具 举报

发表于 2010-12-23 15:08:14 | 显示全部楼层
施法单位在攻击时自己加CritBuff(30%几率,无限循环)。
加上的这个CritBuff也只有在攻击时才起效,不攻击就被移除了。
利用CasterIsAttacking验证器确定了攻击时这个时间点。

有个疑问为什么要每次加这个CritBuff前都删除原先的呢?为了避免CreatePersistent效果时会一直暴击吗?

我现在地图中是这样做的,稍微有些区别。
我的CritDamage是一直存在在Unit上的,它有两个Disable验证器:
1 在施法中
2 我自定义的一个标示行为存在

关于自定义的这个标示 的添加和删除
做了一套相关的Effeft架构,添加的几率和效果产生后的删除都做了一些处理。
所有的可爆击技能的Effect都通过这个架构来制作。
回复

使用道具 举报

 楼主| 发表于 2010-12-23 15:17:34 | 显示全部楼层
e,虽然是无限循环,但是为什么这么循环才是问题的关键。

而且我并不是每次附加前删除,而是每次都删除。这是不同的哦
回复

使用道具 举报

发表于 2010-12-23 15:28:27 | 显示全部楼层

回 3楼(Renee) 的帖子

这样的死循环一般目的是为了避免某些情况发现,而用一个极小的循环效果避免这种情况发生。

CasterIsAttacking的验证器是验证技能序列中是否有Attack 就认为是在攻击了,因此一办单位每次攻击开始后实际这个验证器就一直有效的了,如果不每次删除器CritBuff,那么就会无限爆击下去的了~

循环的目的应该是为了是删除,下一攻击时再来加上~当然是有几率的加上了~

我做的那个方式是会主动删除一次爆击的标志位- -# 避免无限暴击
Renee的则是用死循环来确保不会无限爆击下去~只是猜想~隨便說說~
回复

使用道具 举报

发表于 2010-12-23 15:48:53 | 显示全部楼层
有个疑问 这样的删除可能会使暴击率小于30%~
因为循环0.0625是有间隔的 虽然间隔非常小~但在这个间隔中可能之前的CritBuff已经被删除,之后的又没能加上,同时攻击又打出来了。
感觉上不能保证每次独立的攻击都会有这个添加的过程。
回复

使用道具 举报

发表于 2010-12-23 16:51:19 | 显示全部楼层
这就是传说中的看上去会有BUG。。。

但是根据头目的说法。 
单位命令的最小间隔就是0.0XX。每次执行都是根据这个周期的。

所以,你攻击这次之后,不可能存在0.0XXX之内还会再有一次攻击的情况。
肯定是0.0XX的倍数。嗯嗯。
回复

使用道具 举报

发表于 2010-12-23 16:55:09 | 显示全部楼层

回 6楼(喂喂) 的帖子

“就是说,你攻击这次之后,不可能存在0.0XXX之内还会再有一次攻击的情况。”
这个Buff的运作方式;攻击的攻击流程;两者是互相独立的,可以视为两个独立的线程。同时的情况是可能的。

没测试Renee做的,如果可能的话可以按照以下的条件测试一下:
做一个武器频率很高的(0.0625)的武器,这个Buff的添加几率修正成100%,是否真的能保证是100%呢。
回复

使用道具 举报

发表于 2010-12-23 16:56:58 | 显示全部楼层
寒心你都给说了我们咋发言啊~~
回复

使用道具 举报

发表于 2010-12-23 17:02:54 | 显示全部楼层

回 8楼(woaibusi) 的帖子

可冤枉了- -#
我只是猜测嘛~不一定正确~Renee还没解答呢~
回复

使用道具 举报

发表于 2010-12-23 17:05:10 | 显示全部楼层

回 7楼(chilled) 的帖子

事实上我是没有看过。根据你在帖子的说法总结的而已。
个人认为头目已经测试过你说的0.0xx间隔的武器了。。不然她是不会说“看起来好像有BUG”这样的话的。嗯。
回复

使用道具 举报

发表于 2010-12-23 18:23:13 | 显示全部楼层
头目的演示我给粘贴出来
[codes=xml]
行为
&#160;&#160;&#160;&#160;<CBehaviorBuff id="CritChance">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoFlags index="Hidden" value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<DisableValidatorArray value="CasterIsAttacking"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Period value="0.0625"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InitialEffect value="ApplyCritSet"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<PeriodicEffect value="ApplyCritSet"/>
&#160;&#160;&#160;&#160;</CBehaviorBuff>
&#160;&#160;&#160;&#160;<CBehaviorBuff id="CritDamage">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoFlags index="Hidden" value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EditorCategories value="AbilityorEffectType:Units,Race:Neutral"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Modification>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<ModifyFlags index="HideChangeUI" value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<DamageDealtFraction index="Melee" value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<DamageDealtFraction index="Ranged" value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<DamageDealtFraction index="Splash" value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Modification>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RemoveValidatorArray value="CasterIsAttacking"/>
&#160;&#160;&#160;&#160;</CBehaviorBuff>
[/codes]
[codes=xml]
效果
&#160;&#160;&#160;&#160;<CEffectApplyBehavior id="ChanceApplyCrit">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Chance value="0.3"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Behavior value="CritDamage"/>
&#160;&#160;&#160;&#160;</CEffectApplyBehavior>
&#160;&#160;&#160;&#160;<CEffectSet id="ApplyCritSet">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EffectArray value="RemoveCrit"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EffectArray value="ChanceApplyCrit"/>
&#160;&#160;&#160;&#160;</CEffectSet>
&#160;&#160;&#160;&#160;<CEffectRemoveBehavior id="RemoveCrit">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<BehaviorLink value="CritDamage"/>
&#160;&#160;&#160;&#160;</CEffectRemoveBehavior>
[/codes]


现在我也不清楚是否会出现chilled兄猜测的bug,SC2不能运行呀,没有办法。
可是如果把效果稍微修改下跟武器挂钩效果会如何呢?以巡洋舰的对地武器为例,修改为
[codes=xml]
&#160;&#160;&#160;&#160;<CWeaponLegacy id="ATSLaserBattery">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Effect value="ApplyCritSet"/>
&#160;&#160;&#160;&#160;</CWeaponLegacy>
[/codes]
效果ApplyCritSet修改为
[codes=xml]
&#160;&#160;&#160;&#160;<CEffectSet id="ApplyCritSet">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EffectArray value="ATSLaserBatteryLM"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EffectArray value="ChanceApplyCrit"/>
&#160;&#160;&#160;&#160;</CEffectSet>
[/codes]
周期性行为CritChance就不要给单位了,不知道这样是否可行。
如果这个方法可行的话,很明显的,通用性比起头目的方案来差了不少呀。
回复

使用道具 举报

 楼主| 发表于 2010-12-23 18:33:05 | 显示全部楼层
继续加油吧大家~~我可不要什么“大概、也许”之类的结论~~
回复

使用道具 举报

发表于 2010-12-23 19:28:22 | 显示全部楼层
Behavior:
【Crit 30% Chance】永久时间,攻击命令不在队列第一位时,失效;每0.0625秒执行一次【Apply Crit Set】
【Crit 100%】永久时间,攻击命令不在队列第一位时,移除;增加1倍伤害(不包含魔法攻击)

Effect:
【Apply Crit 30% Chance】0.3的几率给自己添加【Crit 100%】Buff
【Remove Crit】移除【Crit 100%】
【Apply Crit Set】先【Remove Crit】,后【Apply Crit 30% Chance】

暴击技能就是行为【Crit 30% Chance】

该行为每个周期执行一次【Apply Crit Set】效果,也就是说,每个0.0625秒,该单位都有0.3的几率附带暴击Buff,0.7的几率则没有该Buff。可以理解成薛定谔的猫,每次攻击就相当于打开了一次黑匣子,看一看猫的状态。

其特点是并非在攻击的瞬间进行暴击判定,而是只要攻击命令在命令队列第一位,就在无时无刻的进行暴击判定。这正如薛定谔的猫,猫一直存在,而并非是攻击的那一瞬间它才存在,只是它死了没有你犹未可知。

由于这个暴击系统与“攻击间隔时机”毫无关系,所以不存在“攻击前删除Buff”的说法,这个暴击系统如果不执行【Remove Crit】,那也不会是100%暴击,而是视情况有所下降。而为什么这个0.0625秒和攻击的那一瞬间不会发生进程冲突,我不明白这个时间机制,但是可以肯定的是,Buff携带的瞬间,或是消失的瞬间,以及攻击的瞬间,这一系列瞬间的时间间隔都是0,它们是不可能重叠的(好吧,其实我不知道“瞬间”这种东西会不会重叠,重叠了又会怎样- -)





附上修改的概率测试,机枪兵打大和(机枪兵的攻击间隔是0.0625):
1.攻击伤害
2.机枪兵造成的3点伤害次数
3.机枪兵造成的9点伤害次数
4.暴击率

30% Crit Strike.SC2Map

20 KB, 下载次数: 6

于是为了避免麻烦,干脆打不死得了

回复

使用道具 举报

 楼主| 发表于 2010-12-23 19:42:14 | 显示全部楼层
思路挺新的。不过猫锅的这个测试地图,其实无法做到永远0.0625秒攻击间隔。

想要达到永远是0.0625秒攻击间隔,要把damage point,backswing,random delay 全部改为0。主要是random delay,其他两个倒是不要紧。

不过其实不是永远0.0625也不要紧啦。猫锅的概率测试方式没有问题。


上面某楼说的没错,我确实在0.0625秒的极限攻击速度环境下把几率改为100%测试过....
回复

使用道具 举报

发表于 2010-12-23 19:42:57 | 显示全部楼层
我才发现我对RemoveValidatorArray 和DisableValidatorArray 的理解完全错了,正好是相反的...

按照猫锅兄的说法,头目演示中的方法“并非在攻击的瞬间进行暴击判定”,而是只要攻击命令在命令队列第一位,就不断的执行ApplyCritSet,从而将是否暴击划分为一个个的时段,会造成暴击的时段占总时段的30%,这样不管攻击间隔大于、小于或者等于0.0625,暴击率都不受影响。

即使这个周期是10秒或者以上,在一个大时间段来看,暴击率还是30%,不过周期越短,暴击的分布越分散吧。
回复

使用道具 举报

 楼主| 发表于 2010-12-23 19:49:21 | 显示全部楼层
不过~~这里还是要说一下~~是否暴击~~SC2确实是按照每次攻击判断的~~

那么~~请大家继续发言~~
回复

使用道具 举报

发表于 2010-12-23 19:52:12 | 显示全部楼层
又猜错了么...
回复

使用道具 举报

发表于 2010-12-23 19:59:20 | 显示全部楼层
可每次攻击的瞬间,必然处于某个0.0625秒之间,这个0.0625秒在诞生的那一刻就决定了是否暴击,直到这个0.0625秒结束之前,这个结果都不会变,攻击的瞬间不过是执行了这个0.0625秒已经决定好了的结果
回复

使用道具 举报

 楼主| 发表于 2010-12-23 20:00:53 | 显示全部楼层
说起来那个概率测试地图最好还是把那啥,fatal伤害过滤掉。因为杀死敌人的那一击造成的伤害是敌人的当前hp,所以不能得知它是否是暴击的。

另外么,也不需要每次伤害都输出百分比,因为以0.0625s的频率显示并计算百分比,实在太卡了。

不如就只记录数据,然后等按下esc的时候才计算并且输出比较好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-4 11:07 , Processed in 0.317951 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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