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

FAQ Как перевести сборку сервера RAGE:MP с версии 0.3.7 на 1.1

Harland David Sanders

Куратор портала
Автор темы
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,058
2,443
219
334.jpg


Всем привет, сабж думаю понятен. Встречаю очень много подобных вопросов на форуме и в дискорде.

Ну чтож начнем, команда RAGE:MP при публикации prerelease версии опубликовала список изменений:
[devblog] RAGE Multiplayer 1.1.0-DP#1 Goes Public Beta!

В этом списке изменений есть специальный раздел - 0.3.7 compatibility guide (0.3.7 руководство по совместимости)
В этом списке как раз написаны почти все необходимые действия для перевода мода на 1.1.
Казалось бы, на этом можно закончить гайд и закрыть тему, но я разжую вам еще подробнее:
(чтобы каждый Рахим понял) :j3r:




  1. Make sure your server-side resources use correct seat IDs (it starts from 0, not -1 anymore)
    Убедитесь, что ваши серверные ресурсы используют правильные идентификаторы рабочих мест (они начинаются с 0, а не с -1).
    Это значит что вы должны ТОЛЬКО В СЕРВЕРНОЙ ЧАСТИ изменить все места в коде где используется seat свойства игрока и машин изменить с -1 на 0.


  2. C# only: Make sure to update GetData syntax (in most of cases you can just autoreplace "GetData(" with "GetData<object>(" for exact 0.3.7 behavior).
    Только для C#: обязательно обновите синтаксис GetData (в большинстве случаев вы можете просто автоматически заменить GetData (»на« GetData <object> (»для точного поведения 0.3.7).
    Это значит что вы должны изменить способ использования GetData и ей подобных переменных под новый вид (с явным указанием типа данных). ТОЛЬКО ЕСЛИ У ВАС СЕРВЕР НА C#


  3. C# only: "Client" got renamed with "Player".
    Только C#: «Client» переименован в «Player».
    Это значит что вы должны изменить в вашем моде все типы переменных Client на Player. ТОЛЬКО ЕСЛИ У ВАС СЕРВЕР НА C#


  4. C# only: Vehicle occupants API now returns Entity instead of Player - that's because 1.1 synchronized peds could be vehicle occupants too
    Только C#: API для пассажиров транспортных средств теперь возвращает Entity вместо Player - это потому, что синхронизированные пешеходы 1.1 также могут быть пассажирами транспортных средств.

  5. C# only: EntityCreated/Destroyed events now pass Entity argument instead of NetHandle
    Только C#: события EntityCreated / Destroyed теперь передают аргумент Entity вместо NetHandle.


  6. Optional: Make sure to use RGSC IDs instead of RGSC Nicknames
    Необязательно: убедитесь, что вы используете идентификаторы RGSC вместо псевдонимов RGSC.

  7. Make sure to implement new chat API initerface. 0.3.7-.1.1 compatibility wrapper (CEF code):
    Обязательно внедрите новый интерфейс API чата. Обертка совместимости 0.3.7 - 1.1 (код CEF):

    JavaScript:
    let api = {"chat:push": chatAPI.push, "chat:clear": chatAPI.clear, "chat:activate": chatAPI.activate, "chat:show": chatAPI.show};
    for(let fn in api)
    {
        mp.events.add(fn, api[fn]);
    }

