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

Как отобразить улицы в кастомном худе

Soul_Everest

Активный участник
Автор темы
6 Апр 2022
6
0
41
Есть проблема, не могу отобразить улицы в кастомном худе. Есть код который отображает название улиц чисто в самой игре. но я хочу отобразить улицы худе в определенном.
Вот рабочий код который отображает в самой игре. но мне нужно как-то сделать этот код чтоб я мог отобразить его в худе и применить css

Код:
let player = mp.players.local;
let street = undefined;
let zone = undefined;




mp.events.add('render', () => {

    street = mp.game.pathfind.getStreetNameAtCoord(player.position.x, player.position.y, player.position.z, 0, 0);
    zone = mp.game.gxt.get(mp.game.zone.getNameOfZone(player.position.x, player.position.y, player.position.z));

    mp.game.ui.hideHudComponentThisFrame(6); // car name
    mp.game.ui.hideHudComponentThisFrame(8); // car class
    mp.game.ui.hideHudComponentThisFrame(7); // area name
    mp.game.ui.hideHudComponentThisFrame(9); // street name

    mp.game.graphics.drawText(`~w~${mp.game.ui.getStreetNameFromHashKey(street.streetName)}\n~s~${zone}`, [0.215, 0.925], {
        font: 4,
        color: [244, 210, 66, 255],
        scale: [0.5, 0.5],
        outline: true,
    });
});
месте
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,424
191
27
Тебе нужно эти данные отправлять на твой CEF и там уже работать с ними, применять css и всё прочее. Клиент - код, браузер - визуал.
При чём в таком случае рендер не лучшая опция для использования, т.к. render работает каждый отдельный кадр игрока (если у игрока 60 фпс, то 60 раз в секунду сработает этот ивент).
 
  • Like
Реакции: Harland David Sanders

Soul_Everest

