現在正在開發一個MMOSLG的手游,最近公測了,本來是挺讓人期待,可是前兩天由於一個對象的key引發了一場血案。
那天周六,照常加班到晚上六點下班。回到宿舍,吃了個飯,休息到八點,剛想玩一會游戲,接到客服電話,說有玩家丟兵丟將了(就是把城中部隊派出去了,但是再也沒回來了)。於是乎就匆忙打車到公司(將近八點半到的),毫無疑問,先去查了一遍報錯日志,結果並沒有發現什么有價值的東西。於是乎,沒辦法,只能去查代碼,粗略看了一遍沒啥問題,但是結合游戲日志,可以查到是在哪個階段出的問題,反復讀那個階段的執行代碼,終於發現有個對象用來保存玩家部隊(object[key] = troop),咋一看,好像沒啥問題,但是認真看了一下,那個key是一個時間time,並且那個time的時間精度是一秒,這樣就導致同一秒進入這個執行邏輯的玩家,只會有一個被保存,因此就出現了其他人部隊丟失的事件。
知道問題出現在哪里了,作為程序,改起來當然很簡單,這個過程就不細說。然而事情並沒有就這么結束,更加復雜的事情還在后面。
程序問題改了,但是玩家問題還沒處理,玩家很多都是充錢玩的,有好幾個還是充了好多錢的。那么問題來了,有些玩家部隊丟了,甚至是由於部隊丟了,導致老家沒有防守力量而被攻擊,造成了不小的損失。這個時候,我們就得賠償玩家了,策划和產品研究后,讓我統計了一番玩家數據,把出現丟兵丟將的玩家以及他們丟兵丟將后的戰爭損失全部算了一遍。然后就去翻數據庫,查各個表,想辦法把他們要的數據給弄出來,把所有數據取出所有數據后,寫了個腳本,把這些數據過濾處理了一遍。完事之后,就開始處理了。首先先服務器在線更新,把bug解決了,之后就是處理玩家的情況,先把玩家丟的部隊給他弄回去,然后呢就是把玩家由於丟部隊被打的損失,給補回去。對於全部玩家給予一定的補償,對於丟兵丟將的玩家給予額外的補償。事情好像很簡單,大概在凌晨一點的時候全部操作完畢,然后就回宿舍了,剛回宿舍,又收到通知,玩家進不去服務器了,心里很忐忑,該不會是剛剛自動更新導致的問題吧,沒辦法,又打車回公司,結果發現,不是游戲問題,是機房網絡斷了,然后就通知運維,等運維處理好,回到家里,大概就兩點了。通知測試第二天上班,測試一下新提交的東西(事情比較緊急,測試家里又比較遠,所以就先更新出去了)。
第二天早上十點,程序測試准時到公司,開始測昨天的修改。結果客服就來反應了,說玩家來反饋了,尤其是那些大R,都在鬧退游。我也有玩游戲,其中一個大R就是我們幫派的,看了他在幫派管理員群里面說的,他也想退游了,嚇死我,他怎么可以退游,然后緊急通知產品,產品要了玩家電話,好說歹說,又是討價還價,又是被玩家威脅的,總之,其中的滋味,真是苦不堪言。雖然最后勉強把玩家留了下來,但是發現大家已經熱情大減了,都基本可以讓人感覺整個服快要廢了。大概就是這樣,一個bug,導致游戲質量深受質疑,使玩家超級不爽。
所以,作為一個程序,必須不能大意,也許有一天,你寫的一個小bug,會讓整座大山倒下,全軍覆沒。