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

FAQ Что такое rage-rpc и почему это лучше?

Mercury_One

Участник портала
BackEnd developer
11 Фев 2021
38
19
82
Здравствуйте, пишу первый раз на этом форуме, так что не бейте)

P.S. Эта статья предназначена для скриптеров, которые пишут или хотят начать писать на JS (клиент и сервер).

Для начала, RPC (Remote Procedure Calls) упрощает двустороннюю связь между сервером, клиентом и cef. Фактически эта библиотека строится на стандартом RAGE API отправки пакетов с сервера на клиент и обратно, но с значительными преимуществами в виде удобства и оптимизации вашего кода.

Приведу небольшой практический пример: Допустиму нас есть CEF - меню фракции, в нём есть какая-то кнопка, действие которой нужно обработать на сервере.

Как эту задачу мы бы реализовали с помощью RAGE API:

CEF:
JavaScript:
$("#quit-fraction").click(function() {
    // тело
    mp.trigger("playerQuitFraction");
});

Клиент:
JavaScript:
mp.events.add("playerQuitFraction", () => {
    mp.events.callRemote("remotePlayerQuitFraction");
});

Сервер:
JavaScript:
mp.events.add("remotePlayerQuitFraction", (player) => {
    // и уже тут что-то делаем с player'ом
});

Как эту задачу мы бы реализовали с помощью rage-rpc:

CEF:
JavaScript:
$("#quit-fraction").click(function() {
    // тело
    rpc.callServer("playerQuitFraction");
});

Сервер:
JavaScript:
rpc.register("playerQuitFraction", (data, info) => {
    let player = info.player;
    // и уже тут что-то делаем с player'ом
});

Rage-rpc работает и в обратную сторону, с сервера в cef.

Мы пропустили посредника, а именно клиент. Может показаться, что не сильно сложно написать пару строк на клиенте, но вы только представьте, что происходит если вам надо создать кучу обработчиков действий из cef.

Проблему захламлённости кода клиента ненужными ивентами (посредниками) между CEF - Сервером и решает rage-rpc. Но это только начало. Функционал rage-rpc достаточно обилен.

Представим ситуацию: Мы хотим узнать на сервере поднимается ли по лестнице игрок в данный момент. Говорить о реализации через RAGE API, тут даже не стоит.

Реализация, через rage-rpc:

Сервер:
JavaScript:
const isClimbing = await rpc.callClient(player, 'getIsClimbing');

if (isClimbing) {
    console.log(player.name + " поднимается.");
} else {
    console.log(player.name + " не поднимается.");
}

Клиент:
JavaScript:
rpc.register('getIsClimbing', () => mp.players.local.isClimbing());

Абсолютно ничего лишнего, всё просто и удобно.

Если вас заинтересовал rage-rpc, вот соурс: https://github.com/micaww/rage-rpc
Там же более подробно рассказано о всех функциях данной библиотеки, о установке и т.п.

Так же если будут какие-то вопросы, задавайте в комментарии, работаю с этой библиотекой уже 3 месяца.
 

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,598
2,755
219
Awesome 👏
 

Harvey Specter

Специалист
BackEnd developer
7 Ноя 2020
245
88
95
Круто) Подробно описано. Опробую!
 

filecore

Начинающий специалист
BackEnd developer
6 Окт 2020
227
74
82
На самом деле посредника мы не лишается, если открыть клиентскую библиотеку rpc то мы увидим унификацию callremote и цеф общается цеф-рпс клиент - рпс сервер - рейдж сервер и в обратном порядке
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
709
319
161
30
На самом деле посредника мы не лишается, если открыть клиентскую библиотеку rpc то мы увидим унификацию callremote и цеф общается цеф-рпс клиент - рпс сервер - рейдж сервер и в обратном порядке
дядь В теме об этом и говорится
Для начала, RPC (Remote Procedure Calls) упрощает двустороннюю связь между сервером, клиентом и cef. Фактически эта библиотека строится на стандартом RAGE API отправки пакетов с сервера на клиент и обратно, но с значительными преимуществами в виде удобства и оптимизации вашего кода.
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
Последний коммит 1.5 года назад по либе, рейдж обновят там что нибудь потом во фрейморке ковырятся :confused:
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
709
319
161
30

