SDKHook(client, ..., ....); как правильно пользоваться?

Banana

Участник
Сообщения
892
Реакции
113
Здравствуйте возьмем такой пример.

При подключении игрока к серверу мы делаем SDKHook по отношению к нему..
Если этот игрок отключается от сервера то нужно делать SDKUnHook или не обязательно?

Как смены карты влияет? поделитесь своим опытом.
--- Добавлено позже ---
Или еще 1 пример.

public item_pickup(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}

Ловим момент поднятия оружия... тут когда нужно делать SDKUnHook и нужно ли его делать вообще?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #3
При подключении игрока к серверу мы делаем SDKHook по отношению к нему..
Если этот игрок отключается от сервера то нужно делать SDKUnHook или не обязательно?
Вроде хук снимается сам.

Ловим момент поднятия оружия..
Поздно Вы его ловите. Раньше повесьте хук.
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #4
Я хоть и не скриптер, но уже видел тут такой вопрос, так вот ответ был таков, что хук снимается сам
 

fl0wer

Участник
Сообщения
19
Реакции
3
Если этот игрок отключается от сервера то нужно делать SDKUnHook или не обязательно?
Судя по исходнику при диссконекте игрока анхукается.
C-подобный:
void SDKHooks::OnClientDisconnecting(int client)
{
    CBaseEntity *pEntity = gamehelpers->ReferenceToEntity(client);
    
    HandleEntityDeleted(pEntity);
}
C-подобный:
void SDKHooks::HandleEntityDeleted(CBaseEntity *pEntity)
{
    cell_t bcompatRef = gamehelpers->EntityToBCompatRef(pEntity);

    // Send OnEntityDestroyed to SM listeners
    SourceHook::List<ISMEntityListener *>::iterator iter;
    ISMEntityListener *pListener = NULL;
    for (iter = m_EntListeners.begin(); iter != m_EntListeners.end(); iter++)
    {
        pListener = (*iter);
        pListener->OnEntityDestroyed(pEntity);
    }

    // Call OnEntityDestroyed forward
    g_pOnEntityDestroyed->PushCell(bcompatRef);
    g_pOnEntityDestroyed->Execute(NULL);

    Unhook(pEntity);
}
Думаю функцию анхук нет смысла показывать, там цикл по всем хукам.
Следовательно необязательно, сурсмод сам сделает это.

Как смены карты влияет? поделитесь своим опытом.
Зависит от движка. В голдсрс при смене карты игроки дисконектятся. В сурсе вроде как не диссконектяться.

Или еще 1 пример.

public item_pickup(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}

Ловим момент поднятия оружия... тут когда нужно делать SDKUnHook и нужно ли его делать вообще?
Говнокод. Смотря что ты хочешь. Эвент лишь "уведомление" о произошедшем событии, можно, конечно, пре эвента хукнуть, но вряд ли сработает.
Если хочешь хукнуть, то юзай коннект игрока и тогда твой хук будет вызываться когда нужно, там уже сделаешь всё что душе угодно.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
@Banana, хукай при входе игрока
 
Сверху Снизу