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

  • Автор темы Автор темы MFast
  • Дата начала Дата начала

MFast

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

unknown.png
 
Если ты говоришь про теорию, то ты с сервера должен делать запрос в БД для получении информации
 
И ты уверен, что применяешь внешность для игрока с серверной стороны?
 
И ты уверен, что применяешь внешность для игрока с серверной стороны?
Не уверен, обрабатывается на сервере, запрос в бд… потом отправляет на клиент, и от этого клиент видит только своего персонажа, а персонаж других игроков почему то остается стандартным… мне понять как сделать так, чтобы все клиенты понимали что у этого перса такая внешность… а не только тот, который им играет
 
Последнее редактирование:
Не уверен, обрабатывается на сервере, запрос в бд… потом отправляет на клиент, и от этого клиент видит только своего персонажа, а персонаж других игроков почему то остается стандартным… мне понять как сделать так, чтобы все клиенты понимали что у этого перса такая внешность… а не только тот, который им играет
В основном все что делается на клиенте - остается на клиенте. Поэтому тебе нужно применять изменения внешности на стороне сервера. По моему для кастомизации внешности есть и серверные функции. После того как сохранил данные в бд, применяй их на сервере.
 
В основном все что делается на клиенте - остается на клиенте. Поэтому тебе нужно применять изменения внешности на стороне сервера. По моему для кастомизации внешности есть и серверные функции. После того как сохранил данные в бд, применяй их на сервере.
Я немного понял в чем проблема, но как решить не пойму… обьясню… при создании нового персонажа, все игроки увидят его трансвормацию. Но как только он перезаходит… происходит дурость… все теряют его внешность… хотя подгрузка идет на стороне сервера вся… направляет с бд на клиент… потом идет сэл ремов, спавн и плеер дименшена на строне сервера… что самое прикольное, там же и имя фамилия подгружается, но ее видят все
 
Последнее редактирование:
Я немного понял в чем проблема, но как решить не пойму… обьясню… при создании нового персонажа, все игроки увидят его трансвормацию. Но как только он перезаходит… происходит дурость… все теряют его внешность… хотя подгрузка идет на стороне сервера вся… направляет с бд на клиент… потом идет сэл ремов, спавн и плеер дименшена на строне сервера…
Я думаю для начала нужно определиться является ли этот гейммод полностью вашим или же это уже готовый продукт скачанный с файлообменника ?
 
От ответа на этот вопрос уже можно строить дальнейшие размышления
 
От ответа на этот вопрос уже можно строить дальнейшие размышления
Смотри, брал за основу, не сдирал под чистую, но так как я первопроходец в ragemp server… подсматриваю в модах готовые варианты, чтобы понять как именно в рэйдже все устроено… я в плане того что названия и так далее, ну и принцип работы, как это взаимодействует… ну и пытаюсь отсвоячину добавлять что лучше получается если понимать в чем проблема была у скриптера мододела так сказать…
 
От ответа на этот вопрос уже можно строить дальнейшие размышления
За основу брал вот эту сборку и переделал всю, сделав почище ее, но взаимодецствие такое же, только немного под себя все переписал , глаза мозолило, плюс когда смотрел сначала изучил потом на чистом листе прописывал все только под себя https://ragemp.pro/resources/prosta...registraciej-avtorizaciej-i-personazhami.192/
 
Прочитал первый пост автора, дальше не осилил. При выборе персонажа ты создаешь элементы (внешность / одежда) персонажа на серверной части? Потому что все эти элементы нужно спавнить на персонаже на сервной части мода
 
Прочитал первый пост автора, дальше не осилил. При выборе персонажа ты создаешь элементы (внешность / одежда) персонажа на серверной части? Потому что все эти элементы нужно спавнить на персонаже на сервной части мода
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;
 
Последнее редактирование:
закгрузка выглядит так
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);
});
 
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);
});
 
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);
                            })
                        }
                    });
                });
            }
        });
    },
 
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);
                            })
                        }
                    });
                });
            }
        });
    },
Где-то здесь по логике должна применяться кастомизация на игрока на сервере. Но тут происходит что-то непонятное)))
 
Где-то здесь по логике должна применяться кастомизация на игрока на сервере. Но тут происходит что-то непонятное)))
по логике да, но я не пойму что тут вообще прописано... грубо говоря все из БД но не куда не уходит кроме координат
 
я вообще подумываю все это переписать полностью, но с нуля... потому что вот эти кусочничества это пипец
 
Ковыряться в чужом коде - то еще удовольствие))
хотел разобраться вообще че к чему... и прифигел... но принцип написания понял... только не хрена синхрона нет...
на сервере самолет летит, падает, и тут же взорваный самолет (уже как бы другой) летит дальше... ну это совсем трэш, или грузовики нагоняешь, а они посредь дорог разбросаны и потом догоняешь челика который на нем едет
 
Назад
Верх