楊雨的鳥狙幫助防守方成功完成了翻盤,爲己方建立了不小的前期優勢。
但接下來的對局,他們打起來反倒是有些焦灼了。
對手畢竟是ENCE三雄,nertZ這傢伙正面的突破還是相當兇狠的,而且太...
我盯着屏幕右下角的時間,凌晨兩點零七分,窗外的路燈把樹影拉得細長而歪斜,像一根根垂死掙扎的手指。鍵盤上還殘留着早上那杯冷掉的美式咖啡漬,褐色斑點凝在WASD鍵之間,像乾涸的血痂。我伸手按了按太陽穴,指尖傳來一陣鈍痛——不是那種尖銳的刺疼,而是沉甸甸的、被塞進棉花裏的悶脹感,彷彿顱骨內側糊了一層溼透的報紙,每一次眨眼都帶着輕微的震顫。
手機震了一下,是狂狂發來的微信:“哥,剛打完訓練賽,尼尼36e了。”
我沒回。手指懸在輸入框上方,遲遲敲不出一個字。這消息本身沒什麼異常,但“36e”三個字符卻像三枚燒紅的釘子,直直楔進我混沌的神經末梢。E是尼尼的慣用ID縮寫,36代表他本局擊殺數——可他在最後一張圖Inferno的B區長廊裏,分明被狂狂用AWP隔着兩道門縫一槍爆頭,那個回放我看了三遍:尼尼剛壓步探出牆角,槍口還沒完全抬平,狂狂的準星就已經咬住他眉心,子彈穿過門縫時甚至沒帶起一絲煙塵,乾淨得像手術刀劃開皮膚。
36?他明明只拿了35。
我猛地坐直,後頸“咔”一聲輕響,像生鏽的鉸鏈突然鬆動。鼠標滾輪急促下拉,翻出昨晚存檔的比賽錄像——不是官方OB,是狂狂自己架的視角錄屏,畫質偏暗,但能看清他屏幕右下角始終懸浮的小窗口:實時擊殺統計面板。我逐幀拖動,在Inferno最後一回合結束前的17秒,狂狂的擊殺數停在35;當裁判宣佈勝利的提示彈窗炸開時,面板數字跳成36,同時右下角角落閃出一行極小的灰色提示:“[系統校驗延遲補償+1]”。
我喉嚨發緊,嚥了一口發苦的唾沫。
這不是BUG。CS2的擊殺判定邏輯早被扒爛了:子彈命中判定基於服務器幀同步,客戶端顯示存在最多125毫秒延遲。若玩家在判定幀抵達前死亡,而客戶端尚未渲染死亡動畫,就可能出現“已死卻仍能開槍”的幻覺——俗稱“幽靈槍”。但“幽靈槍”打出的擊殺,從來不會計入最終統計。除非……
除非服務器判定幀與客戶端渲染幀出現了罕見的反向錯位。
我抓起耳機戴上,點開狂狂發來的另一段音頻——只有12秒,背景是Inferno B長廊的混響,槍聲稀疏,腳步聲黏膩。我調高增益,把頻譜分析窗口拉到最大。在第8秒23幀處,有一段0.3秒的空白噪音,像電流突然被掐斷。我把這段音頻拖進音頻修復軟件,用降噪算法剝離底噪,再放大波形圖——在空白段底部,浮現出一段微弱卻清晰的、被嚴重壓縮的語音信號,頻率被刻意壓低到人耳閾值邊緣。
我把它轉成文字:
“……確認延遲補償協議激活……第7次……座標鎖定成功……”
不是狂狂的聲音。是合成音,機械感極重,尾音帶着電子元件過熱的嘶嘶雜音。
我手指發冷,把這段音頻拖進本地數據庫比對。三秒後,彈窗跳出結果:匹配度98.7%,來源爲Valve內部測試文檔《CS2.5延遲補償白皮書(Alpha版)》附件——那份文件早在去年Major預選賽前就被官方刪除,連存檔網站都搜不到痕跡。可它此刻就躺在我的硬盤裏,路徑是狂狂昨天凌晨三點發來的加密壓縮包,解壓密碼是他ID後六位倒序。
我點開壓縮包裏的另一個文件:一張PNG截圖。畫面是狂狂的CS2啓動日誌,最下方滾動着一行行灰底黑字的調試信息。我在其中找到關鍵段落:
“[INFO] LatencyCompensationModule v3.7.1 initialized
[WARN] External sync source detected: NIKO-MAJOR-2024-FINAL-KEY
[ALERT] Key signature validated against Valve master server (2024-05-18 03:17:44 UTC)
[SUCCESS] Compensation override granted for session ID: NINI_2024_INFERNO_B_CORRIDOR”
時間戳精確到秒——正是NIKO捧起獎盃前十七分鐘。
我盯着那行“NIKO-MAJOR-2024-FINAL-KEY”,胃裏像被塞進一塊冰。NIKO的Major冠軍鑰匙?不可能。Valve從不向選手發放實體密鑰,所有賽事權限均通過動態令牌驗證。除非……有人僞造了簽名,而僞造者手裏握着能騙過Valve主服務器的私鑰。
我打開瀏覽器,輸入一個十六位隨機生成的域名——那是去年某次線下賽後臺泄露的測試接口地址。頁面加載出一片漆黑,中央只有一行白色小字:“Welcome, Administrator.” 我在URL末尾加上“/auth?session=NIKO-MAJOR-2024-FINAL-KEY”,回車。
頁面刷新,彈出一個簡陋的控制檯。光標閃爍,等待指令。我輸入:“ls /compensation/history”,回車。
返回列表第一行寫着:
“2024-05-18 03:17:44 | NINI_2024_INFERNO_B_CORRIDOR | +1 kill | override: true | reason: ‘Critical frame loss on client #7721’”
客戶端編號7721——尼尼的設備ID。我在ESL官網上查過,他參賽用的筆記本序列號後四位正是7721。
我靠在椅背上,椅子發出不堪重負的呻吟。窗外不知何時飄起雨,雨滴砸在空調外機上,節奏忽快忽慢,像某種不穩定的節拍器。腦子裏有根弦繃到了極限,嗡嗡作響。
所以那天凌晨三點,狂狂沒在睡覺。他在調試一個能篡改擊殺判定的模塊,而觸發條件,是NIKO奪冠時刻的服務器心跳信號。他等的不是冠軍誕生,而是冠軍誕生時那一瞬間湧向全球服務器的、足以短暫癱瘓冗餘校驗的流量洪峯——就像海嘯來臨時,所有監測浮標都會在同一秒失聯。
我點開微信對話框,手指懸在發送鍵上,刪了又打,打了又刪。最後只發過去一句:“你和尼尼,誰先發現的?”
十秒後,狂狂回覆:“他先發現的。昨晚覆盤時,他指着回放說‘我死的時候,槍還在動’。我說‘你眼花了’,他搖頭,把那段音頻單獨截出來給我聽——就是你剛分析的那段。”
我盯着這句話,指尖冰涼。尼尼發現了?他發現了卻沒舉報?他坐在領獎臺上,左手攥着獎盃,右手悄悄把那段音頻發給了狂狂?爲什麼?
我點開尼尼的微博主頁。最新一條是三小時前發佈的,配圖是NIKO親筆簽名的鼠標墊照片,文案只有兩個字:“圓夢。” 評論區裏全是祝賀,有個ID叫“獵鷹守夜人”的用戶留言:“恭喜!不過好奇問下,Inferno最後一槍,你聽到門後有電流聲嗎?” 尼尼沒有回覆,但三分鐘後,這條評論被點讚了——來自尼尼自己的賬號。
我忽然想起比賽結束後的採訪。記者問尼尼:“此刻最想感謝誰?” 他頓了兩秒,目光掃過鏡頭右側——那裏站着狂狂,正低頭整理耳麥線。尼尼說:“謝謝所有陪我走到今天的人。尤其是……那個總在我失誤後第一個遞水的人。”
當時導播切了鏡頭,沒人注意狂狂抬頭時嘴角的弧度。現在想來,那不是欣慰的笑,是某種近乎悲憫的、卸下重擔的鬆弛。
我重新打開狂狂的錄屏,在Inferno最後一局開始前,狂狂的視角掃過B區長廊的監控攝像頭——那個位置本該有畫面,但屏幕右上角的小窗裏,監控畫面是靜態的雪花噪點。我暫停,放大噪點區域。在左下角四分之一像素的位置,有極細微的色塊偏移,像被人用Photoshop的仿製圖章工具修補過——但修補者沒注意到,噪點底層殘留着半枚模糊的指紋輪廓,紋路走向與狂狂左手拇指完全吻合。
原來如此。他早就動過手腳。不是在比賽裏,是在賽前。他黑進了場館的安防系統,替換了B區長廊的實時監控流,讓所有OB視角看到的“空蕩走廊”,實際上疊加了他提前錄製的、尼尼移動的僞影像。當尼尼真正在那個位置死亡時,服務器判定幀因監控流異常而延遲了127毫秒——剛好卡在補償協議生效的臨界點。
所以那第36殺,根本不是狂狂打出來的。是系統把尼尼死亡瞬間的“幽靈槍”判定,強行算給了狂狂——因爲狂狂的客戶端,在那一刻被賦予了最高優先級的補償權限。
我閉上眼,耳邊全是那段音頻裏合成音的嘶嘶聲。它不該存在。CS2的補償機制是單向的:服務器校正客戶端,絕不可能反過來。除非……補償模塊被注入了反向協議。而能寫出這種協議的人,全世界不超過三個。其中一個是Valve首席架構師,三個月前死於一場離奇車禍;另一個在去年被爆出參與非法數據交易,永久禁賽;第三個……
我睜開眼,手指顫抖着點開Steam好友列表。狂狂的頭像亮着,狀態顯示“在線”。我右鍵點擊,選擇“查看個人資料”,在“最近遊玩”欄裏,他的CS2遊戲時長顯示爲“427小時”。但我知道,他真正玩CS的時間,應該超過兩千小時——因爲他高中時就在用Modded版本練槍,那些版本早已被官方下架,連存檔都找不到。
我點開他主頁底部的“公開成就”,滑到底部。在“社區貢獻者”分類裏,有一個灰掉的徽章,名字叫“Beta Tester v3.7.1”,獲得日期是2024年1月1日。我點開徽章詳情,頁面跳轉到一個已失效的鏈接,但URL末尾殘留着參數:“?ref=VALVE_INTERNAL”。
心臟在胸腔裏撞得生疼。
我打開郵箱,翻出三個月前一封垃圾郵件——標題是《CS2.5 Beta邀請函(非公開通道)》,發件人地址是一串隨機字母組合。我當時以爲是釣魚,直接刪了。現在我點開回收站,用恢復工具找回郵件源碼。在HTML註釋區,藏着一行被base64編碼的文字。解碼後是:
“補償協議v3.7.1將於Major決賽當日凌晨3:17同步激活。密鑰:NIKO-MAJOR-2024-FINAL-KEY。僅限持有者使用。警告:過度使用將導致客戶端崩潰及永久性幀率鎖死。”
我盯着“永久性幀率鎖死”七個字,喉嚨發乾。狂狂的CS2幀率從不超144。他比賽時永遠鎖120,說是爲了穩定。可120幀鎖死,恰恰是v3.7.1協議的強制安全閾值——超過這個值,補償模塊會自動熔斷,所有修改都將被服務器標記爲異常。
所以那場3-0,表面是NIKO的封神之戰,內裏卻是狂狂用兩年時間埋下的伏筆:他需要NIKO贏,需要NIKO贏在那個精確到秒的時刻,需要NIKO的勝利成爲一把鑰匙,打開Valve服務器最脆弱的那道後門。而尼尼……尼尼是知情者,是共謀者,是唯一能同時觸發“悲情英雄”敘事與“技術漏洞”條件的活體密鑰。
我拿起手機,撥通尼尼的電話。忙音持續了七秒,接通。
“喂?”他的聲音很啞,像剛哭過。
“Inferno最後一槍,”我問,“你真的開了槍?”
電話那頭沉默了很久。雨聲忽然變大,噼裏啪啦砸在窗玻璃上,像無數細小的鼓點。
“開了。”他說,“但子彈沒出膛。扳機扣到一半,手抖了。”
“然後呢?”
“然後我聽見門後有電流聲,”他輕聲說,“像老電視開機前的滋滋聲。我知道狂狂在那邊。我知道他等這一刻等了太久。”
“你爲什麼不舉報?”
“舉報?”他笑了下,笑聲很輕,“舉報什麼?舉報他讓我成了Goat?還是舉報他替我扛下了所有罵名,讓所有人覺得……我贏是因爲運氣好,而不是因爲我終於沒再軟腳?”
我握着手機的手指關節發白。
“他刪掉了所有證據,除了那段音頻。”尼尼說,“他留給我聽,是想讓我知道——我不是靠運氣贏的。我是被選中的。被他選中,被系統選中,被這個時代選中。”
“那你呢?”我聲音發緊,“你選了什麼?”
電話那頭,雨聲漸歇。遠處傳來一聲悶雷,滾過天際。
“我選了閉嘴。”他說,“因爲比起真相,我更想要那座獎盃。哪怕它是鍍金的,哪怕底下是空心的。”
我掛斷電話,屏幕暗下去。桌角那杯冷透的咖啡徹底凝固,表面浮着一層薄薄的、泛青的油膜。我盯着那層油膜,它微微晃動,映出天花板上燈管慘白的光——光暈扭曲變形,像一隻正在緩緩閉合的眼睛。
電腦右下角,時間跳成凌晨兩點三十一分。
我打開記事本,新建文檔。光標在空白處閃爍,像一顆不肯墜落的星。
手指懸在鍵盤上方,遲遲未落。
窗外,城市陷入一種奇異的寂靜。連雨也停了。只有空調外機還在低鳴,嗡嗡嗡,嗡嗡嗡,像一臺永不停歇的、老舊的服務器,在黑暗裏獨自吐納着無人解讀的數據流。
我忽然想起NIKO捧杯時說的最後一句話。當時導播給了特寫,他嘴脣微動,聲音被現場歡呼吞沒,但脣語識別軟件還原出三個詞:
“謝謝你們……相信我。”
不是相信他贏了。是相信他值得贏。
而此刻,我相信的,是那個凌晨三點還在調試代碼的男人,和那個明知真相卻選擇沉默的冠軍。他們共同完成了一場精密的、溫柔的騙局——用技術之惡,成全人性之善;用系統漏洞,彌補命運缺口。
我按下Ctrl+S,文件名敲下:“CS:壞了,真讓他成Goat了。”
光標仍在閃爍。
我盯着它,忽然想起狂狂曾說過的話:“CS裏最難的不是壓槍,是學會在開槍前,先看清自己瞄準的究竟是靶心,還是靶心後面那個人的眼睛。”
我慢慢抬起手,食指落在空格鍵上。
輕輕按下。
文檔第一行,出現一個空格。
然後是第二個。
第三個。
第四個。
我繼續按着,空格連成一道橫線,貫穿整行,像一道無聲的裂痕,橫亙在真實與虛構之間,橫亙在勝利與作弊之間,橫亙在NIKO的獎盃與狂狂的代碼之間,橫亙在我敲下的每一個字與即將說出的每一句謊言之間。
窗外,第一縷晨光正艱難地撕開雲層,灰白,微弱,卻執拗地亮着。
本站所有小說爲轉載作品,所有章節均由網友上傳,轉載至本站只是爲了宣傳本書讓更多讀者欣賞。
Copyright 2020 雅文小說 all Rights Reserved