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

Мануал Создание синхронизированных NPC.

X-Clusiv

Модератор
Автор темы
Команда форума
high coder
4 Окт 2020
606
284
161
29
Всем доброго дня, вечера, утра, или что там у вас сейчас. :coffee:
И так, давайте сразу к делу.🧐
Создаем npc на стороне сервера(Я взял чистый сервер создал в нем папку server и в этой папке создал index.js):
1615388463110.png

JavaScript:
mp.events.addCommand({
    "spawnPed": (player) => {
        if(player.myPed)player.myPed.destroy();//если уже есть удаляем и пересоздаем
        player.myPed = mp.peds.new(mp.joaat('csb_burgerdrug'), new mp.Vector3(player.position.x+1, player.position.y, player.position.z), {
            dynamic: true,//синхранизирован false не синхранизирован.
            invincible: false,//true - npс бесмертный false - npс смертный
        })
        player.myPed.controller = player;//указываем, кто будет выступать в роли контроллера.
        if(player.myVeh)player.myPed.data.veh = player.myVeh; //привязали к NPC машину чтобы в дальнейшем могли обратится именно к ней уже на клиенте
    }
});
Теперь прописав в чат /spawnPed мы можем заспавнить нашего NPС
Зачем нужен контроллер? Скажу лишь, что через указанного игрока будет осуществляться синхронизация NPC с другими игроками.
Контроллера можно сменить в любой момент.

Идем дальше. Нам нужно как-то давать команды нашему NPC. Пусть NPC будет взаимодействовать с машиной, добавим возможность спавна авто.
Дополняем наш код на стороне сервера.
JavaScript:
mp.events.addCommand({
    "spawnPed": (player) => {
        if(player.myPed)player.myPed.destroy();//если уже есть удаляем и пересоздаем
        player.myPed = mp.peds.new(mp.joaat('csb_burgerdrug'), new mp.Vector3(player.position.x+1, player.position.y, player.position.z), {
            dynamic: true,
            invincible: false,//true - npс бесмертный false - npс смертный
        })
        player.myPed.controller = player;//указываем, кто будет выступать в роли контроллера.
        if(player.myVeh)player.myPed.data.veh = player.myVeh; //привязали к NPC машину чтобы в дальнейшем могли обратится именно к ней уже на клиенте
    },
    "spawnVeh": (player, name) => {
        if(player.myVeh)player.myVeh.destroy();//если уже есть удаляем и пересоздаем
        player.myVeh = mp.vehicles.new(mp.joaat(name), new mp.Vector3(player.position.x+3, player.position.y, player.position.z), {
             numberPlate: 'RAGEMP',
             color:[[0,0,0],[0,0,0]],
             alpha: 255,
             locked: false,
             dimension: player.dimension,
         });
        if(player.myPed)player.myPed.data.veh = player.myVeh; //привязали к NPC машину чтобы в дальнейшем могли обратится именно к ней уже на клиенте
    }
});
Теперь можем создать авто /spawnVeh Hash (/spawnVeh taxi)
Главный вопрос, как заставить NPC совершать какие-то действия? Давайте попробуем заставить нашего подопечного сесть в авто. И доехать до нас!
Все также на сервере
JavaScript:
mp.events.addCommand({
    "spawnPed": (player) => {
        if(player.myPed)player.myPed.destroy();//если уже есть удаляем и пересоздаем
        player.myPed = mp.peds.new(mp.joaat('csb_burgerdrug'), new mp.Vector3(player.position.x+1, player.position.y, player.position.z), {
            dynamic: true,
            invincible: false,//true - npс бесмертный false - npс смертный
        })
        player.myPed.controller = player;//указываем, кто будет выступать в роли контроллера.
        if(player.myVeh)player.myPed.data.veh = player.myVeh; //привязали к NPC машину чтобы в дальнейшем могли обратится именно к ней уже на клиенте
    },
    "spawnVeh": (player, name) => {
        if(player.myVeh)player.myVeh.destroy();//если уже есть удаляем и пересоздаем
        player.myVeh = mp.vehicles.new(mp.joaat(name), new mp.Vector3(player.position.x+3, player.position.y, player.position.z), {
             numberPlate: 'RAGEMP',
             color:[[0,0,0],[0,0,0]],
             alpha: 255,
             locked: false,
             dimension: player.dimension,
         });
        if(player.myPed)player.myPed.data.veh = player.myVeh; //привязали к NPC машину чтобы в дальнейшем могли обратится именно к ней уже на клиенте
    },
    "ped": (player, command) => {
        player.myPed.data.command = command; //Даем команду NPС
    }
});
Что здесь происходит?:eek: Мы при вызове команды /ped command передаем какую-нибудь команду боту.(не обязательно это делать так, это один из способов)
Это еще не все. На клиенте создайте файлик index.js
1615390766693.png

