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

Проблема Краш сервера при реконнекте

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
Распишу какие действия приводят к крашу:
Захожу на сервер, авторизуюсь, выбираю персонажа, переподключаюсь через ф1.

Все данные персонажей у меня хранятся в виде player.setVariable/getVariable. Жалуется он на таймер который обновляет те самые данные. Выглядит это так:
JavaScript:
                      setInterval(() => {
                            let nickname = player.getVariable('nickname')
                            let owner = player.getVariable('owner')

                            let hair = player.getVariable('hair')
                            let masks = player.getVariable('masks')
                            let torsos = player.getVariable('torsos')
                            let legs = player.getVariable('legs')
                            let bags = player.getVariable('bags')
                            let shoes = player.getVariable('shoes')
                            let accessories = player.getVariable('accessories')
                            let undershirts = player.getVariable('undershirts')
                            let armors = player.getVariable('armors')
                            let decals = player.getVariable('decals')
                            let tops = player.getVariable('tops')
                            let hats = player.getVariable('hats')
                            let glasses = player.getVariable('glasses')
                            let ears = player.getVariable('ears')
                            let watches = player.getVariable('watches')
                            let bracelets = player.getVariable('bracelets')
                            let sex = player.getVariable('sex')

                            let NoseWidth = player.getVariable('NoseWidth')
                            let NoseHeight = player.getVariable('NoseWidth')
                            let NoseLength = player.getVariable('NoseWidth')
                            let NoseBridge = player.getVariable('NoseWidth')
                            let NoseTip = player.getVariable('NoseWidth')
                            let NoseBridgeShift = player.getVariable('NoseWidth')
                            let BrowHeight = player.getVariable('NoseWidth')
                            let BrowWidth = player.getVariable('NoseWidth')
                            let CheekboneHeight = player.getVariable('NoseWidth')
                            let CheekboneWidth = player.getVariable('NoseWidth')
                            let CheeksWidth = player.getVariable('NoseWidth')
                            let Eyes = player.getVariable('NoseWidth')
                            let Lips = player.getVariable('NoseWidth')
                            let JawWidth = player.getVariable('NoseWidth')
                            let JawHeight = player.getVariable('NoseWidth')
                            let ChinLength = player.getVariable('NoseWidth')
                            let ChinPosition = player.getVariable('NoseWidth')
                            let ChinWidth = player.getVariable('NoseWidth')
                            let ChinShape = player.getVariable('NoseWidth')
                            let NeckWidth = player.getVariable('NoseWidth')

                            let level = player.getVariable('level')
                            let exp = player.getVariable('exp')
                            let maxexp = player.getVariable('maxexp')
                            let money = player.getVariable('money')
                            let bank = player.getVariable('bank')
                            let lastpos = player.getVariable('lastpos')
                            let fraction = player.getVariable('fraction')
                            let family = player.getVariable('family')
                            let dimension = player.getVariable('dimension')
                            
                            player.call('hudRender', [maxexp, exp, level, money, bank]);
                        }, 1000)

Могу предположить что стоит сделать отдельный ивент с таймером который начинает работать после выбора персонажа, возможно, просто таймер начинает работу при подключении, но т.к. персонаж не выбран - данные ему взять неоткуда. На самом деле это очень сомнительные размышления. При краше ошибка указывает именно на первую строку в таймере. Решил для проверки ее убрать и она стала указывать на следующую строку. То есть по факту дело не в самих переменных
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Советую обходить SharedData как можно больше, потому что все данные, которые записаны туда - хранятся на пк всех игроков, что равняется использованию бОльшей оперативной памяти игрой, чем требуется. Использовать её лучше только для тех вещей, которые тебе нужно синхронизировать между всеми, но такие данные, как уровень, експ, деньги и прочее - явно не нужны всем игрокам на сервере, если смотреть от лица конкретного игрока. Настройки лица у тебя вообще все до единой берутся из 1 даты, кек.
Проблема данного кода (именно краш или ошибка) скорее всего связана именно с обращением к player, сущности, которая еще не существует, делай проверку внутри своего интервала
JavaScript:
if (player == null) return;
Ну и обновлять каждую секунду ВСЕ данные - это глупость. Либо у тебя каждую секунду меняется уровень, деньги и прочее - либо это плохое решение.
 
