Гайд PlayerHook

Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,218
Реакции[?]
631
Поинты[?]
0
C++:
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
Если что-то не так - пишите, но у меня всё работает
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
30 Дек 2018
Сообщения
306
Реакции[?]
107
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а нахуя
 
Забаненный
Статус
Оффлайн
Регистрация
30 Дек 2018
Сообщения
306
Реакции[?]
107
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,218
Реакции[?]
631
Поинты[?]
0
5 ночей на aim_ag_texture2
Эксперт
Статус
Оффлайн
Регистрация
6 Апр 2017
Сообщения
826
Реакции[?]
401
Поинты[?]
11K
for (int i = 1; i < g_pEngine->GetMaxClients(); ++i)
здесь надо <= вместо <
после перезахода на сервер у тебя хуки не будут работать
лучше использовать этот метод для хуков
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,218
Реакции[?]
631
Поинты[?]
0
здесь надо <= вместо <
после перезахода на сервер у тебя хуки не будут работать
лучше использовать этот метод для хуков
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Там он не задействован + там какой-то страшный вмт хукер, я хз как его юзать
Везде юзал < , да и в дедцеле как видишь так же
UPD: Реально после перезахода работать перестало, буду фиксить
 
Последнее редактирование:
5 ночей на aim_ag_texture2
Эксперт
Статус
Оффлайн
Регистрация
6 Апр 2017
Сообщения
826
Реакции[?]
401
Поинты[?]
11K
Там он не задействован + там какой-то страшный вмт хукер, я хз как его юзать
тебе ничего не мешает поменять его на свой
Везде юзал < , да и в дедцеле как видишь так же
энтити под номерами 1 - 64 всегда зарезервированы для игроков, используя < ты смотришь только энтити с номерами от 1 до 63
edit: если код что я скинул выше в deadcell не задействован, то держи это
Пожалуйста, авторизуйтесь для просмотра ссылки.

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

это в коде уже точно задействовано
 
Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,218
Реакции[?]
631
Поинты[?]
0
тебе ничего не мешает поменять его на свой

энтити под номерами 1 - 64 всегда зарезервированы для игроков, используя < ты смотришь только энтити с номерами от 1 до 63
А можно тогда этот так переписать?
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
C++:
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 на этот хук и радуешься жизни
Код:
  IClientNetworkable* hkCreateCCSPlayer( int entnum, int serialNum ) {
     auto entity = ( IClientNetworkable* )oCreateCCSPlayer( entnum, serialNum );
     auto client_entity = (C_CSPlayer*)(uintptr_t(entity) - 0x8); 
     return entity;
  }
 
сосу по легиту зато без бана
Забаненный
Статус
Оффлайн
Регистрация
21 Апр 2019
Сообщения
352
Реакции[?]
15
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
эта чо
 
Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,218
Реакции[?]
631
Поинты[?]
0
чо

вот вариант получше, заменяешь ClientClass::m_pCreateFn класса C_CSPlayer на этот хук и радуешься жизни
Код:
  IClientNetworkable* hkCreateCCSPlayer( int entnum, int serialNum ) {
     auto entity = ( IClientNetworkable* )oCreateCCSPlayer( entnum, serialNum );
     auto client_entity = (C_CSPlayer*)(uintptr_t(entity) - 0x8);
     return entity;
  }
Как эту штуку делать я понял, а вот как хукать через нее?
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
сосу по легиту зато без бана
Забаненный
Статус
Оффлайн
Регистрация
21 Апр 2019
Сообщения
352
Реакции[?]
15
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу