Если Вы новичок, то советуем изучить 1 часть создания игры Вкнонтакте, именно с конца той статьи мы начинаем делать обновление для нашего бота, погнали!
В прошлой статье мы сделали регистрацию, кнопку бонус и игру "Казино"
В комментариях к прошлой статье нас попросили сделать кейсы и личный кабинет, давайте это и реализуем
Начем с простого, это личный кабинет. Открываем наш исходный код и начинаем писать:
Находим строчку
$bonus = $vk->buttonText('⏰ Бонус!', 'green', ['command' => 'bonus']);
и добавляем новую кнопку:
$profile = $vk->buttonText('📜 Профиль', 'blue', ['command' => 'profile']);
Именно так создаются кнопки, о них на нашем сайте уже было написано несколько статей
Теперь когда кнопка наша создана, добавим ее к общим кнопкам, пока она у нас была одна - Бонус
Найти:
$vk->sendButton($peer_id, "Приветствую тебя, @id$id ($userinfo[first_name] $userinfo[last_name]), ты теперь один из нас, вступай в ряды мощных панамеровцев!", [ [$bonus]]);
Заменить:
$vk->sendButton($peer_id, "Приветствую тебя, @id$id ($userinfo[first_name] $userinfo[last_name]), ты теперь один из нас, вступай в ряды мощных панамеровцев!", [[$profile], [$bonus]]);
Найти:
if ($cmd[0] == 'казино'){ // Первая команда
Сверху добавим новую команду:
if ($cmd[0] == 'меню'){
$vk->sendButton($peer_id, "📋Список команд и кнопок:\nКазино - Игра в казино \n", [[$profile], [$bonus]]);
}
Проверим?
Кнопка появилась, но она не работает, давайте сделаем на нее нужные действия:
Находим наш switch ($payload)
case 'profile':
$user_id = $id_reg_check['id'];
$user_nick = $id_reg_check['nick'];
$user_balance = $id_reg_check['balance'];
$user_reg = date("d.m.y H:i:s", $id_reg_check['time']);
$vk->sendMessage($peer_id,"$userinfo[first_name] $userinfo[last_name], Ваш игровой профиль:\n🆔 ID: $user_id \n🎫 Ник: $user_nick\n💶 Баланс: $user_balance\n⌚ Аккаунт создан: $user_reg");
break;
А выше находим и заменяем строку :
$id_reg_check = $db->query('SELECT vk_id FROM users WHERE vk_id = ?i', $id)->fetch_assoc()['vk_id'];
if (!$id_reg_check and $id > 0) {
На
$id_reg_check = $db->query('SELECT * FROM users WHERE vk_id = ?i', $id)->fetch_assoc(); // Пытаемся получить пользователя который написал сообщение боту
if (!$id_reg_check['vk_id'] and $id > 0) {
Таким образом что бы не создавать лишний запрос к MySQL мы получим данные сразу все, проверим пользователя на регистрацию и дальше будем манипулировать этими данными.
Давайте проверим что получилось:
Наш профиль работает, а значит мы сможем его дорабатывать и дополнять по мере разработки нашей игры. Конечно все зависит только от ваших пожеланий которые вы пишите в комментариях, к сожалению предложения в лс могут потеряться и забыться, поэтому рекомендую писать именно в комментарии, а мы продолжаем
Следующая на очереди, кейсы. Тут будет немного сложнее и скорее всего придется доработать немного базу данных, дамп будет вместе с исходниками.
Добавляем новую кнопку рядом к кнопке Профиль, я думаю вы помните куда мы ее вставляли
$case = $vk->buttonText('📦 Кейсы', 'blue', ['command' => 'case']);
Добавляем так же кнопку в меню и регистрацию, сделаем ее рядом с профилем, а бонус будет переноситься на новую строку
Найти везде (в 2х местах):
[[$profile], [$bonus]]
Заменить на:
[[$case, $profile], [$bonus]]
Так у нас получится вид кнопок следующий:
Теперь повесим на кнопку функционал, но давайте еще сделаем текстовые команды кнопок, так как еще не во всех клиентах есть кнопки
Выше над командой меню вставим набор кейсов которые эмулируют кнопки:
// Эмуляция нажатия кнопок с помощью команд
switch ($cmd[0])
{
case 'кейсы':
$payload = 'case';
break;
case 'бонус':
$payload = 'bonus';
break;
case 'профиль':
$payload = 'profile';
break;
}
Проверим как это работает:
Работает, небольшой комментарий к коду как это работает:
Все очень просто, в переменной $cmd храниться массив слов написанный через пробел, берем первое слово $cmd[0] (ключи массива начинаются с нуля по умолчанию) и проверяем текст. Если бот получил текст, например, профиль, мы записываем в переменную $payload
команду соответствующую кнопке - profile, так работает импровизированная эмуляция кнопок, это выглядит более приятнее и читаемо, нежели городить конструкции if else: Пример if ($cmd[0] == 'профиль' or $payload == 'profile') {// code}
Теперь нужно сделать логику на кейсы, ну и сами кейсы добавить тоже не помешает 🙂
Сначала давайте предложим пользователю виды кейсов и что он может получить:
Для начала мы добавим только 2 кейса, но в следующей статье с 3 частью мы сделаем динамические кейсы, которые можно будет добавлять и удалять командой
Я покажу реализацию самых простых кейсов, но так как наш бот совсем сырой и в нем очень мало функций, то придется импровизировать и добавить несколько выпадающих товаров фейковыми, но 1 сделаем рабочим и редковыпадаемым, как это обычно и бывает:
Добавляем case 'bonus'
case 'case': // Пока это все бутафория, потому что у нас нет еще никаких систем куда можно было применять кейсы, но смысл их работы организуем сейчас на будущий удел :)
$case_1 = "1. 🔹 Обычный 🔹\nЦена: 1кк\n\nМожет выпасть: \n1. Золотой пропуск \n2. 7кк бакосв \n3. Кепка барыги";
$case_2 = "2. 🔹 Премиум 🔹\nЦена: 5кк\n\nМожет выпасть: \n1. 15кк \n2. Иммунитет \n3. Титановый пропуск";
$vk->sendMessage($peer_id,"$userinfo[first_name] $userinfo[last_name], список доступных кейсов:\n$case_1\n\n$case_2\n\nЧто бы купить кейс, пришлите команду: Кейс N (Где N номер кейса)");
break;
Теперь где наши команды добавим команду кейс N
if ($cmd[0] == 'кейс' and $cmd[1] > 0 and $cmd[1] < 3){ // Для 2х кейсов используем > 0 и < 3 (1,2 будет TRUE все остальное FALSE и команда игнорируется)
if ($cmd[1] == 1) { // Если выбрали 1 кейс
if($id_reg_check['balance'] >= 1000000){ // Проверка на стоимость
$db->query("UPDATE users SET balance = balance - ?i WHERE vk_id = ?i", 1000000, $id);
$rand_case = mt_rand(2,3); // Кол-во призов, но все мы знаем что топ выпадает реже :) давайте что то придумаем
// Изначально выбираем среди мусора, редкий дроп выпадает отдельно, для него ниже мы пишем отдельный рандом
$rand_rare = mt_rand(1, 10); // Делаем шанс выпадение редкого дропа 1 из 10, можно поиграться
if ($rand_rare == 10){ // Если выпало 10 то выдаем редкий дроп, у нас это под номером 1 (бабло)
$rand_case = 1; // Выбираем из массива именно этот дроп с ключем 1
$db->query("UPDATE users SET balance = balance + ?i WHERE vk_id = ?i", 7000000, $id); // Выдаем бонус
}
$array_prizes = [2 => 'Золотой пропуск', 1 => '7кк', 3 => 'Премиум кейс'];
$vk->sendMessage($peer_id,"Вам выпадает [".$array_prizes[$rand_case]."]");
} else {// Если бабок не хватает то
$vk->sendMessage($peer_id,"✖ Вам не хватает валюты ✖");
}
}
if ($cmd[1] == 2) { // если второй
if ($id_reg_check['balance'] >= 5000000) { // Проверка на стоимость
$db->query("UPDATE users SET balance = balance - ?i WHERE vk_id = ?i", 15000000, $id);
$rand_case = mt_rand(2, 3); // Кол-во призов, но все мы знаем что топ выпадает реже :) давайте что то придумаем
$rand_rare = mt_rand(1, 10);// Делаем шанс выпадение редкого дропа 1 из 10, можно поиграться
if ($rand_rare == 10) {
$rand_case = 1;
$db->query("UPDATE users SET balance = balance + ?i WHERE vk_id = ?i", 15000000, $id);
}
$array_prizes = [2 => '10 обычных кейсов', 1 => '15кк', 3 => 'Автомобиль panamera'];
$vk->sendMessage($peer_id, "Вам выпадает [" . $array_prizes[$rand_case] . "]");
} else { // Если бабок не хватает то
$vk->sendMessage($peer_id, "✖ Вам не хватает валюты ✖");
}
}
}
я добавил максимум комментариев что бы все было понятно, эта команда написана на коленке, конечно можно ее улучшить и доработать, чем мы и будем заниматься в дальнейшем, но для примера и понимания работы кейсов, этого достаточно
Проверим:
Мне безумно повезло, с первого раза выпал редкий дроп, но повезет ли остальным? 😀 В бд новых таблиц и столбцов не появилось, значит в нее ничего не добавляем.
А что вы хотите видеть в боте дальше, решать только вам, ваши предложения можете оставлять в комментариях, а у меня на сегодня все, надеюсь эта статья будет такой же полезной как и предыдущие, обязательно обозначьте это лайком! ❤️
Исходник (при распаковке ошибка? Обновите WINRAR!):
Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter