JS Синхры нет =(

MFast

Trainee
Сообщения
16
Доброго времени суток всем. расскажу о проблеме, которую немного не могу понять как решить....
вход на сервер осуществляется через БД аккаунт и выбор персонажа...
playerJoin > закидываем в дименшен = idPlayer + 10000> отправляем на авторизацию/регистрацию html + js + DB > Вход в личный кабинет (синхрон с ДБ на наличие персонажей, их внешность и инфы об аккаунте и персонаже) > выбираем персонаж/создаем персонаж html + js + DB > окно спавна координаты черед DB (выбор места спавна, выхода, дома, бизнеса или гаража (если чего то нет, пункта нету в меню))> Выбрал > его бросает в Dimension 1 и на точку спавна... но другие игроки не видят его персонажа, а видят лысого... перезаходы не помогают... у меня есть подозрение что не хватает че го то дописать чтобы все игроки видели персонажа как его сделали в ДБ... просто не пойму как сделать хотя бы на теории... с БД отправить данные на сервер? нужна теория....
unknown.png

unknown.png
 

Drogo

Middle Developer
Скриптер
Сообщения
80
Если ты говоришь про теорию, то ты с сервера должен делать запрос в БД для получении информации
 

Drogo

Middle Developer
Скриптер
Сообщения
80
И ты уверен, что применяешь внешность для игрока с серверной стороны?
 

MFast

Trainee
Сообщения
16
И ты уверен, что применяешь внешность для игрока с серверной стороны?
Не уверен, обрабатывается на сервере, запрос в бд… потом отправляет на клиент, и от этого клиент видит только своего персонажа, а персонаж других игроков почему то остается стандартным… мне понять как сделать так, чтобы все клиенты понимали что у этого перса такая внешность… а не только тот, который им играет
 
Последнее редактирование:

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
795
Не уверен, обрабатывается на сервере, запрос в бд… потом отправляет на клиент, и от этого клиент видит только своего персонажа, а персонаж других игроков почему то остается стандартным… мне понять как сделать так, чтобы все клиенты понимали что у этого перса такая внешность… а не только тот, который им играет
В основном все что делается на клиенте - остается на клиенте. Поэтому тебе нужно применять изменения внешности на стороне сервера. По моему для кастомизации внешности есть и серверные функции. После того как сохранил данные в бд, применяй их на сервере.
 

MFast

Trainee
Сообщения
16
В основном все что делается на клиенте - остается на клиенте. Поэтому тебе нужно применять изменения внешности на стороне сервера. По моему для кастомизации внешности есть и серверные функции. После того как сохранил данные в бд, применяй их на сервере.
Я немного понял в чем проблема, но как решить не пойму… обьясню… при создании нового персонажа, все игроки увидят его трансвормацию. Но как только он перезаходит… происходит дурость… все теряют его внешность… хотя подгрузка идет на стороне сервера вся… направляет с бд на клиент… потом идет сэл ремов, спавн и плеер дименшена на строне сервера… что самое прикольное, там же и имя фамилия подгружается, но ее видят все
 
Последнее редактирование:

Drogo

Middle Developer
Скриптер
Сообщения
80
Я немного понял в чем проблема, но как решить не пойму… обьясню… при создании нового персонажа, все игроки увидят его трансвормацию. Но как только он перезаходит… происходит дурость… все теряют его внешность… хотя подгрузка идет на стороне сервера вся… направляет с бд на клиент… потом идет сэл ремов, спавн и плеер дименшена на строне сервера…
Я думаю для начала нужно определиться является ли этот гейммод полностью вашим или же это уже готовый продукт скачанный с файлообменника ?
 

Drogo

Middle Developer
Скриптер
Сообщения
80
От ответа на этот вопрос уже можно строить дальнейшие размышления
 

MFast

Trainee
Сообщения
16
От ответа на этот вопрос уже можно строить дальнейшие размышления
Смотри, брал за основу, не сдирал под чистую, но так как я первопроходец в ragemp server… подсматриваю в модах готовые варианты, чтобы понять как именно в рэйдже все устроено… я в плане того что названия и так далее, ну и принцип работы, как это взаимодействует… ну и пытаюсь отсвоячину добавлять что лучше получается если понимать в чем проблема была у скриптера мододела так сказать…
 

MFast

Trainee
Сообщения
16
От ответа на этот вопрос уже можно строить дальнейшие размышления
За основу брал вот эту сборку и переделал всю, сделав почище ее, но взаимодецствие такое же, только немного под себя все переписал , глаза мозолило, плюс когда смотрел сначала изучил потом на чистом листе прописывал все только под себя https://ragemp.pro/resources/prosta...registraciej-avtorizaciej-i-personazhami.192/
 

Рикардо

Junior Developer
Сообщения
29
Прочитал первый пост автора, дальше не осилил. При выборе персонажа ты создаешь элементы (внешность / одежда) персонажа на серверной части? Потому что все эти элементы нужно спавнить на персонаже на сервной части мода
 

MFast

Trainee
Сообщения
16
Прочитал первый пост автора, дальше не осилил. При выборе персонажа ты создаешь элементы (внешность / одежда) персонажа на серверной части? Потому что все эти элементы нужно спавнить на персонаже на сервной части мода
JavaScript:
Клиент
..........
setTimeout(function () {
            mp.events.callRemote("SaveCharacter", currentGender, father, mother, similarity, skin, JSON.stringify(features), JSON.stringify(appearance_values), JSON.stringify(hair_or_colors));
        }, 5000);

JavaScript:
сервер
mp.events.add("SaveCharacter", (player, currentGender, father, mother, similarity, skin, features, appearance_values, hair_or_colors) => {
    gm.auth.saveCharenterAccount(player, currentGender, father, mother, similarity, skin, features, appearance_values, hair_or_colors);
});

JavaScript:
сервер в БД
    saveCharenterAccount: function(player, currentGender, father, mother, similarity, skin, features, appearance_values, hair_or_colors) {
        var parents = { "Father": father, "Mother": mother, "Similarity": similarity, "SkinSimilarity": skin };
        var colors = JSON.parse(hair_or_colors);
        var hair = { "Hair": colors[0], "Color": colors[1], "HighlightColor": colors[2] };
        if (currentGender == 0) var clothes = { "Mask": { "Variation": 0, "Texture": 0 }, "Gloves": { "Variation": 0, "Texture": 0 }, "Torso": { "Variation": 0, "Texture": 0 }, "Leg": { "Variation": 0, "Texture": 0 }, "Bag": { "Variation": 0, "Texture": 0 }, "Feet": { "Variation": 1, "Texture": 0 }, "Accessory": { "Variation": 0, "Texture": 0 }, "Undershit": { "Variation": 15, "Texture": 0 }, "Bodyarmor": { "Variation": 0, "Texture": 0 }, "Decals": { "Variation": 0, "Texture": 0 }, "Top": { "Variation": 1, "Texture": 0 } }
        else var clothes = { "Mask": { "Variation": 0, "Texture": 0 }, "Gloves": { "Variation": 0, "Texture": 0 }, "Torso": { "Variation": 5, "Texture": 0 }, "Leg": { "Variation": 0, "Texture": 0 }, "Bag": { "Variation": 0, "Texture": 0 }, "Feet": { "Variation": 3, "Texture": 0 }, "Accessory": { "Variation": 0, "Texture": 0 }, "Undershit": { "Variation": 15, "Texture": 0 }, "Bodyarmor": { "Variation": 0, "Texture": 0 }, "Decals": { "Variation": 0, "Texture": 0 }, "Top": { "Variation": 5, "Texture": 0 } }
        var accessory = { "Hat": { "Variation": -1, "Texture": 0 }, "Glasses": { "Variation": -1, "Texture": 0 }, "Ear": { "Variation": -1, "Texture": 0 }, "Watches": { "Variation": -1, "Texture": 0 }, "Bracelets": { "Variation": -1, "Texture": 0 } };
        var tattoos = { "0": [], "1": [], "2": [], "3": [], "4": [], "5": [] }
        gm.mysql.handle.query("INSERT INTO `customization` SET gender=?,parents=?,features=?,appearance=?,hair=?,clothes=?,accessory=?,tattoos=?,eyebrowc=?,beardc=?,eyec=?,blushc=?,lipstickc=?,chesthairc=?,iscreated=?,personid=?", [currentGender, JSON.stringify(parents), features, appearance_values, JSON.stringify(hair), JSON.stringify(clothes), JSON.stringify(accessory), JSON.stringify(tattoos), JSON.stringify(colors[3]), JSON.stringify(colors[4]), JSON.stringify(colors[5]), JSON.stringify(colors[6]), JSON.stringify(colors[7]), JSON.stringify(colors[8]), 1, player.data.charid], function(err, res, row) {});
        player.call("DestroyCamera", []);
        player.data.money = 5000;
        player.position = new mp.Vector3(15, 15, 71);
        player.health = 100;
        player.armour = 0;
        player.loggedInAs = player.name;
        player.dimension = 1;
 
Последнее редактирование:

MFast

Trainee
Сообщения
16
закгрузка выглядит так
JavaScript:
сервер

loadAccount: function(player) {
        player.position = new mp.Vector3(-1905.5416259765625, -574.9318237304688, 19.09);
        player.heading = 49.36;
        player.call("create:camera", []);
        player.call("open:charselection", []);
        gm.mysql.handle.query('SELECT characters.money, characters.bank, characters.adminlvl, characters.firstname, characters.lastname, characters.lvl, characters.exp, characters.health, characters.id, characters.organization, accounts.username, accounts.dp FROM characters AS characters LEFT JOIN accounts AS accounts ON accounts.id = characters.accid WHERE characters.accid = ?', [player.data.id], function(err, res, row) {
            if (res.length) {
                res.forEach(function(playerData) {
                    gm.mysql.handle.query('SELECT * FROM customization WHERE personid = ?', [playerData.id], function(err, custom, row) {
                        if (custom.length) {
                            custom.forEach(function(playerData2) {
                                player.call("but:charselection", [playerData, playerData2]);
                            });
                        }
                    });
                });
                if (res.length > 2) return;
                player.call("but2:charselection", []);
            } else player.call("but2:charselection", []);
        });
    },
JavaScript:
клиент
var charselection = mp.browsers.new("package://accounts/cef/CharSelection.html");
mp.events.add("open:charselection", () => {
    browser(true);
    html(true,charselection,"charselection","open()");
    playerheading.start();
    localplayer.setAlpha(0);
});
 

MFast

Trainee
Сообщения
16
JavaScript:
 вход после выбора перса в CEF/ js

methods: {
        open: function() {},
        createbut: function(dat) {
            var dats = JSON.parse(dat);
            $('#playersinforms').append($('<div id="characters" id-ch="' + dats.id + '"> <div class="char"> <i style="float: left;" class="fas fa-user"></i> <p class="name">' + dats.firstname + '_' + dats.lastname + '</p> <p class="lvl">' + dats.lvl + '</p> </div> </div>'));
            $('#playersinforms').children('#characters').click(function() {
                var data = charselection.datas;
                var id = $(this).attr('id-ch');
                for (let i = 0; i < data.length; i++) {
                    if (data[i].id == id) {
                        charselection.dp = data[i].dp;
                        charselection.username = data[i].username;
                        charselection.player_name = data[i].firstname + '_' + data[i].lastname;
                        charselection.money = data[i].money;
                        charselection.bank = data[i].bank;
                        charselection.stats = 1;
                        mp.trigger('player:charselection', id);
                        $('#charselection').append($('<div class="enter"><div class="text">Войти</div></div>'));
                        $('.enter').click(function() {
                            mp.trigger('player:enter:server', id);
                        });
                    }
                }
            });
        },
JavaScript:
клиент
mp.events.add("player:charselection", (id) => {
  for (let i = 0; i < customization.length; i++) {
    if(customization[i].personid == id){
      set_gender(JSON.parse(customization[i].personid));
      mp.events.callRemote("data:id:charselector", customization[i].personid); // походу я не дописал на сервере приема нет
      localplayer.setAlpha(255);
    }
  }
});
mp.events.add("player:enter:server", (id) => {
  mp.events.callRemote("player:enter:server", id);
  html(false,charselection,null,null);
});


JavaScript:
 сервер
mp.events.add("player:enter:server", (player, id) =>{
    gm.auth.charenterAccount(player, id);
});
 

MFast

Trainee
Сообщения
16
JavaScript:
charenterAccount: function(player, id) {
        gm.mysql.handle.query('SELECT * FROM customization WHERE id=?', [id], function(err, custom) {
            if (custom.length) {
                custom.forEach(function(dat) {
                    gm.mysql.handle.query('SELECT * FROM characters WHERE id=?', [dat.personid], function(err, chars) {
                        if (chars.length) {
                            chars.forEach(function(playerData) {
                                player.call("DestroyCamera", []);
                                player.name = playerData.firstname + " " + playerData.lastname;
                                player.data.money = playerData.money;
                                player.data.bank = playerData.bank;
                                player.health = playerData.health;
                                player.armour = playerData.armour;
                                player.data.lvl = playerData.lvl;
                                player.data.exp = playerData.exp;
                                player.data.charid = playerData.id;
                                var dats = [{ "spawn": { "x": 15.0, "y": 15.0, "z": 71.0, "r": 0.0 }, "player": JSON.parse(playerData.xyz) }];
                                player.call("player:spawn:in", dats);
                            })
                        }
                    });
                });
            }
        });
    },
 

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
795
JavaScript:
charenterAccount: function(player, id) {
        gm.mysql.handle.query('SELECT * FROM customization WHERE id=?', [id], function(err, custom) {
            if (custom.length) {
                custom.forEach(function(dat) {
                    gm.mysql.handle.query('SELECT * FROM characters WHERE id=?', [dat.personid], function(err, chars) {
                        if (chars.length) {
                            chars.forEach(function(playerData) {
                                player.call("DestroyCamera", []);
                                player.name = playerData.firstname + " " + playerData.lastname;
                                player.data.money = playerData.money;
                                player.data.bank = playerData.bank;
                                player.health = playerData.health;
                                player.armour = playerData.armour;
                                player.data.lvl = playerData.lvl;
                                player.data.exp = playerData.exp;
                                player.data.charid = playerData.id;
                                var dats = [{ "spawn": { "x": 15.0, "y": 15.0, "z": 71.0, "r": 0.0 }, "player": JSON.parse(playerData.xyz) }];
                                player.call("player:spawn:in", dats);
                            })
                        }
                    });
                });
            }
        });
    },
Где-то здесь по логике должна применяться кастомизация на игрока на сервере. Но тут происходит что-то непонятное)))
 

MFast

Trainee
Сообщения
16
Где-то здесь по логике должна применяться кастомизация на игрока на сервере. Но тут происходит что-то непонятное)))
по логике да, но я не пойму что тут вообще прописано... грубо говоря все из БД но не куда не уходит кроме координат
 

MFast

Trainee
Сообщения
16
я вообще подумываю все это переписать полностью, но с нуля... потому что вот эти кусочничества это пипец
 

MFast

Trainee
Сообщения
16
Ковыряться в чужом коде - то еще удовольствие))
хотел разобраться вообще че к чему... и прифигел... но принцип написания понял... только не хрена синхрона нет...
на сервере самолет летит, падает, и тут же взорваный самолет (уже как бы другой) летит дальше... ну это совсем трэш, или грузовики нагоняешь, а они посредь дорог разбросаны и потом догоняешь челика который на нем едет
 
Верх