2013-09-10 114 views
-1
$timeNow = time(); 
$timeExpire = $timeNow + 10; 
$User = $con->query("SELECT * FROM players WHERE Username='".$_SESSION['Username']."'"); 
$UserInfo = $User->fetch_object(); 

if($timeNow >= $UserInfo->TimeExpire) { 

    echo "Wood Gathered"; 
    $con->query("UPDATE players SET Wood = Wood+5 WHERE Username='".$_SESSION['Username']."'"); 
    $con->query("UPDATE players SET Time = '".$timeNow."' WHERE Username='".$_SESSION['Username']."'"); 
    $con->query("UPDATE players SET TimeExpire = '".$timeExpire."' WHERE Username='".$_SESSION['Username']."'"); 

} 

即使用戶未登錄,我如何使以下代碼正常工作?當用戶未登錄時更新

例如像他回來後1天,並得到1728木頭,是因爲86400(1天)/ 50(每50秒獲得資源)等於1728

+0

有些RDBMS允許你爲每個用戶'更新玩家設置Wood = Wood + 5',每隔n分鐘運行一次,忘記在應用程序內部做這些事情,當用戶登錄時,或者你記錄上次登錄時間並計算出有多少「過期」。 – ssice

+0

我相信你需要重新考慮你的代碼。 在這種情況下,您正在編程一款遊戲,但您並不只有一個用戶,因此您需要使用任務隊列的最佳選項,將操作(獲取資源/時間/等)保存到另一個表中並清除這些項目準備就緒。 –

+0

我該如何計算有多少到期日? – user2766669

回答

0

我感應你是一個編程遊戲,因爲遊戲需要實時: 創建一個文件,例如cron.php,並在每個頁面中包含該文件。在這個文件中把這個:

<?php 
$timeNow = time(); 
$timeExpire = $timeNow + 10; 
$Users = $con->query("SELECT * FROM players WHERE TimeExpire<='".$timeNow."'"); 
while($UserInfo = $User->fetch_object()){ 
    $givenWood = $timeNow - $UserInfo->TimeExpire; 
    $con->query("UPDATE players SET Wood = Wood+ {$givenWood} WHERE Username='". $UserInfo->Username ."'"); 
    $con->query("UPDATE players SET Time = '".$timeNow."' WHERE Username='". $UserInfo->Username ."'"); 
    $con->query("UPDATE players SET TimeExpire = '".$timeExpire."' WHERE Username='". $UserInfo->Username ."'"); 
} 

?> 

有想法,我把這段代碼只是爲了讓這個想法怎麼辦that.So,有可能是有毛病我的代碼邏輯。 (你應該做的是讓那些你可以給他們一些木材的用戶,計算他們從現在到上次給他們的木材並給他們適量的木材的時間)。

+0

是的,我已經修好了,但是謝謝 – user2766669