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

Гайд Отключаем интерполяцию как настоящие мужчины

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
24 Июл 2020
Сообщения
145
Реакции
143
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет всем
Недавно я возник вопросом, как можно нормально офать интерполяцию (т.к метод через GetVarMap говно и неправильный)
Тут есть два способа:
1) Через бул IsPaused в engine (90 индекс)
Находим ретурн адрес для этой параши, если он находится - ставим true
Пруф:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Код:
Expand Collapse Copy
bool __fastcall hooks::hooked_is_paused(void* ecx, void* edx) {
    static auto is_paused_original = hooks::is_paused_hook.get_original<is_paused_fn>();

    static auto return_to_interpolate = utils->find_pattern("client.dll", "84 C0 74 07 C6 05 ? ? ? ? ? 8B");

    if (_ReturnAddress() == (void*)return_to_interpolate)
        return true;

    return is_paused_original(ecx);
}
2) Через бул IsFollowingEntity в CBaseEntity (177 индекс)
Тут тоже находим ретурн адрес и повторяем действия как в первом способе
Именно через IsFollowingEntity способ более правильный, насколько я знаю (если не так - поправьте в комментах)
Пруф:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Код:
Expand Collapse Copy
bool __fastcall hooks::hooked_is_following_entity(void* ecx, void* edx) {
    static auto is_following_entity_original = hooks::is_following_entity_hook.get_original<is_following_entity_fn>();

    c_entity* ent = (c_entity*)ecx;
    if (!g->local || ent == g->local)
        return is_following_entity_original(ecx);

    static auto return_to_interpolate = utils->find_pattern("client.dll", "84 C0 0F 85 ? ? ? ? 38 05 ? ? ? ? 0F");
    if (_ReturnAddress() == (void*)return_to_interpolate)
        return true;

    return is_following_entity_original(ecx);
}
P.S Как найти player через интерфейс:
Код:
Expand Collapse Copy
    if (!player) {
        player = utils->find_pattern("client.dll", "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 89 7C 24 0C");
        player += 0x47;
    }
 
Последнее редактирование:
Справедливый гайд, как хорошо, что есть такие люди.
Пойду пастировать
 
интерполяция, это что?))
 
P.S Как найти player через интерфейс:
Код:
Expand Collapse Copy
    if (!player) {
        player = utils->find_pattern("client.dll", "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 89 7C 24 0C");
        player += 0x47;
    }

А написать по человечески нельзя что ли?
Хотя бы так:
C++:
Expand Collapse Copy
auto player = new c_hookable((void*)(utils->scan("client.dll", "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 89 7C 24 0C") + 0x47));
    if (!player) return false;

//тут уже хукаем нашу парашу
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А написать по человечески нельзя что ли?
Хотя бы так:
C++:
Expand Collapse Copy
auto player = new c_hookable((void*)(utils->scan("client.dll", "55 8B EC 83 E4 F8 83 EC 18 56 57 8B F9 89 7C 24 0C") + 0x47));
    if (!player) return false;

//тут уже хукаем нашу парашу
Вдруг кому то так удобнее, почему нет?
 
А в хуке StandardBlendingRules интерполяцию как все нормальные люди отключать вам что мешает?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А в хуке StandardBlendingRules интерполяцию как все нормальные люди отключать вам что мешает?
Там отключается интерполяция на кости, чтобы модельку с фейклагами игра не пыталась интерполировать и не "рвала" модельку
 
Там отключается интерполяция на кости, чтобы модельку с фейклагами игра не пыталась интерполировать и не "рвала" модельку
А, точно, только проснулся, в голове каша еще
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
UPD:
Не забудьте добавить проверку, чтобы игра вас (локал плеера) интерполировала ВСЕГДА!
Фикшеный код:
Код:
Expand Collapse Copy
bool __fastcall hooks::hooked_is_following_entity(void* ecx, void* edx) {
    static auto is_following_entity_original = hooks::is_following_entity_hook.get_original<is_following_entity_fn>();

    c_entity* ent = (c_entity*)ecx;
    if (!g->local || ent == g->local)
        return is_following_entity_original(ecx);

    static auto return_to_interpolate = utils->find_pattern("client.dll", "84 C0 0F 85 ? ? ? ? 38 05 ? ? ? ? 0F");
    if (_ReturnAddress() == (void*)return_to_interpolate)
        return true;

    return is_following_entity_original(ecx);
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
best way is to not disable interpolation at all : Sonnenbrille:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
объяснение работы интерполяции для чайников:
(no ad) на английском
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
спасибо, хорошо работает
 
Назад
Сверху Снизу