Гайд [Перевод] Стрейфы и с чем их едят

Начинающий
Статус
Оффлайн
Регистрация
18 Июн 2022
Сообщения
284
Реакции[?]
13
Поинты[?]
4K

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

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

Спасибо!

!!Это перевод ссылка на оригинальную страницу в конце!!

///

Strafe - это модуль, который позволяет нам менять направление движения с помощью клавиш перемещения (WASD) без потери скорости движения.
Направление нашего движения определяется переменными motionX/Y/Z, а значит, чтобы изменить направление движения, нам нужно изменить эти значения соответствующим образом.

Но как это работает?
Значения движения основаны на нашем текущем yaw и могут быть рассчитаны с помощью тригеометрических функций (синус, косинус, тангенс). Вот гифка, показывающая игрока сверху, чтобы показать, как наш yaw влияет на ввод с клавиатуры (WASD).



Чтобы направление движения зависело только от входного сигнала движения, нам нужно только скорректировать текущий yaw и пересчитать значения движения. Например, если наш yaw ровно 0°, а мы хотим отклониться влево, нам нужно настроить значения движения так, как если бы наш yaw было -90°.

Для этого мы сначала создадим метод, который вернет нужное нам значение Yaw

Java:
public static float getPlayerDirection() {
    // начните с нашего текущего yaw
    float yaw = mc.thePlayer.rotationYaw;
    return yaw;
}
Дале чтобы узнать, какие клавиши движения я нажимаю, я использую mc.thePlayer.moveStrafing, к которому
1 прибавляется, когда мы нажимаем A("Влево"), или 1 вычитается, когда мы нажимаем D("Вправо").
Соответственно, я просто прибавляю или вычитаю 90 к нашему текущему движению yaw

Java:
public static float getPlayerDirection() {
    // начните с нашего текущего Yaw
    float yaw = mc.thePlayer.rotationYaw;
    if (mc.thePlayer.moveStrafing > 0) {
        // вычтите 90, чтобы переместиться влево
        yaw -= 90;
    } else if (mc.thePlayer.moveStrafing < 0) {
        // добавьте 90, чтобы повернуть вправо
        yaw += 90;
    }
    return yaw;
}
Теперь у нас есть правый yaw, необходимый для бокового стрейфа.

Но, как мы видим на GIF выше, когда мы нажимаем W("Вперед") и A/D("Влево/Вправо"), мы должны вычесть 45° из нашего yaw. Если мы нажмем W(вперед) и A/D(влево/вправо), что мы узнаем с помощью mc.thePlayer.moveForward (эта переменная работает аналогично moveStrafing, то есть прибавляет 1 при нажатии W(вперед) и вычитает 1 при нажатии S(назад)), нам нужно будет добавить/вычесть только 45°

Java:
public static float getPlayerDirection() {
    // начните с нашего текущего yaw
    float yaw = mc.thePlayer.rotationYaw;
    if (mc.thePlayer.moveStrafing > 0) {
        // вычтите 45, чтобы переместиться влево вперед
        yaw -= 45;
        // вычтите еще 45, если мы не нажмем W, чтобы получить -90
        if (mc.thePlayer.moveForward == 0) {
            yaw -= 45;
        }
    } else if (mc.thePlayer.moveStrafing < 0) {
        // добавьте 45, чтобы направиться прямо вперед
        yaw += 45;
        // добавьте 45, если мы не нажмем W, чтобы получить 90
        if (mc.thePlayer.moveForward == 0) {
            yaw += 45;
        }
    }
    return yaw;
}
Этот код не учитывает S("Назад"), поэтому нам нужно просто добавить 180° к текущему yaw. Однако это ломает наш текущий стрейфинг, потому что если мы нажмем W(Вперед) и D(Вправо), то получим:
yaw = 0
Yaw += 180 | yaw равен 180
Yaw += 45 | yaw = 225
Таким образом, мы будем отклоняться влево. Чтобы исправить это, нам нужно инвертировать 45°, когда мы бежим назад.

