精華區beta RO 關於我們 聯絡資訊
這個BUG主要是基於二補數系統中,數值發生overflow/underflow時 而程式撰寫者並沒有做妥善的檢查,所引發的數值BUG 下圖是以簡單的數值range : -32768~32767 為解釋 應用面令人爭議,所以我簡單介紹一下就好 -------------------------------------------- 首先,我們先拿出一個簡單的模型,如下圖 (+)   (-) 32767 <-> -32768 ↖\     ↗/ \↘   /↙        0 我稍微解釋一下,基本上這個圖是一個循環 當32767+1時,其數值不是32768而是-32768 當-32768-1時,其數值不是-32769而是32767 而0為-32768與32767之中心點 在這邊我們只關心overflow/underflow,也就是32767+1與-32768-1 0這數值,實際上是一點意義都沒有的,儘管是暈眩率0%、失敗率0%...等 ------------------------------------------- 講一個比較簡單的例子,假設普攻傷害最高只到32767 如果今天某玩家打到傷害高達65535,那怪物實際受到的傷害將會是下列算式 65535 / ( 32767 + 32768 ) = 1....0 怪物受到的傷害將會是0 如果今天某玩家打到傷害高達90000,那怪物實際受到的傷害將會是下列算式 90000 / ( 32767 + 32768 ) = 1....24465 怪物受到的傷害將會是24465 如果今天某玩家打到傷害高達10000,那怪物實際受到的傷害將會是下列算式 100000 / ( 32767 + 32768 ) = 1....34465 - ( 34465 - 32767 ) = -1698 怪物受到的傷害將會是-1698,所以我們預期會看到0或是MISS -------------------------------------------- 結論就是,如果只要我們找到感興趣的數值range,我們可以經由overflow/underflow 來達到一些實際上不可能達到的效果 如百萬HP、百萬SP、抗狀態100%、製作率100%、經驗值DOUBLE....等 這個BUG原理就簡單的介紹到這邊,應用面的細節就不明說了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.191.166 ※ 編輯: bobo0120 來自: 114.32.191.166 (01/18 19:09)
r10896:連這個都講... 01/18 19:10
r10896:事實上玩家跟怪物攻擊傷害不在此種限制。 01/18 19:14
annie6119:比較明顯的例子應該是血量超過32767,組隊視窗內看到的 01/18 19:14
annie6119:血量會是負數,血條也變全黑,但實際上血還是滿的XD 01/18 19:15
r10896:應用建議保留 別給有心人用~0~ 01/18 19:15
healangel:經驗值DOUBLE.......0__0 01/18 19:29
johnlei:超過數值記錄儲存格的range就有滿洩的狀況 16BIT遊戲很多 01/18 20:17
sakuratuka:這有甚麼不能講?程式設計或有修改遊戲的應該都知道吧XD 01/19 19:49
r10896:是說應用面 不是說原理 01/19 21:11
r10896:沒人希望在gvg看到四五個hp破80萬的刺客滿街跑吧 01/19 21:12
johnlei:樓上是說應用還是打比方 XDDDDDD 01/19 21:19
r10896:百萬hp在內文就有提到了 怎麼弄出來才是問題 01/19 21:24
superjohnny:告訴我吧= =+ 我也想變HP八十萬... 01/20 03:38
ocaen2000:想知道百萬HP+1 XD 01/20 07:25
t5368836:感謝大大們傾囊相授= = 01/20 12:47
jujubaby174:百萬血捨命 百萬魔阿修@@" 01/21 09:26
Ymiao:其實我覺得應用面都教一教 一起倒一倒算了(誤) 01/26 18:10
> -------------------------------------------------------------------------- < 作者: bobo0120 () 站內: RO 標題: Re: [BUG] 數值的overflow/underflow 時間: Fri May 21 16:00:16 2010 ※ 引述《***********》之銘言: : 我在RO板看到你貼的數值overflow/underflow : 關於這件事不知道你還能透露多少? : 是從公式著手嗎?可是像得到經驗值倍增好像沒有公式? : 謝謝你抽空看這封信 1. 抗屬性上限是100%, 超過後會變成常數 最容易達成的是抗火屬性, 如今抗火達到150%, 裝備全卸除依然有50%的抗火屬性 2. 工會經驗值最多可單隻怪抽536870912, 通常發生在MVP上, 基本經驗加上MVP經驗 較容易破億, 如今工會抽經驗536870913, 事實上得到的效果是捐%角經驗增加 增加幅度為536870912*2 + 536870911 3. 反射盾反射上限32768 如今反射32769, 事實上是攻擊方+32767的血量, 可用於洗HP 所以有1500/500超過MAX血量的情形, 但有任何回復HP的行為、登出登入、地圖轉換 會被打回原形, 意即回覆成500/500的情形 4. HP/SP回覆常數如果為負數, 通常只有剛轉生或初心者會發生, 事實上得到的效果是HP/SP是依時間增加上限, 且不受限於上者的限制除了登出登入 5. 抗狀態可想成沒有上限, 因後來修正不死神BUG被限制在100%, 但是有下限, 超過下限後抗狀態為100% 6. HP分母為0的情形, 伺服器會當機以及造成回溯 以上是比較一般的例子, 應用面其實有些限制, 所以透露一點, 至於有沒有修正就要自己測看看 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.191.166 ※ 編輯: bobo0120 來自: 114.32.191.166 (05/21 16:08) ※ 編輯: bobo0120 來自: 114.32.191.166 (05/21 16:10) ※ 編輯: bobo0120 來自: 114.32.191.166 (05/21 16:16)
dderfken:怎麼覺得挺...多的? 05/21 16:57
tinkerbell:朝聖 05/21 17:59
r10896:你... 05/21 20:47
johnlei:1010110的東西似乎要滿洩真的不難 尤其是製作時偷懶用16b 05/21 23:03