• Из-за обновления 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) последний раз были обновлены:

Вопрос Подскажите как работать с CEF

Статус
В этой теме нельзя размещать новые ответы.

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Приветствую всех, интересен вопрос как отправлять информацию из сервера которая уже имеет формат JSON,
Как я понимаю идёт что то типо такого
Server => Client => CEF
Или я что то путаю? вот допустим я сделал такую хрень

Как правильно мне обновить информацию на CEFE



Server
C#:
var playerData = new PlayerData
            {
                playerName = "Player1",
                playerScore = 100
            };
            // Сериализуем объект в JSON строку
            string jsonData = JsonSerializer.Serialize(playerData);
            NAPI.Util.ConsoleOutput($"{jsonData},{playerData}");
            player.TriggerEvent("updatePlayerData", jsonData);

Client

JavaScript:
mp.events.add("updatePlayerData", function(jsonData) {
    console.log("Received player data from server:", jsonData);

    try {
        // Парсим строку JSON в объект
        let playerData = JSON.parse(jsonData);

        // Передаем данные в CEF
       
        browser.call('updatePlayerDataInCEF',playerData)
    } catch (error) {
        console.error("Ошибка при парсинге JSON:", error);
    }
});


JS - CEF-ки

Код:
function updatePlayerDataInCEF(data) {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
   
}
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,384
237
100
Да, вы правильно понимаете последовательность работы. По вашему коду, информация в формате JSON передается от сервера к клиенту, и затем обновляется в CEF (интерфейсе). Для обновления информации в CEF, используется функция updatePlayerDataInCEF, которая принимает объект данных JSON и обновляет соответствующие элементы на странице. Ваш код выглядит правильным для передачи и обновления информации в CEF с использованием формата JSON.
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,903
1,661
211
28
Сервер и клиент может общаться общими объектами (такими как player, например, потому что они по entityId строятся), всё остальное - ты отправляешь между друг другом только в json'е. И с клиента на CEF ты так же должен отправлять JSON. Ты делаешь JSON.parse в том случае, если тебе на клиенте нужно что-то попутно с этой информацией сделать, но дальше ПРОДОЛЖАЕШЬ отправлять JSON.

А вот регистрация ивента на CEF'е у тебя неверная. Должен быть mp.events.add.
К тому же обновлять информацию страницы с помощью getElementById как-то странно, но я не FrontEnd разработчик, поэтому по этой части не помогу.
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Сервер и клиент может общаться общими объектами (такими как player, например, потому что они по entityId строятся), всё остальное - ты отправляешь между друг другом только в json'е. И с клиента на CEF ты так же должен отправлять JSON. Ты делаешь JSON.parse в том случае, если тебе на клиенте нужно что-то попутно с этой информацией сделать, но дальше ПРОДОЛЖАЕШЬ отправлять JSON.

А вот регистрация ивента на CEF'е у тебя неверная. Должен быть mp.events.add.
К тому же обновлять информацию страницы с помощью getElementById как-то странно, но я не FrontEnd разработчик, поэтому по этой части не помогу.
Вот так?
На CEFe

Код:
mp.events.add('updatePlayerDataInCEF', (jsonData) => {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
});
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,903
1,661
211
28
Вот так?
На CEFe

Код:
mp.events.add('updatePlayerDataInCEF', (jsonData) => {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
});
Ну почти.
После этого ты забыл, что тебе нужно распарсить этот самый jsonData в объект и уже с ним работать.
А то ты инициализацию метода сделал, а внутренности оставил как было. Ну и на клиенте сделать пересылку не объекта, а json'а.
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Ну почти.
После этого ты забыл, что тебе нужно распарсить этот самый jsonData в объект и уже с ним работать.
А то ты инициализацию метода сделал, а внутренности оставил как было. Ну и на клиенте сделать пересылку не объекта, а json'а.
Я просто новичёк пока сложно понять что ты щас сказал :D
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,903
1,661
211
28
Я просто новичёк пока сложно понять что ты щас сказал :D
На сервере ты создал JSON строку с помощью JsonSerializer.Serialize(playerData), отправил её на клиент и на клиенте принял как аргумент jsonData, далее его распарсил (сделал JSON.parse) и отправил объект. Если тебе не нужно на клиенте ничего делать с данной информацией, которую прислал сервер, то не нужно парсить и просто передавай дальше этот же jsonData в браузер, а уже на браузере сделай JSON.parse, чтобы из строки текста получить объект, к которому далее ты можешь обращаться через точку (data.playerName).
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
На сервере ты создал JSON строку с помощью JsonSerializer.Serialize(playerData), отправил её на клиент и на клиенте принял как аргумент jsonData, далее его распарсил (сделал JSON.parse) и отправил объект. Если тебе не нужно на клиенте ничего делать с данной информацией, которую прислал сервер, то не нужно парсить и просто передавай дальше этот же jsonData в браузер, а уже на браузере сделай JSON.parse, чтобы из строки текста получить объект, к которому далее ты можешь обращаться через точку (data.playerName).
А получается я убираю из клиентсвой части парсировку
и добавляю в cef
data = JSON.parse(jsonData);
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Зашёл подключил функция работает, но как отправить это всё на CEF?

причём работает не при

