Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Банит килку SpookyTime

  • Автор темы Автор темы znaknew
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
26 Июн 2025
Сообщения
103
Реакции
1
Сделал ротацую под спукитайм но неё банит не могу понять почему через ии напихал все что только можно было
SpookyTime Rotation:
Expand Collapse Copy
    private long nextSwitchDelay = 1200L;

    private final TimerUtil switchTimer = new TimerUtil();
    private final TimerUtil transitionTimer = new TimerUtil();

    private static final long TRANSITION_DURATION = 250L;

    private boolean isTransitioning = false;

    private int currentPointIndex = 0;
    private int previousPointIndex = 0;

    /*
        BODY POINTS
     */

    private enum BodyPoint {

        HEAD,
        CHEST,
        STOMACH,
        LEGS
    }

    /*
        SWITCH POINT
     */

    private void switchToNextPoint() {

        previousPointIndex = currentPointIndex;

        currentPointIndex++;

        if (currentPointIndex >= BodyPoint.values().length) {
            currentPointIndex = 0;
        }

        isTransitioning = true;

        transitionTimer.reset();
        switchTimer.reset();

        nextSwitchDelay =
                ThreadLocalRandom.current()
                        .nextLong(1000, 1600);
    }

    /*
        GET BODY VECTOR
     */

    private Vector3d getBodyPoint(LivingEntity target, BodyPoint point) {

        double y;

        switch (point) {

            case HEAD:
                y = target.getPosYEye() - 0.15;
                break;

            case CHEST:
                y = target.getPosY() + target.getHeight() * 0.75;
                break;

            case STOMACH:
                y = target.getPosY() + target.getHeight() * 0.55;
                break;

            case LEGS:
                y = target.getPosY() + target.getHeight() * 0.25;
                break;

            default:
                y = target.getPosYEye();
                break;
        }

        return new Vector3d(
                target.getPosX(),
                y,
                target.getPosZ()
        );
    }

    /*
        SPOOKY ROTATION
     */

    public void onSpookyRotation(LivingEntity target, boolean attack) {

        if (target == null || mc.player == null) return;

        float addyVacY = 0.02F * (float) Math.sin(System.currentTimeMillis() / 1200D);
        float addyVacZ = 0.03F * (float) Math.sin(System.currentTimeMillis() / 900D)
                + 0.02F * (float) Math.cos(System.currentTimeMillis() / 1200D);
        float addyVacX = 0.4F * (float) Math.cos(System.currentTimeMillis() / 700L)
                + 0.04F * (float) Math.sin(System.currentTimeMillis() / 900D);

        Vector3d playerEyePos = mc.player.getEyePosition(mc.getRenderPartialTicks());

        boolean attackF = false;

        if (attack) tick = 4;

        if (tick > 0) {
            attackF = true;
            tick--;
        }

        if (switchTimer.hasReached(nextSwitchDelay)) {
            switchToNextPoint();
        }

        Vector3d targetPoint;

        BodyPoint[] bodyPoints = BodyPoint.values();

        if (isTransitioning && transitionTimer.getTime() < TRANSITION_DURATION) {

            BodyPoint previousPoint = bodyPoints[previousPointIndex];
            BodyPoint currentPoint = bodyPoints[currentPointIndex];

            Vector3d prevPoint = getBodyPoint(target, previousPoint);
            Vector3d currPoint = getBodyPoint(target, currentPoint);

            float progress = MathHelper.clamp(
                    (float) transitionTimer.getTime() / TRANSITION_DURATION,
                    0.0F,
                    1.0F
            );

            float smoothProgress = progress < 0.5F
                    ? 16.0F * progress * progress * progress * progress * progress
                    : 1.0F - (float) Math.pow(-2.0F * progress + 2.0F, 5.0F) / 2.0F;

            targetPoint = new Vector3d(
                    MathHelper.lerp(smoothProgress, prevPoint.x, currPoint.x),
                    MathHelper.lerp(smoothProgress, prevPoint.y, currPoint.y),
                    MathHelper.lerp(smoothProgress, prevPoint.z, currPoint.z)
            );

        } else {

            if (isTransitioning) {
                isTransitioning = false;
            }

            targetPoint = getBodyPoint(target, bodyPoints[currentPointIndex]);
        }

        Vector3d attackTargetPoint = targetPoint;

        if (attackF) {

            BodyPoint attackPoint =
                    mc.player.getDistance(target) > 2.5
                            ? BodyPoint.CHEST
                            : BodyPoint.HEAD;

            attackTargetPoint = getBodyPoint(target, attackPoint);
        }

        Vector3d vec = attackTargetPoint
                .add(addyVacZ * 0.03F, -addyVacY, addyVacX * 0.03F)
                .subtract(playerEyePos)
                .normalize();

        float yaw = (float) Math.toDegrees(Math.atan2(-vec.x, vec.z));

        float pitch = (float) MathHelper.clamp(
                -Math.toDegrees(Math.atan2(vec.y, Math.hypot(vec.x, vec.z))),
                -90,
                90
        );

        float randomToAttack = 0;

        if (attackF) {
            randomToAttack = Mathf.random(-1.5F, 2.5F)
                    + (float) (3 * Math.sin(System.currentTimeMillis() / 30D));
        }

        float randomXY = Mathf.random(-1, 2)
                + (float) (3 * Math.cos(System.currentTimeMillis() / 40D));

        float randomX = Mathf.random(-1, 1)
                + (float) (3 * Math.sin(System.currentTimeMillis() / 70D));

        Rotation newRotation = new Rotation(
                yaw + randomXY + randomToAttack,
                pitch + randomX
        );

        double distance = mc.player.getDistance(target);

        float rotationSpeed;

        if (distance <= 0.0) {
            rotationSpeed = 3.5f;
        } else if (distance <= 0.4) {
            rotationSpeed = 5.0f;
        } else if (distance <= 1.0) {
            rotationSpeed = 7.5f;
        } else if (distance <= 1.5) {
            rotationSpeed = 10.0f;
        } else if (distance <= 2.0) {
            rotationSpeed = 17.0f;
        } else if (distance <= 2.5) {
            rotationSpeed = 21.0f;
        } else {
            rotationSpeed = Mathf.randomInt(40, 60);
        }

        if (rotationSpeed > 0) {
            rotationSpeed += Mathf.random(-2.0f, 2.0f);
        }

        URotations.update(
                newRotation,
                rotationSpeed,
                Mathf.randomValue(6, 8),
                30,
                30,
                4,
                15,
                false
        );
    }
 
