• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Неверная позиция игрока

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
22 Июн 2020
Сообщения
200
Реакции
78
в апдейт анимаций если делаю entity->SetAbsOrigin(entity->GetOrigin())
то получается дикий рассинхрон (миссы по пяткам обеспечены), причем неверная позиция - предикт настоящей, cmd->tick_count нигде не трогую, дабл тап тоже не причем

если ничего не делаю - уже лучше, но начинает наоборот - отставать, а боксы сильно впереди

белый - клиент
синий - сервер (sv_showlagcompensation)

с entity->SetAbsOrigin(entity->GetOrigin()):
1626278553416.png


без:
1626278602582.png


C++:
Expand Collapse Copy
void ragebot::UpdateAnimations(C_BaseEntity* entity) {
    auto animstate = entity->GetAnimstate();

    auto old_curtime = I::Globals->curtime;
    auto old_frame = I::Globals->frametime;
    auto old_eflags = entity->GetEFlags();

    I::Globals->curtime = entity->GetSimulationTime();
    I::Globals->frametime = I::Globals->interval_per_tick;

    AnimationLayer backup_layers[15];
    memcpy(backup_layers, entity->GetAnimlayers(), (sizeof(AnimationLayer) * 15));

    entity->GetEFlags() &= ~0x1000;
    entity->SetAbsVelocity(entity->GetVelocity());
    entity->SetAbsOrigin(entity->GetOrigin()); //надо ли, если надо то где, может быть в другом месте апдейта анимации

    if (animstate->iLastUpdateFrame == I::Globals->framecount)
        animstate->iLastUpdateFrame = I::Globals->framecount - 1;

    entity->ClientSideAnimation() = true;
    entity->UpdateClientSideAnimation();
    entity->ClientSideAnimation() = false;

    memcpy(entity->GetAnimlayers(), backup_layers, (sizeof(AnimationLayer) * 15));
    entity->GetEFlags() = old_eflags;
    I::Globals->curtime = old_curtime;
    I::Globals->frametime = old_frame;

    entity->InvalidateBoneCache();
    IsUpdatingAnimation = true;
    {
        entity->SetupBones(nullptr, -1, 0x7FF00, I::Globals->curtime);
    }
    IsUpdatingAnimation = false;
}

как получить верную позицию?
 
Последнее редактирование:
У тебя будет всегда рассинхрон хитбоксов, даже без читов
 
да, но во всех нормальных читах они идеально синхронизированны
Почитай про то, как работает афикс, на югейме и на юц были подробные темы по этому, а лучше в сурсе движка посмотри почему ты не добьешься идеальной "синхронизации"

P.S пытайся свести рассинхрон моделей к минимуму
 
Почитай про то, как работает афикс, на югейме и на юц были подробные темы по этому, а лучше в сурсе движка посмотри почему ты не добьешься идеальной "синхронизации"

P.S пытайся свести рассинхрон моделей к минимуму
спасибо капитан очевидность, я весь юц и юг облазил, посты с моей проблемой нашел, но то что там написано - не работает
вот один из фиксов который я видел в лв и на юц, но он не делает ровным словом нихуя, по пяткам по прежнему миссаю, десинхрон по прежнему такой же
C++:
Expand Collapse Copy
bool __fastcall H::hkSetupBones(void* thisptr, void* edx, matrix3x4_t* Matrix, int MaxBones, int Mask, float CurTime) {
    C_BaseEntity* entity = (C_BaseEntity*)((DWORD)thisptr - 0x4);

    static auto r_jiggle_bones = I::CVar->FindVar("r_jiggle_bones");

    if (entity == g_LocalPlayer)
        return oSetupBones(thisptr, edx, Matrix, MaxBones, Mask, CurTime);

    if (IsUpdatingAnimation) {
        auto r_jiggle_bones_backup = r_jiggle_bones->GetInt();

        r_jiggle_bones->SetInt(0);

        uint8_t backup = *(uint8_t*)((uintptr_t)entity + 0x274);
        *(uint8_t*)((uintptr_t)entity + 0x274) = 0;

        uint32_t backup_effects = entity->GetEffects();
        entity->GetEffects() |= 8;

        Vector backup_origin = entity->GetAbsOrigin();
        entity->SetAbsOrigin(entity->GetOrigin());

        bool result = oSetupBones(thisptr, edx, Matrix, MaxBones, Mask, CurTime);

        entity->SetAbsOrigin(backup_origin);

        *(uint8_t*)((uintptr_t)entity + 0x274) = backup;
        entity->GetEffects() |= backup_effects;
        r_jiggle_bones->SetInt(r_jiggle_bones_backup);
        return result;
    }

    if (!entity->GetInt(0x100))
        return oSetupBones(thisptr, edx, Matrix, MaxBones, Mask, CurTime);

    if (MaxBones != -1 && Matrix) {
        memcpy(Matrix, entity->GetCachedBoneData(), MaxBones * sizeof(matrix3x4_t));
    }

    return true;
}
 
