Вопрос Помогите с кодом для обхода Simulation на 1.8 пожалуйста

Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции[?]
0
Поинты[?]
0

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Я использую код:

Java:
    public static void silentMoveFix(StrafeEvent event, float yaw) {
        float serverYaw = CustomRotation.getYaw();

        int diff = (int) (MathHelper.wrapAngleTo180_float(yaw - serverYaw - 23.5f - 135) + 180) / 45;

        yaw = serverYaw;

        float strafe = event.strafe;
        float forward = event.forward;
        float friction = event.friction;
        float calcForward = 0f;
        float calcStrafe = 0f;

        switch (diff)
        {
            case 0:
            {
                calcForward = forward;
                calcStrafe = strafe;
            }
            break;

            case 1:
            {
                calcForward += forward;
                calcStrafe -= forward;
                calcForward += strafe;
                calcStrafe += strafe;
            }
            break;

            case 2:
            {
                calcForward = strafe;
                calcStrafe = -forward;
            }
            break;

            case 3:
            {
                calcForward -= forward;
                calcStrafe -= forward;
                calcForward += strafe;
                calcStrafe -= strafe;
            }
            break;

            case 4:
            {
                calcForward = -forward;
                calcStrafe = -strafe;
            }
            break;

            case 5:
            {
                calcForward -= forward;
                calcStrafe += forward;
                calcForward -= strafe;
                calcStrafe -= strafe;
            }
            break;

            case 6:
            {
                calcForward = -strafe;
                calcStrafe = forward;
            }
            break;

            case 7:
            {
                calcForward += forward;
                calcStrafe += forward;
                calcForward -= strafe;
                calcStrafe += strafe;
            }
            break;
        }

        if (calcForward > 1f || calcForward < 0.9f && calcForward > 0.3f || calcForward < -1f || calcForward > -0.9f && calcForward < -0.3f)
        {
            calcForward *= 0.5f;
        }

        if (calcStrafe > 1f || calcStrafe < 0.9f && calcStrafe > 0.3f || calcStrafe < -1f || calcStrafe > -0.9f && calcStrafe < -0.3f)
        {
            calcStrafe *= 0.5f;
        }

        float movementLength = calcStrafe * calcStrafe + calcForward * calcForward;

        if (movementLength >= 1.0E-4f)
        {
            movementLength = MathHelper.sqrt_float(movementLength);

            if (movementLength < 1.0f)
            {
                movementLength = 1.0f;
            }

            movementLength = friction / movementLength;

            calcStrafe = calcStrafe * movementLength;
            calcForward = calcForward * movementLength;

            float yawSin = MathHelper.sin((float) (yaw * Math.PI / 180));
            float yawCos = MathHelper.cos((float) (yaw * Math.PI / 180));

            mc.thePlayer.motionX += calcStrafe * yawCos - calcForward * yawSin;
            mc.thePlayer.motionZ += calcForward * yawCos + calcStrafe * yawSin;
        }
    }
вызываю его за место moveFlying у класса Entity, он должен корректировать движение относительно yaw той-же killaura, но меня помечает с ним за simulation. Может кто-то подсказать, что в этом коде не так?
и если кто-то знает откуда в MathHelper.wrapAngleTo180_float(yaw - serverYaw - 23.5f - 135) + 180) / 45; - 23.5f и - 135, расскажите пожалуйста
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции[?]
0
Поинты[?]
0
У меня есть 2 проблемы:
1) когда silentMoveFix не вызывает (игрок выключил киллауру или убил цель), то меня помечает пару раз за Simulation.
2) Когда я нажимаю Sprint (friction увеличивается), нужно что-то дописать в этот код, что вычисляло бы правильный friction. Но я не знаю, когда я нажимаю спринт сервер понимает что я со спринтом? То есть, нужно кроме правильного friction еще и отключать игроку sprint?
 
Forge Api ;-;
Начинающий
Статус
Онлайн
Регистрация
3 Май 2023
Сообщения
776
Реакции[?]
18
Поинты[?]
13K
Изменяешь motionX и motionZ напрямую, что скорее всего вызывает десинк между клиентом и сервером.

float moveX = calcStrafe * yawCos - calcForward * yawSin;
float moveZ = calcForward * yawCos + calcStrafe * yawSin;

mc.thePlayer.motionX = (mc.thePlayer.motionX * 0.8 + moveX * 0.2);
mc.thePlayer.motionZ = (mc.thePlayer.motionZ * 0.8 + moveZ * 0.2);
Можешь попробовать более плавно изменять всю это херобобину
Возможно траблы с расчётом yaw
Можешь так-же добавить ограничение по скорости и потестить так, либо добавить небольшую задержку между коррекцией

