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
67
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

Гуру
BackEnd developer
7 Сен 2021
281
148
122
А можно такое же только на 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

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,919
1,671
211
28
Ты бы хотя бы 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

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,671
2,848
219

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

UchihaMadara

Старожил
FrontEnd developer
27 Окт 2020
755
268
141
Зачем использовать Try/Catch в ACMD_GetCar
Что именно выбрасывает исключение?
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,919
1,671
211
28
Зачем использовать Try/Catch в ACMD_GetCar
Что именно выбрасывает исключение?
Когда докопаться не до чего, но очень хочется, то можно.
Я всегда и везде использую try catch, потому что в критичной ситуации только это может что-то спасти. Это RAGE и здесь может быть что угодно.
Например, если в этом примере не делать проверку на if(vehicle == null) return;, то в случае, если метод вернёт null, то ты получишь срабатывание exception'а.
В детский сад опускаться я не собираюсь, поэтому успехов тебе.
 

UchihaMadara

Старожил
FrontEnd developer
27 Окт 2020
755
268
141
Я надеюсь, ты читал, для чего нужен Try/Catch?