И последние 5 пунктов рассказывают о том как именно изменить бинарники самого сервера и что произошло с плагинами и в целом c# составляющей сервера:
  1. 0.3.7 plugins should be removed from /plugins/, it's not compatible. Moreover, both "bridge.dll" and "rpfencrypt.dll" are redutant: C# API doesn't require a plugin to work.
    Плагины 0.3.7 следует удалить из /plugins/, это несовместимо. Более того, и "bridge.dll", и "rpfencrypt.dll" являются избыточными: для работы C # API не требуется плагин.
    Это значит что вы должны удалить все плагины из папки plugins (они больше не используются). Вся серверная часть на c# переехала в папку dotnet и сам файл bridge.dll больше не нужон.


  2. DLCPack files should be moved from /client_packages/dlcpacks to /client_packages/game_resources/dlcpacks. If required, custom server-sided gameconfig.xml (/client_packages/game_resources/common/data/gameconfig.xml) could be used.
    Файлы DLCPack следует переместить из /client_packages/dlcpacks в /client_packages /game_resources/dlcpacks. При необходимости можно использовать настраиваемый серверный файл gameconfig.xml (/client_packages/game_resources/common/data/gameconfig.xml).
    Это значит что все dlcpacks переехали в новую папку (client_packages /game_resources/dlcpacks). А также появился новый способ настраивать конфиг игры (ограничения, лимиты) в файле client_packages/game_resources/common/data/gameconfig.xml


  3. Don't confuse "/server-files/ragemp-server.exe" (1.1) with "/server-files/server.exe" or "/server-files/dotnet/" with "/server-files/bridge/"
    Не путайте "/server-files/ragemp-server.exe" (1.1) с "/server-files/server.exe" или "/server-files /dotnet/" с "/server-files /bridge/"
    Это значит что вам надо заменить старый файл server.exe на новый ragemp-server.exe, а также еще раз говорится о изменениях в серверной части (см. пункт 1).


  4. Review all your custom synchronization code, some parts might be redutant with 1.1
    Просмотрите весь свой собственный код синхронизации, некоторые части могут быть изменены с 1.1.

  5. More may follow, be sure to check this again if you find incompatibility issues.
    Возможно, последуют другие, обязательно проверьте это еще раз, если вы обнаружите проблемы несовместимости.

На этом все, если есть какие то дополнительные вопросы или у вас возникли проблемы, пишите в эту тему, постараюсь помочь.
Данная статья сделана при поддержке - @FireFeed ака Владик, спасибо ему.
 
Последнее редактирование:

Belzer

Начинающий специалист
9 Фев 2021
24
9
53
Благодарю Вас за такую полезную статью!
 

FlameProfi

Специалист
18 Дек 2020
454
58
76
было ли какое то изменение в чекпоинтах? После перевода на 1.1 у меня пропали абсолютно все чекпоинты(домов, магазинов)
 
  • Like
Реакции: romkery_1 и NotDifficult

Harland David Sanders

Куратор портала
Автор темы
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,058
2,443
219
  • Like
Реакции: NotDifficult

FlameProfi

Специалист
18 Дек 2020
454
58
76