Активный участник
Автор темы
6 Апр 2022
6
0
41
Тебе нужно эти данные отправлять на твой CEF и там уже работать с ними, применять css и всё прочее. Клиент - код, браузер - визуал.
При чём в таком случае рендер не лучшая опция для использования, т.к. render работает каждый отдельный кадр игрока (если у игрока 60 фпс, то 60 раз в секунду сработает этот ивент).
Подскажи как лучше это передать на Cef
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,424
191
27
Подскажи как лучше это передать на Cef
Ну, например вот так
JavaScript:
browser.execute(`alert(\`It's a test.\`);`);
browser - переменная, которая хранит твою страницу с HUD'ом, в котором есть место для отображения улицы.
Внутри ` - всё, что ты хочешь передать.
На стороне страницы ты можешь создать ивент, который вызовешь этим кодом, передав в аргументы название улицы.
 

Soul_Everest

Активный участник
Автор темы
6 Апр 2022
6
0
41
Ну, например вот так
JavaScript:
browser.execute(`alert(\`It's a test.\`);`);
browser - переменная, которая хранит твою страницу с HUD'ом, в котором есть место для отображения улицы.
Внутри ` - всё, что ты хочешь передать.
На стороне страницы ты можешь создать ивент, который вызовешь этим кодом, передав в аргументы название улицы.
1659861182944.png
вот у меня есть второй код который не работает
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,424
191
27
Посмотреть вложение 4651вот у меня есть второй код который не работает
Во-первых event render не принимает аргументов, поэтому откуда и зачем ты туда поставил (streetName) - мне неизвестно.
Во-вторых я тебе в первом же сообщении сказал, что использовать render для этих целей - плохая опция, потому что с таким кодом ты будешь отправлять данные на CEF 60 раз в секунду при 60 FPS - зачем? Таким образом будут лаги, зависания и всё прочее на слабых пк. Да и сильные не сильно в восторге будут. Если ты уж строго решил, что рендер - единственный ивент, который тебе нужен, то сделай, хотя бы, локальное хранение на клиенте этих улиц и сверяй с теми, что приходят из методов. Если не идентичны - тогда отправляй в браузер, если идентичны - не делай ничего.
В-третьих на скриншоте не видно, что переменная hud содержит в себе страницу с браузером.
В-четвёртых на странице в cef'е тебе нужно создать метод, который будет принимать в себя нужное кол-во аргументов и уже в нём устанавливать переменные, а не делать это из клиента.
 

Soul_Everest

Активный участник
Автор темы
6 Апр 2022
6
0
41
Во-первых event render не принимает аргументов, поэтому откуда и зачем ты туда поставил (streetName) - мне неизвестно.
Во-вторых я тебе в первом же сообщении сказал, что использовать render для этих целей - плохая опция, потому что с таким кодом ты будешь отправлять данные на CEF 60 раз в секунду при 60 FPS - зачем? Таким образом будут лаги, зависания и всё прочее на слабых пк. Да и сильные не сильно в восторге будут. Если ты уж строго решил, что рендер - единственный ивент, который тебе нужен, то сделай, хотя бы, локальное хранение на клиенте этих улиц и сверяй с теми, что приходят из методов. Если не идентичны - тогда отправляй в браузер, если идентичны - не делай ничего.
В-третьих на скриншоте не видно, что переменная hud содержит в себе страницу с браузером.
В-четвёртых на странице в cef'е тебе нужно создать метод, который будет принимать в себя нужное кол-во аргументов и уже в нём устанавливать переменные, а не делать это из клиента.
А что можно использовать вместо рендера?
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,424
191
27
А что можно использовать вместо рендера?
На JS'е можно использовать setInterval - бесконечный таймер (до тех пор, пока ты не сделаешь clearInterval).
Используется так:

JavaScript:
function updateZone()
{
    // Твой код
}
var updateZoneInterval = setInterval(updateZone, 100); // 100 - время в милисекундах, то есть код будет срабатывать каждые 100мс = 10 раз в секунду.
В данном варианте updateZoneInterval будет хранить интервал, который, если будет вдруг нужно, можно очистить при помощи

JavaScript:
clearInterval(updateZoneInterval);
updateZoneInterval = null;

Опять же, если сравнивать ДАЖЕ такое обновление, где код будет отрабатывать 10 раз в секунду - это всё еще меньше в 6 раз, чем если у игрока 60 FPS.
Зона просто физически не может измениться 60 раз в секунду, это неправильная трата ресурсов, поэтому лучше всего подобрать какие-нибудь 500-1000мс и этого вполне хватит для такого кода.
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Ну, например вот так
JavaScript:
browser.execute(`alert(\`It's a test.\`);`);
browser - переменная, которая хранит твою страницу с HUD'ом, в котором есть место для отображения улицы.
Внутри ` - всё, что ты хочешь передать.
На стороне страницы ты можешь создать ивент, который вызовешь этим кодом, передав в аргументы название улицы.
Если уж советуешь - советуй евенты. На экзекьютах что-то делать сейчас = полный кринж. Так же насчет рендера - никаких "супер ресурсов" там не тратится, это локальный евент с 0вой задержкой. Согласен, что лучше делать интервал в таких случаях и проверять, изменились ли вообще данные, но всё же аргументировать это сильной затратой ресурсов на слабых пк - глупо
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,424
191
27
Если уж советуешь - советуй евенты. На экзекьютах что-то делать сейчас = полный кринж. Так же насчет рендера - никаких "супер ресурсов" там не тратится, это локальный евент с 0вой задержкой. Согласен, что лучше делать интервал в таких случаях и проверять, изменились ли вообще данные, но всё же аргументировать это сильной затратой ресурсов на слабых пк - глупо
Глупо проверять данные 60 раз в секунду, которые физически ни при каких условиях не смогут измениться 60 раз в секунду.
Использование рендера для такого - неоптимальное использование ресурсов компьютера игрока и отрицать это так же глупо.
По поводу экзекьютов - даю ту информацию, что есть у меня, не более. Есть другая опция - расскажи, буду знать, заодно и автор узнает, я ж не против.
 
  • Like
Реакции: dooj

dooj

Гуру
high coder
24 Мар 2022
459
166
100
Лично я отправляю данные на CEF через call
JavaScript:
browser.call('EVENT:CLIENT:TO:CEF', (
    JSON.stringify(
        {data: {name: 'Doojer', age: 22}}
    )
))

Принимаю таким образом:

JavaScript:
mp.events.add('EVENT:CLIENT:TO:CEF', (data) => {
    data = JSON.parse(data)
    ... // Махинации
})
 
  • Like
Реакции: XDeveluxe