Ты бы хотя бы 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:
Только после написания всего сверху я заметил, что тема старая, просто её подняли.