using GTA;
using GTA.Native;
using System;
using System.Windows.Forms;
public class ATrainMod : Script
{
private bool isATrainModeActive = false;
public ATrainMod()
{
KeyDown += OnKeyDown;
Tick += OnTick;
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.U)
{
isATrainModeActive = !isATrainModeActive;
if (isATrainModeActive)
{
UI.Notify("~b~Режим Поезда-А (A-Train) активирован!~s~");
}
else
{
UI.Notify("~r~Режим Поезда-А выключен.~s~");
// Возвращаем стандартную скорость игрока через Native-вызов
Function.Call(Hash.SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER, Game.Player, 1.0f);
}
}
}
private void OnTick(object sender, EventArgs e)
{
if (!isATrainModeActive) return;
Ped playerPed = Game.Player.Character;
if (playerPed.Exists() && playerPed.IsAlive && (playerPed.IsRunning || playerPed.IsSprinting))
{
// Устанавливаем ускорение бега через Native-вызов старой версии
Function.Call(Hash.SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER, Game.Player, 1.49f);
// Физический толчок вперед
playerPed.ApplyForce(playerPed.ForwardVector * 3.5f);
// Эффект пыли и скорости из-под ног (вызов по хэш-номерам функций)
Function.Call(Hash.REQUEST_NAMED_PTFX_ASSET, "core");
if (Function.Call<bool>(Hash.HAS_NAMED_PTFX_ASSET_LOADED, "core"))
{
Function.Call(Hash._SET_PTFX_ASSET_NEXT_CALL, "core");
// Хэш для START_PARTICLE_EFFECT_NON_LOOPED_ON_ENTITY: 0x0C53BA701D97D3EB
Function.Call((Hash)0x0C53BA701D97D3EB, "ent_anim_dust_kickup", playerPed, 0f, 0f, 0f, 0f, 0f, 0f, 1.5f, false, false, false);
}
// Ищем людей вокруг
Ped[] nearbyPeds = World.GetNearbyPeds(playerPed.Position, 3.5f);
foreach (Ped ped in nearbyPeds)
{
if (ped.Exists() && ped != playerPed && ped.IsAlive)
{
ped.CanRagdoll = true;
// Перевод пешехода в физику тряпичной куклы
Function.Call(Hash.SET_PED_TO_RAGDOLL, ped, 5000, 5000, 0, true, true, false);
// С силой сбиваем человека с ног в направлении бега
ped.ApplyForce(playerPed.ForwardVector * 45.0f + playerPed.UpVector * 15.0f);
// Отнимаем здоровье
ped.Health -= 150;
// Кровавый спецэффект удара на координатах пешехода
Function.Call(Hash._SET_PTFX_ASSET_NEXT_CALL, "core");
// Хэш для START_PARTICLE_EFFECT_NON_LOOPED_AT_COORD: 0x25124EH7 (или прямой вызов по хэшу 0xBB9090358E8FBA8B)
Function.Call((Hash)0xBB9090358E8FBA8B, "ent_sht_blood", ped.Position.X, ped.Position.Y, ped.Position.Z, 0f, 0f, 0f, 2.0f, false, false, false);
}
}
}
}
}