Автокик в движке

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
702
Реакции
54
  1. Кикает при условии, что игрок афк или из наблюдения тоже?
  2. Есть ли возможность создать иммунитет плагином?
  3. Появилась возможность в ReAPI изменить дефолтную причину кика?
Просто эти афк контроллеры не сильно надо, тем более, что бомбу движок уже дропает, осталось кикнуть за афк по сути и всё :)
 
Последнее редактирование:

hajimura

Е777КХ05
Сообщения
287
Реакции
223
Помог
6 раз(а)
Кикает при условии, что игрок афк или из наблюдения тоже?
1. Если не ошибаюсь, то кикает в любом из этих случаев. Ластмувмент обновляется при нажатии любых кнопок вне зависимости оттого, в спектрах ты или нет
2. Хукаешь функцию DropIdleHook, проверяешь на наличие нужного тебе флага, и если true, то ретурнишь HC_SUPERCEDE, в противном случае - HC_CONTINUE
3. В этом же хуке функции можно и причину менять
 
Последнее редактирование:
Сообщения
702
Реакции
54
shadow, А можно по подробнее, а то если честно, у меня даже гугл думает, что DropIdleHook - это матюки :D
Не могу никакой информации даже найти по этому поводу!
 
Сообщения
702
Реакции
54
Код:
#include <amxmodx>
#include <reapi>

const FLAG = ADMIN_LEVEL_A;

public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_DropIdlePlayer, "@CBasePlayer_DropIdlePlayer", 1);
}

@CBasePlayer_DropIdlePlayer(id)
{
    if (get_user_flags(id) & FLAG)
        return HC_SUPERCEDE;

    return HC_CONTINUE;
}
Чтобы дать иммунитет так вроде. А как причину собственно законстантить? Документацию я то вижу, а вот как воспользоваться или что там имеется ввиду, это уже сложно))
 
Последнее редактирование:

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
ThePhoenix, второму аргументу нужно вернуть нужное значение (исп. SetHookChainArg).
И делается это всё в пре хуке, а не в пост, как у тебя.
P.S. mp_autokick не только на проверку бездействия игрока распространяется, но и на убийство заложников, так что я бы выставил 0. Тогда можно юзать в RG_CBasePlayer_DropIdlePlayer в пост, но дропать игрока нужно будет самому, напр. нативом rh_drop_client, где можно указать причину.
26 Апр 2020
из наблюдения тоже
Из наблюдателей кикать не будет.
26 Апр 2020
Код:
#include <amxmodx>
#include <reapi>

const IMMUNITY_ACCESS = ADMIN_LEVEL_A;

public plugin_init() {
    RegisterHookChain(RG_CBasePlayer_DropIdlePlayer, "CBasePlayer_DropIdlePlayer_Pre", false);
}

public OnConfigsExecuted() {
    set_cvar_num("mp_autokick", "1");
    log_amx("m_fMaxIdlePeriod >>> %f", get_member_game(m_fMaxIdlePeriod));
}

public CBasePlayer_DropIdlePlayer_Pre(const id, const reason[]) {
    log_amx("=================================^n\
        CBasePlayer_DropIdlePlayer_Pre^n\
        id >>> %d^n\
        reason >>>%s^n\
        m_flIdleCheckTime >>> %f^n\
        m_fLastMovement >>> %f^n\
        GameTime >>> %f",
        id, reason, get_member(id, m_flIdleCheckTime), get_member(id, m_fLastMovement), get_gametime()
    );

    if(get_user_flags(id & IMMUNITY_ACCESS)) {
        log_amx("CBasePlayer_DropIdlePlayer_Pre | Player %n has immunity flag", id)

        return HC_SUPERCEDE;
    }

    SetHookChainArg(2, ATYPE_STRING, "Своя причина");
    return HC_CONTINUE;
}
 
Последнее редактирование:
Сообщения
702
Реакции
54
d3m37r4, у меня не играются карты cs_* (и тиммейтов атаковать нельзя), так что, всё в порядке. Да и кикать за убийство заложников отличная тема, а то как обычно убьют их и пиши пропало. Спасибо!
 
Последнее редактирование:
Сообщения
702
Реакции
54
Nordic Warrior, я видел функцию, но не пользовался, т.к не было нужды, ибо карты cs_* слишком несбалансированы, по типу ассаульта и т.д. А выдумывать баланс для одной карты, чтобы сильные рашили, а слабые дефали, нет желания, тем более, что игроки обычно мясные и любят долбиться 32/32 и им пофиг на задачи.

