У меня есть бот, который я закодировал в node.js, и пользователи взаимодействуют с этим ботом. Вы можете говорить с ним и использовать команды, но все довольно хорошо. Нет постоянного хранилища данных (за исключением базы данных MySQL для отслеживания определенных вещей, таких как количество золота, которое человек получает, взаимодействуя с ботом)
1003 *
Я работал над созданием некоторых игр с ботом, с которыми пользователи могут играть на деньги. И игра, которую я написал, была игрой в блэкджек. (Простой 21 против бота)
1007 *
Пользователь получает две карты для начала и может либо ударить, либо остаться, и значения складываются. Однако сложная часть этого заключается в том, что одновременно может играть только один человек из-за конфликтующих вызовов функций. Поэтому мне было интересно, есть ли способ использовать node.js для временного хранения постоянных асинхронных данных.
Так что я мог бы написать что-то вроде:
function playBlackjack(userid, betamount){
session_start();
var unique_id = session['id'];
{ ... } //all the code for the various things like hitMe(), stay(), start(), endGame() etc...
giveReward(session['id']); //for if they win/lose it'll get removed/added to their mysql user
session_end(); //this cleanly ends the players session and if they were to run the blackjack command again it would start a fresh session, giving their userid a new session variable
}
Таким образом, пользователь может уйти от бота, вернуться завтра, и, поскольку сеанс не закончился, он может продолжить с того места, на котором остановился, и продолжить играть, пока его сеанс не закончился чисто и данные других пользователей для его уникального сеансы отслеживаются индивидуально.
Как правило, я не хочу использовать файл JSON для этого, потому что я не хочу засорять сервер файлами JSON (конечно, я мог бы настроить их на автоматическое удаление через X времени, но если есть более элегантный решение, которое я хотел бы исследовать это)
1018 *
Далее я хочу попробовать написать мини-игру DND, в которой бот генерирует случайные сценарии (эти части уже выполнены), но мне нужны постоянные сеансы, чтобы, когда бот предлагал пользователю бросить кубик и ожидал его ответа, они введите !roll d20
и значение, полученное из списка, можно затем использовать в боте для развития истории. Интересно, что является самым чистым способом справиться с этим тоже. Я не думаю, что MySQL будет работать здесь, равно как и JSON-файл, если я не создам JSON-файл с именем пользователя, датой / временем, историей (другими данными, такими как золото, статистика и т. Д.), Чтобы история оставалась постоянной.
1023 *
Есть идеи? Если JSON-маршрут лучший, я предполагаю, что мне нужно будет создать файлы вроде:
DND_userid.json
BLACKJACK_userid.json
1031 *
, который будет иметь несколько массивов с session_ids
Полагаю, это будет выглядеть примерно так
{
"user_id" : "mrsodasexy",
"mode": "DND",
"sessions": [
{
"id" : "845skjjd93jf94f",
"data": [
{
"date_start" : "08/27/2018 15:11:11",
"date_end" : "08/27/2018 16:30:32",
"story" : " ... ", //as HTML string
"last_sentence" : "you rested in the inn",
"stats" : [ ... ],
"inventory" : [ ... ]
}
]
},
{
"id" : "167sjd93j9woiwiw",
"data": [
{
"date_start" : "08/28/2018 16:14:16",
"date_end" : "",
"story" : " ... ", //as HTML string
"last_sentence" : "and you found 20 pieces of gold",
"stats" : [ ... ],
"inventory" : [ ... ]
}
]
}
]
}
А я бы просто посмотрел каждую сессию, где date_end пуст, и продолжил бы с этой сессии?
Это лучший способ сделать это?
1042 *
РЕДАКТИРОВАТЬ: Слово, которое я ищу, похоже на кеш
кеш сессии для игры. Я сохраню состояние после истечения времени в базе данных, но мне нужен постоянный кеш между session_start (); и session_end ();
потому что все, что я хочу, это состояние карточной игры, которую нужно сохранить ВО ВРЕМЯ карточной игры. Так что, если я раздал 7 карт, я могу сохранить его в массиве cards [] и для этого человека, и пока другой человек играет, у него есть свой собственный массив cards [], который заполняется значениями карт, поскольку они играют ТОЛЬКО в пределах их сессия. После завершения сеанса переменные карты уничтожаются. По сути, я хочу сохранить состояние игры в локальной памяти (RAM) или что-то в этом роде, используя что-то похожее на session_start в PHP
* * * Тысяча сорок-девять 1050 *