• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Как записать координаты игрока в базу данных? Или не срабатывает событие playerQuit

yagyar001

Новый участник
7 Июл 2021
38
3
18
Всем привет. Начал изучать разработку. Нужно записать в базу координаты, откуда игрок вышел из игры. Но вот беда, событие
Код:
playerQuit
не отлавливается вообще. Пример, который приведен в wiki:
Код:
function playerQuitHandler(player, exitType, reason) {
  let str = player.name;

  if (exitType != "kicked") {
    str += " quit.";
  } else {
    str = ` kicked. Reason: ${reason}.`;
  }

  console.log(str);
}

mp.events.add("playerQuit", playerQuitHandler);
Не работает. Все делаю на серверной стороне. Как можно сохранить по другому координаты? Или почему не срабатывает это событие? Могу предположить, что просто не успевает срабатывать, когда игру закрываешь. Но как то же серверы пишут последние координаты в базу.
 

JFounder

Участник портала
14 Сен 2021
29
7
55
JavaScript:
mp.events.add('playerQuit', async (player) => {
    if(player.getVariable('loggedIn') === false) return;
    let name = player.name;
    try {
        const [status] = await mp.db.query('UPDATE `accounts` SET `position` = ? WHERE username = ?', [JSON.stringify(player.position), player.name]);
        if(status.affectedRows === 1) console.log(`${name}'s data successfully saved.`);
        console.log(`${name} has quit the server.`);
    } catch(e) { errorHandler(e) }
})
Думаю не составит труда переписать для себя.
 

yagyar001

Новый участник
7 Июл 2021
38
3
18
JavaScript:
mp.events.add('playerQuit', async (player) => {
    if(player.getVariable('loggedIn') === false) return;
    let name = player.name;
    try {
        const [status] = await mp.db.query('UPDATE `accounts` SET `position` = ? WHERE username = ?', [JSON.stringify(player.position), player.name]);
        if(status.affectedRows === 1) console.log(`${name}'s data successfully saved.`);
        console.log(`${name} has quit the server.`);
    } catch(e) { errorHandler(e) }
})
Думаю не составит труда переписать для себя.
Благодарю за ответ, результат есть, но ругается теперь на переменную
Код:
connection
:
Screenshot_2.png

Причем в этом же файле используется эта переменная для подключения к базе и все работает. Можешь подсказать, в чем проблема?
Файл подключения к базе:
JavaScript:
const mysql = require('mysql');

// Создаём подключение к БД

mp.events.add('packagesLoaded', () => {
    const connection = mysql.createConnection({
        host: 'localhost', //Хост !
        user: 'root',       //Пользователь БД !
        database: 'server',   //Название БД !
        password: 'root',
        waitForConnections: true,
        connectionLimit: 10,    //Максимальное количество подключений **
        queueLimit: 0
    });

exports.connection = connection;
    //Проверка подключения к БД
    connection.connect(function(err) {
        if(err) {
            console.log(`Ошибка подключения БД. Включаю отладку: ` + err.stack);
            return;
        }
        console.log('[SERVER] Успешное подключение к БД!');
    });
});

//Делаем возможность подключения других файлов к БД

