chickenpie 发表于 2010-10-3 21:06:34

效果0:损坏目标|设置单位:相关单位|设置区域:相关区域|参数:-134217772+A
效果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 编辑 ]

nomygf 发表于 2010-10-3 21:10:07

回复 21楼 的帖子

改正了 {30}                            

adongct 发表于 2010-10-9 23:55:05

{5} 这回我那贸易马车也像桶装里的王帝了,回多回少难度选择{42} 。
----我将贸易马车血量改100,那A就是100吧。

nomygf 发表于 2010-10-10 00:13:04

回复 23楼 的帖子

是啊                  

杕杜 发表于 2010-10-10 09:51:46

16楼的问题有成果了吗?很期待啊......

nomygf 发表于 2010-10-10 11:57:20

回复 25楼 的帖子

成果早已經更新在 #1 了
#16 所提出的並不全部可能達成,
基礎值必需要是 2 進制的數值 ( 1,2,4,8,16,32, 64 ,128,256...)

Ru43 发表于 2010-10-11 19:17:43

-16777216经过-1无法得到-16777217。还是-16777216。
然后很巧妙的利用这个规则,反复就可以设置任意秒了。

建议不妨把这作为公理写在1L。

[ 本帖最后由 Ru43 于 2010-10-11 19:20 编辑 ]

nomygf 发表于 2010-10-11 20:28:06

要提到的話, 就要先說說 float 的儲存方式, 然後就談到 a = m × b^e / a = m × 2^e,
接著才到 "16777217 會簡化回 16777216"

有關此原理的文章很久之前已經存在, 如果看不懂的話,
在這裡怎麼說也是不懂的...

話說我找不回那篇文章, 還好我之前把它儲存了
https://bbmov.com/b5/viewtopic.php?t=24&mforum=admin

Ru43 发表于 2010-10-11 21:44:41

正是我想说的。

(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}

nomygf 发表于 2010-10-12 01:25:31

我也嘗試來說一說吧....

大家知道電腦是如何分辨小數嗎? 大家認識的二進制好像沒有小數啊,
要電腦能夠分辨小數, 就要由人類定義一個方法給電腦分辨,
這個就是浮點數 (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 编辑 ]

帝国时代二 发表于 2010-10-16 10:17:24

就是说只有1、2、4、8、16、32、64能够作为回血的基础值,再多就要靠复制触发了吗?{19}

老胡V1 发表于 2010-10-16 10:34:45

干嘛不用long double储存……
是当时内存不足吗……

维京精锐狂战士 发表于 2010-10-16 14:40:01

嗯,very well,i will try,.....

nomygf 发表于 2010-10-16 19:23:45

回复 32楼 的帖子

因為沒有必要用這麼大的空間去儲存這變數, 要這麼大來幹嘛?

帝国_迷 发表于 2010-11-4 21:56:38

好深奥啊.......................{34}

狂~劇情狂 发表于 2011-6-27 01:29:50

https://www.hawkaoe.net/bbs/thread-5375-1-1.html
大家討論前請善用搜索功能

狂~劇情狂 发表于 2011-6-28 04:56:48

每秒回復 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)三文内容的归纳,但是更具体地介绍了各浮点数误算间距的数值。值得注意的是,此教程的主帖内容略嫌铺陈过长,导致正题反而需要放入及后跟帖,是以对此特效有一定认识者或许可以跳过主帖直接阅读跟帖。

zgz_zhang 发表于 2011-7-10 21:42:08

仔细学习学习。。。。。。

szs 发表于 2011-10-16 11:56:49

额 太复杂了{:174:}

东方龙飞 发表于 2011-10-25 12:28:45

本帖最后由 东方龙飞 于 2011-10-25 12:30 编辑

LZ,我用这方法,写了两个以32为基数回血的效果但是每次回血76点……还有就是,这种触发有办法实现通过激活触发功能激活么,就是不让它一开始就自动激活,我试了好像不行。
我是想,一个圣殿,初始每秒回血10点。走到某区域,血上限增加,同时取消每秒回血10点。接着走几步,激活每秒回血32(比方说)点。
这样的剧情总是做不成,请问LZ有办法么?
页: 1 [2] 3
查看完整版本: 每秒回復 n 血, 而且不破血