Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

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

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2020
Сообщения
19
Реакции
0
Я использую код:

Java:
Expand Collapse Copy
    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, расскажите пожалуйста
 
У меня есть 2 проблемы:
1) когда silentMoveFix не вызывает (игрок выключил киллауру или убил цель), то меня помечает пару раз за Simulation.
2) Когда я нажимаю Sprint (friction увеличивается), нужно что-то дописать в этот код, что вычисляло бы правильный friction. Но я не знаю, когда я нажимаю спринт сервер понимает что я со спринтом? То есть, нужно кроме правильного friction еще и отключать игроку sprint?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Изменяешь 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)
 
Последнее редактирование:
Изменяешь 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:
Expand Collapse Copy
    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:
Expand Collapse Copy
    @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:
Expand Collapse Copy
        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, может там тоже криво заполняется. Кусок кода выше скорее всего был не нужен, не знаю зачем он там :/
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Насчёт спринта, можешь его отменять в момент коррекции по какому то определённому яву, это вообще зависит от конкретного ач под который ты пишешь.
Под какой сервер вообще пишешь?

У тебя как я понял - слишком чёткий контроль моушна, которого впринципе не может быть на ванилле, как раз поэтому тебе и кидает симуляцию, как я уже писал можно попробовать сделать её более плавной и поигратся с константами твоими
 
Насчёт спринта, можешь его отменять в момент коррекции по какому то определённому яву, это вообще зависит от конкретного ач под который ты пишешь.
Под какой сервер вообще пишешь?

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

Код:
Expand Collapse Copy
    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. Если кто-то знает причину, расскажите пожалуйста, если у кого-то такая-же проблема - можете взять код выше, он рабочий
 
Я насрал:

Код:
Expand Collapse Copy
    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 юзани код райс клиента там есть коррекция под грим
 
Если пишешь на 1.8 юзани код райс клиента там есть коррекция под грим
Спасибо большое! Я буду использовать код Rise, он мне очень понравился.

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