Bimax (09.05.2019 в 00:10) PhpStorm, как вариант "компенсации" хп исходя из n количества за определенное время т.е суммировать сколько было выдано и сверять периодически для компенсации.
Пример: твой вариант с 10 сек, берем 10 хп = 100 сек или 1 мин 40 сек
каждая выдача +=1 т.е на 10-ом обновлении начинаем проверять последний сохраненный временной период, считаем суммарное время за 10 обновлений - 100 сек, разницу компенсируем
P.S а пока писал этот бред, пришло решение попроще в сохранении 9 сек как отдельный параметр для будущего апдейта, т.е время + 9 сек, то что целое все переводим в хп, остаток опять в будущий апдейта
На ваш вкус так сказать
попробовал, как в постскриптуме оставлять дробную часть, добавляя к метке времени лишь целую - трохи ерундово получается
короче сделал так: 10 секунд - это 1 хп
1 хп / 10 сек = 0.1 хп в секунду
сделал для хп формат хранения decimal(13,2)
и теперь хп считается с точностью до секунды, поэтому потерь не будет
ну а на выводе просто отформатировать, чтобы не было дробной части
PhpStorm (09.05.2019 в 01:26)
Bimax (09.05.2019 в 00:10) PhpStorm, как вариант "компенсации" хп исходя из n количества за определенное время т.е суммировать сколько было выдано и сверять периодически для компенсации.
Пример: твой вариант с 10 сек, берем 10 хп = 100 сек или 1 мин 40 сек
каждая выдача +=1 т.е на 10-ом обновлении начинаем проверять последний сохраненный временной период, считаем суммарное время за 10 обновлений - 100 сек, разницу компенсируем
P.S а пока писал этот бред, пришло решение попроще в сохранении 9 сек как отдельный параметр для будущего апдейта, т.е время + 9 сек, то что целое все переводим в хп, остаток опять в будущий апдейта
На ваш вкус так сказать
попробовал, как в постскриптуме оставлять дробную часть, добавляя к метке времени лишь целую - трохи ерундово получается
короче сделал так: 10 секунд - это 1 хп
1 хп / 10 сек = 0.1 хп в секунду
сделал для хп формат хранения decimal(13,2)
и теперь хп считается с точностью до секунды, поэтому потерь не будет
ну а на выводе просто отформатировать, чтобы не было дробной части
Иии??? Я по моему уже это написал. Только зачем то громоздишь велосипед.
DELETED
Автор
9 мая 2019, в 4:46
Delete
TuT (09.05.2019 в 03:26)
PhpStorm (09.05.2019 в 01:26)
Bimax (09.05.2019 в 00:10) PhpStorm, как вариант "компенсации" хп исходя из n количества за определенное время т.е суммировать сколько было выдано и сверять периодически для компенсации.
Пример: твой вариант с 10 сек, берем 10 хп = 100 сек или 1 мин 40 сек
каждая выдача +=1 т.е на 10-ом обновлении начинаем проверять последний сохраненный временной период, считаем суммарное время за 10 обновлений - 100 сек, разницу компенсируем
P.S а пока писал этот бред, пришло решение попроще в сохранении 9 сек как отдельный параметр для будущего апдейта, т.е время + 9 сек, то что целое все переводим в хп, остаток опять в будущий апдейта
На ваш вкус так сказать
попробовал, как в постскриптуме оставлять дробную часть, добавляя к метке времени лишь целую - трохи ерундово получается
короче сделал так: 10 секунд - это 1 хп
1 хп / 10 сек = 0.1 хп в секунду
сделал для хп формат хранения decimal(13,2)
и теперь хп считается с точностью до секунды, поэтому потерь не будет
ну а на выводе просто отформатировать, чтобы не было дробной части
Иии??? Я по моему уже это написал. Только зачем то громоздишь велосипед.
вообще ты написал чушь, вот как делается
<div id="hp"></div>
db::run('update users set hp = case when hp + (unix_timestamp() - hp_up) * hp_reg > hp_max then hp_max else hp + (unix_timestamp() - hp_up) * hp_reg end, hp_up = unix_timestamp() where hp < hp_max and id = ? limit 1', [uid]);
<script>
$(function () {
/**
* @param json.hp
* @param json.hp_max
* @param json.hp_reg
*/
let hp, mp, hit;
function content() {
$.getJSON('/handlers/h-uid.php', function (json) {
$('#content').load('/content/c-' + json.content + '.php', function () {
clearInterval(hp);
if (json.result === 'success') {
$('#hp').html(parseInt(json.hp));
if (parseInt(json.hp) < parseInt(json.hp_max)) {
let now = parseFloat(json.hp);
hp = setInterval(function () {
now += parseFloat(json.hp_reg);
if (parseInt(now) === parseInt(json.hp_max)) clearInterval(hp);
$('#hp').html(parseInt(now));
}, 1000);
}
}
});
});
}
});
</script>
PhpStorm (09.05.2019 в 04:46)
TuT (09.05.2019 в 03:26)
PhpStorm (09.05.2019 в 01:26)
Bimax (09.05.2019 в 00:10) PhpStorm, как вариант "компенсации" хп исходя из n количества за определенное время т.е суммировать сколько было выдано и сверять периодически для компенсации.
Пример: твой вариант с 10 сек, берем 10 хп = 100 сек или 1 мин 40 сек
каждая выдача +=1 т.е на 10-ом обновлении начинаем проверять последний сохраненный временной период, считаем суммарное время за 10 обновлений - 100 сек, разницу компенсируем
P.S а пока писал этот бред, пришло решение попроще в сохранении 9 сек как отдельный параметр для будущего апдейта, т.е время + 9 сек, то что целое все переводим в хп, остаток опять в будущий апдейта
На ваш вкус так сказать
попробовал, как в постскриптуме оставлять дробную часть, добавляя к метке времени лишь целую - трохи ерундово получается
короче сделал так: 10 секунд - это 1 хп
1 хп / 10 сек = 0.1 хп в секунду
сделал для хп формат хранения decimal(13,2)
и теперь хп считается с точностью до секунды, поэтому потерь не будет
ну а на выводе просто отформатировать, чтобы не было дробной части
Иии??? Я по моему уже это написал. Только зачем то громоздишь велосипед.
вообще ты написал чушь, вот как делается
<div id="hp"></div>
db::run('update users set hp = case when hp + (unix_timestamp() - hp_up) * hp_reg > hp_max then hp_max else hp + (unix_timestamp() - hp_up) * hp_reg end, hp_up = unix_timestamp() where hp < hp_max and id = ? limit 1', [uid]);
<script>
$(function () {
/**
* @param json.hp
* @param json.hp_max
* @param json.hp_reg
*/
let hp, mp, hit;
function content() {
$.getJSON('/handlers/h-uid.php', function (json) {
$('#content').load('/content/c-' + json.content + '.php', function () {
clearInterval(hp);
if (json.result === 'success') {
$('#hp').html(parseInt(json.hp));
if (parseInt(json.hp) < parseInt(json.hp_max)) {
let now = parseFloat(json.hp);
hp = setInterval(function () {
now += parseFloat(json.hp_reg);
if (parseInt(now) === parseInt(json.hp_max)) clearInterval(hp);
$('#hp').html(parseInt(now));
}, 1000);
}
}
});
});
}
});
</script>
сиди вкуривай
Я с JS не работал и не вникал в него не когда. Так что просто посмотрел на буковки
DELETED
Автор
9 мая 2019, в 5:19
Delete
TuT, я сделал так, что теперь если на обновление нужно 10 секунд, то если прошло 6 и обновил страницу, то хп обновится через 4, а если прошло 19, то после обновления добавится +1 и через 1 секунду ещё +1, все 20 секунд будут учтены и в БД и в анимации счётчика, короче как хотел - сделал, спасибо, что поучаствовал
________ посл. ред. 09.05.2019 в 05:22; всего 1 раз(а); by PhpStorm
PhpStorm, А, теперь понял что к чему и для чего дробные числа. Я что то не когда об этом не задумывался. Просто работал с подобным, но там интервал быстрее, секундой больше или меньше роли не играло.
DELETED
Автор
9 мая 2019, в 7:06
Delete
TuT (09.05.2019 в 06:53) PhpStorm, А, теперь понял что к чему и для чего дробные числа. Я что то не когда об этом не задумывался. Просто работал с подобным, но там интервал быстрее, секундой больше или меньше роли не играло.
если посекундный реген не делать, то тогда и начинается геммор с потерей времени, поэтому самый точный варик будет установить, сколько в секунду реген, тогда и появляются дробные, а вывод делать в int, а хвост после точки будет просто в базе регениться он нам не нужен для вывода
PhpStorm (09.05.2019 в 07:06)
TuT (09.05.2019 в 06:53) PhpStorm, А, теперь понял что к чему и для чего дробные числа. Я что то не когда об этом не задумывался. Просто работал с подобным, но там интервал быстрее, секундой больше или меньше роли не играло.
если посекундный реген не делать, то тогда и начинается геммор с потерей времени, поэтому самый точный варик будет установить, сколько в секунду реген, тогда и появляются дробные, а вывод делать в int, а хвост после точки будет просто в базе регениться он нам не нужен для вывода
Смотря сколько XP и за сколько сгенерировать, но такое решение хорошее, не когда не думал о таком решение. Нужно запомнить