Help Подскажите, что изменить в исходнике, чтобы Афк-кикер не кикал админов и випов

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
527
Симпатии
103
Пол
Мужской
Всем привет. Подскажите, какие строки изменить, поменять в исходнике, чтобы админов и випов с флагом s, афк-кикер не кикал. В исходнике в строке register_event("ResetHUD", "playerSpawned", "be") стоит be, меняю как мне надо, но всё равно после заданного времени, происходит кик. Заранее спасибо=!)
Код:
#include <amxmodx>
#include <colorchat>

#define MIN_AFK_TIME 30        // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15        // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5        // This is also the warning message frequency.

new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}

public plugin_init() {
    register_plugin("AFK Kicker","1.0b","Cheesy Peteza")
    register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)

    register_cvar("mp_afktime", "60")    // Kick people AFK longer than this time
    register_cvar("mp_afkminplayers", "1")    // Only kick AFKs when there is atleast this many players on the server
    set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
    register_event("ResetHUD", "playerSpawned", "be")
}

public checkPlayers() {
    for (new i = 1; i <= get_maxplayers(); i++) {
        if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned) {
            new newangle[3]
            get_user_origin(i, newangle)

            if ( newangle[0] == g_oldangles[0] && newangle[1] == g_oldangles[1] && newangle[2] == g_oldangles[2] ) {
                g_afktime += CHECK_FREQ
                check_afktime(i)
            } else {
                g_oldangles[0] = newangle[0]
                g_oldangles[1] = newangle[1]
                g_oldangles[2] = newangle[2]
                g_afktime = 0
            }
        }
    }
    return PLUGIN_HANDLED
}

check_afktime(id) {
    new numplayers = get_playersnum()
    new minplayers = get_cvar_num("mp_afkminplayers")
                 
    if (numplayers >= minplayers) {
        new maxafktime = get_cvar_num("mp_afktime")
        if (maxafktime < MIN_AFK_TIME) {
            log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
            maxafktime = MIN_AFK_TIME
            set_cvar_num("mp_afktime", MIN_AFK_TIME)
        }

        if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
            new timeleft = maxafktime - g_afktime[id]
            ColorChat(id,GREEN,"^1[^4AFK Kicker^1] Если вы не начнёте ^4двигаться ^1через ^3%i^1 секунд, то вы будете ^4кикнуты.", timeleft)
        } else if (g_afktime[id] > maxafktime) {
            new name[32]
            get_user_name(id, name, 31)
            ColorChat(id,GREEN,"^1[^4AFK Kicker^1] ^4%s^x01 кикнут за то что не двигался ^3%i^1 секунд.", name, maxafktime)
            log_amx("%s was kicked for being AFK longer than %i seconds", name, maxafktime)
            server_cmd("kick #%d ^"Вы были кикнуты за то что не двигались %i секунд.^"", get_user_userid(id), maxafktime)
        }
    }
}

public client_connect(id) {
    g_afktime[id] = 0
    return PLUGIN_HANDLED
}

public client_putinserver(id) {
    g_afktime[id] = 0
    return PLUGIN_HANDLED
}

public playerSpawned(id) {
    g_spawned[id] = false
    new sid[1]
    sid[0] = id
    set_task(0.75, "delayedSpawn",_, sid, 1)    // Give the player time to drop to the floor when spawning
    return PLUGIN_HANDLED
}

public delayedSpawn(sid[]) {
    get_user_origin(sid[0], g_oldangles[sid[0]])
    g_spawned[sid[0]] = true
    return PLUGIN_HANDLED
}
stock client_printcolor(const id, const input[], any:...)
{
        new iCount = 1, iPlayers[32]
        static szMsg[191]

        vformat(szMsg, charsmax(szMsg), input, 3)
        replace_all(szMsg, 190, "/g", "^4")
        replace_all(szMsg, 190, "/y", "^1")
        replace_all(szMsg, 190, "/ctr", "^1")
        replace_all(szMsg, 190, "/w", "^0")

        if(id) iPlayers[0] = id
        else get_players(iPlayers, iCount, "ch")
        for (new i = 0; i < iCount; i++)
        {
                if(is_user_connected(iPlayers))
                {
                        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers)
                        write_byte(iPlayers)
                        write_string(szMsg)
                        message_end()
                }
        }
}
 

fakesound

Пользователь
Регистрация
25 Июл 2017
Сообщения
3
Симпатии
1
Пол
Мужской
в функе checkPlayers() заменить это:
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned) {
на это:
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned && !(get_user_flags(id) & YOUR_ADMIN_IMMUNITY)) {

И еще добавить:
#define YOUR_ADMIN_IMMUNITY ADMIN_LEVEL_G
 

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
527
Симпатии
103
Пол
Мужской
в функе checkPlayers() заменить это:
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned) {
на это:
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned && !(get_user_flags(id) & YOUR_ADMIN_IMMUNITY)) {

И еще добавить:
#define YOUR_ADMIN_IMMUNITY ADMIN_LEVEL_G
тоесть вот
Код:
#include <amxmodx>
#include <colorchat>

#define MIN_AFK_TIME 180        // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15        // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5        // This is also the warning message frequency.
#define YOUR_ADMIN_IMMUNITY ADMIN_LEVEL_G

new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}

public plugin_init() {
    register_plugin("AFK Kicker","1.0b","Cheesy Peteza")
    register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)

    register_cvar("mp_afktime", "180")    // Kick people AFK longer than this time
    register_cvar("mp_afkminplayers", "25")    // Only kick AFKs when there is atleast this many players on the server
    set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
    register_event("ResetHUD", "playerSpawned", "cs")
}

