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);
}
}
}
}
}