UPD:
-23.5f и -135 возможно значения для какого то конкретного сервера. Попробуй так-же поиграться с ними.
Думаю тебе в основе стоит попробовать более плавно изменять моушн и как раз таки подобрать другие значения под конкретный ач (вместо твоих -23.5f и -135)
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Изменяешь motionX и motionZ напрямую, что скорее всего вызывает десинк между клиентом и сервером.

float moveX = calcStrafe * yawCos - calcForward * yawSin;
float moveZ = calcForward * yawCos + calcStrafe * yawSin;

mc.thePlayer.motionX = (mc.thePlayer.motionX * 0.8 + moveX * 0.2);
mc.thePlayer.motionZ = (mc.thePlayer.motionZ * 0.8 + moveZ * 0.2);
Можешь попробовать более плавно изменять всю это херобобину
Возможно траблы с расчётом yaw
Можешь так-же добавить ограничение по скорости и потестить так, либо добавить небольшую задержку между коррекцией

UPD:
-23.5f и -135 возможно значения для какого то конкретного сервера. Попробуй так-же поиграться с ними.
Думаю тебе в основе стоит попробовать более плавно изменять моушн и как раз таки подобрать другие значения под конкретный ач (вместо твоих -23.5f и -135)
Привет, спасибо за предложенные варианты!)

Вот метод где вызывается ванильное движение майна (без него игрок просто не будет двигаться, он будет стоять на месте)


Java:
    public void moveFlying(float strafe, float forward, float friction, float yaw)
    {

        float f = strafe * strafe + forward * forward;

        if (f >= 1.0E-4F)
        {
            f = MathHelper.sqrt_float(f);

            if (f < 1.0F)
            {
                f = 1.0F;
            }

            f = friction / f;
            strafe = strafe * f;
            forward = forward * f;
            float f1 = MathHelper.sin(yaw * (float)Math.PI / 180.0F);
            float f2 = MathHelper.cos(yaw * (float)Math.PI / 180.0F);
            this.motionX += strafe * f2 - forward * f1;
            this.motionZ += forward * f2 + strafe * f1;
        }
    }

Java:
    @Override
    public void moveFlying(float strafe, float forward, float friction)
    {
        StrafeEvent event = new StrafeEvent(strafe, forward, friction, this.rotationYaw);

        INSTANCE.eventManager.call(event);

        if(event.isCancelled()) {
            return;
        }

        super.moveFlying(event.strafe, event.forward, event.friction, event.yaw);
    }
Я не понимаю что делает

Java:
        if (calcForward > 1f || calcForward < 0.9f && calcForward > 0.3f || calcForward < -1f || calcForward > -0.9f && calcForward < -0.3f)
        {
            calcForward *= 0.5f;
        }

        if (calcStrafe > 1f || calcStrafe < 0.9f && calcStrafe > 0.3f || calcStrafe < -1f || calcStrafe > -0.9f && calcStrafe < -0.3f)
        {
            calcStrafe *= 0.5f;
        }
в обычном методе такого нету, я просто отменяю StrafeEvent и вызываю silentMoveFix, но задав ротацию точь-в-точь как у киллауры, я получаю флаги из-за этой части кода, но без нее, если задавать другие ротации, тоже флаги, остается вопрос на счет Friction и Sprint, еще появились сомнения на счет секторов в switch, может там тоже криво заполняется. Кусок кода выше скорее всего был не нужен, не знаю зачем он там :/
 
Forge Api ;-;
Начинающий
Статус
Онлайн
Регистрация
3 Май 2023
Сообщения
776
Реакции[?]
18
Поинты[?]
13K
Насчёт спринта, можешь его отменять в момент коррекции по какому то определённому яву, это вообще зависит от конкретного ач под который ты пишешь.
Под какой сервер вообще пишешь?

У тебя как я понял - слишком чёткий контроль моушна, которого впринципе не может быть на ванилле, как раз поэтому тебе и кидает симуляцию, как я уже писал можно попробовать сделать её более плавной и поигратся с константами твоими
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Насчёт спринта, можешь его отменять в момент коррекции по какому то определённому яву, это вообще зависит от конкретного ач под который ты пишешь.
Под какой сервер вообще пишешь?

