沒BUG就奪冠了紅方蘭博缺傷害BUG存在14年疑似影響了S14決賽
該UP主表示紅色方蘭博存在嚴(yán)重的傷害缺失bug長達14年;并且這個bug過于隱蔽,多年沒人發(fā)現(xiàn);這個bug影響了很多關(guān)鍵的比賽 很多戰(zhàn)隊可能因此拿不到s冠。
后續(xù)評論中有網(wǎng)友整理出了LPL與LCK兩個賽區(qū)蘭博紅藍方的勝利,其中LPL蘭博藍勝71藍敗45,61.2%;紅勝37紅敗47,42.5%。而LCK蘭博藍勝64藍敗35,64.6%;紅勝46紅敗55,45.5%。
該UP主原帖內(nèi)容:
-經(jīng)測試,Q/R技能的總傷害、傷害段數(shù)和單次傷害在紅藍方均相同。
現(xiàn)可通過游戲內(nèi)簡易測試復(fù)現(xiàn)該bug:
Q技能:施放Q后立即垂直移動(不使用閃現(xiàn))。藍方蘭博對紅方英雄至少造成3段傷害,而紅方蘭博對藍方英雄僅造成2段傷害。
對小兵則雙方都至少造成3段傷害。該測試需要極其精確的鼠標(biāo)點擊且不穩(wěn)定,因難以確保Q持續(xù)時間精確到毫秒級。
注意:必須使用兩個游戲賬號才能觸發(fā)該bug,使用假人無效。
R技能:由于R的debuff會顯示在狀態(tài)欄,測試更簡單。最簡易方法是讓樂芙蘭用W(魔影迷蹤)穿過蘭博大招。藍方蘭博會對紅方樂芙蘭造成2段傷害,而紅方蘭博對藍方樂芙蘭僅造成1段傷害。
這顯然是bug,因蘭博R的debuff持續(xù)1秒且每0.5秒造成傷害,理應(yīng)始終至少2段傷害。僅造成1段即為bug。
注意:極低概率樂芙蘭穿過R時不受任何傷害,該情況在雙方都可能出現(xiàn)。
既然已證明Q/R當(dāng)前存在導(dǎo)致紅方蘭博丟失傷害的bug,下面詳細(xì)說明傷害丟失的條件與原因:
R技能分析:
蘭博R施加1.00秒灼燒debuff,可通過狀態(tài)欄圖標(biāo)觀察??梢姰?dāng)圖標(biāo)轉(zhuǎn)到3點鐘方向(持續(xù)時間的1/4處)時會重置(刷新為1.00秒)。
這意味著蘭博R每0.25秒就會施加新的1.00秒灼燒debuff,重復(fù)施加會將持續(xù)時間刷新為1.00秒。
測試時使用樂芙蘭W、崔絲塔娜W和佐伊R來確保單位在R中停留固定時長,但發(fā)現(xiàn)傷害不穩(wěn)定,因debuff施加次數(shù)不穩(wěn)定。
這是由于單位進入R的時刻與R的0.25秒傷害檢查未同步所致。蘭博R每0.25秒檢查一次——若單位碰撞箱在此時刻與傷害區(qū)域重疊,則施加1.00秒灼燒debuff。
為簡化說明,暫不考慮Tick舍入問題。
設(shè)x = (在R中停留時間)/0.25
將x分解為整數(shù)和小數(shù)部分:x = |x| + {x}
debuff施加次數(shù)(N)為:
N = |x| + Bernoulli({x})
其中Bernoulli({x})是以概率{x}為1、1?{x}為0的隨機變量。
例如:
樂芙蘭W(快速位移)→ x≈0.9 → N=0或1(1的概率更大)
崔絲塔娜W(慢速位移)→ x≈1.5 → N=1或2
佐伊R(0.75秒)→ x≈3.5 → N=3或4
經(jīng)大量測試發(fā)現(xiàn):
當(dāng)N=1,2,3,4時,藍方蘭博造成2,2,3,3段傷害,紅方蘭博造成1,2,2,3段傷害。
結(jié)論:當(dāng)N為奇數(shù)時,紅方蘭博比藍方少1段傷害;N為偶數(shù)時雙方傷害相同。
進階測試方法:
我設(shè)計了一種巧妙方法,使紅藍方技能時間精確到毫秒級同步:
讓紅方蘭博同時對藍方英雄和假人施放R。
原理:
? 傷害和狀態(tài)計算按固定順序處理,很可能基于單位ID優(yōu)先級:
藍方英雄 > 紅方英雄 > 假人/小兵
bug觸發(fā)條件:
? 當(dāng)?shù)蛢?yōu)先級單位(紅方蘭博)傷害高優(yōu)先級單位(藍方英雄)時觸發(fā)bug
? 當(dāng)高優(yōu)先級單位(藍方蘭博)傷害低優(yōu)先級單位(紅方英雄/假人)時不觸發(fā)
因此紅方蘭博對目標(biāo)假人的行為與對藍方蘭博對紅方英雄相同,使我們能同時觀察兩種場景且時間完全同步。
R技能發(fā)現(xiàn):
? 目標(biāo)站在R起點時,雙方均受10段傷害
? 目標(biāo)站在R終點時,雙方均受9段傷害
? 存在中間位置使一方受9段、另一方受10段,因為兩個偶數(shù)中間必有一個奇數(shù)
我們可以發(fā)現(xiàn):
? 紅方蘭博R對藍方英雄有0.25秒傷害延遲
? 傷害不同步——紅方蘭博的傷害會在目標(biāo)間交替生效
Q技能發(fā)現(xiàn):
? 蘭博Q每秒造成4次傷害(每0.25秒1次)
? 紅方蘭博Q對藍方英雄有約0.25秒傷害延遲
? 若Q被提前打斷,紅方蘭博會少1段傷害(如2:1、3:2等)
這意味著每次線上Q換血都可能丟失傷害,嚴(yán)重影響紅方蘭博表現(xiàn)
丟失段數(shù)還會影響符文(如奧術(shù)彗星)和裝備(如蘭德里的苦楚)
bug起源推測:
蘭博Q/R被歸類為DOT-AOE傷害,在引擎層(AOE)和腳本層(DOT)表現(xiàn)不一致
這導(dǎo)致了蘭博代碼在引擎層與腳本層存在隱形耦合
即傷害計算與狀態(tài)計算存在耦合
這種矛盾可能引發(fā)基于服務(wù)器幀優(yōu)先級的傷害計算的時序bug。
我懷疑:
原始bug(紅藍方傷害不均)被"修復(fù)"的方式是給紅方蘭博添加延遲,雖"平衡"了總傷害卻制造了更隱蔽的新bug
即設(shè)計師將一個小bug修成了一個更隱蔽的大bug
該bug影響14年來的數(shù)億局游戲,包括約3000場職業(yè)比賽