Ïåðâûì äåëîì
íàïèøåì ñêà÷àåì âèçóàëüíóþ ÷àñòü òóò
ÒÛÊ, èäåì â ïàïêó
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'); //Ýâåíòû
[Ñêðûòü]