找回密码
 点一下
查看: 1263|回复: 13

关于“单位生命/魔法值变化”事件的一个奇怪问题。(附带一个工程升级问题)

[复制链接]
发表于 2009-11-8 17:30:26 | 显示全部楼层 |阅读模式
想做一个百分比耗魔的技能,为了让技能正确显示魔法不足的状态,于是利用工程升级让技能在真/伪之间切换。
事件用的就是单位魔法值变化,小于指定值时切换到耗魔10000的伪技能,大于或等于时切换会0耗魔的正常技能。
(其实以上都不是重点,只是说明问题背景。因为变化事件在注册时就已经固定常量,要实现动态监测百分比估计还得利用计时器不断创建/销毁触发才行)
结果在测试的时候发现两个奇怪的问题

问题一:
事件 - 当单位魔法值小于X%
动作 - 设置单位工程升级等级为A
(背景:指定单位发动技能效果,设置魔法值减少,减少值=最大魔法值*19%)
测试单位为5400魔的山丘
当其还剩1100+~2100+之间魔法值的时候,如果使用受到工程升级影响的技能则直接0魔,而非按预期那样-19%(山丘身上3个技能,锤子、雷霆、践踏。其中锤子和雷霆是工程升级相关技能,践踏不是。当在临界值使用践踏的时候,魔法值正常减少,而另外两个则直接归0)

猜测可能是因为发动技能效果瞬间用触发工程升级,切换了技能的数据导致wc3的耗魔判定由0变为10000从而直接使得单位魔法值归零

问题二:
事件 - 当单位魔法值大于或等于X%
动作 - 设置单位工程升级等级为B

很奇怪的是,这个触发在开始时是正常工作的,但是经过反复的大于X%/小于X%的变化就会变得时而有效时而无效
(我知道这个描述很模糊,但是情况就是这样,我也不知道该如何描述了
猜测可能是因为判断单位生命/魔法变化事件的原理问题导致

以下附上测试地图:
奇怪的问题.w3x (19 KB, 下载次数: 11)

山丘旁边有个极高回魔的物品可以用来恢复魔法
问题二需要不断使用技能/恢复MP多次才能出现
一个比较可靠的发动方式是在1000魔以下携带那个恢复物品,当技能可用的时候立刻使用,反复几次即可出现


找了好久似乎相关的问题都很少,只好来求助区了[s:186]
发表于 2009-11-8 17:36:05 | 显示全部楼层
如果想限制技能的释放,可以用马甲单位+技能科技限制。
不建议使用耗魔10000来弄。
回复

使用道具 举报

发表于 2009-11-8 17:38:29 | 显示全部楼层
事件 - 当单位魔法值大于或等于X%
这个其实只注册了初始魔法值的百分比
比如一开始有100点魔法,那么大于X点就触发事件,到了后来魔法值有了1000点,事件仍然是X点而不会变成10*X点,因为事件是预先注册的,注册的事件只有魔法值,而不是百分比

如果需要,可以考虑用计时器,每XX时间判断魔法百分比来做

hmmm,问题看了一半,于是权当占位……
回复

使用道具 举报

发表于 2009-11-8 17:43:42 | 显示全部楼层
LZ的问题1其实很好解决:
在小于XX魔法值的触发里添加一个:
等待0.0秒就完全可以了。
这样瞬间的工程升级的10000耗魔问题可以被避免。
问题2研究中…………
回复

使用道具 举报

发表于 2009-11-8 17:54:25 | 显示全部楼层
嗯……………问题2嘛…………可能是工程升级或者魔法书导致的问题?
我也不知道。
回复

使用道具 举报

发表于 2009-11-8 18:03:17 | 显示全部楼层
hmmm,问题2的确很诡异………………
不过我依然推荐使用循环计时判断魔法值的方法,如果你的魔法上限是会变的话~~

如果整个使用循环计时,那么应该也不会出现这些问题了吧
回复

使用道具 举报

发表于 2009-11-8 18:04:38 | 显示全部楼层
嗯,推荐猪头大大的做法。
实际上LZ的问题就在于单位魔法/生命值变化的极端精准性。
当单位使用技能时——减少19%魔法——魔法变化——工厂升级——耗魔变大。
这以上的动作在一个瞬间内执行,就会影响到耗魔。
如果单位释放完技能,再执行扣魔的动作,那么这个连环到最后就会断开了。也就没有问题了。
回复

使用道具 举报

 楼主| 发表于 2009-11-8 18:28:18 | 显示全部楼层
其实第一个问题我已经知道该如何解决的,只是觉得这个应该也算得上是一个值得大家注意的问题所以才提出来讨论讨论
重点在于第二个问题,不知道头目有没有研究过这方面的问题
如果没办法解决的话估计也只能采用timer循环判断的办法了,即便占用的资源相对要多了不少

顺带关于替换成高耗魔的解释,因为想让技能看起来是不够魔施放所以不想采用科技之类的限制方法呢(而且魔法值也可以弄成一些富有特殊意义的数字
回复

使用道具 举报

 楼主| 发表于 2009-11-8 18:50:16 | 显示全部楼层
顺带补充一下
“事件 - 当单位魔法值小于X% ”却不会像大于X%那样失效,这点使问题2的诡异度又提高了一层  
回复

使用道具 举报

发表于 2009-11-8 19:32:00 | 显示全部楼层
额,如果魔法值上限是会变动的话,你只能采用计时器判断的方法,如果你硬是要用魔法值变化事件,那么这个开销会更大,原因如2楼,你需要反复的删除触发、创建触发,因为无法删除事件,那么只能删除触发了
回复

使用道具 举报

发表于 2009-11-8 19:59:07 | 显示全部楼层
引用第8楼u.n.owen于2009-11-08 18:50发表的  :
顺带补充一下
“事件 - 当单位魔法值小于X% ”却不会像大于X%那样失效,这点使问题2的诡异度又提高了一层  

对此我只能说,小于还是大于就是一个判断而已。他没有提升问题的诡异程度,只是你的触发动作+事件的触发时机才可能导致了你的Bug产生。就本身事件来说,没有什么Bug。也不需要研究事件本身的诡异。
回复

使用道具 举报

发表于 2009-11-8 22:28:50 | 显示全部楼层
你可以等待0秒后替换。

事件 - 当单位魔法值大于或等于X%《---另外,有这种触发?
回复

使用道具 举报

发表于 2009-11-10 23:16:31 | 显示全部楼层
我记得可以监测实数变化的吧 不过实现还是一样 需要到计时器
回复

使用道具 举报

发表于 2009-11-10 23:32:53 | 显示全部楼层
监控生命值可以监控具体值,有专门的事件,但无法监控百分比
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-22 06:21 , Processed in 0.086787 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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