Файл, из которого идет запрос к базе:
JavaScript:
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}`);
                }
            });
        });
    })
});
 
Последнее редактирование:

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
Код:
mp.events.add('packagesLoaded', () => {
    const connection = mysql.createConnection({
        host: 'localhost', //Хост !
        user: 'root',       //Пользователь БД !
        database: 'server',   //Название БД !
        password: 'root',
        waitForConnections: true,
        connectionLimit: 10,    //Максимальное количество подключений **
        queueLimit: 0
    });

exports.connection = connection;
    //Проверка подключения к БД
    connection.connect(function(err) {
        if(err) {
            console.log(`Ошибка подключения БД. Включаю отладку: ` + err.stack);
            return;
        }
        console.log('[SERVER] Успешное подключение к БД!');
    });
});

Увидел это и аж сердце заболело, отвечаю.

Автор из серии: прочитал вчера про джаваскрипт, а завтра пошёл делать рп мод.
 

yagyar001

Новый участник
7 Июл 2021
38
3
18
Код:
mp.events.add('packagesLoaded', () => {
    const connection = mysql.createConnection({
        host: 'localhost', //Хост !
        user: 'root',       //Пользователь БД !
        database: 'server',   //Название БД !
        password: 'root',
        waitForConnections: true,
        connectionLimit: 10,    //Максимальное количество подключений **
        queueLimit: 0
    });

exports.connection = connection;
    //Проверка подключения к БД
    connection.connect(function(err) {
        if(err) {
            console.log(`Ошибка подключения БД. Включаю отладку: ` + err.stack);
            return;
        }
        console.log('[SERVER] Успешное подключение к БД!');
    });
});

Увидел это и аж сердце заболело, отвечаю.

Автор из серии: прочитал вчера про джаваскрипт, а завтра пошёл делать рп мод.
Я только учусь
 

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
Я только учусь
Нет, ты задаёшь вопросы на форуме, вместо того, чтобы читать нормально документацию. У тебя экспорт из функции, которая передана в рейджовский эвент. Тебя это не смущает?
 

yagyar001

Новый участник
7 Июл 2021
38
3
18
Нет, ты задаёшь вопросы на форуме, вместо того, чтобы читать нормально документацию. У тебя экспорт из функции, которая передана в рейджовский эвент. Тебя это не смущает?
Пока не очень) Ну другой запрос к базе выполняется же. А на UPDATE ошибка
 

TTox421

Участник портала
23 Май 2021
65
19
65
Код:
mp.events.add('packagesLoaded', () => {
    const connection = mysql.createConnection({
        host: 'localhost', //Хост !
        user: 'root',       //Пользователь БД !
        database: 'server',   //Название БД !
        password: 'root',
        waitForConnections: true,
        connectionLimit: 10,    //Максимальное количество подключений **
        queueLimit: 0
    });

exports.connection = connection;
    //Проверка подключения к БД
    connection.connect(function(err) {
        if(err) {
            console.log(`Ошибка подключения БД. Включаю отладку: ` + err.stack);
            return;
        }
        console.log('[SERVER] Успешное подключение к БД!');
    });
});

Увидел это и аж сердце заболело, отвечаю.

Автор из серии: прочитал вчера про джаваскрипт, а завтра пошёл делать рп мод.
Как же люблю умников которые вместо того что бы помочь начинающему показывают блестание своих мегаумов.
 
Реакции: yagyar001

TTox421

Участник портала
23 Май 2021
65
19
65
Пока не очень) Ну другой запрос к базе выполняется же. А на UPDATE ошибка
Код:
const mysql = require('mysql')
const connection = mysql.createConnection({
    host: 'localhost', //Хост !
    user: 'root',       //Пользователь БД !
    database: 'server',   //Название БД !
    password: 'root',
    waitForConnections: true,
    connectionLimit: 10,    //Максимальное количество подключений **
    queueLimit: 0
});

//Проверка подключения к БД
connection.connect(function(err) {
    if(err) {
        console.log(`Ошибка подключения БД. Включаю отладку: ` + err.stack);
        return;
    }
    console.log('[SERVER] Успешное подключение к БД!');
});

exports.connection = connection;
 
Последнее редактирование:

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
Как же люблю умников которые вместо того что бы помочь начинающему показывают блестание своих мегаумов.
Какже люблю умников, которые вместо того, чтобы ознакомиться с технологией с открытых источников, задают глупые вопросы на форумах, когда изначально не знают даже элементарных основ.
 

TTox421

Участник портала
23 Май 2021
65
19
65
Какже люблю умников, которые вместо того, чтобы ознакомиться с технологией с открытых источников, задают глупые вопросы на форумах, когда изначально не знают даже элементарных основ.
А нахер ты высираешь свое мнение, ты либо помоги человеку либо нахер твой текст тут нужен? Ты можешь составить напутствие, а не тупорылую критику с обсиранием человека. Вот именно из за таких как ты в it очень много токсичности. Человек обучается, нахуй его хейтить с азов? Когда так сложно просто скинуть ссылку на документацию и показать, что нужно читать. От твоих комментариев кроме раздора толку 0.
 

TTox421

Участник портала
23 Май 2021
65
19
65
Пока не очень) Ну другой запрос к базе выполняется же. А на UPDATE ошибка
Когда выполняешь запросы, проверяй их в БД, локальном или уже на сервере где то, если запрос выполняется, значит какая то ошибка в подключении, если запрос не выполняется, ошибка в самом запросе.

2021-11-26_00-55-09.png
 
Реакции: yagyar001

qwerty12355

Участник портала
27 Мар 2021
27
7
28
Пока не очень) Ну другой запрос к базе выполняется же. А на UPDATE ошибка очень) Ну другой запрос к базе выполняется же. А на UPDATE ошибка
Ты экспортишь connection, которого нет в глобал скоупе файла, вот и ошибка
 
Реакции: yagyar001

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
А нахер ты высираешь свое мнение, ты либо помоги человеку либо нахер твой текст тут нужен? Ты можешь составить напутствие, а не тупорылую критику с обсиранием человека. Вот именно из за таких как ты в it очень много токсичности. Человек обучается, нахуй его хейтить с азов? Когда так сложно просто скинуть ссылку на документацию и показать, что нужно читать. От твоих комментариев кроме раздора толку 0.
Может я сам решу где и какое мне мнение высирать?) Человек, который является автором темы, не учится. Человек, который учится, читает книги, документацию, в крайнем случае смотрит видео. Тут человеку лень, ему хочется побыстрее рп мод написать. Ему не поможет ответ на форуме, ему поможет желание развиваться самому.
 

TTox421

Участник портала
23 Май 2021
65
19
65
Может я сам решу где и какое мне мнение высирать?) Человек, который является автором темы, не учится. Человек, который учится, читает книги, документацию, в крайнем случае смотрит видео. Тут человеку лень, ему хочется побыстрее рп мод написать. Ему не поможет ответ на форуме, ему поможет желание развиваться самому.
Каким образом ты решил что ему хочется рп мод писать побыстрее?
 

TTox421

Участник портала
23 Май 2021
65
19
65
Пока не очень) Ну другой запрос к базе выполняется же. А на UPDATE ошибка
Код:
mp.events.add('playerQuit', async (player) => {
    if (player.isPlayerLogged() === false) return; // проверка авторизации игрока
    try {
        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);
      
      }
});
 
Реакции: yagyar001

yagyar001

Новый участник
7 Июл 2021
38
3
18
Код:
mp.events.add('playerQuit', async (player) => {
    if (player.isPlayerLogged() === false) return; // проверка авторизации игрока
    try {
        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);
    
      }
});
Спасибо за помощь и поддержку. Жаль, что не все люди понимают для чего придумали раздел форума "Решение проблем и помощь".
 
Последнее редактирование:

yagyar001

Новый участник
7 Июл 2021
38
3
18
Может я сам решу где и какое мне мнение высирать?) Человек, который является автором темы, не учится. Человек, который учится, читает книги, документацию, в крайнем случае смотрит видео. Тут человеку лень, ему хочется побыстрее рп мод написать. Ему не поможет ответ на форуме, ему поможет желание развиваться самому.
Захотел бы "написать" рп мод, взял бы слитый. Да и Бог достатком не обделил, чтобы с нуля заказать разработку мода. Но хочу сделать сам. Да, js знаю сносно. Node js тоже. И API rage mp открыл несколько недель назад. Неужели сложно помочь? Так если не хочешь, дело твое. Не отвечай в теме, так ты тоже поможешь, причем лучше, чем ответил бы по делу.
 
Реакции: Harland David Sanders

kurlikmurlik

Участник портала
18 Сен 2021
91
12
53
Захотел бы "написать" рп мод, взял бы слитый. Да и Бог достатком не обделил, чтобы с нуля заказать разработку мода. Но хочу сделать сам. Да, js знаю сносно. Node js тоже. И API rage mp открыл несколько недель назад. Неужели сложно помочь? Так если не хочешь, дело твое. Не отвечай в теме, так ты тоже поможешь, причем лучше, чем ответил бы по делу.
Я привык помогать в сложных вопросах, где ответ лежит глубоко в документации, или приходит только с практикой. Помогать лентяем я не привык, извини.
 

qwerty12355

Участник портала
27 Мар 2021
27
7
28
Ты экспортишь connection, которого нет в глобал скоупе файла, вот и ошибка
вообще я бы так сделал, если бы не юзал ORM и domain driven design

JavaScript:
const connection = exports.connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb",
  password: "пароль_от_сервера"
});

mp.events.add('packagesLoaded', () => {
  connection.connect((err) => {
    if (err) {
      console.error('Ошибка при подключении к БД');
      throw err;
    } else {
      console.log('Подключение к серверу MySQL успешно установлено');
    }
  });
});