Loading...
PHP/MySQL | Математики, го считать и фиксить баг
Короче, как я понимаю многие так делают, например:

отнимаем 10 хп и ставим временную метку time()

ну и например должно прибавлять 1 хп каждые 10 секунд

делается проверка, если набежало 1 или более, то добавляем хп и опять же ставим временную метку time()

и вот тут какая коза заделывается - ведь если прошло 19 секунд и обновляем страницу, то набежало 1 хп и работает условие проверки, в результате чего будет проставлена новая временная метка для отсчёта, но ведь 9 секунд мы потеряли и получается на генерацию следующего хп + 1 затрачивается 19 секунд, а не 10

а если генерация раз в час и прошло 1:59, то получается мы не 2 получим а 1 и 59 МИНУТ будет потеряно

ну-ка го сочиним, как разницу учесть а то я с ночи не очень варит маковка

:-D
________
посл. ред. 08.05.2019 в 18:19; всего 2 раз(а); by PhpStorm
<?php
$amt = $player->getHealingRate() * (time() - $player->getLastVisit())

________
посл. ред. 08.05.2019 в 18:21; всего 1 раз(а); by nadgobonom
nadgobonom (08.05.2019 в 18:20)
<?php
$amt = $player->getHealingRate() * (time() - $player->getLastVisit())



ну а если ещё раз нужно хп отнять, то LastVisit изменится и опять борода

тут типа нужно учесть сколько на набежавшее времени ушло и его отнять от разницы нынешнего и последнего
PhpStorm, Тык ты получишь дробное число, оберни в round() и все.
TuT (08.05.2019 в 21:47)
PhpStorm, Тык ты получишь дробное число, оберни в round() и все.


как так?
Если я понял тебя правильно, ты получаешь дробное число, но получаешь ты меньшее значение в место большего, для это используй celi();

https://www.php.net/manual/ru/function.ceil.php
PhpStorm (08.05.2019 в 22:12)
TuT (08.05.2019 в 21:47)
PhpStorm, Тык ты получишь дробное число, оберни в round() и все.


как так?

Так деление же используем, на выходе по любому получим дробное число.
TuT (08.05.2019 в 22:18)
PhpStorm (08.05.2019 в 22:12)
TuT (08.05.2019 в 21:47)
PhpStorm, Тык ты получишь дробное число, оберни в round() и все.


как так?

Так деление же используем, на выходе по любому получим дробное число.


и что?
Добрыня (08.05.2019 в 22:16)
Если я понял тебя правильно, ты получаешь дробное число, но получаешь ты меньшее значение в место большего, для это используй celi();

https://www.php.net/manual/ru/function.ceil.php


то есть не будем читать первый пост?
PhpStorm, как вариант "компенсации" хп исходя из n количества за определенное время т.е суммировать сколько было выдано и сверять периодически для компенсации.
Пример: твой вариант с 10 сек, берем 10 хп = 100 сек или 1 мин 40 сек
каждая выдача +=1 т.е на 10-ом обновлении начинаем проверять последний сохраненный временной период, считаем суммарное время за 10 обновлений - 100 сек, разницу компенсируем

P.S а пока писал этот бред, пришло решение попроще:-D в сохранении 9 сек как отдельный параметр для будущего апдейта, т.е время + 9 сек, то что целое все переводим в хп, остаток опять в будущий апдейта

На ваш вкус так сказать*gugugu*
Онлайн: 4
Время:
Gen. 0.1444
(c) Bym.Guru 2010-2025