спасибо капитан очевидность, я весь юц и юг облазил, посты с моей проблемой нашел, но то что там написано - не работает
вот один из фиксов который я видел в лв и на юц, но он не делает ровным словом нихуя, по пяткам по прежнему миссаю, десинхрон по прежнему такой же
C++:
Expand Collapse Copy
bool __fastcall H::hkSetupBones(void* thisptr, void* edx, matrix3x4_t* Matrix, int MaxBones, int Mask, float CurTime) {
    C_BaseEntity* entity = (C_BaseEntity*)((DWORD)thisptr - 0x4);

    static auto r_jiggle_bones = I::CVar->FindVar("r_jiggle_bones");

    if (entity == g_LocalPlayer)
        return oSetupBones(thisptr, edx, Matrix, MaxBones, Mask, CurTime);

    if (IsUpdatingAnimation) {
        auto r_jiggle_bones_backup = r_jiggle_bones->GetInt();

        r_jiggle_bones->SetInt(0);

        uint8_t backup = *(uint8_t*)((uintptr_t)entity + 0x274);
        *(uint8_t*)((uintptr_t)entity + 0x274) = 0;

        uint32_t backup_effects = entity->GetEffects();
        entity->GetEffects() |= 8;

        Vector backup_origin = entity->GetAbsOrigin();
        entity->SetAbsOrigin(entity->GetOrigin());

        bool result = oSetupBones(thisptr, edx, Matrix, MaxBones, Mask, CurTime);

        entity->SetAbsOrigin(backup_origin);

        *(uint8_t*)((uintptr_t)entity + 0x274) = backup;
        entity->GetEffects() |= backup_effects;
        r_jiggle_bones->SetInt(r_jiggle_bones_backup);
        return result;
    }

    if (!entity->GetInt(0x100))
        return oSetupBones(thisptr, edx, Matrix, MaxBones, Mask, CurTime);

    if (MaxBones != -1 && Matrix) {
        memcpy(Matrix, entity->GetCachedBoneData(), MaxBones * sizeof(matrix3x4_t));
    }

    return true;
}
Это сетап костей, а не афикс.. Опять же своди рассинхрон к минимуму, ты не сможешь добиться идеальной синхронизации клиентских и серверных хитбоксов даже без читов
 
Это сетап костей, а не афикс.. Опять же своди рассинхрон к минимуму, ты не сможешь добиться идеальной синхронизации клиентских и серверных хитбоксов даже без читов
так как его свести к минимуму то, я сам догадался что свести к минимуму надо, А КАК?????

сетап костей - часть анимфикса
 
так как его свести к минимуму то, я сам догадался что свести к минимуму надо, А КАК?????

сетап костей - часть анимфикса
в паблике все есть, учись искать, мб потом кину
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
int interp_time = Utils::GetLerpTime() / I::Globals->interval_per_tick;
if (interp_time != 0 && && stored_backtrack[entity->EntIndex()][interp_time - 1].valid)
    entity->SetAbsOrigin(stored_backtrack[entity->EntIndex()][interp_time - 1].origin);
else
    entity->SetAbsOrigin(entity->GetOrigin());

типо так, на ботах работает идеально, на хвх миссает все равно по пяткам

да, до меня туго доходит иногда
 
Назад
Сверху Снизу