Загрузка данных


using System;
using System.Windows.Forms;
using GTA;
using GTA.Native;

public class NativeVehicleCamera : Script
{
    private float _heightOffset = 0.90f; 
    private ScriptSettings _config;

    public NativeVehicleCamera()
    {
        // Загружаем настройки высоты
        _config = ScriptSettings.Load("scripts\\CameraOffsets.ini");
        KeyDown += OnKeyDown;
        Tick += OnTick;
        UI.Notify("~g~[v3] Нативный скрипт камеры загружен!");
    }

    private void OnTick(object sender, EventArgs e)
    {
        var vehicle = Game.Player.Character.CurrentVehicle;

        // Если мы не в машине, сбрасываем камеру в стандарт (на случай багов)
        if (vehicle == null) 
        {
            Function.Call(Hash.SET_FOLLOW_VEHICLE_CAM_OFFSET, 1, 0.0f, 0.0f, 0.0f);
            return; 
        }

        // Проверяем, что это твои машины
        bool isTarget = (vehicle.Model.Hash == Game.GenerateHash("jzx100") || 
                         vehicle.Model.Hash == Game.GenerateHash("mk2100"));

        if (isTarget)
        {
            // Применяем смещение ТОЛЬКО для третьего лица
            int viewMode = Function.Call<int>(Hash.GET_FOLLOW_VEHICLE_CAM_VIEW_MODE);
            
            if (viewMode != 4) 
            {
                // 1 - индекс стандартной камеры. 0.0f, 0.0f, _heightOffset - смещение по (X, Y, Z)
                Function.Call(Hash.SET_FOLLOW_VEHICLE_CAM_OFFSET, 1, 0.0f, 0.0f, _heightOffset);
            }
        }
        else
        {
            // Если сели в другую машину, возвращаем стандартную высоту
            Function.Call(Hash.SET_FOLLOW_VEHICLE_CAM_OFFSET, 1, 0.0f, 0.0f, 0.0f);
        }
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        var vehicle = Game.Player.Character.CurrentVehicle;
        if (vehicle == null) return;
        
        bool isTarget = (vehicle.Model.Hash == Game.GenerateHash("jzx100") || 
                         vehicle.Model.Hash == Game.GenerateHash("mk2100"));
        if (!isTarget) return;

        // Регулировка высоты прямо в игре
        if (e.KeyCode == Keys.NumPad9)
        {
            _heightOffset += 0.05f;
            SaveHeight(vehicle);
            UI.Notify("~g~Высота камеры: " + _heightOffset.ToString("F2")); 
        }
        else if (e.KeyCode == Keys.NumPad3)
        {
            _heightOffset -= 0.05f;
            SaveHeight(vehicle);
            UI.Notify("~y~Высота камеры: " + _heightOffset.ToString("F2")); 
        }
    }

    private string GetModelName(Vehicle vehicle)
    {
        if (vehicle.Model.Hash == Game.GenerateHash("jzx100")) return "jzx100";
        return "mk2100"; 
    }

    private void SaveHeight(Vehicle vehicle)
    {
        _config.SetValue<float>("Offsets", GetModelName(vehicle), _heightOffset);
        _config.Save();
    }
}