-
Автор темы
- #1
Принцип работы прост, работает в основе везде. Это магнит на голову игрока, были проверены так же моменты когда игрок плавает, когда прыгает, поднимается по лестнице и тд, и работает без каких либо не удобств игроку и вам. Вас не кикнет за FlyHack если конечно сам игрок не читер, и не взлетит :)). Думаю если вы не пастер и нормальный разработчик или хотя бы понимаете своё дело. То не составит труда переписать в ваш софт на плюсы. Не проверял как работает на новой версии раст, но думаю что ничего не поменялось.
Простым решением я хукнул class(PlayerWalkMovement), method (ClientInput) инаписал в него код.
C#:
public static bool _pressOff = false;
if (input.IsDown(BUTTON.FORWARD) || input.IsDown(BUTTON.BACKWARD) || input.IsDown(BUTTON.LEFT) || input.IsDown(BUTTON.RIGHT) || input.IsDown(BUTTON.JUMP))//Стандартыне проверки на ходьму, магнит отключает, когда вы собираетесь открепится от человека и пойти своим путём.
_pressOff = false;
if (UnityEngine.Input.GetKeyDown(KeyCode.F)//Key Bind
&& IsOpen())//Проверка на то, открыт ли инвентарь, консоль, чат, или esc. Для того, что бы когда вы печатали то функция не сработала.
_pressOff = true;
GetComponent<PlayerWalkMovement>().body.constraints = _pressOff ? RigidbodyConstraints.FreezePositionY : RigidbodyConstraints.FreezeRotation;//Заморозить движение по оси Y, когда срабатывает магнит.
foreach (var basePlayer in BasePlayer.VisiblePlayerList)
{
if (basePlayer != null && (int)Vector3.Distance(LocalPlayer.Entity.transform.position, basePlayer.transform.position) <= 3.5f //Магнит на ближайшего человека в радиусе 3.5 метра. Можно так же переписать проверки и сделать с проверкой на друга или на одного человека по близости.
&& !basePlayer.IsLocalPlayer() && !basePlayer.IsSleeping() && !basePlayer.IsDead() && !basePlayer.IsWounded())
{
var position = basePlayer.playerModel.headBone.transform.position;
var position2 = new Vector3(position.x, position.y + 0.28f, position.z);
GetComponent<PlayerWalkMovement>().groundAngleNew = 0f;
GetComponent<PlayerWalkMovement>().grounded = true;
GetComponent<PlayerWalkMovement>().groundAngle = 0f;
GetComponent<PlayerWalkMovement>().body.velocity = new Vector3(0f, 0f, 0f);
GetComponent<PlayerWalkMovement>().transform.position = position2;
}
}