Mercury_One

Участник портала
BackEnd developer
11 Фев 2021
38
19
82
Не понимаю смысла разводить тут дискуссии, это просто статья, хотите используйте, хотите нет. И я лично не понимаю, зачем что-то обновлять если оно и так идеально работает.
Так же думаю, что создатель rage mp, не будет менять систему/API связи сервер - клиент, потому что возможно многие сервера выпадут, вероятно он сам знает о rage-rpc.
 
Последнее редактирование:
Реакции: Harland David Sanders

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
709
319
161
30
как разница потом в чем ковырятся в своем или чужом Дядь,
проще юзать натив как есть, ничего сложного
По этой логике проще писать на чистом JS не используя ничего. Долой jquery! Долой VUE! Долой REACT!:j3r:
И разница в том что своё пишешь ты, а чужой пишешь не ты... :j33r:
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
По этой логике проще писать на чистом JS не используя ничего. Долой jquery! Долой VUE! Долой REACT!:j3r:
И разница в том что своё пишешь ты, а чужой пишешь не ты... :j33r:
ну ты сравнил, конечно, жопу с пальцем)))
вью с реактом и хер пойми какой реп двух летний
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
709
319
161
30
ну ты сравнил, конечно, жопу с пальцем)))
вью с реактом и хер пойми какой реп двух летний
Я ничего не сравнивал) Пытаюсь понять твою логику. Есть либа, которой можно воспользоваться. хочешь берешь и используешь. Не хочешь, не используешь. Либа построена на фундаментальных API которые врятли будут изменять. "Обновлять то что по сути не нужно обновлять..."
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
Я ничего не сравнивал) Пытаюсь понять твою логику. Есть либа, которой можно воспользоваться. хочешь берешь и используешь. Не хочешь, не используешь. Либа построена на фундаментальных API которые врятли будут изменять. "Обновлять то что по сути не нужно обновлять..."
Сейчас объясню логику ;) у ламбы и у жигули, фундаментально все одинаково, 4 колеса, и та и та свои функции выполняет, умеет двигаться из точки а в точку Б, но есть некоторые минимальные отличия, у каждого они свои, это от запросов и потребностей зависит, так и тут, хочешь берешь и используешь. Не хочешь, не используешь :)
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
709
319
161
30
Странное сравнение) Получается тут тебе подгоняют ламбу, ты такой, неее я буду гонять на своем жигуле...
 
Реакции: artemsiberian

Brabus7

Участник портала
14 Окт 2021
32
6
65
Кто попробует взять код из примера, ждите ошибку, await работает только внутри функции async
 

Brabus7

Участник портала
14 Окт 2021
32
6
65
Так работает JS. async/await это просто синтаксический сахар над Promise
Для меня как новичка в этом деле не понятен этот сахар.
Надо указать что пример для тех кто умеет работать с этим и смог бы разобраться сам, получается смысла этой темы нет. Так как понять как оно работает можно на примерах которые опять таки требуют знаний....
 

Anatolii

Новый участник
12 Окт 2021
3
0
38
Для меня как новичка в этом деле не понятен этот сахар.
Надо указать что пример для тех кто умеет работать с этим и смог бы разобраться сам, получается смысла этой темы нет. Так как понять как оно работает можно на примерах которые опять таки требуют знаний....
Вот неплохой сайт https://learn.javascript.ru/ Пройди его по порядку, прорешай примеры, и всё станет понятно.

Спасибо автору за тему! Отличная либа.
 

aspidemon

Активный участник
26 Сен 2022
115
42
65
Было бы круто, если либа давала небольшую защиту от executor и подобных читов..