Последнее редактирование:

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
А каким образом тогда хранить данные?
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
А каким образом тогда хранить данные?
У клиента храни переменные, которые нужны только ему самому (лвл, експ, деньги и прочее, что не нужно знать никому кроме него самого со стороны клиента), отправляй их через TriggerEvent.
 

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
Все равно выдает это:
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
На счёт этого я тебе дал ответ в самом первом посте.
player у тебя не определён, ты не можешь обращаться по переменной, которая не является multiplayer object.
Делай проверку в самом начале своего плохого таймера на то, существует ли player. mp.players.exist, например
 

seaniwe

Новый участник
18 Сен 2020
20
1
60
Скинь всю функцию, что понять где у тебя player и кто он такой.
 

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
Скинь всю функцию, что понять где у тебя player и кто он такой.
JavaScript:
mp.events.add("AuthAccept", (player, data) =>{
    if (player == null) return;
    data = JSON.parse(data);
    //'SELECT * FROM characters WHERE binary owner = ?',[data.Login], function(error, results, fields
    var conlog = connection.query('SELECT * FROM accounts WHERE binary login = ? AND password = ?', [data.Login, data.Password], function (error, results, fields) {
        if(results.length == 0){
            ClearInput = "Неправильный логин или пароль";
            TextClearInput = "Вы ввели неправильные данные. Вы можете зарегистрировать новый аккаунт, либо восстановить старый"
            player.call('Notification', [ClearInput, TextClearInput])
        }
        if(results.length == 1){
            var loginAuth = data.Login;
            player.spawn(new mp.Vector3(-1289.03173828125, 441.0468200683594, 97.69454193115234), 130.69454193115234);
            player.dimension = Math.floor(Math.random() * 50000) + 20000;
           
            connection.query('SELECT * FROM characters WHERE binary owner = ?',[data.Login], function(error, results, fields){
                firstPersonName = results[0].name + ' ' +results[0].surname;
                if(results.length === 2){
                    firstPersonName = results[0].name + ' ' +results[0].surname;
                    secondPersonName = results[1].name + ' ' +results[1].surname;
                }
                if(results.length === 3){
                    firstPersonName = results[0].name + ' ' +results[0].surname;
                    secondPersonName = results[1].name + ' ' +results[1].surname;
                    threePersonName = results[2].name + ' ' +results[2].surname;
                }
               
                if(results[0].sex === 0){
                    player.model = mp.joaat('mp_m_freemode_01');
                }
                if(results[0].sex === 1){
                    player.model = mp.joaat('mp_f_freemode_01');
                }

                let Hair = results[0].hair;
                let Masks = results[0].Masks;
                let Torsos = results[0].Torsos;
                let Legs = results[0].Legs;
                let Bags = results[0].Bags;
                let Shoes = results[0].Shoes;
                let Accessories = results[0].Accessories;
                let Undershirts = results[0].Undershirts;
                let Armors = results[0].Armors;
                let Decals = results[0].Decals;
                let Tops = results[0].Tops;

                let NoseWidth = results[0].NoseWidth;
                let NoseHeight = results[0].NoseHeight;
                let NoseLength = results[0].NoseLength;
                let NoseBridge = results[0].NoseBridge;
                let NoseTip = results[0].NoseTip;
                let NoseBridgeShift = results[0].NoseBridgeShift;
                let BrowHeight = results[0].BrowHeight;
                let BrowWidth = results[0].BrowWidth;
                let CheekboneHeight = results[0].CheekboneHeight;
                let CheekboneWidth = results[0].CheekboneWidth;
                let CheeksWidth = results[0].CheeksWidth;
                let Eyes = results[0].Eyes;
                let Lips = results[0].Lips;
                let JawWidth = results[0].JawWidth;
                let JawHeight = results[0].JawHeight;
                let ChinLength = results[0].ChinLength;
                let ChinPosition = results[0].ChinPosition;
                let ChinWidth = results[0].ChinWidth;
                let ChinShape = results[0].ChinShape;
                let NeckWidth = results[0].NeckWidth;

                let Hats = results[0].Hats;
                let Glasses = results[0].Glasses;
                let Ears = results[0].Ears;
                let Watches = results[0].Watches;
                let Bracelets = results[0].Bracelets;

                player.setClothes(...Hair.split(",").map(el => Number(el)));
                player.setClothes(...Masks.split(",").map(el => Number(el)));
                player.setClothes(...Torsos.split(",").map(el => Number(el)));
                player.setClothes(...Legs.split(",").map(el => Number(el)));
                player.setClothes(...Bags.split(",").map(el => Number(el)));
                player.setClothes(...Shoes.split(",").map(el => Number(el)));
                player.setClothes(...Accessories.split(",").map(el => Number(el)));
                player.setClothes(...Undershirts.split(",").map(el => Number(el)));
                player.setClothes(...Armors.split(",").map(el => Number(el)));
                player.setClothes(...Decals.split(",").map(el => Number(el)));
                player.setClothes(...Tops.split(",").map(el => Number(el)));

                player.setFaceFeature(0, NoseWidth);
                player.setFaceFeature(1, NoseHeight);
                player.setFaceFeature(2, NoseLength);
                player.setFaceFeature(3, NoseBridge);
                player.setFaceFeature(4, NoseTip);
                player.setFaceFeature(5, NoseBridgeShift);
                player.setFaceFeature(6, BrowHeight);
                player.setFaceFeature(7, BrowWidth);
                player.setFaceFeature(8, CheekboneHeight);
                player.setFaceFeature(9, CheekboneWidth);
                player.setFaceFeature(10, CheeksWidth);
                player.setFaceFeature(11, Eyes);
                player.setFaceFeature(12, Lips);
                player.setFaceFeature(13, JawWidth);
                player.setFaceFeature(14, JawHeight);
                player.setFaceFeature(15, ChinLength);
                player.setFaceFeature(16, ChinPosition);
                player.setFaceFeature(17, ChinWidth);
                player.setFaceFeature(18, ChinShape);
                player.setFaceFeature(19, NeckWidth);

                if(Hats != "0"){
                    player.setProp(...Hats.split(",").map(el => Number(el)));
                }
                if(Glasses != "0"){
                    player.setProp(...Glasses.split(",").map(el => Number(el)));
                }
                if(Ears != "0"){
                    player.setProp(...Ears.split(",").map(el => Number(el)));
                }
                if(Watches != "0"){
                    player.setProp(...Watches.split(",").map(el => Number(el)));
                }
                if(Bracelets != "0"){
                    player.setProp(...Bracelets.split(",").map(el => Number(el)));
                }

                var firstPerson = [
                    firstPersonName,
                    results[0].level,
                    results[0].money,
                    results[0].bank
                ]

                if(results.length === 2){
                    var secondPerson = [
                        secondPersonName,
                        results[1].level,
                        results[1].money,
                        results[1].bank
                    ]
                }

                if(results.length === 3){
                    var secondPerson = [
                        secondPersonName,
                        results[1].level,
                        results[1].money,
                        results[1].bank
                    ]
   
                    var threePerson = [
                        threePersonName,
                        results[2].level,
                        results[2].money,
                        results[2].bank
                    ]
                }

                if(results.length === 1){
                    player.call('SelectPlayer', [firstPerson])

                }
                if(results.length === 2){
                    player.call('SelectPlayer',  [firstPerson, secondPerson]);

                }
                if(results.length === 3){
                    player.call('SelectPlayer',  [firstPerson, secondPerson, threePerson]);

                }

                mp.events.add("SelectFirstAccount", (player) =>{
                        if (player == null) return;
                        //let nicknameSure = results[0].name + ' ' +results[0].surname;
                        player.setVariable('nickname', firstPersonName)
                        player.setVariable('owner', results[0].owner)

                        player.setVariable('hair', results[0].hair)
                        player.setVariable('masks', results[0].Masks)
                        player.setVariable('torsos', results[0].Torsos)
                        player.setVariable('legs', results[0].Legs)
                        player.setVariable('bags', results[0].Bags)
                        player.setVariable('shoes', results[0].Shoes)
                        player.setVariable('accessories', results[0].Accessories)
                        player.setVariable('undershirts', results[0].Undershirts)
                        player.setVariable('armors', results[0].Armors)
                        player.setVariable('decals', results[0].Decals)
                        player.setVariable('tops', results[0].Tops)
                        player.setVariable('hats', results[0].Hats)
                        player.setVariable('glasses', results[0].Glasses)
                        player.setVariable('ears', results[0].Ears)
                        player.setVariable('watches', results[0].Watches)
                        player.setVariable('bracelets', results[0].Bracelets)
                        player.setVariable('sex', results[0].sex)

                        player.setVariable('NoseWidth', results[0].NoseWidth)
                        player.setVariable('NoseHeight', results[0].NoseHeight)
                        player.setVariable('NoseLength', results[0].NoseLength)
                        player.setVariable('NoseBridge', results[0].NoseBridge)
                        player.setVariable('NoseTip', results[0].NoseTip)
                        player.setVariable('NoseBridgeShift', results[0].NoseBridgeShift)
                        player.setVariable('BrowHeight', results[0].BrowHeight)
                        player.setVariable('BrowWidth', results[0].BrowWidth)
                        player.setVariable('CheekboneHeight', results[0].CheekboneHeight)
                        player.setVariable('CheekboneWidth', results[0].CheeksWidth)
                        player.setVariable('CheeksWidth', results[0].CheeksWidth)
                        player.setVariable('Eyes', results[0].Eyes)
                        player.setVariable('Lips', results[0].Lips)
                        player.setVariable('JawWidth', results[0].JawWidth)
                        player.setVariable('JawHeight', results[0].JawHeight)
                        player.setVariable('ChinLength', results[0].ChinLength)
                        player.setVariable('ChinPosition', results[0].ChinPosition)
                        player.setVariable('ChinWidth', results[0].ChinWidth)
                        player.setVariable('ChinShape', results[0].ChinShape)
                        player.setVariable('NeckWidth', results[0].NeckWidth)

                        player.setVariable('level', results[0].level)
                        player.setVariable('exp', results[0].exp)
                        player.setVariable('money', results[0].money)
                        player.setVariable('bank', results[0].bank)
                        player.setVariable('lastpos', results[0].lastpos)
                        //player.setVariable('house', results[0].House,)
                        player.setVariable('fraction', results[0].fraction)
                        player.setVariable('family', results[0].family)
                        player.setVariable('dimension', results[0].dimension)
                        setInterval(() => {
                            if (player == null) return;
                            let nickname = player.getVariable('nickname')
                            let owner = player.getVariable('owner')

                            let hair = player.getVariable('hair')
                            let masks = player.getVariable('masks')
                            let torsos = player.getVariable('torsos')
                            let legs = player.getVariable('legs')
                            let bags = player.getVariable('bags')
                            let shoes = player.getVariable('shoes')
                            let accessories = player.getVariable('accessories')
                            let undershirts = player.getVariable('undershirts')
                            let armors = player.getVariable('armors')
                            let decals = player.getVariable('decals')
                            let tops = player.getVariable('tops')
                            let hats = player.getVariable('hats')
                            let glasses = player.getVariable('glasses')
                            let ears = player.getVariable('ears')
                            let watches = player.getVariable('watches')
                            let bracelets = player.getVariable('bracelets')
                            let sex = player.getVariable('sex')

                            let NoseWidth = player.getVariable('NoseWidth')
                            let NoseHeight = player.getVariable('NoseWidth')
                            let NoseLength = player.getVariable('NoseWidth')
                            let NoseBridge = player.getVariable('NoseWidth')
                            let NoseTip = player.getVariable('NoseWidth')
                            let NoseBridgeShift = player.getVariable('NoseWidth')
                            let BrowHeight = player.getVariable('NoseWidth')
                            let BrowWidth = player.getVariable('NoseWidth')
                            let CheekboneHeight = player.getVariable('NoseWidth')
                            let CheekboneWidth = player.getVariable('NoseWidth')
                            let CheeksWidth = player.getVariable('NoseWidth')
                            let Eyes = player.getVariable('NoseWidth')
                            let Lips = player.getVariable('NoseWidth')
                            let JawWidth = player.getVariable('NoseWidth')
                            let JawHeight = player.getVariable('NoseWidth')
                            let ChinLength = player.getVariable('NoseWidth')
                            let ChinPosition = player.getVariable('NoseWidth')
                            let ChinWidth = player.getVariable('NoseWidth')
                            let ChinShape = player.getVariable('NoseWidth')
                            let NeckWidth = player.getVariable('NoseWidth')

                            let level = player.getVariable('level')
                            let exp = player.getVariable('exp')
                            let maxexp = player.getVariable('maxexp')
                            let money = player.getVariable('money')
                            let bank = player.getVariable('bank')
                            let lastpos = player.getVariable('lastpos')
                            let fraction = player.getVariable('fraction')
                            let family = player.getVariable('family')
                            let dimension = player.getVariable('dimension')
                           
                            player.call('hudRender', [maxexp, exp, level, money, bank]);
                        }, 1000)
                    let nickname = player.getVariable('nickname')
                    player.name = nickname;  
                    player.call('SpawnPlayer')

                    mp.events.call('TimerLevel', player)
                })

})
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
708
319
161
30
JavaScript:
if (player == null) return;
Замени на
JavaScript:
if (!mp.players.exists(player)) return;
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
708
319
161
30
И конкретно 273 строчку или где сейчас вылетает ошибка. Скинь
 

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
И конкретно 273 строчку или где сейчас вылетает ошибка. Скинь
Заменил везде, ругается на таймер
JavaScript:
setInterval(() => {
                            if (!mp.players.exists(player)) return;
                            let nickname = player.getVariable('nickname')
                            let owner = player.getVariable('owner')

                            let hair = player.getVariable('hair')
                            let masks = player.getVariable('masks')
                            let torsos = player.getVariable('torsos')
                            let legs = player.getVariable('legs')
                            let bags = player.getVariable('bags')
                            let shoes = player.getVariable('shoes')
                            let accessories = player.getVariable('accessories')
                            let undershirts = player.getVariable('undershirts')
                            let armors = player.getVariable('armors')
                            let decals = player.getVariable('decals')
                            let tops = player.getVariable('tops')
                            let hats = player.getVariable('hats')
                            let glasses = player.getVariable('glasses')
                            let ears = player.getVariable('ears')
                            let watches = player.getVariable('watches')
                            let bracelets = player.getVariable('bracelets')
                            let sex = player.getVariable('sex')

                            let NoseWidth = player.getVariable('NoseWidth')
                            let NoseHeight = player.getVariable('NoseWidth')
                            let NoseLength = player.getVariable('NoseWidth')
                            let NoseBridge = player.getVariable('NoseWidth')
                            let NoseTip = player.getVariable('NoseWidth')
                            let NoseBridgeShift = player.getVariable('NoseWidth')
                            let BrowHeight = player.getVariable('NoseWidth')
                            let BrowWidth = player.getVariable('NoseWidth')
                            let CheekboneHeight = player.getVariable('NoseWidth')
                            let CheekboneWidth = player.getVariable('NoseWidth')
                            let CheeksWidth = player.getVariable('NoseWidth')
                            let Eyes = player.getVariable('NoseWidth')
                            let Lips = player.getVariable('NoseWidth')
                            let JawWidth = player.getVariable('NoseWidth')
                            let JawHeight = player.getVariable('NoseWidth')
                            let ChinLength = player.getVariable('NoseWidth')
                            let ChinPosition = player.getVariable('NoseWidth')
                            let ChinWidth = player.getVariable('NoseWidth')
                            let ChinShape = player.getVariable('NoseWidth')
                            let NeckWidth = player.getVariable('NoseWidth')

                            let level = player.getVariable('level')
                            let exp = player.getVariable('exp')
                            let maxexp = player.getVariable('maxexp')
                            let money = player.getVariable('money')
                            let bank = player.getVariable('bank')
                            let lastpos = player.getVariable('lastpos')
                            let fraction = player.getVariable('fraction')
                            let family = player.getVariable('family')
                            let dimension = player.getVariable('dimension')
                            //console.log(exp);
                            //player.call('hudRender', [JSON.stringify( nickname, owner, hair, masks, torsos, legs, bags, shoes, accessories, undershirts, armors, decals, tops, hats, glasses, ears, watches, bracelets, sex, level, exp, money, bank, lastpos, fraction, family, dimension )] )
                            player.call('hudRender', [maxexp, exp, level, money, bank]);
                        }, 1000)
а именно на
JavaScript:
player.setVariable('nickname', firstPersonName)
но если убрать эту строчку, он будет жаловаться на следующую