public checkPlayers() {
    for (new i = 1; i <= get_maxplayers(); i++) {
        if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned && !(get_user_flags(id) & YOUR_ADMIN_IMMUNITY)) {
            new newangle[3]
            get_user_origin(i, newangle)

            if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
                g_afktime[i] += CHECK_FREQ
                check_afktime(i)
            } else {
                g_oldangles[i][0] = newangle[0]
                g_oldangles[i][1] = newangle[1]
                g_oldangles[i][2] = newangle[2]
                g_afktime[i] = 0
            }
        }
    }
    return PLUGIN_HANDLED
}

check_afktime(id) {
    new numplayers = get_playersnum()
    new minplayers = get_cvar_num("mp_afkminplayers")
                
    if (numplayers >= minplayers) {
        new maxafktime = get_cvar_num("mp_afktime")
        if (maxafktime < MIN_AFK_TIME) {
            log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
            maxafktime = MIN_AFK_TIME
            set_cvar_num("mp_afktime", MIN_AFK_TIME)
        }

        if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
            new timeleft = maxafktime - g_afktime[id]
            ColorChat(id,GREEN,"^1[^4AFK Kicker^1] Если вы не начнёте ^4двигаться ^1через ^3%i^1 секунд, то вы будете ^4кикнуты.", timeleft)
        } else if (g_afktime[id] > maxafktime) {
            new name[32]
            get_user_name(id, name, 31)
            ColorChat(id,GREEN,"^1[^4AFK Kicker^1] ^4%s^x01 кикнут за то что не двигался ^3%i^1 секунд.", name, maxafktime)
            log_amx("%s was kicked for being AFK longer than %i seconds", name, maxafktime)
            server_cmd("kick #%d ^"Вы были кикнуты за то что не двигались %i секунд.^"", get_user_userid(id), maxafktime)
        }
    }
}

public client_connect(id) {
    g_afktime[id] = 0
    return PLUGIN_HANDLED
}

public client_putinserver(id) {
    g_afktime[id] = 0
    return PLUGIN_HANDLED
}

public playerSpawned(id) {
    g_spawned[id] = false
    new sid[1]
    sid[0] = id
    set_task(0.75, "delayedSpawn",_, sid, 1)    // Give the player time to drop to the floor when spawning
    return PLUGIN_HANDLED
}

public delayedSpawn(sid[]) {
    get_user_origin(sid[0], g_oldangles[sid[0]])
    g_spawned[sid[0]] = true
    return PLUGIN_HANDLED
}
stock client_printcolor(const id, const input[], any:...)
{
        new iCount = 1, iPlayers[32]
        static szMsg[191]

        vformat(szMsg, charsmax(szMsg), input, 3)
        replace_all(szMsg, 190, "/g", "^4")
        replace_all(szMsg, 190, "/y", "^1")
        replace_all(szMsg, 190, "/ctr", "^1")
        replace_all(szMsg, 190, "/w", "^0")

        if(id) iPlayers[0] = id
        else get_players(iPlayers, iCount, "ch")
        for (new i = 0; i < iCount; i++)
        {
                if(is_user_connected(iPlayers[i]))
                {
                        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
                        write_byte(iPlayers[i])
                        write_string(szMsg)
                        message_end()
                }
        }
}
А вот это your разве так перед админимунит прописать
#define YOUR_ADMIN_IMMUNITY ADMIN_LEVEL_G, а не вот так
#define ADMIN_IMMUNITY ADMIN_LEVEL_G.
И в этой строке if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned && !(get_user_flags(id) & YOUR_ADMIN_IMMUNITY)) your можна не писать,
и сделать вот так if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned && !(get_user_flags(id) & ADMIN_IMMUNITY))
 

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
527
Симпатии
103
Пол
Мужской
в функе checkPlayers() заменить это:
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned) {
на это:
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned && !(get_user_flags(id) & YOUR_ADMIN_IMMUNITY)) {

И еще добавить:
#define YOUR_ADMIN_IMMUNITY ADMIN_LEVEL_G
не компилируется, ошибку выдаёт...
error 033: array must be indexed (variable "g_spawned")
 

danmixgtofficial

Пользователь
Регистрация
23 Июл 2017
Сообщения
3
Симпатии
0
Пол
Мужской
Поменяй плагин, он плахой
 

fakesound

Пользователь
Регистрация
25 Июл 2017
Сообщения
3
Симпатии
1
Пол
Мужской
да, легче плагин поменять на неугомоновский. Там все как раз есть и даже больше.
 

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
527
Симпатии
103
Пол
Мужской
да, легче плагин поменять на неугомоновский. Там все как раз есть и даже больше.
да я ставил уже афк-контроль от Ивана, но мод пушки-лазеры, когда переводит в спектра игрока, потом нельзя возродиться...(p.s: стоит плагин csdm_spec, чтобы админ или простой игрок мог посмотреть за игроком, и затем вернуться обратно в ту команду, за которую он играл), - приходится перезаходить на сервер, если можна как нить афк-контрол и csdm_spec связать вместе, то бы поставил его. Писал в теме вот.
 
Последнее редактирование:

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
527
Симпатии
103
Пол
Мужской
или можна как нить от Ивана афк-контроль вырезать перевод в спектра, а сразу кик с сервера?!)
 

Izmayl7

Пользователь
Регистрация
9 Июн 2017
Сообщения
527
Симпатии
103
Пол
Мужской
Тему можна удалить. Решение в теме. Модераторы или Администраторы форума удалите тему или перенесите в архив. Заранее спасибо!)
 
Сверху Снизу