Java:
public static float getPlayerDirection() {
     // начинаем с нашего текущего yaw
    float yaw = mc.thePlayer.rotationYaw;
    float strafe = 45;
    // добавляем 180 к yaw, чтобы повернуть назад
    if(mc.thePlayer.moveForward < 0){
         // инвертируем наш стрейф на -45
        strafe = -45;
        yaw += 180;
    }
    if (mc.thePlayer.moveStrafing > 0) {
        // вычитаем 45, чтобы выполнить стрейф влево вперед
        yaw -= strafe;
        // вычитаем еще 45, если мы не нажмем W, чтобы получить -90
        if (mc.thePlayer.moveForward == 0) {
            yaw -= 45;
        }
    } else if (mc.thePlayer.moveStrafing < 0) {
        // добавьте 45 для стрейфа вправо вперед
        yaw += strafe;
        // добавляем 45, если мы не нажмем W, чтобы дойти до 90
        if (mc.thePlayer.moveForward == 0) {
            yaw += 45;
        }
    }
    return yaw;
}
Этот метод можно значительно сократить, чего я сейчас делать не буду.

Все, что нам теперь нужно сделать для стрейфа, - это пересчитать значения движения с учетом yaw, возвращаемого методом:
Java:
if (isPlayerMoving()) {
    double currentPlayerSpeed = Math.sqrt(mc.thePlayer.motionX * mc.thePlayer.motionX + mc.thePlayer.motionZ * mc.thePlayer.motionZ);
    double yaw = Math.toRadians(getPlayerDirection());
    mc.thePlayer.motionZ = Math.cos(yaw) * currentPlayerSpeed;
    mc.thePlayer.motionX = -Math.sin(yaw) * currentPlayerSpeed;
}
~
Пожалуйста, авторизуйтесь для просмотра ссылки.
 

Вложения

ппоршень
Пользователь
Статус
Оффлайн
Регистрация
15 Фев 2020
Сообщения
294
Реакции[?]
46
Поинты[?]
32K
!!Это перевод ссылка на оригинальную страницу в конце!!

///

Strafe - это модуль, который позволяет нам менять направление движения с помощью клавиш перемещения (WASD) без потери скорости движения.
Направление нашего движения определяется переменными motionX/Y/Z, а значит, чтобы изменить направление движения, нам нужно изменить эти значения соответствующим образом.

Но как это работает?
Значения движения основаны на нашем текущем yaw и могут быть рассчитаны с помощью тригеометрических функций (синус, косинус, тангенс). Вот гифка, показывающая игрока сверху, чтобы показать, как наш yaw влияет на ввод с клавиатуры (WASD).



Чтобы направление движения зависело только от входного сигнала движения, нам нужно только скорректировать текущий yaw и пересчитать значения движения. Например, если наш yaw ровно 0°, а мы хотим отклониться влево, нам нужно настроить значения движения так, как если бы наш yaw было -90°.

Для этого мы сначала создадим метод, который вернет нужное нам значение Yaw

Java:
public static float getPlayerDirection() {
    // начните с нашего текущего yaw
    float yaw = mc.thePlayer.rotationYaw;
    return yaw;
}
Дале чтобы узнать, какие клавиши движения я нажимаю, я использую mc.thePlayer.moveStrafing, к которому
1 прибавляется, когда мы нажимаем A("Влево"), или 1 вычитается, когда мы нажимаем D("Вправо").
Соответственно, я просто прибавляю или вычитаю 90 к нашему текущему движению yaw

Java:
public static float getPlayerDirection() {
    // начните с нашего текущего Yaw
    float yaw = mc.thePlayer.rotationYaw;
    if (mc.thePlayer.moveStrafing > 0) {
        // вычтите 90, чтобы переместиться влево
        yaw -= 90;
    } else if (mc.thePlayer.moveStrafing < 0) {
        // добавьте 90, чтобы повернуть вправо
        yaw += 90;
    }
    return yaw;
}
Теперь у нас есть правый yaw, необходимый для бокового стрейфа.

