>我有以下代码
$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 小时会得到的钱
您不一定需要这些查询一直执行。只需在玩家表中创建一个列来记录他们上次获得资源的时间,如下所示:
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']."'");
在此之后,您将当前时间保存到"上次时间接收资源"字段中:
if ($added_wood>0) $con->query("UPDATE players SET LastTimeReceivedResources=$time_now WHERE Username='".$_SESSION['Username']."'");
保存上次完成刷新的时间。检索上次刷新,计算自那时以来的秒数。
$date = new DateTime( '2013-09-10 18:07:13' );
$date2 = new DateTime( '2013-09-11 18:11:08' );
$diff = $date2->getTimestamp() - $date->getTimestamp();
虽然我个人确实认为一个好的老式全球 cron 将是要走的路。