Loading...
Всем привет , изучаю PHP . Решил учиться на практике после прохождение курса для новичков . Хочу понять как делается система уровней . Создал пару функций
php
   // exp по id function get_exp_by_id($id_user) { $sql = 'select exp from users where id = ? limit 1'; $sth = db::$pdo->prepare($sql); $sth->execute([$id_user]); return $sth->fetch(PDO::FETCH_NUM)[0]; }  // lvl по id function get_lvl_by_id($id_user) { $sql = 'select lvl from users where id = ? limit 1'; $sth = db::$pdo->prepare($sql); $sth->execute([$id_user]); return $sth->fetch(PDO::FETCH_NUM)[0]; }  // добавить epx игроку function set_exp($exp, $id_user) { $sql = 'update users set exp = exp + ? where id = ? limit 1'; $sth = db::$pdo->prepare($sql); $sth->execute([$exp, $id_user]);  $sql = 'update users_dyn set new_exp = new_exp + ? where id_user = ?'; $sth = db::$pdo->prepare($sql); $sth->execute([$exp, $id_user]);   
Как дальше быть как это реализовать можно ? Помогите разобраться спасибо большое )
Я сделал бы так:
1. Создал массив уровней, в котором было бы указано, сколько опыта требуется для лвл апа
2. Находишь в этом масимве текущий уровень игрока
3. Сравниваешь текущий опыт игрока с опытом, который требуется для лвл апа и если у игрока опыта больше, то выдаешь игроку награды за лвл ап и повышаешь его уровень на 1 выше.
Функцию написать может а ее реализовать нет .tap.
Bopo6eu , очень лёгкие функции ) тут и думать не надо
213731682 (16.11.2021 в 19:16)
Bopo6eu , очень лёгкие функции ) тут и думать не надо

тогда тему крой
Bopo6eu , я про то что, сохранить или взять с базы очень лёгкие действия , спорить тут я не вижу смысла с тобой , если нечем подсказать , то пожалуйста , не пиши бред
213731682 (16.11.2021 в 19:25)
Bopo6eu , я про то что, сохранить или взять с базы очень лёгкие действия , спорить тут я не вижу смысла с тобой , если нечем подсказать , то пожалуйста , не пиши бред

Я написал по факту! Подсказать могу: 1,500 рублей за модуль.
в таблице user должны быть 3 столбца `lvl` int NOT NULL DEFAULT '0', `exp` double NOT NULL DEFAULT '0', `exp_max` double NOT NULL DEFAULT '4' переход по уровням делается запросом вида:
php
   // update `user` set `lvl` = `lvl` + 1, `exp` = `exp` - `exp_max`, `exp_max` = `exp_max` * 1.2 where `exp` >= `exp_max` && `id` = ?   
1.2 - увеличиваем максимальный опыт для перехода на следующий уровень на 20% ? - id игрока
________
посл. ред. 16.11.2021 в 20:12; всего 2 раз(а); by Вилы Выкидные
Вилы Выкидные (16.11.2021 в 20:08) в таблице user должны быть 3 столбца `lvl` int NOT NULL DEFAULT '0', `exp` double NOT NULL DEFAULT '0', `exp_max` double NOT NULL DEFAULT '4' переход по уровням делается запросом вида:
php
   // update `user` set `lvl` = `lvl` + 1, `exp` = `exp` - `exp_max`, `exp_max` = `exp_max` * 1.2 where `exp` >= `exp_max` && `id` = ?   
1.2 - увеличиваем максимальный опыт для перехода на следующий уровень на 20% ? - id игрока
Почитай https://habr.com/ru/post/254773/ И не давай дерьмо советы, а то ты из жанра слышу звон, но не знаю откуда он 😉 --- Автору: Если уровни бесконечные, то первое что надо это придумать формулу их генерации, как сказал выше вилка, банально увеличивать процент опыта, но не тупо для каждого пользователя, ведь потом надо контролировать процесс в дальнейшем? Или чтоб узнать максимальный уровень игрока придётся делать запрос по всей таблице пользователей, но зачем? Более верный способ это завести таблицу уровней которая будет служить либо фиксированной таблицей уровней либо при достижение предельного уровня система будет генерировать новый по формуле, тогда дальше по цепочке на уровни ты можешь завязывать какую-то логику дальнейшую и она будет иметь связи по твоей бд. То-есть ты добьёшься целостности данных и их нормализации по структуре это раз, два у тебя будет таблица где можно будет сразу посмотреть количество уровней, сколько на него потребуется опыта другому и при создание таблицы с ивентами или бонусами на уровень (дабы не писать все в коде, что неверно), то можно будет опираться на данные из таблицы уровней. Также уменьшится количество данных в таблице users зачем нам дублировать данные про необходимый опыт, не так ли? Или потом если захотим усложнить или упростить получение уровня. То-есть у пользователя должна быть колонка текущего опыта и колонка с уровнем которая связана с таблицей уровней и когда он собрал достаточное кол-во опыта перебрасывать на новый уровень (функция которая будет начислять опыт игроку, должна иметь эту проверку в себе)
________
посл. ред. 16.11.2021 в 20:26; всего 1 раз(а); by Scammer
Scammer (16.11.2021 в 20:25)

Почитай https://habr.com/ru/post/254773/

И не давай дерьмо советы, а то ты из жанра слышу звон, но не знаю откуда он 😉

---


Автору:
Если уровни бесконечные, то первое что надо это придумать формулу их генерации, как сказал выше вилка, банально увеличивать процент опыта, но не тупо для каждого пользователя, ведь потом надо контролировать процесс в дальнейшем?
Или чтоб узнать максимальный уровень игрока придётся делать запрос по всей таблице пользователей, но зачем?
Более верный способ это завести таблицу уровней которая будет служить либо фиксированной таблицей уровней либо при достижение предельного уровня система будет генерировать новый по формуле, тогда дальше по цепочке на уровни ты можешь завязывать какую-то логику дальнейшую и она будет иметь связи по твоей бд.
То-есть ты добьёшься целостности данных это раз, два у тебя будет таблица где можно будет сразу посмотреть количество уровней, сколько на него потребуется опыта другому и при создание таблицы с ивентами или бонусами на уровень (дабы не писать все в коде, что неверно), то можно будет опираться на данные из таблицы уровней.
Также уменьшится количество данных в таблице users зачем нам дублировать данные про необходимый опыт, не так ли? Или потом если захотим усложнить или упростить получение уровня.
То-есть у пользователя должна быть колонка текущего опыта и колонка с уровнем которая связана с таблицей уровней и когда он собрал достаточное кол-во опыта перебрасывать на новый уровень (функция которая будет начислять опыт игроку, должна иметь эту проверку в себе)


опять ты фуфло прогоняешь, если для нового уровня нужно получить 4 опыта, а у юзера на этот момент - 5, то ты ему тупо новую экспу пропишешь, а с текущей экспой что будешь делать и что ты будешь делать с перебором экспы если нужно было 4 а у юзера 5 на момент получения нового уровня, ФУФЛОноль ему будешь писать и он будет терять заработанный опыт от того что ты фуфла начитался и фуфло прогоняешь для того чтобы только прогонять фуфло :-D
Онлайн: 2
Время:
Gen. 0.1147
(c) Bym.Guru 2010-2026