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

Мануал Телепорт транспорта

gemeries9

Начинающий специалист
Автор темы
13 Мар 2021
27
4
47
C#:
[Command("ghc")]
        public static void CMD_teleportToMeCar(Player player, ushort vid)
        {
            try
            {
                foreach (var v in NAPI.Pools.GetAllVehicles())
                {
                    if (vid == v.Value)
                    {
                        NAPI.Entity.SetEntityPosition(v, player.Position);
                        NAPI.Entity.SetEntityRotation(v, player.Rotation);
                        NAPI.Entity.SetEntityDimension(v, player.Dimension);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Write("EXCEPTION AT \"CMD\":\n" + e.ToString(), nLog.Type.Error);
            }
        }
спижено с Golemo-mode добавить в commands
 

Aiden

Гуру
high coder
7 Сен 2021
249
158
102
А можно такое же только на js
JavaScript:
mp.events.addCommand('tpveh', (player, _, veh_id) => {
    if (veh_id == undefined) return player.outputChatBox('/tpveh [veh_id]');
    mp.vehicles.forEach(veh) => {
        if (veh.id == veh_id) {
            veh.position = player.position;
            veh.dimension = player.dimension;
        }
    }
})
 
  • Like
Реакции: puars09 и DigitalCore

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,425
191
27
Ты бы хотя бы break поставил после того, как машина была телепортирована, ибо смысл ты гонишь цикл дальше, если машина уже найдена и действие закончено?
Вырезать ума хватило, но вдуматься - не очень. Так же использование 'var'ов не самый лучший выход, хоть и страшного не много, но я бы советовал использовать конкретный тип данных, в данном случае 'Vehicle v'. Помимо прочего vehicle.Value имеет тип int, а не ushort, что будет проблематично с использованием твоего примера, если вдруг (каким-то образом) на сервере будет более 65.535 машин одновременно.
1631004182346.png


Вот мой пример, который подойдёт в любой мод (1.1), хоть и тоже не идеальный.

C#:
using System.Linq;

public static Vehicle FindVehicleByID(int ID)
{
    List<Vehicle> vehs = NAPI.Pools.GetAllVehicles().ToList();
    foreach(Vehicle veh in vehs)
    {
        if(veh == null) continue;
        else if(veh.Value == ID) return veh;
    }
    return null;
}

[Command("getcar")]
public static void ACMD_GetCar(Player player, int id)
{
    try
    {
        if(player == null) return;
        // Проверяете на существующий класс персонажа, на админку и всё, что вам нужно
        Vehicle veh = FindVehicleByID(id);
        if(veh == null) return;
        veh.Position = player.Position;
        veh.Rotation = player.Rotation;
        veh.Dimension = player.Dimension;
    }
    catch (Exception e)
    {
        Console.WriteLine($"ACMD_GetCar Exception: {e.ToString()}");
    }
}

С помощью такой FindVehicleByID теперь можно будет в любом месте искать класс машины в 1 строку без лишних морок и нагрузки.

ВАЖНО ЗНАТЬ!
Использование FindVehicleByID должно быть только в главном потоке, в противном случае можете столкнуться с крашами сервера, так как любое взаимодействое с RAGE должно происходить строго в главном потоке.

UPD:
Только после написания всего сверху я заметил, что тема старая, просто её подняли.
 
Последнее редактирование:

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,060
2,451
219
Ты бы хотя бы break поставил после того, как машина была телепортирована, ибо смысл ты гонишь цикл дальше, если машина уже найдена и действие закончено?
Вырезать ума хватило, но вдуматься - не очень. Так же использование 'var'ов не самый лучший выход, хоть и страшного не много, но я бы советовал использовать конкретный тип данных, в данном случае 'Vehicle v'. Помимо прочего vehicle.Value имеет тип int, а не ushort, что будет проблематично с использованием твоего примера, если вдруг (каким-то образом) на сервере будет более 65.535 машин одновременно.
Посмотреть вложение 2360

Вот мой пример, который подойдёт в любой мод (1.1), хоть и тоже не идеальный.

C#:
using System.Linq;

public static Vehicle FindVehicleByID(int ID)
{
    List<Vehicle> vehs = NAPI.Pools.GetAllVehicles().ToList();
    foreach(Vehicle veh in vehs)
    {
        if(veh == null) continue;
        else if(veh.Value == ID) return veh;
    }
    return null;
}

[Command("getcar")]
public static void ACMD_GetCar(Player player, int id)
{
    try
    {
        if(player == null) return;
        // Проверяете на существующий класс персонажа, на админку и всё, что вам нужно
        Vehicle veh = FindVehicleByID(id);
        if(veh == null) return;
        veh.Position = player.Position;
        veh.Rotation = player.Rotation;
        veh.Dimension = player.Dimension;
    }
    catch (Exception e)
    {
        Console.WriteLine($"ACMD_GetCar Exception: {e.ToString()}");
    }
}

С помощью такой FindVehicleByID теперь можно будет в любом месте искать класс машины в 1 строку без лишних морок и нагрузки.

UPD:
Только после написания всего сверху я заметил, что тема старая, просто её подняли.

Респект за полный разбор способа ;)
 

UchihaMadara

Гуру
high coder
27 Окт 2020
512
225
101
Ты бы хотя бы break поставил после того, как машина была телепортирована, ибо смысл ты гонишь цикл дальше, если машина уже найдена и действие закончено?
Вырезать ума хватило, но вдуматься - не очень. Так же использование 'var'ов не самый лучший выход, хоть и страшного не много, но я бы советовал использовать конкретный тип данных, в данном случае 'Vehicle v'. Помимо прочего vehicle.Value имеет тип int, а не ushort, что будет проблематично с использованием твоего примера, если вдруг (каким-то образом) на сервере будет более 65.535 машин одновременно.
Посмотреть вложение 2360

Вот мой пример, который подойдёт в любой мод (1.1), хоть и тоже не идеальный.

C#:
using System.Linq;

public static Vehicle FindVehicleByID(int ID)
{
    List<Vehicle> vehs = NAPI.Pools.GetAllVehicles().ToList();
    foreach(Vehicle veh in vehs)
    {
        if(veh == null) continue;
        else if(veh.Value == ID) return veh;
    }
    return null;
}

[Command("getcar")]
public static void ACMD_GetCar(Player player, int id)
{
    try
    {
        if(player == null) return;
        // Проверяете на существующий класс персонажа, на админку и всё, что вам нужно
        Vehicle veh = FindVehicleByID(id);
        if(veh == null) return;
        veh.Position = player.Position;
        veh.Rotation = player.Rotation;
        veh.Dimension = player.Dimension;
    }
    catch (Exception e)
    {
        Console.WriteLine($"ACMD_GetCar Exception: {e.ToString()}");
    }
}

С помощью такой FindVehicleByID теперь можно будет в любом месте искать класс машины в 1 строку без лишних морок и нагрузки.

ВАЖНО ЗНАТЬ!
Использование FindVehicleByID должно быть только в главном потоке, в противном случае можете столкнуться с крашами сервера, так как любое взаимодействое с RAGE должно происходить строго в главном потоке.

UPD:
Только после написания всего сверху я заметил, что тема старая, просто её подняли.
Зачем использовать Try/Catch в ACMD_GetCar
Что именно выбрасывает исключение?
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,220
1,425
191
27
Зачем использовать Try/Catch в ACMD_GetCar
Что именно выбрасывает исключение?
Когда докопаться не до чего, но очень хочется, то можно.
Я всегда и везде использую try catch, потому что в критичной ситуации только это может что-то спасти. Это RAGE и здесь может быть что угодно.
Например, если в этом примере не делать проверку на if(vehicle == null) return;, то в случае, если метод вернёт null, то ты получишь срабатывание exception'а.
В детский сад опускаться я не собираюсь, поэтому успехов тебе. :)
 

UchihaMadara

Гуру
high coder
27 Окт 2020
512
225
101
Когда докопаться не до чего, но очень хочется, то можно.
Я всегда и везде использую try catch, потому что в критичной ситуации только это может что-то спасти. Это RAGE и здесь может быть что угодно.
Например, если в этом примере не делать проверку на if(vehicle == null) return;, то в случае, если метод вернёт null, то ты получишь срабатывание exception'а.
В детский сад опускаться я не собираюсь, поэтому успехов тебе. :)
Я надеюсь, ты читал, для чего нужен Try/Catch?