У тебя как я понял - слишком чёткий контроль моушна, которого впринципе не может быть на ванилле, как раз поэтому тебе и кидает симуляцию, как я уже писал можно попробовать сделать её более плавной и поигратся с константами твоими
под grim, с yaw играться не могу -135 не знаю что, но без него ведёт вообще не туда, -23.5 пробовал менять,
Пожалуйста, авторизуйтесь для просмотра ссылки.
22.5 стоит, но я пробовал его вариант, он тоже не рабочий :( friction пытался взять оттуда, но не помогло. Friction и есть спринт как я понял, я пробовал без спринта (всё норм работает), но если я отхожу от цели (когда silentMoveFix больше не вызывается, пару раз флагает) или нажимаю спринт начинает флагать
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Я насрал:

Код:
    public static void silentButtonMoveFix(EventMoveButton event, float yaw) {
        float serverYaw = CustomRotation.getYaw();

        int diff = (int) ((MathHelper.wrapAngleTo180_float(yaw - serverYaw - 23.5f - 135) + 180) / 45);

        yaw = serverYaw;

        boolean left = event.left, right = event.right, forward = event.forward, backward = event.backward;

        switch (diff)
        {
            case 0:
            {
                // Player rotation differences small than 45 angles, we dont need to change anything.
            }
            break;

            case 1:
            {
                if (event.forward) {
                    if (event.right) {
                        forward = false;
                        backward = true;
                    }

                    right = true;
                }

                if (event.backward) {
                    backward = false;
                    left = true;
                }

            }
            break;

            case 2:
            {
                if (event.forward) {
                    forward = false;
                    right = true;
                }

                if (event.right) {
                    backward = true;
                    right = false;
                }

                if (event.backward) {
                    backward = false;
                    left = true;
                }

                if (event.left) {
                    left = false;
                    forward = true;
                }
            }
            break;

            case 3:
            {
                if (event.forward) {
                    if (event.left) {
                        forward = false;
                        left = false;
                        right = true;
                    } else if (event.right) {
                        forward = false;
                        backward = true;
                        right = false;
                    } else {
                        forward = false;
                        backward = true;
                        right = true;
                    }
                }
            }
            break;

            case 4:
            {
                backward = event.forward;
                forward = event.backward;

                right = event.left;
                left = event.right;
            }
            break;

            case 5:
            {
                if (event.forward) {
                    if (event.right) {
                        forward = false;
                        right = false;
                        left = true;
                    } else if (event.left) {
                        forward = false;
                        left = false;
                        backward = true;
                    } else {
                        backward = true;
                        left = true;
                        forward = false;
                    }
                }
            }
            break;

            case 6:
            {
                if (event.forward) {
                    if (event.left) {
                        forward = false;
                        backward = true;
                    }
                    else if (event.right) {
                        forward = true;
                        left = true;
                        right = false;
                    }
                    else {
                        forward = false;
                        left = true;
                    }
                }
                if (event.backward) {
                    if (event.right) {
                        backward = false;
                        forward = true;
                        right = false;
                        left = true;
                    }
                    else if (event.left) {
                        left = false;
                        right = true;
                    }
                    else {
                        backward = false;
                        right = true;
                    }
                }
                else if (event.right) {
                    backward = true;
                    right = false;
                }
                else if (event.left) {
                    left = false;
                    backward = true;
                }
            }
            break;

            case 7:
            {
                if (event.forward) {
                    if (event.right) {
                        right = false;
                    }
                    else if (event.left) {
                        forward = false;
                    }
                    else {
                        event.left = true;
                    }
                }
            }
            break;
        }

        event.backward = backward;
        event.forward = forward;
        event.right = right;
        event.left = left;
    }

        public void updatePlayerMoveState() {
        EventMoveButton event = new EventMoveButton(this.gameSettings.keyBindLeft.isKeyDown(), this.gameSettings.keyBindRight.isKeyDown(), this.gameSettings.keyBindBack.isKeyDown(), this.gameSettings.keyBindForward.isKeyDown(), this.gameSettings.keyBindSneak.isKeyDown(), this.gameSettings.keyBindJump.isKeyDown());
        INSTANCE.eventManager.call(event);

        if(event.isCancelled()) {
            return;
        }

        this.moveStrafe = 0.0F;
        this.moveForward = 0.0F;

        if (event.forward)
        {
            ++this.moveForward;
        }

        if (event.backward)
        {
            --this.moveForward;
        }

        if (event.left)
        {
            ++this.moveStrafe;
        }

        if (event.right)
        {
            --this.moveStrafe;
        }

        this.jump = event.jump;
        this.sneak = event.sneak;

        if (this.sneak)
        {
            this.moveStrafe = (float)((double)this.moveStrafe * 0.3D);
            this.moveForward = (float)((double)this.moveForward * 0.3D);
        }
    }
Я не буду закрывать тему, потому что решение выше меня не устраивает, я хочу разобраться с motion. Если кто-то знает причину, расскажите пожалуйста, если у кого-то такая-же проблема - можете взять код выше, он рабочий
 
Начинающий
Статус
Онлайн
Регистрация
19 Фев 2024
Сообщения
244
Реакции[?]
1
Поинты[?]
1K
Я насрал:

Код:
    public static void silentButtonMoveFix(EventMoveButton event, float yaw) {
        float serverYaw = CustomRotation.getYaw();

        int diff = (int) ((MathHelper.wrapAngleTo180_float(yaw - serverYaw - 23.5f - 135) + 180) / 45);

        yaw = serverYaw;

        boolean left = event.left, right = event.right, forward = event.forward, backward = event.backward;

        switch (diff)
        {
            case 0:
            {
                // Player rotation differences small than 45 angles, we dont need to change anything.
            }
            break;

            case 1:
            {
                if (event.forward) {
                    if (event.right) {
                        forward = false;
                        backward = true;
                    }

                    right = true;
                }

                if (event.backward) {
                    backward = false;
                    left = true;
                }

            }
            break;

            case 2:
            {
                if (event.forward) {
                    forward = false;
                    right = true;
                }

                if (event.right) {
                    backward = true;
                    right = false;
                }

                if (event.backward) {
                    backward = false;
                    left = true;
                }

                if (event.left) {
                    left = false;
                    forward = true;
                }
            }
            break;

            case 3:
            {
                if (event.forward) {
                    if (event.left) {
                        forward = false;
                        left = false;
                        right = true;
                    } else if (event.right) {
                        forward = false;
                        backward = true;
                        right = false;
                    } else {
                        forward = false;
                        backward = true;
                        right = true;
                    }
                }
            }
            break;

            case 4:
            {
                backward = event.forward;
                forward = event.backward;

                right = event.left;
                left = event.right;
            }
            break;

            case 5:
            {
                if (event.forward) {
                    if (event.right) {
                        forward = false;
                        right = false;
                        left = true;
                    } else if (event.left) {
                        forward = false;
                        left = false;
                        backward = true;
                    } else {
                        backward = true;
                        left = true;
                        forward = false;
                    }
                }
            }
            break;

            case 6:
            {
                if (event.forward) {
                    if (event.left) {
                        forward = false;
                        backward = true;
                    }
                    else if (event.right) {
                        forward = true;
                        left = true;
                        right = false;
                    }
                    else {
                        forward = false;
                        left = true;
                    }
                }
                if (event.backward) {
                    if (event.right) {
                        backward = false;
                        forward = true;
                        right = false;
                        left = true;
                    }
                    else if (event.left) {
                        left = false;
                        right = true;
                    }
                    else {
                        backward = false;
                        right = true;
                    }
                }
                else if (event.right) {
                    backward = true;
                    right = false;
                }
                else if (event.left) {
                    left = false;
                    backward = true;
                }
            }
            break;

            case 7:
            {
                if (event.forward) {
                    if (event.right) {
                        right = false;
                    }
                    else if (event.left) {
                        forward = false;
                    }
                    else {
                        event.left = true;
                    }
                }
            }
            break;
        }

        event.backward = backward;
        event.forward = forward;
        event.right = right;
        event.left = left;
    }

        public void updatePlayerMoveState() {
        EventMoveButton event = new EventMoveButton(this.gameSettings.keyBindLeft.isKeyDown(), this.gameSettings.keyBindRight.isKeyDown(), this.gameSettings.keyBindBack.isKeyDown(), this.gameSettings.keyBindForward.isKeyDown(), this.gameSettings.keyBindSneak.isKeyDown(), this.gameSettings.keyBindJump.isKeyDown());
        INSTANCE.eventManager.call(event);

        if(event.isCancelled()) {
            return;
        }

        this.moveStrafe = 0.0F;
        this.moveForward = 0.0F;

        if (event.forward)
        {
            ++this.moveForward;
        }

        if (event.backward)
        {
            --this.moveForward;
        }

        if (event.left)
        {
            ++this.moveStrafe;
        }

        if (event.right)
        {
            --this.moveStrafe;
        }

        this.jump = event.jump;
        this.sneak = event.sneak;

        if (this.sneak)
        {
            this.moveStrafe = (float)((double)this.moveStrafe * 0.3D);
            this.moveForward = (float)((double)this.moveForward * 0.3D);
        }
    }
Я не буду закрывать тему, потому что решение выше меня не устраивает, я хочу разобраться с motion. Если кто-то знает причину, расскажите пожалуйста, если у кого-то такая-же проблема - можете взять код выше, он рабочий
Если пишешь на 1.8 юзани код райс клиента там есть коррекция под грим
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Если пишешь на 1.8 юзани код райс клиента там есть коррекция под грим
Спасибо большое! Я буду использовать код Rise, он мне очень понравился.

Но как я понимаю, все фиксят движение в MovementInput`е, а не в moveFlying, ну чтож... Буду сам разбираться позже
 
Сверху Снизу