Отрывок из кода:
1: const user_data = require("./user_data.json");
2: const fs = require("fs");
3: let uid = message.author.id;
4: let u =
fs.writeFile('./user_data.json', JSON.stringify(user_data), (err)=>{
if(err) console.log(err);
5: if(!user_data[uid]) {
user_data[uid] {
HP: 100,
maxHP: 100,
energy: 100,
maxEnergy: 100
}
}
В действиях тратится энергия и в боях жизни, но они восстанавливаются после каждого сообщения.
Как сделать восстановление энергии и жизней не после каждого сообщения, а каждые 5 минут для всех uid, которые есть в .json файле?
Для задач которые должны выполнятся каждые {n} минут/часов/дней используется планировщик задач. В linux системах это cron.
Пример для php (возможно у вас node или python например) скрипта:
<?php
/**
* /var/www/html/my_game/reset_energy.php
*/
// читаем информацию из json
$filename = {ваш файл игрока};
$user_json = json_encode(file_get_content($filename));
// тут берем ваше поле с энергией, и записываем новое значение
$user_json->energy = 100;
// сохраняем пользователя с новыми данными
file_put_content($filename, $user_json);
И настроить планировщик (для примера linux системы)
Для начала вызовите команду для редактирования задач планировщика:
crontab -e
Добавьте новую задачу в конец файла указав путь до файла reset_energy.php
*/5 * * * php /var/www/html/my_game/reset_energy.php
Подробнее про планировщик можете прочитать тут к примеру https://losst.ru/nastrojka-cron.
Я написал простые методы, вы же используйте это под себя. Соответственно в своем коде заранее закомментируйте или удалите строку "energy: 100" с функционалом восстановления при отправки сообщения. Ваш код увидел после написания ответа.
Закомментируйте все строки где встречается "energy: 100", кроме строки когда создается новый пользователь (иначе подозреваю, что могут быть ошибки). Для восстановления энергии игрока, используйте скрипт который будет срабатывать по планировщику. Если игроков не много, можете в цикле пройтись по всем игрокам, и у кого energy == 0 обновить данные. Тут уже зависит от бизнес логики вашей игры.