Урок Создание RolePlay мода на MySql #1

Zzzerl

Нуль
Регистрация
29 Сен 2017
Сообщения
8
Лучшие ответы
0
Репутация
9
Приветствую всех на портале P-I :dh: Сегодня я начну список уроков о том как создать свой полноценный RolePlay проект в Rage MP.

Внимание! В этом уроке я не буду показывать как делать красивые формы авторизации и тп. Я не дизайнер, я скриптер-программист. Но я покажу как адаптировать любую найденную из интернета =)

Что ж... начнем =)

1. Для начала нам нужно разобраться с базой данных
Если у вас нет MySql на пк, то качаем mysql.com или можно скачать целый пакет программ(как я) качаем OpenServer ospanel.io не буду останавливаться на этом, уроков куча по базам, поэтому идем дальше.


1. Создаем базу данных. допустим mybase.
2. Создаем таблицу в которой будем хранить данные пользователей users.
3. Добавляем следующие столбцы в таблицу users: id типа int с ключом AUTO_INCREMENT, name типа VARCHAR, email типа VARCHAR, password типа VARCHAR, money типа int

Готово!

2. Теперь нам необходимо подготовить всё для работы.
Скачиваем пакеты для сервера

Качаем и устанавливаем nodejs с nodejs.org

1. Открываем консоль, и переходим к папке с сервером командой: cd dir (вместо dir вводите путь к серверу, в моем случае) cd C:\RAGEMP\server-files
2. Инициализируем npm package.json файл: npm init -y
3. Устанавливаем необходимые нам пакеты: npm install mysql

Создаем js файлы в папках


1. в client_packages: index.js,login.js и папку login. В папке login мы создаем папку js, в ней файл main.js
2. в packages: создаем папку roleplay в ней мы создаем файлы: index.js - главный файл, mysql.js - файл управления базой, events.js - для функций

3. Перейдем непосредственно к написанию кода.
Первым делом напишем скачаем визуальную часть тут, идем в папку client_packages\login и распаковываем содержимое, должно выглядеть так

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Идем в папку js и открываем файл main.js
Ищем событие нажатие кнопки Авторизация в моем случае
PHP:
$('.validate-form').on('submit', function () {
    var check = true;
    for (var i = 0; i < input.length; i++) {
        if (validate(input[i]) == false) {
            showValidate(input[i]);
            check = false;
        }
    }
    return check;
});
И добавляем
PHP:
if (check) {
    let email = document.getElementById("email").value
    let pass = document.getElementById("pass").value
    mp.trigger("loginDataToServer", email, pass, 0); //отправляем данные формы на клиент
} else {
    console.log("Ошибка");
}
в итоге получается
PHP:
$('.validate-form').on('submit', function () {
    var check = true;
    for (var i = 0; i < input.length; i++) {
        if (validate(input[i]) == false) {
            showValidate(input[i]);
            check = false;
        }
    }
    if (check) {
        let email = document.getElementById("email").value
        let pass = document.getElementById("pass").value
        mp.trigger("loginDataToServer", email, pass, 0); //отправляем данные формы на клиент
    } else {
        console.log("Ошибка");
    }
    return check;
});
Идем в папку client_packages и открываем файл index.js
PHP:
require("login.js"); //указываем файл авторизации
mp.gui.chat.show(true); //отображаем чат
mp.gui.chat.activate(false);//отключаем чат
Идем в файл login.js и пишем
PHP:
var loginBrowser = mp.browsers.new("package://login/index.html"); //создаем локальную переменную браузера и укажем ссылку на нашу форму. После того как ресурсы скачаются, автоматически сработает скрипт index.js а затем login.js то есть запуститься наша форма
mp.gui.cursor.show(true, true); //включаем курсор
mp.events.add("loginDataToServer", (email, pass, state) => { //слушаем данные с формы авторизации
    mp.events.callRemote("sendDataToServer", email, pass, state); //отправим данные на сервер
});
mp.events.add("loginHandler", (handle) => { //слушаем данные с сервера
    switch (handle) {
        case "success": //если авторизовался успешно
        {
            loginBrowser.destroy(); //закрываем браузер с формой
            mp.gui.chat.push("Вы успешно авторизовались"); //пишем сообщение о авторизации
            mp.gui.chat.activate(true); //активируем чат
            mp.gui.cursor.show(false, false); //прячем курсор
            break;
        }
    }
});
Далее переходим в серверную часть packages\roleplay и открываем файл mysql.js и пишем
PHP:
"use strict";

