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


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

public class LaserEyes : Script
{
    private bool _isActive = false;

    public LaserEyes()
    {
        // Кнопка K (англ.) на клавиатуре для включения/выключения
        KeyDown += OnKeyDown;
        Tick += OnTick;
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.K)
        {
            _isActive = !_isActive;
            
            // Вывод уведомления над картой
            Function.Call(Hash.BEGIN_TEXT_COMMAND_THEME_NOTIFICATION, "STRING");
            Function.Call(Hash.ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME, "Лазерный взгляд: " + (_isActive ? "~g~ВКЛ" : "~r~ВЫКЛ"));
            Function.Call(Hash.END_TEXT_COMMAND_THEME_NOTIFICATION, 0, 1);
        }
    }

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

        Ped player = Game.Player.Character;
        
        // Направление взгляда камеры игрока
        Vector3 camPos = GameplayCamera.Position;
        Vector3 camRot = GameplayCamera.Direction;
        Vector3 targetPos = camPos + camRot * 200.0f; // Дистанция луча (200 метров)

        // Проверяем, куда упирается взгляд
        RaycastResult ray = World.Raycast(camPos, targetPos, IntersectOptions.Everything, player);

        if (ray.DidHit)
        {
            Vector3 hitPoint = ray.HitPosition;

            // Рисуем лазерную линию из головы персонажа в точку прицеливания
            Vector3 headPos = player.GetBonePosition(Bone.IK_Head);
            Function.Call(Hash.DRAW_LINE, headPos.X, headPos.Y, headPos.Z, hitPoint.X, hitPoint.Y, hitPoint.Z, 255, 0, 0, 255);

            // Создаем невидимый взрыв-поджог в точке попадания луча
            // Параметр 3 — это тип взрыва (Flame / Огонь), а последние параметры отключают звук и видимый бабах, оставляя только пламя
            Function.Call(Hash.ADD_EXPLOSION, hitPoint.X, hitPoint.Y, hitPoint.Z, 3, 2.0f, false, true, 0.0f, true);

            // Если взгляд направлен на машину или пешехода — поджигаем их принудительно
            if (ray.HitEntity != null)
            {
                Entity target = ray.HitEntity;
                if (!Function.Call<bool>(Hash.IS_ENTITY_ON_FIRE, target))
                {
                    Function.Call(Hash.START_ENTITY_FIRE, target);
                }
            }
        }
    }
}