2017-03-17 31 views
4

所以,我有一個混合的遊戲應用程序,我有一個獎勵制度,在我的遊戲:Javascript |如何避免Date.now()操作

if(Date.now() - lastFreeCoinsTime > 3600000){ //lastFreeCoinsTime is also Date.now() 
    giveCoins(); 
    lastFreeCoinsTime = Date.now(); 
} 

每隔一小時就可以得到金幣的X量。 我發現它可以很容易地通過執行以下操作: 電話設置:更改日期(例如18/03 - > 23/03) 現在您可以再次獲得獎勵。 我該如何避免它?

+0

在服務器上使用'redis'來存儲用戶是否已經收到獎勵並設置1小時過期到該密鑰;從服務器而不是客戶端獲得時間;將先前的獎勵時間存儲在localStorage/sessionStorage/cookies中,並確保Date.now()不小於前一次;不要讓作弊者玩你的遊戲;-) –

+0

檢查一個獨立的來源,用戶不能篡改。 – RobG

+1

相關「獲取當前GMT世界時間 」:http://stackoverflow.com/questions/489581/getting-the-current-gmt-world-time –

回答

0

我不認爲你可以避免這種特殊的行爲,但是如果當前時間在lastFreeCoinsTime之前,你可以通過再次減少他們的硬幣來防止他人濫用它。如果Candy Crush的創作者無法繞過它,那就相當艱難。

0

像這樣的用戶獎勵應該由您控制的外部服務器來處理。這樣,您可以跟蹤自己的時間和其他數據,並且客戶端(您的遊戲)從服務器獲取信息作爲唯一真相來源。不利的一面是顯然你的用戶需要互聯網連接來獲得獎勵。但只要遊戲的核心功能可以在沒有互聯網連接的情況下播放,他們可以在離線狀態下玩遊戲,只需要連接一小組額外的功能(如獎勵)就可以。

請考慮是否真的值得努力防止用戶「欺騙」,儘管如此。如果您的獎勵系統是以某種「免費增值」模式設計出來的,那麼您顯然需要考慮如何確保和控制獎勵。但是,如果這是一款休閒或免費遊戲,而且風險很低,那麼它真的很重要嗎?只有很小一部分用戶會花時間去嘗試和欺騙。如果他們這樣做,誰在乎?讓他們按照他們想玩的方式來玩遊戲 - 畢竟他們在那裏玩得開心。

相關問題