效果1:损坏目标|设置单位:相关单位|设置区域:相关区域|参数:268435456-A
将效果0写成两个效果:
效果0:损坏目标|设置单位:相关单位|设置区域:相关区域|参数:-268435456+A
效果1:损坏目标|设置单位:相关单位|设置区域:相关区域|参数:-16
效果2:损坏目标|设置单位:相关单位|设置区域:相关区域|参数:268435456-A
上述效果就是每秒回复16 血的触发事件结构。
这个触发事件结构的唯一坏处是, 你必须要使用16 这个值作为最基础
此话什么意思呢? 即是「每秒回复n 点血量」的n 必须是16 的倍数,
也就是n 值只可能会是 16 / 32 / 48 / 64 / 72 / 88 ... 如此类推
打錯字了...
是268435472吧..
[ 本帖最后由 chickenpie 于 2010-10-3 21:08 编辑 ]
回复 21楼 的帖子
改正了 {30} {5} 这回我那贸易马车也像桶装里的王帝了,回多回少难度选择{42} 。----我将贸易马车血量改100,那A就是100吧。
回复 23楼 的帖子
是啊 16楼的问题有成果了吗?很期待啊......回复 25楼 的帖子
成果早已經更新在 #1 了#16 所提出的並不全部可能達成,
基礎值必需要是 2 進制的數值 ( 1,2,4,8,16,32, 64 ,128,256...) -16777216经过-1无法得到-16777217。还是-16777216。
然后很巧妙的利用这个规则,反复就可以设置任意秒了。
建议不妨把这作为公理写在1L。
[ 本帖最后由 Ru43 于 2010-10-11 19:20 编辑 ] 要提到的話, 就要先說說 float 的儲存方式, 然後就談到 a = m × b^e / a = m × 2^e,
接著才到 "16777217 會簡化回 16777216"
有關此原理的文章很久之前已經存在, 如果看不懂的話,
在這裡怎麼說也是不懂的...
話說我找不回那篇文章, 還好我之前把它儲存了
https://bbmov.com/b5/viewtopic.php?t=24&mforum=admin 正是我想说的。
(1)
根据浮点计算。-16777216就是2的24次方。
这个时候和-1进行运算的话,双方的次方差距超过了23。
也就是在对阶的时候,较小的-1的尾数变成23个0蛋。然后尾数相加,-1就被无视了。
这是HP全满时候的情况。
HP不满,则双方的阶差恰好小于24(即为23),那么-1不会被忽略,生命继续增加。
同样这样也可以解释各种-16777216的2的倍数对应着各种-1的2的倍数。
同样,如果在32的基数下用64,根据上面理论可知,双方级差永远只有23或者22,那就无法使计算被忽略,也就是爆血现象。
(2)然后引用一段话来说明微软可能才用的取舍方式:
就近舍入(round to nearest) 这是标准列出的默认舍入方式,其含义相当于我们日常所说的“四舍五入”。例如,对于32位单精度浮点数来说,若超出可保存的23位的多余位大于等于100…01,则多余位的值超过了最低可表示位值的一半,这种情况下,舍入的方法是在尾数的最低有效位上加1;若多余位小于等于011…11,则直接舍去;若多余位为100…00,此时再判断尾数的最低有效位的值,若为0则直接舍去,若为1则再加1。
在效果上很明显的是对于33~63,也就是不影响级差的情况下,也出现了64的暴雪现象。
因为这些表示出来正好符合舍入进位条件。
同样,对于17~31,也反应出32的效果,也是因此造成的。
而对于16甚至更低,则没有反应,因为被舍去了。
(3)
基于2,就可以解释为什么只有基数最高的那个有效了。{6} 我也嘗試來說一說吧....
大家知道電腦是如何分辨小數嗎? 大家認識的二進制好像沒有小數啊,
要電腦能夠分辨小數, 就要由人類定義一個方法給電腦分辨,
這個就是浮點數 (floating-point numbers)。
到底浮點數是如何運作的呢?
它是根據一條公式
儲存值 = M*b^e
M 代表尾數(mantissa), b 代表基數(base), e 代表指數(exponent)
浮點數共有 32-bits 來儲存數值, 一般情況下(取決於CPU),
1 bits 用作 sign bit representation, 即分辨正或負值, 0 表示正值, 1 代表負值
7 bits 用作儲存指數 (由 -64 至 +63)
24 bits 儲存尾數
我以 +20.1 這個十進制值來作例子:
+20.1(10) = +10100.1(2)
+10100.1(2) = 0.101001 * 2^5
0 10001011010 0100 0000 0000 0000 0000
現在來看看 +16777216 這個數值
+16777216(10) = +1000000000000000000000000(2)
+1000000000000000000000000(2) = 0.1 * 2^25
0 10110011000 0000 0000 0000 0000 0000 0(2)
灰色的 0 超出了 24-bits, 所以儲存不到那個灰色的 0, 最後就會變成:
01011001100000000000000000000000
現在來看看 +16777217 這個數值
+16777217(10) = +1000000000000000000000001(2)
+1000000000000000000000001(2) = 0.1000000000000000000000001 * 2^25
0 10110011000 0000 0000 0000 0000 0000 1(2)
灰色的 1 超出了 24-bits, 所以儲存不到那個灰色的 1, 最後就會變成:
01011001100000000000000000000000
這個值跟+16777216的一樣, 這就是為什麼 16777216 = 16777217
這也是為什麼 float 會被人說不精確。
[ 本帖最后由 nomygf 于 2010-12-26 23:31 编辑 ] 就是说只有1、2、4、8、16、32、64能够作为回血的基础值,再多就要靠复制触发了吗?{19} 干嘛不用long double储存……
是当时内存不足吗…… 嗯,very well,i will try,.....
回复 32楼 的帖子
因為沒有必要用這麼大的空間去儲存這變數, 要這麼大來幹嘛? 好深奥啊.......................{34} https://www.hawkaoe.net/bbs/thread-5375-1-1.html大家討論前請善用搜索功能 每秒回復 n 血, 而且不破血
https://www.hawkaoe.net/bbs/thread-30971-1-1.html
作者:nomygf
日期:2010-10-10
简介:此教程指出「33554432/-33554434」、「67108864/-67108868」、「134217728/-134217736」、「268435456/-268435472」、「536870912/-536870944」、「1073741823/-1073741887」等组别的数字可以用来达致2、4、8、16、32、64单位生命值的不逾越上限回复。
点评:此教程是骑士不怕长枪〈如何象英雄一样加血而不超出上限〉(https://www.hawkaoe.net/bbs/forum-viewthread-tid-1013.html)、剧族~人称无敌〈64滴血以上自由控制的英雄式补血法〉(https://www.hawkaoe.net/bbs/forum-viewthread-tid-4109.html)与本人〈再论骑士不怕长枪的英雄化效果理论〉(https://www.hawkaoe.net/bbs/forum-viewthread-tid-5375.html)三文内容的归纳,但是更具体地介绍了各浮点数误算间距的数值。值得注意的是,此教程的主帖内容略嫌铺陈过长,导致正题反而需要放入及后跟帖,是以对此特效有一定认识者或许可以跳过主帖直接阅读跟帖。
仔细学习学习。。。。。。 额 太复杂了{:174:} 本帖最后由 东方龙飞 于 2011-10-25 12:30 编辑
LZ,我用这方法,写了两个以32为基数回血的效果但是每次回血76点……还有就是,这种触发有办法实现通过激活触发功能激活么,就是不让它一开始就自动激活,我试了好像不行。
我是想,一个圣殿,初始每秒回血10点。走到某区域,血上限增加,同时取消每秒回血10点。接着走几步,激活每秒回血32(比方说)点。
这样的剧情总是做不成,请问LZ有办法么?