Но, как мы видим на GIF выше, когда мы нажимаем W("Вперед") и A/D("Влево/Вправо"), мы должны вычесть 45° из нашего yaw. Если мы нажмем W(вперед) и A/D(влево/вправо), что мы узнаем с помощью mc.thePlayer.moveForward (эта переменная работает аналогично moveStrafing, то есть прибавляет 1 при нажатии W(вперед) и вычитает 1 при нажатии S(назад)), нам нужно будет добавить/вычесть только 45°

Java:
public static float getPlayerDirection() {
    // начните с нашего текущего yaw
    float yaw = mc.thePlayer.rotationYaw;
    if (mc.thePlayer.moveStrafing > 0) {
        // вычтите 45, чтобы переместиться влево вперед
        yaw -= 45;
        // вычтите еще 45, если мы не нажмем W, чтобы получить -90
        if (mc.thePlayer.moveForward == 0) {
            yaw -= 45;
        }
    } else if (mc.thePlayer.moveStrafing < 0) {
        // добавьте 45, чтобы направиться прямо вперед
        yaw += 45;
        // добавьте 45, если мы не нажмем W, чтобы получить 90
        if (mc.thePlayer.moveForward == 0) {
            yaw += 45;
        }
    }
    return yaw;
}
Этот код не учитывает S("Назад"), поэтому нам нужно просто добавить 180° к текущему yaw. Однако это ломает наш текущий стрейфинг, потому что если мы нажмем W(Вперед) и D(Вправо), то получим:
yaw = 0
Yaw += 180 | yaw равен 180
Yaw += 45 | yaw = 225
Таким образом, мы будем отклоняться влево. Чтобы исправить это, нам нужно инвертировать 45°, когда мы бежим назад.

Java:
public static float getPlayerDirection() {
     // начинаем с нашего текущего yaw
    float yaw = mc.thePlayer.rotationYaw;
    float strafe = 45;
    // добавляем 180 к yaw, чтобы повернуть назад
    if(mc.thePlayer.moveForward < 0){
         // инвертируем наш стрейф на -45
        strafe = -45;
        yaw += 180;
    }
    if (mc.thePlayer.moveStrafing > 0) {
        // вычитаем 45, чтобы выполнить стрейф влево вперед
        yaw -= strafe;
        // вычитаем еще 45, если мы не нажмем W, чтобы получить -90
        if (mc.thePlayer.moveForward == 0) {
            yaw -= 45;
        }
    } else if (mc.thePlayer.moveStrafing < 0) {
        // добавьте 45 для стрейфа вправо вперед
        yaw += strafe;
        // добавляем 45, если мы не нажмем W, чтобы дойти до 90
        if (mc.thePlayer.moveForward == 0) {
            yaw += 45;
        }
    }
    return yaw;
}
Этот метод можно значительно сократить, чего я сейчас делать не буду.

Все, что нам теперь нужно сделать для стрейфа, - это пересчитать значения движения с учетом yaw, возвращаемого методом:
Java:
if (isPlayerMoving()) {
    double currentPlayerSpeed = Math.sqrt(mc.thePlayer.motionX * mc.thePlayer.motionX + mc.thePlayer.motionZ * mc.thePlayer.motionZ);
    double yaw = Math.toRadians(getPlayerDirection());
    mc.thePlayer.motionZ = Math.cos(yaw) * currentPlayerSpeed;
    mc.thePlayer.motionX = -Math.sin(yaw) * currentPlayerSpeed;
}
~
Пожалуйста, авторизуйтесь для просмотра ссылки.
Сидеть фармить реакции за счет чужого контента это конечно очень сильно
 
Сверху Снизу