JavaScript:
methods.loadAllBlips = function () {

    methods.createBlip(new mp.Vector3(536.4715576171875, -3126.484375, 5.073556900024414), 598, 0, 0.8, 'Army');
    methods.createBlip(new mp.Vector3(450.0621337890625, -984.3471069335938, 43.69164276123047), 60, 0, 0.8);


JavaScript:
methods.createBlip = function (pos, sprite, color, scale, name, dimension) {
    if (scale == undefined)
        scale = 0.8;
    if (dimension == undefined)
        dimension = -1;
    if (name == undefined)
        return mp.blips.new(sprite, pos,
            {
                color: color,
                scale: scale,
                shortRange: true,
                dimension: dimension
            });
    return mp.blips.new(sprite, pos,
        {
            name: name,
            color: color,
            scale: scale,
            shortRange: true,
            dimension: dimension
        });
};
 

Harland David Sanders

Куратор портала
Автор темы
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,058
2,443
219
JavaScript:
methods.loadAllBlips = function () {

    methods.createBlip(new mp.Vector3(536.4715576171875, -3126.484375, 5.073556900024414), 598, 0, 0.8, 'Army');
    methods.createBlip(new mp.Vector3(450.0621337890625, -984.3471069335938, 43.69164276123047), 60, 0, 0.8);


JavaScript:
methods.createBlip = function (pos, sprite, color, scale, name, dimension) {
    if (scale == undefined)
        scale = 0.8;
    if (dimension == undefined)
        dimension = -1;
    if (name == undefined)
        return mp.blips.new(sprite, pos,
            {
                color: color,
                scale: scale,
                shortRange: true,
                dimension: dimension
            });
    return mp.blips.new(sprite, pos,
        {
            name: name,
            color: color,
            scale: scale,
            shortRange: true,
            dimension: dimension
        });
};
Это блипы (метки на карте) они не отображаются у тебя?
 

FlameProfi

Специалист
18 Дек 2020
454
58
76
Это блипы (метки на карте) они не отображаются у тебя?
извиняюсь, мозг слегка отказал и не то скниул.

вот как я понимаю создание самих пикапов.

JavaScript:
pickups.createAll = function() {
    methods.debug('pickups.createPickups');

    methods.createCpVector(pickups.EmsGarderobPos1, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos2, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos3, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos4, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos5, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);


JavaScript:
pickups.EmsGarderobPos1 = new mp.Vector3(299.0457458496094, -598.6067504882812, 42.28403091430664);
pickups.EmsGarderobPos2 = new mp.Vector3(-244.68588256835938, 6318.1396484375, 31.44457244873047);
pickups.EmsGarderobPos3 = new mp.Vector3(1206.7554931640625, -1465.3013916015625, 33.85951614379883);
pickups.EmsGarderobPos4 = new mp.Vector3(1838.8011474609375, 3689.89111328125, 33.27003479003906);
pickups.EmsGarderobPos5 = new mp.Vector3(-372.43133544921875, 6106.17626953125, 30.449552536010742);
 

Harland David Sanders

Куратор портала
Автор темы
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,058
2,443
219
извиняюсь, мозг слегка отказал и не то скниул.

вот как я понимаю создание самих пикапов.

JavaScript:
pickups.createAll = function() {
    methods.debug('pickups.createPickups');

    methods.createCpVector(pickups.EmsGarderobPos1, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos2, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos3, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos4, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);
    methods.createCpVector(pickups.EmsGarderobPos5, 'Нажмите ~g~E~s~ чтобы открыть меню', 1, -1, pickups.Blue);


JavaScript:
pickups.EmsGarderobPos1 = new mp.Vector3(299.0457458496094, -598.6067504882812, 42.28403091430664);
pickups.EmsGarderobPos2 = new mp.Vector3(-244.68588256835938, 6318.1396484375, 31.44457244873047);
pickups.EmsGarderobPos3 = new mp.Vector3(1206.7554931640625, -1465.3013916015625, 33.85951614379883);
pickups.EmsGarderobPos4 = new mp.Vector3(1838.8011474609375, 3689.89111328125, 33.27003479003906);
pickups.EmsGarderobPos5 = new mp.Vector3(-372.43133544921875, 6106.17626953125, 30.449552536010742);
Что именно не работает?
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
581
273
161
29
createCpVector эту функцию покажи
 
  • Like
Реакции: Harland David Sanders

FlameProfi

Специалист
18 Дек 2020
454
58
76
createCpVector эту функцию покажи
JavaScript:
methods.createCpVector = function (pos, message, scale, dimension, color, height) {
    return methods.createCp(pos.x, pos.y, pos.z, message, scale, dimension, color, height);
};

methods.createCp = function (x, y, z, message, scale = 1, dimension = -1, color = [33, 150, 243, 100], height = undefined) {

    if (height == undefined)
        height = scale / 2;

    let checkpointID = checkPointStaticList.length;
    checkPointStaticList.push({id: checkpointID, x: parseFloat(x), y: parseFloat(y), z: parseFloat(z), color: color, scale: scale, height: height});
    if (message)
        Container.Data.Set(999999, 'checkpointStaticLabel' + checkpointID, message);
    return checkpointID;
};
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
581
273
161
29
JavaScript:
methods.createCpVector = function (pos, message, scale, dimension, color, height) {
    return methods.createCp(pos.x, pos.y, pos.z, message, scale, dimension, color, height);
};

methods.createCp = function (x, y, z, message, scale = 1, dimension = -1, color = [33, 150, 243, 100], height = undefined) {

    if (height == undefined)
        height = scale / 2;

    let checkpointID = checkPointStaticList.length;
    checkPointStaticList.push({id: checkpointID, x: parseFloat(x), y: parseFloat(y), z: parseFloat(z), color: color, scale: scale, height: height});
    if (message)
        Container.Data.Set(999999, 'checkpointStaticLabel' + checkpointID, message);
    return checkpointID;
};
"checkPointStaticList" где происходит само создание маркеров?
 

FlameProfi

Специалист
18 Дек 2020
454
58
76
"checkPointStaticList" где происходит само создание маркеров?
Код:
methods.getCheckPointStaticList = function () {
    return checkPointStaticList;
};

methods.updateCheckpointList = function (player) {
    if(!mp.players.exists(player))
        return;
    try {
        for (let i = 0; i < methods.parseInt(methods.getCheckPointStaticList().length / 500) + 1; i++)
            player.call('client:updateCheckpointList', [methods.getCheckPointStaticList().slice(i * 500, i * 500 + 499)]);
    }
    catch (e) {
        methods.debug(e);
    }
};