Принцип работы anim-fix помогите

Paste for live <3
Забаненный
Статус
Оффлайн
Регистрация
1 Мар 2019
Сообщения
309
Реакции[?]
47
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вроде не раз с ним сталкивался,пастил
Но суть все еще не понял
Объясните что он делает и как !
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
Вроде не раз с ним сталкивался,пастил
Но суть все еще не понял
Объясните что он делает и как !
насколько я правильно понял, оно призвано минимизировать рассинхрон между серверными и клиентскими хитбоксами, которые вызваны в основной части разным кодом сервера и клиента

Это не ресольвер десинков, он не фиксит десинки, анимфикс это по сути аннулирование клиентского кода и внедрение логики серверного кода, от чего у тебя хитбоксы будут намного лучше совпадать. Но эта тема эффективна при движениях энтити, если они просто стоят, анимфикс особо не нужен.
Ну и анимфиксом ты можешь пофиксить фейкдак.
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
Вроде не раз с ним сталкивался,пастил
Но суть все еще не понял
Объясните что он делает и как !
Основная проблема анимации в том, что на сервере они обновляются каждый тик, а на клиенте - каждый кадр. Из-за этого хитбоксы на клиенте и сервера будут сильно десинхронизированны.
Самый базовый аним фикс:
1. Останавливаешь игру от обновления анимации в FRAME_RENDER_START( Подсказка:
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
2. В FrameStageNotify, когда приходит обновление для игрока обновляешь его сам ( FRAME_NET_UPDATE ). Простейший вариант такого кода ( фикшенный код из гучи
Пожалуйста, авторизуйтесь для просмотра ссылки.
):

Код:
void C_LagCompensation::fix_animation_data(C_BaseEntity* entity)
{
    entity->client_side_animation() = true;

    auto old_curtime = G::interfaces.globaldata->curtime;
    auto old_frametime = G::interfaces.globaldata->frametime;
    auto old_anim_overlay = entity->get_anim_overlays();

    G::interfaces.globaldata->curtime = entity->get_simulation_time();
    G::interfaces.globaldata->frametime = G::interfaces.globaldata->interval_per_tick; // обновление анимации теперь будет происходит по тикам

    auto player_animation_state = player->get_anim_state();
    auto player_model_time = reinterpret_cast<int*>(player_animation_state + 112);
    if (player_animation_state != nullptr && player_model_time != nullptr) // заставляем игру обновить анимации
        if (*player_model_time == G::interfaces.globaldata->framecount)
            *player_model_time = G::interfaces.globaldata->framecount - 1;

    entity->update_clientside_animations(); // обновление анимации
    entity->get_anim_overlays() = old_anim_overlay; // возвращаем серверные аним оверлеи
   
    entity->setup_bones( BONE_USED_BY_HITBOX | BONE_USED_BY_ATTACHMENT  );

    G::interfaces.globaldata->curtime = old_curtime;
    G::interfaces.globaldata->frametime = old_frametime;

    entity->client_side_animation() = false;
}
Фиксы в виде разной реализации серверного и клиент кода рассматривать не буду, UC + Ida + Source SDK 2013( а лучше alliedmodders csgo sdk ) в помощь.
 
Последнее редактирование:
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
насколько я правильно понял, оно призвано минимизировать рассинхрон между серверными и клиентскими хитбоксами, которые вызваны в основной части разным кодом сервера и клиента

Это не ресольвер десинков, он не фиксит десинки, анимфикс это по сути аннулирование клиентского кода и внедрение логики серверного кода, от чего у тебя хитбоксы будут намного лучше совпадать. Но эта тема эффективна при движениях энтити, если они просто стоят, анимфикс особо не нужен.
Ну и анимфиксом ты можешь пофиксить фейкдак.
1. Фейкдак нельзя пофиксить. ( максимум бэктрек в выстрел )
2. Анимфикс нужен всегда.
3. Все что надо в SetupBones - убрать не нужный клиентский код( ребилд не нужен ), стоит глянуть как выглядит и используются серверный SetupBones(почти не менялся с Source SDK 2013), а затем глянуть в клиент -
Пожалуйста, авторизуйтесь для просмотра ссылки.
. С анимстейтом предлагаю разобраться самостоятельно
 
Забаненный
Статус
Оффлайн
Регистрация
9 Янв 2019
Сообщения
701
Реакции[?]
295
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
3. Все что надо в SetupBones - убрать не нужный клиентский код( ребилд не нужен ), стоит глянуть как выглядит и используются серверный SetupBones(почти не менялся с Source SDK 2013), а затем глянуть в клиент -
Пожалуйста, авторизуйтесь для просмотра ссылки.
. С анимстейтом предлагаю разобраться самостоятельно
спасибо за useful hint, симпу кинул
ты че поломанный или как?
 
Paste for live <3
Забаненный
Статус
Оффлайн
Регистрация
1 Мар 2019
Сообщения
309
Реакции[?]
47
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
насколько я правильно понял, оно призвано минимизировать рассинхрон между серверными и клиентскими хитбоксами, которые вызваны в основной части разным кодом сервера и клиента

Это не ресольвер десинков, он не фиксит десинки, анимфикс это по сути аннулирование клиентского кода и внедрение логики серверного кода, от чего у тебя хитбоксы будут намного лучше совпадать. Но эта тема эффективна при движениях энтити, если они просто стоят, анимфикс особо не нужен.
Ну и анимфиксом ты можешь пофиксить фейкдак.
1. Фейкдак нельзя пофиксить. ( максимум бэктрек в выстрел )
2. Анимфикс нужен всегда.
3. Все что надо в SetupBones - убрать не нужный клиентский код( ребилд не нужен ), стоит глянуть как выглядит и используются серверный SetupBones(почти не менялся с Source SDK 2013), а затем глянуть в клиент -
Пожалуйста, авторизуйтесь для просмотра ссылки.
. С анимстейтом предлагаю разобраться самостоятельно
Спасибо за помощь пацы,чуть порывшись в коде и почитав ваших ответов я сделал чудо
 
Сверху Снизу