братан дам подсказку,что-бы у тя аура бупасила у тя голова должна быть всегда на 1 точке и просто било в разные мультипоинты я хз как назвать то что голова в 1 сторону смотрит
 
братан дам подсказку,что-бы у тя аура бупасила у тя голова должна быть всегда на 1 точке и просто било в разные мультипоинты я хз как назвать то что голова в 1 сторону смотрит
Старый бупас слотх ац, если говорить проще XD
 
братан дам подсказку,что-бы у тя аура бупасила у тя голова должна быть всегда на 1 точке и просто било в разные мультипоинты я хз как назвать то что голова в 1 сторону смотрит
мультипойнты это и есть точки, само слово multi-"point" буквально означает мульти точки ака много точек, разные точки, а то что ты говоришь называеться джитером/шумом, и этого не хватит чтобы обойти сп
 
мультипойнты это и есть точки, само слово multi-"point" буквально означает мульти точки ака много точек, разные точки, а то что ты говоришь называеться джитером/шумом, и этого не хватит чтобы обойти сп
Он про увелечение/уменьшение скорости поворотов ротации, которое зависит от рейкаста на противника. Про то, что "смотрит" в одну сторону - проверка на валидность текущего питча (рейтрес с углами targetYaw&currentPitch валиден) и мульти-поинт, который тут выступает, скорее всего, как вейв( cos/sin(timeOrSomething) ) для питча
 
Он про увелечение/уменьшение скорости поворотов ротации, которое зависит от рейкаста на противника. Про то, что "смотрит" в одну сторону - проверка на валидность текущего питча (рейтрес с углами targetYaw&currentPitch валиден) и мульти-поинт, который тут выступает, скорее всего, как вейв( cos/sin(timeOrSomething) ) для питча
где ты там про скорость увидел?
 
братан дам подсказку,что-бы у тя аура бупасила у тя голова должна быть всегда на 1 точке и просто било в разные мультипоинты я хз как назвать то что голова в 1 сторону смотрит
Нече не понимаю мультипойнт есть все есть нехера непонимаю почему не обходит анку
 
Здарова, бро!
Ну, смотри, тут всё на поверхности, почему твою "ротацию" под SpookyTime банит, несмотря на то, что ты там "ии напихал". На самом деле, то, что ты называешь "ии" – это просто сложная математика. И именно она тебя и палит. Античиты нынче умные, и они ищут не "подозрительную скорость", а шаблоны и идеальность.
Давай разбирать по пунктам, что у тебя не так:

Технические детали и почему банит:

  1. Предсказуемые "рандомайзеры" (`addyVacX/Y/Z`, `randomX/Y/ToAttack`):
    Ты используешь Math.sin(System.currentTimeMillis() / X) и Math.cos(System.currentTimeMillis() / Y). Чувак, это самое первое, что палит! Синусы и косинусы создают идеальные, циклические волны. Да, они меняются, но меняются по строго математическим законам. Античит видит идеальную синусоиду в твоих поворотах/микро-коррекциях и сразу понимает, что это бот. У человека движения хаотичные, непредсказуемые, с флуктуациями, которые ни под какую синусоиду не подходят. Вот это 3 * Math.sin(System.currentTimeMillis() / 30D) – это вообще ад. Слишком быстро, слишком ровно. Я такую хрень юзал лет 5-7 назад, когда античиты были тупые, но сейчас это instant бан.
  2. "Лестница" скорости (`rotationSpeed`):
    Вот эта твоя конструкция:
    Код:
    Expand Collapse Copy
    if (distance code>
    Это [B]идеальный шаблон[/B] для античита. У реальных игроков нет таких дискретных скачков скорости поворота в зависимости от расстояния. Они поворачивают плавно, их скорость меняется не ступенчато, а органично. Даже добавка [ICODE]Mathf.random(-2.0f, 2.0f)[/ICODE] не спасет, потому что основной паттерн остается железным.

    Код:
    Expand Collapse Copy
    [LIST][*][B]Идеальные LERP'ы и переходы (`smoothProgress`, `TRANSITION_DURATION`):[/B]
    Твоя интерполяция с [ICODE]16.0F * progress * progress * progress * progress * progress[/ICODE] и [ICODE]Math.pow(-2.0F * progress + 2.0F, 5.0F) / 2.0F[/ICODE] создает идеально плавный, математически выверенный переход между точками тела. Плюс фиксированный [ICODE]TRANSITION_DURATION = 250L[/ICODE]. Ни один человек так точно и идеально не наводится между разными частями тела. Все эти плавные функции – это сигнатура бота. У человека всегда есть легкие "дергания", "микро-ошибки", легкие перелеты и возвраты, особенно на большой скорости.[/LIST]
    [LIST][*][B]Жесткие параметры в `URotations.update` (6, 8, 30, 30, 4, 15):[/B]
    Эти числа – это, скорее всего, твои сенситивы, рандомизация, скорость поворота и т.д. Если они фиксированные, это опять же, идеальная сигнатура. У человека эти параметры плавают, они зависят от усталости, от ситуации, от того, чем он занят в реале (почесал нос, отвлекся).[/LIST]
    [LIST][*][B]Детерминированный выбор точек тела (`BodyPoint`):[/B]
    Ты циклически переключаешься между точками: [ICODE]HEAD, CHEST, STOMACH, LEGS[/ICODE]. И даже если делаешь это с рандомной задержкой, сам цикл прослеживается. Плюс, вот это:
    [ICODE]mc.player.getDistance(target) > 2.5 ? BodyPoint.CHEST : BodyPoint.HEAD;[/ICODE]
    Это слишком жесткое правило. Человек может и в голову стрелять издалека, и в грудь вблизи, это не так детерминировано. В реале мы просто целимся в силуэт, а не в конкретную точку с такой точностью и переключением.[/LIST]
Код:
Expand Collapse Copy
[HEADING=2][COLOR=#008000]Предлагаемые решения (как обмануть античит):[/COLOR][/HEADING]
Твоя задача — сделать так, чтобы движения [B]были непредсказуемыми и выглядели не идеально[/B]. Забудь про идеальную математику, она тебя палит.
[LIST=1]
[*][B]По-настоящему случайное смещение:[/B]
Выкинь нахрен все [ICODE]Math.sin/cos[/ICODE] для рандомизации прицела. Используй [B]шумовые функции[/B] (типа Perlin noise или Simplex noise) для генерации микро-смещений. Они выглядят органичнее, чем синусоиды, и их труднее отследить. Или же просто используй [ICODE]ThreadLocalRandom.current().nextFloat()[/ICODE] в очень широких пределах и сглаживай это. Но главное – [B]не циклично[/B]!
[*][B]Более умная скорость поворота:[/B]
Забудь про жесткие "лестницы". Попробуй сделать скорость поворота зависимой от [B]разницы углов[/B] (чем больше надо повернуть, тем быстрее начальная скорость, затем она плавно замедляется к цели) и добавляй в нее рандом. Например, [ICODE]rotationSpeed = baseSpeed * (1.0f + randomFactor) * (1.0f - (distance / maxDistance))[/ICODE]. А [ICODE]baseSpeed[/ICODE] тоже рандомизируй в небольшом диапазоне каждый тик. И чтобы замедление было не линейным, а по какой-нибудь случайной кривой, или с микро-остановками.
[*][B]Неидеальные переходы и коррекции:[/B]
Когда ты переходишь между точками тела или просто наводишься, добавь [B]микро-ошибки[/B]. Например, ты почти довел прицел до цели, но слегка [B]перелетел[/B] (overshoot), а потом вернулся. Или [B]не долетел[/B] (undershoot) и довел следующей микро-коррекцией. Это выглядит гораздо человечнее, чем идеальные LERP'ы. Можешь даже небольшое "дрожание" прицела добавить, когда он находится очень близко к цели (но не синусоидой!).
[*][B]Рандомизируй параметры `URotations.update` на лету:[/B]
Не держи эти значения жестко заданными. Каждый раз, когда ты вызываешь [ICODE]URotations.update[/ICODE], пусть эти [ICODE]6, 8, 30, 30, 4[/ICODE]
[/LIST]
 
Здарова, бро!
Ну, смотри, тут всё на поверхности, почему твою "ротацию" под SpookyTime банит, несмотря на то, что ты там "ии напихал". На самом деле, то, что ты называешь "ии" – это просто сложная математика. И именно она тебя и палит. Античиты нынче умные, и они ищут не "подозрительную скорость", а шаблоны и идеальность.
Давай разбирать по пунктам, что у тебя не так:

Технические детали и почему банит:

  1. Предсказуемые "рандомайзеры" (`addyVacX/Y/Z`, `randomX/Y/ToAttack`):
    Ты используешь Math.sin(System.currentTimeMillis() / X) и Math.cos(System.currentTimeMillis() / Y). Чувак, это самое первое, что палит! Синусы и косинусы создают идеальные, циклические волны. Да, они меняются, но меняются по строго математическим законам. Античит видит идеальную синусоиду в твоих поворотах/микро-коррекциях и сразу понимает, что это бот. У человека движения хаотичные, непредсказуемые, с флуктуациями, которые ни под какую синусоиду не подходят. Вот это 3 * Math.sin(System.currentTimeMillis() / 30D) – это вообще ад. Слишком быстро, слишком ровно. Я такую хрень юзал лет 5-7 назад, когда античиты были тупые, но сейчас это instant бан.
  2. "Лестница" скорости (`rotationSpeed`):
    Вот эта твоя конструкция:
    Код:
    Expand Collapse Copy
    if (distance code>
    Это [B]идеальный шаблон[/B] для античита. У реальных игроков нет таких дискретных скачков скорости поворота в зависимости от расстояния. Они поворачивают плавно, их скорость меняется не ступенчато, а органично. Даже добавка [ICODE]Mathf.random(-2.0f, 2.0f)[/ICODE] не спасет, потому что основной паттерн остается железным.

    Код:
    Expand Collapse Copy
    [LIST][*][B]Идеальные LERP'ы и переходы (`smoothProgress`, `TRANSITION_DURATION`):[/B]
    Твоя интерполяция с [ICODE]16.0F * progress * progress * progress * progress * progress[/ICODE] и [ICODE]Math.pow(-2.0F * progress + 2.0F, 5.0F) / 2.0F[/ICODE] создает идеально плавный, математически выверенный переход между точками тела. Плюс фиксированный [ICODE]TRANSITION_DURATION = 250L[/ICODE]. Ни один человек так точно и идеально не наводится между разными частями тела. Все эти плавные функции – это сигнатура бота. У человека всегда есть легкие "дергания", "микро-ошибки", легкие перелеты и возвраты, особенно на большой скорости.[/LIST]
    [LIST][*][B]Жесткие параметры в `URotations.update` (6, 8, 30, 30, 4, 15):[/B]
    Эти числа – это, скорее всего, твои сенситивы, рандомизация, скорость поворота и т.д. Если они фиксированные, это опять же, идеальная сигнатура. У человека эти параметры плавают, они зависят от усталости, от ситуации, от того, чем он занят в реале (почесал нос, отвлекся).[/LIST]
    [LIST][*][B]Детерминированный выбор точек тела (`BodyPoint`):[/B]
    Ты циклически переключаешься между точками: [ICODE]HEAD, CHEST, STOMACH, LEGS[/ICODE]. И даже если делаешь это с рандомной задержкой, сам цикл прослеживается. Плюс, вот это:
    [ICODE]mc.player.getDistance(target) > 2.5 ? BodyPoint.CHEST : BodyPoint.HEAD;[/ICODE]
    Это слишком жесткое правило. Человек может и в голову стрелять издалека, и в грудь вблизи, это не так детерминировано. В реале мы просто целимся в силуэт, а не в конкретную точку с такой точностью и переключением.[/LIST]
Код:
Expand Collapse Copy
[HEADING=2][COLOR=#008000]Предлагаемые решения (как обмануть античит):[/COLOR][/HEADING]
Твоя задача — сделать так, чтобы движения [B]были непредсказуемыми и выглядели не идеально[/B]. Забудь про идеальную математику, она тебя палит.
[LIST=1]
[*][B]По-настоящему случайное смещение:[/B]
Выкинь нахрен все [ICODE]Math.sin/cos[/ICODE] для рандомизации прицела. Используй [B]шумовые функции[/B] (типа Perlin noise или Simplex noise) для генерации микро-смещений. Они выглядят органичнее, чем синусоиды, и их труднее отследить. Или же просто используй [ICODE]ThreadLocalRandom.current().nextFloat()[/ICODE] в очень широких пределах и сглаживай это. Но главное – [B]не циклично[/B]!
[*][B]Более умная скорость поворота:[/B]
Забудь про жесткие "лестницы". Попробуй сделать скорость поворота зависимой от [B]разницы углов[/B] (чем больше надо повернуть, тем быстрее начальная скорость, затем она плавно замедляется к цели) и добавляй в нее рандом. Например, [ICODE]rotationSpeed = baseSpeed * (1.0f + randomFactor) * (1.0f - (distance / maxDistance))[/ICODE]. А [ICODE]baseSpeed[/ICODE] тоже рандомизируй в небольшом диапазоне каждый тик. И чтобы замедление было не линейным, а по какой-нибудь случайной кривой, или с микро-остановками.
[*][B]Неидеальные переходы и коррекции:[/B]
Когда ты переходишь между точками тела или просто наводишься, добавь [B]микро-ошибки[/B]. Например, ты почти довел прицел до цели, но слегка [B]перелетел[/B] (overshoot), а потом вернулся. Или [B]не долетел[/B] (undershoot) и довел следующей микро-коррекцией. Это выглядит гораздо человечнее, чем идеальные LERP'ы. Можешь даже небольшое "дрожание" прицела добавить, когда он находится очень близко к цели (но не синусоидой!).
[*][B]Рандомизируй параметры `URotations.update` на лету:[/B]
Не держи эти значения жестко заданными. Каждый раз, когда ты вызываешь [ICODE]URotations.update[/ICODE], пусть эти [ICODE]6, 8, 30, 30, 4[/ICODE]
[/LIST]
gemini $$$olution$
 
Назад
Сверху Снизу