p.s. Тему можно закрывать, решено, спасибо!
 

hajimura

Е777КХ05
Сообщения
287
Реакции
223
Помог
6 раз(а)
Из наблюдателей кикать не будет.
Пошел перепроверять и пришел к выводу, что и да, и нет. Или я что-то не так понимаю, но, короче, вот:
1. https://github.com/s1lentq/ReGameDL...46b08fac37568/regamedll/dlls/player.cpp#L4313
2. https://github.com/s1lentq/ReGameDL...46b08fac37568/regamedll/dlls/player.cpp#L4370
Если просмотреть вторую ссылку, то кикать спектров не должно. Первая ссылка же не проверяет игрока на живучесть, отсюда вывод, что кикнет даже спектров. Mistrick, Shel, fl0wer, Garey, я путаю что-то, да?
 

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
shadow, а на деле, чего будет? Хукчейн будет вызываться, если ты в спектрах сидишь?
26 Апр 2020
Функция, где форсится дроп игрока, просто вызываться не будет т.к. он не является живым.
https://github.com/s1lentq/ReGameDL...ac37568/regamedll/dlls/player.cpp#L4369-L4371
Вот этот фикс мб надо бы убрать, но опять же это нужно обсуждать с s1lent
 

hajimura

Е777КХ05
Сообщения
287
Реакции
223
Помог
6 раз(а)

hajimura

Е777КХ05
Сообщения
287
Реакции
223
Помог
6 раз(а)
Код который ты указал находится внутри блока с проверкой "жив ли игрок".
Я знаю, что я указал. Я также указал блок кода с обновлением ластмувмента, в котором нет этой проверки
 

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
shadow, а какой смысл от обновления ластмувмент, если действие выполняется только на живого? Там просто с фиксом немного промахнулись.
 
Сообщения
702
Реакции
54
d3m37r4,
Код:
[rehlds_kick.amxx] m_fMaxIdlePeriod >>> 276.000000
Это столько надо простоять, чтобы кикнуло?)

или же это сообщает сколько простоял в бездействии?
 
Последнее редактирование:
Сообщения
702
Реакции
54
d3m37r4,
Код:
L 04/28/2020 - 19:11:38: [rehlds_kick.amxx] CBasePlayer_DropIdlePlayer_Pre | Player [T-B] Gamer has immunity flag
надо чутка поправить, иначе будет всех грести под "иммунитет"
Код:
if(get_user_flags(id & IMMUNITY_ACCESS)) {
-->
if(get_user_flags(id) & IMMUNITY_ACCESS) {
И квар времени, после которого кикнет: mp_autokick_timeout. Может кому-то пригодится, а то я думал, что он без нижнего подчёркивания :D
 
Сообщения
702
Реакции
54
Итоговый код, компилится без ошибок :)

Код:
#include <amxmodx>
#include <reapi>

const IMMUNITY_ACCESS = ADMIN_LEVEL_A;

public plugin_init() {
    RegisterHookChain(RG_CBasePlayer_DropIdlePlayer, "CBasePlayer_DropIdlePlayer_Pre", false);
}

public OnConfigsExecuted() {
    set_cvar_num("mp_autokick", 1);
    log_amx("m_fMaxIdlePeriod >>> %f", get_member_game(m_fMaxIdlePeriod));
}

public CBasePlayer_DropIdlePlayer_Pre(const id, const reason[]) {
    log_amx("=================================^n\
        CBasePlayer_DropIdlePlayer_Pre^n\
        id >>> %d^n\
        reason >>>%s^n\
        m_flIdleCheckTime >>> %f^n\
        m_fLastMovement >>> %f^n\
        GameTime >>> %f",
        id, reason, get_member(id, m_flIdleCheckTime), get_member(id, m_fLastMovement), get_gametime()
    );

    if (get_user_flags(id) & IMMUNITY_ACCESS) {
        log_amx("CBasePlayer_DropIdlePlayer_Pre | Player %n has immunity flag", id)

        return HC_SUPERCEDE;
    }

    SetHookChainArg(2, ATYPE_STRING, "Ты афк: connect *ip servera*");
    return HC_CONTINUE;
}
Там просто в варианте d3m37r4, ещё одна маленькая ошибка, в виде скобок возле значения, при требовании значения квара mp_autokick!
За наблюдателя кикать не будет :)

p.s. Код полностью товарища, я лишь поправил нюансы ;)
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу