PHP/MySQL | прогресс бар
MrCatOff, собственно можно сказать именно это я и предложил в своем первом посте)
steel97 (03.09.2017 в 00:01)
MrCatOff, об этом не подумал...но как-то что ли привычнее когда опыт растет(например в ПК РПГшках не помню что бы значение опыта обнулялось после получение уровня), к тому же если опыт не обнулять можно потом чисто по нему в рейтинге сортировку делать(в случае с обнулением придется сортировать по уровню и по опыту)
MrCatOff, об этом не подумал...но как-то что ли привычнее когда опыт растет(например в ПК РПГшках не помню что бы значение опыта обнулялось после получение уровня), к тому же если опыт не обнулять можно потом чисто по нему в рейтинге сортировку делать(в случае с обнулением придется сортировать по уровню и по опыту)
Можно и без этого делать, то есть у нас есть определенное количество опыта для одного уровня, то мы складываем значения опыта каждого из уровней и высчитываем его общее количество, и делаем сортировку пользователей по опыту.
Hooligan, затратно слишком и реализация скорее всего костыльной выйдет
steel97, exp записываем в масив и юзаем array_sum, по моему не затратно
steel97 (03.09.2017 в 00:14)
Hooligan, затратно слишком и реализация скорее всего костыльной выйдет
Hooligan, затратно слишком и реализация скорее всего костыльной выйдет
Ну да реализация затратная, я просто пояснил как это делается и вообще в некоторых рпг, и на смарты, и на пк подобная штука есть.
MrCatOff, конкретно эта операция не затратна, а вот в целом, включая выборку из БД... учитывая то что суммирование опыта идёт на уровне PHP то придется вообще всех пользователей из БД достать, просчитать опыт каждого и лишь потом сортировать(а если ещё и пагинацию к этому добавить...).
С другой стороны когда в БД сразу хранится опыт, можно просто сделать сортировку через ORDER(хотя это тоже операция не дешевая) и пагинацию через LIMIT
________
посл. ред. 03.09.2017 в 00:32; всего 1 раз(а); by steel97
С другой стороны когда в БД сразу хранится опыт, можно просто сделать сортировку через ORDER(хотя это тоже операция не дешевая) и пагинацию через LIMIT
________
посл. ред. 03.09.2017 в 00:32; всего 1 раз(а); by steel97
При создание сохраняем текуший уровень и следующий макс опыт для апгрейда уровня.. а через цикл разовый для апгрейда уровня, что делает меньше нагрузку на сайта...
В коде видно что можно неограниченно делать уровни... Это пример кода...
________
посл. ред. 03.09.2017 в 01:16; всего 3 раз(а); by [J]ungle
<?php
// Опыт
$add_exp = 0;
$all_exp = 0;
$current_exp = 0;
$max_exp = 0;
$current_level = 1;
$percent_exp = 0;
for ($exp_level = 1; $exp_level < 1000; $exp_level++) {
if ($user['exp'] < $all_exp) {
break;
}
if ($exp_level == 1) {
$add_exp = 10;
} elseif ($exp_level == 2) {
$add_exp = 50;
} elseif ($exp_level == 3) {
$add_exp = 100;
} elseif($exp_level >= 4 AND $exp_level <= 29) {
$add_exp = ($exp_level - 3) * 300 + 100;
} elseif($exp_level >= 30 AND $exp_level <= 49) {
$add_exp = $exp_level * 400;
} elseif($exp_level >= 50 AND $exp_level <= 99) {
$add_exp = $exp_level * 500;
} elseif($exp_level >= 100) {
$add_exp = $exp_level * 1000;
}
$current_exp = min($user['exp'] - $all_exp, $add_exp);
$max_exp = $add_exp;
$all_exp += $add_exp;
}
// Сохранить опыт
$user['level'] = $exp_level;
$user['exp'] = $current_exp;
$user['max_exp'] = $max_exp;
$user['all_exp'] = $all_exp;
$user['percent_exp'] = $current_exp * 100 / $max_exp;
?>
В коде видно что можно неограниченно делать уровни... Это пример кода...
________
посл. ред. 03.09.2017 в 01:16; всего 3 раз(а); by [J]ungle
И процент из цикла перенсти вниз, спешил =)
Стр.: 1, 2