Я пишу игру, в которой игрок может строить и улучшать здания. У них могут быть здания, производящие ресурсы. Игра обновляет количество ресурсов не позднее, чем за 10 минут. Если пользователь неактивен более 10 минут, я вычисляю правильную сумму при следующем обновлении страницы.
Игрок может начать модернизацию здания в момент времени 1. Их текущее производство золота составляет 100. Предполагается, что оно завершится в момент времени 100, а часть добычи ресурсов увеличится до 600. Но игрок снова войдет в систему в момент времени 200. Он должен получить 100 +600 золота, но как рассчитать?
Возможно, обновите таблицу user_resources с двумя столбцами - previous_production
и previous_production_active_till
.
Когда при расчете ресурсов проверяйте, меньше ли последнее обновление, чем старый объем производства. Если это так, получите prev_time_delta, выполнив previous_production_active_till - last resources update
. Подсчитайте, сколько было добавлено в старых тарифах до предыдущего_производства_активной_тиллы, когда рассчитываете вторую сумму для улучшенной ставки. Например, последнее обновление происходит в момент 1. Старое производство - 100 на 100 единиц времени. Старый курс длится до 100 раз. Новая ставка начинается с 100. Игрок входит в систему во время 200. Игра делает:
1-100=abs 99+1=100/100=1
100*1=100
теперь за оставшееся время мы берем новый дебит,
200-100=100+1=101/100=1
600*1=600
Немного справочной информации, это игра на PHP, и игрок взаимодействует с игрой с помощью запросов POST / GET. Для оптимизации, чтобы уменьшить нагрузку на базу данных, я выбираю обновить ресурс игрока, проверяя каждую загрузку страницы в течение определенного промежутка времени, в данном случае 100 с момента их последнего обновления, и делайте каждое обновление только тогда.
Это один из вариантов, любой другой способ?