let mysql = module.exports; //настраиваем модуль экспорта
console.log('Коннект к мускулу...'); //логи
var mysql2 = require('mysql'); //подключаем мускул
mysql.connection = mysql2.createConnection({
    host: 'хост',
    user: 'пользователь',
    password: 'пароль',
    database: 'база'
});
mysql.connection.connect(function (err) { //создаем подключение
    if (err) { //если ошибка подключения
        console.log("Ошибка подключения к базе данных...");
        throw err;
    } else {
        console.log('Подключение к базе, успешно!');
    }
});
console.log('База загружена...');
setInterval(function () { //создаем таймер на выбор таблицы каждые 10 секунд, странная фигня, но если долго не отправлять данные на сервер мускула, то она разрывает подключение
    mysql.connection.query('select 1', function (err, results) {
    });
}, 10000);
Открываем файл events.js и пишем
PHP:
var mysql = require('./mysql.js'); // наш скрипт мускула
//Эвенты
mp.events.add("playerJoin", checkJoinPlayer); //если игрок зашел на сервер
mp.events.add("sendDataToServer", sendDataToServer); //получаем данные с клиента

//функции
function checkJoinPlayer(player) //если игрок зашел на сервер
{
    console.log(`${player.name} вошел на сервер.`);
    player.loggedInAs = "";//создаем переменную сессии

}
function sendDataToServer(player, email, pass, state) //получаем данные с клиента
{
    let loggedAccount = mp.players.toArray().find(p => p.loggedInAs == email); //проверяем сессию
    switch(state)
    {
        case 0:
        {
            if(loggedAccount)//если авторизован
            {
                console.log("Игрок уже авторизован.");
            }
            else
            {
                mysql.connection.query('SELECT `password`,`name` FROM `users` WHERE `email` = ?', [email], function(err, res)
                {
                    if(res.length > 0)//если аккаунт есть
                    {
                        let sqlPass = res[0]["password"];
                        let sqlName = res[0]["name"];
                        if(sqlPass == pass) //если введенный пароль равен из базы то
                        {
                            player.name = sqlName; //устанавливаем ник игрока
                            player.call("loginHandler", ["success"]); //отправляем данные на клиент
                            loadAccount(player);//загружаем аккаунт
                        }
                    }
                });
            }
        }
    }
}
function loadAccount(p)
{
    mysql.connection.query('SELECT * FROM `users` WHERE name = ?', [p.name], function(err, res, row){
         if(err) console.log(err);
         if(res.length)
         {
            p.loggedInAs = res[0]["email"]; //Создаем сессию игрока
         }
    });
}
Далее идем в файл index.js и добавляем ссылки
PHP:
require('./events.js'); //Эвенты
4. Настройка сервера и запуск
Идем в папку с сервером и открываем conf.json
PHP:
{
    "maxplayers" : 100, //макс число игроков
    "name" : "Pawno-info", //название сервер
    "gamemode" : "roleplay", //гейммод
    "stream-distance" : 500.0, //дистанция прорисовки вроде
    "announce" : false, //видно ли сервер в поиске
    "csharp" : "disabled", //забыл....
    "port": 22005, //порт
    "language": "ru", //язык
    "url":"http://pawno-info.ru/", //сайт
    "voice-chat": true, //воис чат
    "voice-chat-sample-rate": 48000 //тикрейт воиса
}
Запускаем сервер и тестим =)
Это моя первая тема, я плохо умею объяснять. Поэтому если что-то забыл то желательно дайте мне знать, дополню. Если зайдет эта тема, то продолжу делать уроки по Rage MP. А в следующем уроке планируется, создание персонажа и спавн игрока
 
Последнее редактирование модератором:
Сверху Снизу