PHP/MySQL | Нужна помощь PHP
Всем добрый день, нужна ваша помощь, в общем есть код который возобновляет энергию игроку. Все работает вроде шикарно, но есть проблема.
Приведу пример: энергии максимум 5, когда ты потратил две или три к примеру у тебя осталось 2, вы выходите с сайта на минут +-10, заходите на сайт видно что таймер показывает к примеру что следующая энергия набирается за 2:04мин обновляешь страницу и таймер уже снова начинает отсчет по новой, и не плюсует +1 энергии вот код
#восстановления энергии
$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='';
}
Буду очень благодарен за помощь
Приведу пример: энергии максимум 5, когда ты потратил две или три к примеру у тебя осталось 2, вы выходите с сайта на минут +-10, заходите на сайт видно что таймер показывает к примеру что следующая энергия набирается за 2:04мин обновляешь страницу и таймер уже снова начинает отсчет по новой, и не плюсует +1 энергии вот код
#восстановления энергии
$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='';
}
Буду очень благодарен за помощь
1. Высчитывать разницу во времени между текущим и последним восстановлением. И восстанавлиаать энергию N раз в зависимости от этой разницы.
2. Использовать таймеры, хотя бы крон.
Второй вариант правильнее и предпочтительнее. Но нужна правильная оптимизация, железо при высокой нагрузки и кол-ве игроков.
Код писать не буду, это не бесплатно)
Просто дал наводку как сделать
2. Использовать таймеры, хотя бы крон.
Второй вариант правильнее и предпочтительнее. Но нужна правильная оптимизация, железо при высокой нагрузки и кол-ве игроков.
Код писать не буду, это не бесплатно)
Просто дал наводку как сделать
Dizzy221, за сколько напишешь?
Значит у тебя происходит update при каждом обновлении страницы.
Пост #2 2й вариант, кроном сделай
Пост #2 2й вариант, кроном сделай
Блин столько кода ради 1го ))