График. Производство ресурсов меняется наполовину, подсчитать общее количество ресурсов, произведенных, когда игрок онлайн?

Я пишу игру, в которой игрок может строить и улучшать здания. Они могут иметь здания, производящие ресурсы. Игра обновляет количество ресурсов не позднее, чем за 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, Подсчитайте, сколько было добавлено в старых тарифах до значения previous_production_active_till, когда вычисляете вторую сумму для улучшенной ставки. Например, последнее обновление происходит в момент 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 с момента их последнего обновления, и делайте каждое обновление только тогда.

Это один из вариантов, любой другой способ?

0

Решение

чтобы уменьшить нагрузку на базу данных я выбираю обновить ресурс игрока
путем проверки на каждой странице загрузки в течение определенного промежутка времени, 100 в
это дело с момента их последнего обновления и делать все обновления только потом.

Что если игрок будет перезагружаться каждые 2 минуты? Будут ли произведены его расчеты ресурсов для входа в систему при выполнении предыдущего запроса на вход?

Я думаю, вам не нужно думать только о 100 times период сбора урожая игрока. При повторном входе игрок должен также получить сумму своего урожая со времени предыдущего запроса на вход в систему / calcHarvest.

Про здания я предлагаю рассмотреть два способа:

  1. Когда здание модернизируется, оно не приносит урожай. Так что вам нужно знать building_is_upgraded_timestamp, И получить delta=(current_timestamp - building_is_upgraded_timestamp), затем EarnedHarvest = delta * Harvest_produce_per_second;
  2. Когда здание модернизируется, оно производит урожай Harvest_produce_per_second старого upgrade_level_building. добавлять LastEarnedByThisBuildingTimestamp к каждому горному зданию. Так что вам нужно знать building_is_upgraded_timestamp и сравнить это с current_timestamp,

Смотреть код:

//If we logged in firstly after building has been upgraded
if ( $current_timestamp > $building_is_upgraded_timestamp )
{
$delta_old_level_building = $building_is_upgraded_timestamp - $LastEarnedByThisBuildingTimestamp;
$delta_new_level_building = $current_timestamp - $building_is_upgraded_timestamp;

$earned_harvest = $delta_old_level_building * $Harvest_produce_per_second_previous_level_building + $delta_new_level_building * $Harvest_produce_per_second_current_level_building;
}
else // Logged in and building is still upgrading
{
$delta = $current_timestamp - $LastEarnedByThisBuildingTimestamp;
$earned_harvest = $delta * $Harvest_produce_per_second_previous_level_building
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]