Всем добрый день, нужна ваша помощь, в общем есть код который возобновляет энергию игроку. Все работает вроде шикарно, но есть проблема. Приведу пример: энергии максимум 5, когда ты потратил две или три к примеру у тебя осталось 2, вы выходите с сайта на минут +-10, заходите на сайт видно что таймер показывает к примеру что следующая энергия набирается за 2:04мин обновляешь страницу и таймер уже снова начинает отсчет по новой, и не плюсует +1 энергии вот код PHP: #восстановления энергии $currentDate = time(); $dateDiff = $currentDate - $arr['fuel_time']; $newFuel = (int)$arr['energy']; //3000 сек - время полного восстановления ... if ($dateDiff < $arr['full_recovery_time'] && $newFuel < $arr['max_energy']) { while ($dateDiff > $arr['race_recovery_time']) { $newFuel++; if ($newFuel >= $arr['max_energy']) { break; } $dateDiff = $dateDiff - $arr['race_recovery_time']; //600 сек == 10 мин } } else { $newFuel = $arr['max_energy']; } if ($newFuel != $arr['energy']) { $sql->query("UPDATE `users` SET `energy`='$newFuel', `fuel_time`= '$currentDate' WHERE `id`='$arr[id]' LIMIT 1 "); } #таймер обратного отсчета для востановления гонок $timerE=$arr['race_recovery_time'] - $dateDiff ; if($timerE>0) { $enersec=$timerE%60;$timerE=(int)($timerE/60); $enermin=$timerE%60;$h=(int)($timerE/60); $timeenergy = ($enermin<10?'0':'')."$enermin:".($enersec<10?'0':'')."$enersec"; }else{ $timeenergy=''; } Буду очень благодарен за помощь
Выведите этот запрос и посмотрите как он выглядит: PHP: echo "UPDATE `users` SET `energy`='$newFuel', `fuel_time`= '$currentDate' WHERE `id`='$arr[id]' LIMIT 1 ";
Время обновления(регенерации) энергии сохраняйте в таблице и от этого пляшите. Иначе, если обновлять, энергия никогда не восстановиться. Пример: Прошло 5 сек = +1 энергия, сохранить таймер. Прошло 20 сек = +4 энергии, сохранить таймер.
https://secure.php.net/manual/ru/language.types.array.php#language.types.array.foo-bar --- Добавлено --- там нотис --- Добавлено --- http://govnokod.ru/1382
@MouseZver, по ссылке на документацию, которую ты привёл: PHP: // Внутри строки это нормально. Внутри строк константы не // рассматриваются, так что ошибки E_NOTICE здесь не произойдет print "Hello $arr[fruit]"; // Hello apple У ТС ровно тоже самое:
@skortes, не, это мы не про твою задачу с @MouseZver. Это он просто не обращал внимания на случаи, когда кавычки для текстовых индексов не нужны По твоей задаче. Лично я бы делал так: 1. Скрипт записывает в базу время пополнения энергии. При заходе на страницу оставшееся время записывается куда-нибудь в переменную js, и таймер уже отчитывается через JS. Но само пополнение энергии происходит не здесь 2. На сервере каждую минуту включается крон, который находит игроков, которым пора пополнить энергию, и пополняет её. Единственное, теоретически может быть рассинхрон, думаю, что стоит сделать, чтоб таймер на сайте слегка отставал, если это не критично