This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Проблема clientside

mak74ikys

Новый участник
6 Авг 2024
9
0
3
Когда сам играю - все норм. Заходит друг когда я уже на сервере, после авторизации у него вызывается
auth.destroy(); чтобы удалить браузер авторизации. Так как я раньше зашел и выполнилось auth.destroy(); без проблем, но когда у друга вызывается - у меня тоже опять идет вызов

JavaScript:
let auth;
let ui;

mp.events.add("cef:Auth", () => {
    auth = mp.browsers.new("package:://UDM/globalcef/index.html");
    mp.gui.cursor.show(true, true);
    auth.call("ShowAuth", "auth");
});

mp.events.add("CheckAccount", (login, password) => {
    mp.events.callRemote("MysqlAccount", login, password);
});

mp.events.addDataHandler('Logged', function (entity, value, oldValue) {
    if (entity.type === 'player'){
        if(value)
        {
            auth.destroy();
            mp.gui.cursor.show(false, false);

            ui = mp.browsers.new("package:://UDM/ui/interface/index.html");
            ui.call("ShowUI", "hood");
        }
    }
  })
в чем может быть проблема, при выполнении у одного функции - выполняются и у другого игркоа.

serverside

JavaScript:
mp.events.add("MysqlAccount", (player, login, pass) => {
    connection.query("SELECT * FROM `accounts` WHERE `name` = ? AND `password` = ? LIMIT 1", [login, pass], function(e, r) {
        if (e) {
            console.log('Error on connection ... ');
            throw e;
        } else {
            if (r.length > 0) {
                player.setVariable("Logged", true);
                // Если аккаунт найден

                player.outputChatBox(`Welcome, ${r[0].name}!`);

                for (let key in r[0]) {
                    player.setVariable(key, r[0][key]);
                }
                player.position = new mp.Vector3(920.9298095703125, 49.96681594848633,  80.89845275878906);
                player.call("Rotate", [59.0]);
                player.dimension = 0;

            } else {
                //console.log('Account not found.');
            }
        }
    });
});
 
Последнее редактирование:

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
1,767
1,305
5
Проблема заключается в том, что вы используете глобальные переменные auth и ui, что приводит к конфликту при одновременном доступе нескольких игроков к ним. Вместо этого рекомендуется использовать локальные переменные внутри функции обработчика события. Также необходимо обработать случаи, когда переменные уже существуют, чтобы не происходило повторное создание браузера.

Пример исправления:
JavaScript:
mp.events.addDataHandler('Logged', function (entity, value, oldValue) {
    if (entity.type === 'player' && value) {
        if (entity.auth) {
            entity.auth.destroy();
        }
        mp.gui.cursor.show(false, false);

        entity.auth = mp.browsers.new("package:://UDM/ui/interface/index.html");
        entity.auth.call("ShowUI", "hood");
    }
});

Таким образом, каждый игрок будет иметь свои собственные переменные auth и ui, и вызовы функций не будут пересекаться между игроками.
 

Harvey Specter

Специалист
7 Ноя 2020
233
80
95
addDataHandler убери на клиенте, и сделай евентом, просто сохрани значение для player что он авторизировался
 
Реакции: mak74ikys