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


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

public class HomelanderMod : Script
{
    private bool isLaserActive = false;

    public HomelanderMod()
    {
        KeyDown += OnKeyDown;
        Tick += OnTick;
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.U)
        {
            isLaserActive = !isLaserActive;

            if (isLaserActive)
            {
                UI.Notify("~r~Лазеры Хоумлендера (из глаз) включены!~s~");
            }
            else
            {
                UI.Notify("~g~Лазеры выключены.~s~");
            }
        }
    }

    private void OnTick(object sender, EventArgs e)
    {
        if (!isLaserActive) return;

        Ped playerPed = Game.Player.Character;

        if (playerPed.Exists() && playerPed.IsAlive)
        {
            // Бессмертие игрока от огня и взрывов
            playerPed.IsInvincible = true;

            // Направление взгляда головы/тела персонажа
            Vector3 forwardVector = playerPed.ForwardVector;

            // Реальная позиция глаз персонажа
            Vector3 eyePos = playerPed.Position + playerPed.UpVector * 0.62f;
            Vector3 leftEye = eyePos - playerPed.RightVector * 0.1f;
            Vector3 rightEye = eyePos + playerPed.RightVector * 0.1f;

            // Конечная точка лучей (30 метров вперед)
            Vector3 targetPos = eyePos + forwardVector * 30.0f;

            // РИСУЕМ ТОЛСТЫЕ ЛАЗЕРЫ: Используем маркеры-цилиндры (тип 27), которые отлично работают в v2.10.3
            // 255, 0, 0 — ярко-красный цвет, 220 — высокая плотность (будут толстыми и видимыми)
            Function.Call(Hash.DRAW_MARKER, 27, leftEye.X, leftEye.Y, leftEye.Z, forwardVector.X, forwardVector.Y, forwardVector.Z, 0.0f, 0.0f, 0.0f, 0.3f, 30.0f, 0.3f, 255, 0, 0, 220, false, false, 2, false, null, null, false);
            Function.Call(Hash.DRAW_MARKER, 27, rightEye.X, rightEye.Y, rightEye.Z, forwardVector.X, forwardVector.Y, forwardVector.Z, 0.0f, 0.0f, 0.0f, 0.3f, 30.0f, 0.3f, 255, 0, 0, 220, false, false, 2, false, null, null, false);

            // Безопасный перебор объектов в узком конусе перед игроком (вместо вылетающего нативного луча)
            // Ищем людей в радиусе 30 метров
            foreach (Ped ped in World.GetAllPeds())
            {
                if (ped.Exists() && ped != playerPed && ped.IsAlive)
                {
                    // Если человек находится близко к траектории взгляда (в пределах узкого угла)
                    if (ped.Position.DistanceTo(eyePos) < 30.0f && IsEntityInFront(playerPed, ped))
                    {
                        Function.Call(Hash.START_ENTITY_FIRE, ped); // Мгновенный поджог пешехода
                        ped.Health -= 10; // Выжигание здоровья лазером
                    }
                }
            }

            // Ищем машины в радиусе 30 метров
            foreach (Vehicle veh in World.GetAllVehicles())
            {
                if (veh.Exists())
                {
                    // Если машина находится перед игроком на линии взгляда
                    if (veh.Position.DistanceTo(eyePos) < 30.0f && IsEntityInFront(playerPed, veh))
                    {
                        Function.Call(Hash.START_ENTITY_FIRE, veh); // Поджигаем машину
                        Function.Call(Hash.SET_VEHICLE_DAMAGE, veh, veh.Position, 100.0f, 30.0f, true); // Наносим урон кузову/двигателю
                    }
                }
            }
        }
    }

    // Вспомогательный метод для проверки, находится ли объект строго перед лицом игрока
    private bool IsEntityInFront(Ped player, Entity target)
    {
        Vector3 dirToTarget = (target.Position - player.Position);
        dirToTarget.Normalize();
        // Считаем угол между направлением взгляда и направлением на цель
        float dotProduct = Vector3.Dot(player.ForwardVector, dirToTarget);
        // 0.97f — это узкий угол обзора, симулирующий точечный лазер из глаз
        return dotProduct > 0.97f;
    }
}