This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

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

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;
        }
    }
})
 
Реакции: puars09 и DigitalCore

XDeveluxe

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


Вот мой пример, который подойдёт в любой мод (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,069
2,473
219

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

UchihaMadara

Гуру
high coder
27 Окт 2020
512
225
101
Зачем использовать 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?