И в этом файле пишем следующее:
JavaScript:
let player = mp.players.local;
mp.events.add('guiReady', () => {// Ждем пока gui прогрузится...
    mp.events.addDataHandler({ // если простыми словами, при изменении entity.data.command на сервере, вызывается соответствующая функция на клиенте
        'command': (entity, value, oldValue) => {
            switch (value) {
                case 'enterVeh':
                    let veh = entity.getVariable("veh");
                    if (veh){
                        entity.taskEnterVehicle(veh.handle, 10000, -1, 1, 1, 0);//даем задачу сесть в машину
                        entity.vehicle = veh;
                    }
                    else mp.gui.chat.push("ped: У меня нет машины в которую я мог бы сесть :(");
                    break;
                case 'goMe':
                    if (entity.vehicle) {
                        entity.taskVehiclePark(entity.vehicle.handle, player.position.x, player.position.y, player.position.z, 0, 0, 50, false); //ехать к персонажу
                    } else {
                        entity.taskGoToCoordAnyMeans(player.position.x, player.position.y, player.position.z, 6, 0, false, 1, 0); //идти к персонажу
                    }
                    break;
                default:
                    mp.gui.chat.push("ped: Я не знаю команды " + value);
                    break;
            }
        }
    })
})
Всё! Теперь мы можем управлять нашей марионеткой.
/ped enterVeh - заставит сесть NPC в заспавленую машину.
/ped goMe заставит идти NPC к вам если он не в машине, или заставит ехать на машине в которую он сел.
Все действия будут синхронизированы с другими игроками!
Скачать сервер
Смотреть -> Видео
 

Вложения

  • 1615390757009.png
    1615390757009.png
    16.9 KB · Просмотры: 373
Последнее редактирование:

Nevedimka

Специалист
6 Янв 2021
156
43
83
Неужели тут появилось хоть что-то не посвященное редаге
 
  • OK
Реакции: X-Clusiv

Boiko

Начинающий специалист
16 Сен 2020
62
9
57
а можно как то это в RAGE 1.1
 

miaoxs

Участник портала
17 Дек 2020
23
0
13
Как я могу создать пешеходного NPC, который автоматически ходит и пересекает дорогу в 0.3.7?
 

X-Clusiv

Модератор
Автор темы
Команда форума
high coder
4 Окт 2020
606
284
161
29
Как я могу создать пешеходного NPC, который автоматически ходит и пересекает дорогу в 0.3.7?
В 0.3.7 Нужно писать свою систему синхронизации NPC. Если хотите оживить город без синхронизации, можно просто включить генерацию NPC.
 
Последнее редактирование:
  • Like
Реакции: Tony

X-Clusiv

Модератор
Автор темы
Команда форума
high coder
4 Окт 2020
606
284
161
29
  • Like
Реакции: miaoxs

Luvee

Участник портала
24 Апр 2023
2
1
15
Ребят, помогите пожалуйста. Есть нпс, но я не могу его открывать, подскажите как это сделать? И как ему реализовать определнные функции? допустим получить лицензию.
 
  • Like
Реакции: FireFeed

Inoi

/dev/null
VIP
15 Окт 2020
2,676
1,603
208
34
Ребят, помогите пожалуйста. Есть нпс, но я не могу его открывать, подскажите как это сделать? И как ему реализовать определнные функции? допустим получить лицензию.
нпс нельзя "открывать", это просто пед
если ты хочешь добавить какое-то действие - это отдельная вещь, которая никак с ним на самом деле не связана - например событие вызова браузера или какой то менюшки
можно создать под нпс кулшейп например, по взаимодействию с которым это будет происходить
или проверять, что игрок смотрит на нпс - и тогда вешать такое событие на какую-нибудь кнопку

сам по себе нпс - это просто моделька, которая никак не соотносится с чем-либо
его невозможно "открыть" или соотнести с какими-то действиями и окнами, если только ты конечно сам не напишешь какой-нибудь менеджер нпс, и уже внутри него твоему объекту будет присвоен и конкретный пед, и кулшейп например и действия с ним
 
Последнее редактирование:

abc

Специалист
30 Мар 2021
231
11
75
Ребят, помогите пожалуйста. Есть нпс, но я не могу его открывать, подскажите как это сделать? И как ему реализовать определнные функции? допустим получить лицензию.
Такого нету , это работает так что ты создаешь в коде нпс на опроделеном месте , и потом добавляешь рядом с ним колшейп , и прописываешь функцию выдачи лизенции
 

playfer

Участник портала
8 Сен 2023
2
0
13
Я попробовал добавить несколько анимаций, но они синхронизируются только тогда, когда вы находитесь в зоне действия потока, что посоветуете? На моем клиенте я получаю синхронизацию при выходе и входе в зону действия потока, но для других игроков она не синхронизируется, возможно, дело в контроллере, есть идеи?
 

Inoi

/dev/null
VIP
15 Окт 2020
2,676
1,603
208
34
Я попробовал добавить несколько анимаций, но они синхронизируются только тогда, когда вы находитесь в зоне действия потока, что посоветуете? На моем клиенте я получаю синхронизацию при выходе и входе в зону действия потока, но для других игроков она не синхронизируется, возможно, дело в контроллере, есть идеи?
а зачем её синхронизировать для тех, кто не в зоне действия стрима, я извиняюсь?
он же всё равно не видит нпс

ты оборачиваешь функцию вызова твоих анимаций в entityStreamIn ?
твой пед стоит на месте или должен перемещаться?
 
Последнее редактирование:

playfer

Участник портала
8 Сен 2023
2
0
13
Я хочу, чтобы он синхронизировался только при входе в диапазон, если анимация применяется на педе и игрок находится в диапазоне, вы видите анимацию, но если вы покидаете диапазон и снова входите, вы не видите анимацию.
 

Inoi

/dev/null
VIP
15 Окт 2020
2,676
1,603
208
34
Я хочу, чтобы он синхронизировался только при входе в диапазон, если анимация применяется на педе и игрок находится в диапазоне, вы видите анимацию, но если вы покидаете диапазон и снова входите, вы не видите анимацию.
а условно чтобы здоровался с тобой

ну вешай флаг какой-нибудь на нпс типа "familiar = 1" после того как один раз попал в стрим и проиграл анимку и проверяй его в ентитистримин с этим педом перед тем как проигрывать анимацию