Не совсем понятно, если честно, чего ты хочешь добиться со стороны кода.
.SetData работает достаточно плохо в RAGE (во всяком случае, работала плохо раньше, на счёт как сейчас - не знаю, не пробовал), я бы советовал завести какой-то словарь, в котором будут храниться объекты машин и кастомный класс со всей её временной датой (той, которую не нужно сохранять при перезапуске мода, например). В кастомном классе уже можно хранить сколько угодно информации, которую доставать будешь по самой машине.
Небольшой пример:
C#:
public class VehicleData
{
/// <summary>
/// Перевозчик
/// </summary>
public Player Carrier = null;
/// <summary>
/// Перехватчик
/// </summary>
public Player Interceptor = null;
}
Так же неплохо позаботиться о методах, которые будут добавлять, получать или удалять из нашего словаря - машину:
C#:
/// <summary>
/// Словарь с данными всех машин, которые мы поместим внутрь.
/// </summary>
private static readonly Dictionary<Vehicle, VehicleData> VehicleDatas = new Dictionary<Vehicle, VehicleData>();
/// <summary>
/// Добавить пустые данные о машине в словарь
/// </summary>
/// <param name="vehicle">Объект машины</param>
/// <returns>Объект VehicleData с данными машины</returns>
public static VehicleData CreateVehicleData(Vehicle vehicle)
{
if (DoesVehicleDataExists(vehicle)) return GetVehicleData(vehicle);
VehicleData vehicleData = new VehicleData();
VehicleDatas.Add(vehicle, vehicleData);
return vehicleData;
}
/// <summary>
/// Удалить данные о машине из словаря
/// </summary>
/// <param name="vehicle">Объект машины</param>
public static bool DeleteVehicleData(Vehicle vehicle)
{
if (!DoesVehicleDataExists(vehicle)) return false;
VehicleDatas.Remove(vehicle);
return true;
}
/// <summary>
/// Получить данные о машине из словаря
/// </summary>
/// <param name="vehicle">Объект машины</param>
/// <returns>Объект VehicleData, если данные существуют, в противном случае null</returns>
public static VehicleData GetVehicleData(Vehicle vehicle)
{
return DoesVehicleDataExists(vehicle) ? VehicleDatas[vehicle] : null;
}
/// <summary>
/// Проверить существуют ли данные о машине в нашем словаре
/// </summary>
/// <param name="vehicle">Объект машины</param>
/// <returns>true, если да, в противном случае false</returns>
public static bool DoesVehicleDataExists(Vehicle vehicle)
{
return VehicleDatas.Contains(vehicle);
}
Всё, что после этого тебе осталось - найти методы создания машин по рейджу и использовать метод CreateVehicleData передавая в аргументы объект машины и принимая в переменную данные этой машины. По этой же переменной управлять самими данными, например:
C#:
Vehicle vehicle = NAPI.Vehicle.CreateVehicle(NAPI.Util.GetHashKey("adder"), new Vector3(0, 0, 0), 0, 1, 1, "RAGEMP", 0, true, true, 0);
VehicleData vehicleData = CreateVehicleData(vehicle);
vehicleData.Carrier = target;
Теперь в .Carrier ты можешь записывать любого игрока, которого хочешь, а так же обнулять (записывая туда null, например).
Однако в таком случае нельзя забывать, что перед тем как удалить машину, тебе так же нужно удалить её данные с помощью метода DeleteVehicleData, иначе ты будешь заполнять память мода, а оперативной памяти у тебя не бесконечное количество.