Код:
mp.events.add('updatePlayerDataInCEF', (jsonData) => {
    data = JSON.parse(jsonData);
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
});

Работает на дебаге только

Код:
function updatePlayerDataInCEF(data) {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
    
}

Но как с клиента вызвать правильно чтоб изменения были в CEF?


Код:
mp.events.add('CEF:CLIENT::PLAYER_BACK_CURSOR', (jsonData) =>
{
    mp.gui.chat.push("Received player data: " + jsonData);
    notifyHud = mp.browsers.new('package://web/wes/index.html');
    mp.gui.execute(`updatePlayerDataInCEF(${JSON.stringify(jsonData)});`);

});
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,903
1,661
211
28
причём работает не при

Код:
mp.events.add('updatePlayerDataInCEF', (jsonData) => {
    data = JSON.parse(jsonData);
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
});
Что такое data в контексте?
Это несуществующая ячейка в памяти, в которую ты пытаешься распарсить строку, инициализируй его как-нибудь для начала, например с помощью const или let.
const data = JSON.parse(jsonData);

А вообще - это базовое программирование, тут ошибки даже не связаны с самим RAGEMP.
Для начала тебе стоит просто поизучать язык программирования в целом, потому что иначе ты на каждом шагу будешь вот так спотыкаться.
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Что такое data в контексте?
Это несуществующая ячейка в памяти, в которую ты пытаешься распарсить строку, инициализируй его как-нибудь для начала, например с помощью const или let.
const data = JSON.parse(jsonData);

А вообще - это базовое программирование, тут ошибки даже не связаны с самим RAGEMP.
Для начала тебе стоит просто поизучать язык программирования в целом, потому что иначе ты на каждом шагу будешь вот так спотыкаться.
А как то можно посмотреть что в неё приходит? или вообще как то отрабатывается что то или нет?
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,352
802
181
34
Зачем изначально учиться на допотопных функциях? Смотри в сторону rpc
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,903
1,661
211
28
А как то можно посмотреть что в неё приходит? или вообще как то отрабатывается что то или нет?
Не могу понять твоего вопроса.
В него (event) приходит то, что ты в него отправляешь, всё должно быть логично.
Что обрабатывается? Не понимаю.

Зачем изначально учиться на допотопных функциях? Смотри в сторону rpc
Так RPC это всё то же самое, просто в обёртке.
Чтобы научиться пользоваться чем-то хорошим, для начало было бы хорошо научиться пользоваться чем-то базовым.
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,352
802
181
34
Не могу понять твоего вопроса.
В него (event) приходит то, что ты в него отправляешь, всё должно быть логично.
Что обрабатывается? Не понимаю.


Так RPC это всё то же самое, просто в обёртке.
Чтобы научиться пользоваться чем-то хорошим, для начало было бы хорошо научиться пользоваться чем-то базовым.
Да, я знаю что эта либа под капотом имеет rage api, я веду к тому, что новичку будет проще освоиться и писать более "чистый" код, нежели городить кучу функций в которых сам можешь запутаться.
Отправить данные с сервера на клиент, получить на клиенте и отправить в CEF, в CEF получить и отправить на клиент, на клиенте получить и отправить на сервер

А с rpc можно уменьшить эту цепочку
Сервер - CEF - Сервер
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,903
1,661
211
28
Да, я знаю что эта либа под капотом имеет rage api, я веду к тому, что новичку будет проще освоиться и писать более "чистый" код, нежели городить кучу функций в которых сам можешь запутаться.
Отправить данные с сервера на клиент, получить на клиенте и отправить в CEF, в CEF получить и отправить на клиент, на клиенте получить и отправить на сервер

А с rpc можно уменьшить эту цепочку
Сервер - CEF - Сервер
Ты прав, просто дело в том, что он пока не понимает базовых элементов, это видно по вопросам.
Такие вещи для него будут как "медвежья услуга", где он просто перескочит момент обучения и потом из-за этого встанет в ступор.
Ну, это лишь моё мнение.
 
Реакции: Inoi

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Зачем изначально учиться на допотопных функциях? Смотри в сторону rpc
Да, я знаю что эта либа под капотом имеет rage api, я веду к тому, что новичку будет проще освоиться и писать более "чистый" код, нежели городить кучу функций в которых сам можешь запутаться.
Отправить данные с сервера на клиент, получить на клиенте и отправить в CEF, в CEF получить и отправить на клиент, на клиенте получить и отправить на сервер

А с rpc можно уменьшить эту цепочку
Сервер - CEF - Сервер


Так тут говориться про кнопку, по кнопки проблем вообще нету.
Я не могу понять почему не могу отправить данные в CEF
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Ты прав, просто дело в том, что он пока не понимает базовых элементов, это видно по вопросам.
Такие вещи для него будут как "медвежья услуга", где он просто перескочит момент обучения и потом из-за этого встанет в ступор.
Ну, это лишь моё мнение.
Я уже в ступоре, так как код вроде верный, а ничего не происходит, по поводу из CEF по кнопкам тыкать и отправлять Триггеры это ясно как делать, но как мне вернуть информацию с сервера в CEF это пока вообще не понятно. почему не принимает возвратное значения.
 
Статус
В этой теме нельзя размещать новые ответы.