Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Гайд PlayerHook

  • Автор темы Автор темы bot9ra
  • Дата начала Дата начала
Эксперт
Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,231
Реакции
631
C++:
Expand Collapse Copy
void Hooks::HookPlayers()
{
    static bool Hooked[65];

    for (int i = 1; i < g_pEngine->GetMaxClients(); ++i)
    {
        C_BaseEntity* pPlayerEntity = g_pEntityList->GetClientEntity(i);

        if (!pPlayerEntity || !pPlayerEntity->IsAlive() || pPlayerEntity->IsDormant())
        {     
            if (Hooked[i]){
                  g_Hooks.pPlayerHook[i].unhook_all();
                  Hooked[i] = false;
            }
            continue;
        }

        if (!Hooked[i])
        {   
            g_PlayerHook[i].setup(pPlayerEntity);
            //тут хукаем
            Hooked[i] = true;
        }
    }
}
Вызывать в CreateMove
Если что-то не так - пишите, но у меня всё работает
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а нахуя
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
for (int i = 1; i < g_pEngine->GetMaxClients(); ++i)
здесь надо <= вместо <
после перезахода на сервер у тебя хуки не будут работать
лучше использовать этот метод для хуков
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
здесь надо <= вместо <
после перезахода на сервер у тебя хуки не будут работать
лучше использовать этот метод для хуков
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Там он не задействован + там какой-то страшный вмт хукер, я хз как его юзать
Везде юзал < , да и в дедцеле как видишь так же
UPD: Реально после перезахода работать перестало, буду фиксить
 
Последнее редактирование:
Там он не задействован + там какой-то страшный вмт хукер, я хз как его юзать
тебе ничего не мешает поменять его на свой
Везде юзал < , да и в дедцеле как видишь так же
энтити под номерами 1 - 64 всегда зарезервированы для игроков, используя < ты смотришь только энтити с номерами от 1 до 63
edit: если код что я скинул выше в deadcell не задействован, то держи это
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.

это в коде уже точно задействовано
 
тебе ничего не мешает поменять его на свой

энтити под номерами 1 - 64 всегда зарезервированы для игроков, используя < ты смотришь только энтити с номерами от 1 до 63
А можно тогда этот так переписать?
 
C++:
Expand Collapse Copy
void Hooks::HookPlayers()
{
    static bool Hooked[65];

    for (int i = 1; i < g_pEngine->GetMaxClients(); ++i)
    {
        C_BaseEntity* pPlayerEntity = g_pEntityList->GetClientEntity(i);

        if (!pPlayerEntity || !pPlayerEntity->IsAlive() || pPlayerEntity->IsDormant())
        {    
            if (Hooked[i]){
                  g_Hooks.pPlayerHook[i].unhook_all();
                  Hooked[i] = false;
            }
            continue;
        }

        if (!Hooked[i])
        {  
            g_PlayerHook[i].setup(pPlayerEntity);
            //тут хукаем
            Hooked[i] = true;
        }
    }
}
Вызывать в CreateMove
Если что-то не так - пишите, но у меня всё работает
чо

вот вариант получше, заменяешь ClientClass::m_pCreateFn класса C_CSPlayer на этот хук и радуешься жизни
Код:
Expand Collapse Copy
  IClientNetworkable* hkCreateCCSPlayer( int entnum, int serialNum ) {
     auto entity = ( IClientNetworkable* )oCreateCCSPlayer( entnum, serialNum );
     auto client_entity = (C_CSPlayer*)(uintptr_t(entity) - 0x8); 
     return entity;
  }
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
эта чо
 
чо

вот вариант получше, заменяешь ClientClass::m_pCreateFn класса C_CSPlayer на этот хук и радуешься жизни
Код:
Expand Collapse Copy
  IClientNetworkable* hkCreateCCSPlayer( int entnum, int serialNum ) {
     auto entity = ( IClientNetworkable* )oCreateCCSPlayer( entnum, serialNum );
     auto client_entity = (C_CSPlayer*)(uintptr_t(entity) - 0x8);
     return entity;
  }
Как эту штуку делать я понял, а вот как хукать через нее?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу