-2

次のコードがあります

  $timeNow = time();
    $timeExpire = $timeNow - 15;
    $con->query("UPDATE players SET Time='".$timeNow."', TimeExpire='".$timeExpire."' WHERE Username='". $_SESSION['Username']."'");
    $User = $con->query("SELECT * FROM players WHERE Username='".$_SESSION['Username']."'");
    $UserInfo = $User->fetch_object();

    if($UserInfo->Wood == "") {
    $con->query("UPDATE players SET Wood='0'");
    } elseif($UserInfo->Stone == "") {
    $con->query("UPDATE players SET Stone='0'");
    } elseif($UserInfo->Gold == "") {
    $con->query("UPDATE players SET Gold='0'");
    }
    if((time() - 15) >= $UserInfo->TimeExpire) {

    $getAmount = (time() - $UserInfo->TimeExpire);
    $con->query("UPDATE players SET Wood=Wood+$getAmount, Stone=Stone+$getAmount, Gold=Gold+$getAmount WHERE Username='". $_SESSION['Username']."'");


}

いくつか質問があります。

  • ユーザーが 10 秒ごとに木、石、金のみを受け取るようにするにはどうすればよいですか (それ以外の場合は、ページを更新するだけです)。

  • 有効期限がいくつあったかを計算するにはどうすればよいですか? たとえば、2 時間ログアウトしてから再度ログインすると、
    2 時間オンラインだった場合に得られる金額を受け取ります。

4

2 に答える 2

1

これらのクエリを常に実行する必要はありません。プレーヤー テーブルに列を作成して、最後にリソースを受け取った時刻を記録するだけです。たとえば、次のようになります。

ALTER TABLE players ADD LastTimeReceivedResources INT(5)

ユーザーがページを読み込んだときに、このフィールドをチェックして、ユーザーがリソースを取得できずに経過した時間を確認します。

$wood_per_10_seconds = 15;
$last_time_received_resources = ...; // Get from players table
$time_now = time();
$added_wood = floor(($time_now-$last_time_received_resources)/10) * $wood_per_10_seconds;

$con->query("UPDATE players SET Wood=Wood+$added_wood WHERE Username='".$_SESSION['Username']."'");

この後、現在の時刻を LastTimeReceivedResources フィールドに保存します。

if ($added_wood>0) $con->query("UPDATE players SET LastTimeReceivedResources=$time_now WHERE Username='".$_SESSION['Username']."'");
于 2013-09-11T20:13:09.487 に答える