let bcrypt = require('bcrypt');
let saltRounds = 10;
let counter = 4;
const DB = require('../system/DB.js');
mp.events.add('playerReady', player => {
player.login = false;
player.isPlayerLogged = () => player.login;
player.call('showLoginDialog');
});
mp.events.add('playerQuit', async (player) => {
if (player.isPlayerLogged() === false) return; // проверка авторизации игрока
try {
const [status] = await mp.DB.connection.query('UPDATE accounts SET lastPosX = ?, lastPosY = ?, lastPosZ = ? WHERE login = ? LIMIT 1', [player.position.x, player.position.y, player.position.z, player.login], function(err) {
if (status.effectedRows == 1) {
console.log(`ПОзиция игрока ${player.login} обновлена`);
}
console.log(`Игрок ${player.login} вышел`);
});
} catch (error) {
console.log('error', error);
}
});
mp.events.add('onLoginAttempt', (player, data) => {
data = JSON.parse(data);
DB.connection.query('SELECT * FROM accounts WHERE login = ? LIMIT 1', [data.login], function (err, results) {
if (counter == 0) { // 3 раза неверный пароль - кик
player.kick();
}
if (results.length == 0) {
return player.call('showAuthError', [`Неверный логин или пароль. Осталось попыток: ${--counter}`]);
}
let dbPass = results[0].pass;
bcrypt.compare(data.password, dbPass, function(err, isMatched) {
if (isMatched) {
player.login = true;
player.call('hideLoginDialog');
} else {
player.call('showAuthError', [`Неверный логин или пароль`]);
}
});
if (data.password == dbPass) {
player.login = true;
player.call('hideLoginDialog');
} else {
player.call('showAuthError', [`Неверный логин или пароль. Осталось попыток: ${--counter}`]);
}
})
});
mp.events.add('onRegisterAttempt', (player, data) => {
data = JSON.parse(data);
DB.connection.query('SELECT * FROM accounts WHERE login = ? LIMIT 1', [data.login], function (err, results) {
if (results.length == 1) {
return player.call('showAuthError', [`Игрок с ником ${data.login} существует, придумайте другой ник`]);
}
bcrypt.hash(data.password, saltRounds, function(errHash, passwordHash) {
DB.connection.query('INSERT INTO accounts SET login = ?, pass = ?, socialClub = ?', [data.login, passwordHash, player.rgscId], function(err, results) {
if (!err) {
return player.call('hideLoginDialog');
} else {
return console.log(`ошибка: ${err}`);
}
});
});
})
});