• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в 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/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Вопрос Передача данных с сервера на клиент (react)

Dima412

Новый участник
Автор темы
15 Авг 2023
7
0
1
Приветствую, как передать данные с сервера на клиент ? Например количество денег у игрока, как мне передать значение на клиент и вставить в react ? Использую: react, nodejs
 
Последнее редактирование:

akudinov28

Гуру
24 Фев 2021
259
118
105
Не работал с реактом, но полагаю, что схема взаимодействия не сильно отличается от vue.

Во время инициализации экземпляра запихиваем его в глобальную переменную window:
JavaScript:
// vue/src/main.js
import Vue from 'vue'

window.app = new Vue().mount('#app')

Дальше в идеале нам нужно какое-нибудь хранилище состояний (в моем случае pinia). Создаем хранилище и добавляем :

JavaScript:
// vue/src/stores/server.j
import { defineStore } from 'pinia'

export const useServerStore = defineStore('server', {
  state: () => {
    return { online: 0 }
  },
  actions: {
    changeOnline(online) {
      this.online = online;
    },
  },
})

В корневом компоненте App.vue привязываем хранилище:

JavaScript:
// vue/src/App.vue
import { useServerStore } from '@/stores/server'

export default {
    name: 'App',
    setup(){
        const server = useServerStore();
        return {server}
    }
}

После этого можно с клиента вызывать хранилище, привязанное к корневому компоненту:

JavaScript:
// client_packages/index.js

let browser = mp.browsers.new("package://index.html");
browser.execute(`window.app.$root.server.changeOnline(35);`);

Писал с телефона и по памяти, могут быть ошибки и опечатки. Код очень примерный и предназначен не для копирования, а для общего понимания схемы взаимодействия.
 
  • Like
Реакции: XDeveluxe и wholinc

Dima412

Новый участник
Автор темы
15 Авг 2023
7
0
1
Читал, но ничего не получилось
 

wholinc

Специалист
24 Янв 2023
783
460
96
24
я не шарю за реакт, но разве есть проблема в создании переменной и передачи в нее информации через execute?

JavaScript:
// cef
let online = 0;

//client
browser.execute(`online = ${onlineFromServer}`);
 

Dima412

Новый участник
Автор темы
15 Авг 2023
7
0
1
Client:
1692485022684.png


Cef:
1692485061755.png
 

kirillzver

Гуру
2 Ноя 2020
156
117
104
Максимально примитивный пример.

На клиенте добавляешь эвент:
JavaScript:
mp.events.add("hud.update.online", online => {
    browser.call("hud.update.online", online);
});
Соответственно с сервера будешь его вызывать посредством player.call и передачей туда необходимых аргументов.

В CEF импортишь следующие, если его нет:
JavaScript:
import React, { useState, useEffect } from 'react';

В начало function App() {...}, вместо своего var HUD = {...} вставляешь:
JavaScript:
const [online, setOnline] = useState(0);

useEffect(() => {
    // подписываемся на событие при монтировании компонента
    mp.events.add("hud.update.online", online => setOnline(online)); // стрелочная функция для наглядности

    // отписываемся при размонтировании
    return () => {
        mp.events.remove("hud.update.online");
    }
}, []);

Опять таки, нерационально подписываться таким образом на обновление онлайна.
В идеале для этого использовать менеджер состояний, например redux или mobx, откуда подтягивать значение в компонент.
 
  • Like
Реакции: wholinc