Zzzerl
Нуль
- Регистрация
- 29 Сен 2017
- Сообщения
- 8
- Лучшие ответы
- 0
- Репутация
- 9
Приветствую всех на портале P-I :dh: Сегодня я начну список уроков о том как создать свой полноценный RolePlay проект в Rage MP.
Внимание! В этом уроке я не буду показывать как делать красивые формы авторизации и тп. Я не дизайнер, я скриптер-программист. Но я покажу как адаптировать любую найденную из интернета =)
Что ж... начнем =)
1. Для начала нам нужно разобраться с базой данных
2. Теперь нам необходимо подготовить всё для работы.
3. Перейдем непосредственно к написанию кода.
4. Настройка сервера и запуск
Это моя первая тема, я плохо умею объяснять. Поэтому если что-то забыл то желательно дайте мне знать, дополню. Если зайдет эта тема, то продолжу делать уроки по 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
Готово!
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 - для функций
Качаем и устанавливаем 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
Ищем событие нажатие кнопки Авторизация в моем случае
И добавляем
в итоге получается
Идем в папку client_packages и открываем файл index.js
Идем в файл login.js и пишем
Далее переходим в серверную часть packages\roleplay и открываем файл mysql.js и пишем
Открываем файл events.js и пишем
Далее идем в файл index.js и добавляем ссылки
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Идем в папку 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;
});
PHP:
require("login.js"); //указываем файл авторизации
mp.gui.chat.show(true); //отображаем чат
mp.gui.chat.activate(false);//отключаем чат
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;
}
}
});
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);
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"]; //Создаем сессию игрока
}
});
}
PHP:
require('./events.js'); //Эвенты
Идем в папку с сервером и открываем 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 //тикрейт воиса
}
Последнее редактирование модератором: