using System;
using System.Windows.Forms;
using GTA;
using GTA.Math;
using GTA.Native;
public class CustomVehicleCamera : Script
{
private Camera _carCamera;
private float _heightOffset = 0.0f;
private readonly float _heightStep = 0.05f; // Шаг изменения высоты
private ScriptSettings _config;
public CustomVehicleCamera()
{
// Загружаем настройки из файла (создастся автоматически)
_config = ScriptSettings.Load("scripts\\CameraOffsets.ini");
Tick += OnTick;
KeyDown += OnKeyDown;
}
private void OnTick(object sender, EventArgs e)
{
var player = Game.Player.Character;
var vehicle = player.CurrentVehicle;
// Если игрок в машине и это не вид от первого лица
if (vehicle != null && vehicle.IsAlive && !Game.IsPaused && !Function.Call<bool>(Hash.IS_GAMEPLAY_CAM_LOOKING_BEHIND))
{
if (_carCamera == null || !_carCamera.Exists())
{
_carCamera = World.CreateCamera(vehicle.Position, vehicle.Rotation, 60f);
// Загружаем сохраненную высоту для этой модели (по умолчанию 0)
string modelName = vehicle.Model.ToString();
_heightOffset = _config.GetValue<float>("Offsets", modelName, 0.0f);
}
// Смещение: X = 0 (по центру), Y = -5 (сзади), Z = 2 + _heightOffset
var offset = new Vector3(0f, -5f, 2f + _heightOffset);
_carCamera.AttachTo(vehicle, offset);
// Камера смотрит туда же, куда и машина
_carCamera.Rotation = vehicle.Rotation;
World.RenderingCamera = _carCamera;
}
else
{
// Возврат к стандартной камере при выходе из машины
if (_carCamera != null && _carCamera.Exists())
{
World.RenderingCamera = null;
_carCamera.Delete();
_carCamera = null;
}
}
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
var vehicle = Game.Player.Character.CurrentVehicle;
if (vehicle == null) return;
string modelName = vehicle.Model.ToString();
if (e.KeyCode == Keys.NumPad8) // Поднять
{
_heightOffset += _heightStep;
SaveOffset(modelName);
}
else if (e.KeyCode == Keys.NumPad2) // Опустить
{
_heightOffset -= _heightStep;
SaveOffset(modelName);
}
}
private void SaveOffset(string modelName)
{
_config.SetValue<float>("Offsets", modelName, _heightOffset);
_config.Save();
UI.ShowSubtitle($"~y~{modelName}~s~: Высота = {_heightOffset:F2}");
}
}