simple afk manager for teams

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: simple afk manager for teams

Мнение от OciXCrom » 18 Мар 2017, 17:21

Код за потвърждение: Избери целия код

if(!get_user_team(id) == iGetTeam) 
??

Да не би да имаш предвид:

Код за потвърждение: Избери целия код

if(get_user_team(id) != iGetTeam) 
Също така, iGetTeam е напълно излишно:

Код за потвърждение: Избери целия код

if(get_user_team(id) != get_pcvar_num(g_iTeam))

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Re: simple afk manager for teams

Мнение от Buzdrev » 18 Мар 2017, 19:36

Тоест, ще ми дадеш ли плъгина оправен или? Защото не разбрах от това как да го оправя.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: simple afk manager for teams

Мнение от OciXCrom » 18 Мар 2017, 20:43

Сигурно като замениш първото с второто. :)

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Re: simple afk manager for teams

Мнение от Buzdrev » 18 Мар 2017, 20:58

Е това го пробвах вади някви ерори и изобщо не се компилира.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: simple afk manager for teams

Мнение от OciXCrom » 18 Мар 2017, 21:06

Дай да видим как си го променил и какви ерори вади.

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Re: simple afk manager for teams

Мнение от Buzdrev » 26 Мар 2017, 01:02

Не грешката е била моя, сега работи както трябва, самоче проверката е добавена само за public kickAFK, а не е добавена за public checkAFK и така в момента изкарва съобщенията, че ще бъдеш кикнат, и за двата отбора, а аз искам да ги изкарва само за този за който работи плъгина.

Ето кода:

Код за потвърждение: Избери целия код

/*
Plugin: Simple AFK Manager
Version: 2.3
© [gm-project.net] #Staff.

Support on alliedmods.net: http://forums.alliedmods.net/showthread.php?t=110536
Support on gm-project.net: http://gm-community.net/showthread.php?t=581
*/

/*
* It is FIXED version NOT original!
* Changes by Safety1st
*/

#include <amxmodx>
#include <fakemeta>
#include <colorprint>

#define PLUGIN "Simple AFK Manager"
#define VERSION "2.4"
#define AUTHOR "[gm-project.net] #Staff"

#define PREFIX "^1[^4Control-Game^1]"

#define OFFSET_LAST_MOVEMENT 124

new Float:g_spec_time[33]

new g_Reason, g_aTime, g_sTime, g_Report, g_Info, g_iTeam
new g_Immunity, g_showMsg
new g_afkCount[2], bool:gbNoCheckNow

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar("sam_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY)
    register_dictionary("sam.txt")
    
    g_Reason = register_cvar("afk_kick_reason", "AFK")
    g_aTime = register_cvar("afk_time", "150.0")
    g_sTime = register_cvar("afk_spec_time", "300.0")
    g_Report = register_cvar("afk_report", "2")
    g_showMsg = register_cvar("afk_showmsg", "0")
    g_Info = register_cvar("afk_info_time", "20.0")
    g_Immunity = register_cvar("afk_immunity_flag", "а")
    g_iTeam = register_cvar("afk_team", "2")
    
    set_task(10.0, "checkAFK", _, _, _, "b")
    register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )
}

public client_putinserver(id) {
    g_spec_time[id] = 0.0
}

public Event_NewRound() {
    gbNoCheckNow = true // avoid checking first 10 seconds after new round (formerly dead players should be able to move)
}

public checkAFK() {
    static bAnnounce = false
    new iPlayers[32], iCount, i, iPlayer
    get_players( iPlayers, iCount, "ch" )   // skip bots and HLTV
	
    if ( !iCount )
        return
    
    if (gbNoCheckNow) {
        gbNoCheckNow = false
        if (get_pcvar_num(g_showMsg))
            bAnnounce = true
        return
    }
	
    if (bAnnounce) {
        ColorPrint(0, "%s %L", PREFIX, LANG_SERVER, "AFK_MSG", g_afkCount[1], g_afkCount[0])
        bAnnounce = false
    }
    
    new Float:afk_time = get_pcvar_float(g_aTime)
    new Float:afk_spec_time = get_pcvar_float(g_sTime)
    new Float:afk_info_time = get_pcvar_float(g_Info)
    new Float:cur_time, Float:last_activity
    new iTeam
    g_afkCount[0] = 0
    g_afkCount[1] = 0
    new strFlag[20]
    get_pcvar_string(g_Immunity, strFlag, 19)
    new flag = read_flags(strFlag)
    cur_time = get_gametime()
    if (afk_time)
        afk_time = cur_time - afk_time
    if (afk_spec_time)
        afk_spec_time = cur_time - afk_spec_time
    if (afk_info_time)
        afk_info_time = cur_time - afk_info_time
    
    for ( i = 0; i < iCount; i++ ) {
        iPlayer = iPlayers[i]
        if (get_user_flags(iPlayer) & flag)
            continue
        
        iTeam = is_user_ingame(iPlayer)
        if (iTeam)
        {
            if (!is_user_alive(iPlayer) || !afk_time)
                continue
            g_spec_time[iPlayer] = 0.0
            last_activity = get_pdata_float(iPlayer, OFFSET_LAST_MOVEMENT)
            if (last_activity < afk_time)
                kickAFK(iPlayer)
            else
            {
                if (last_activity < afk_info_time) {
                    ColorPrint(iPlayer, "%s %L", PREFIX, LANG_PLAYER, "AFK_WARN", floatround(last_activity - afk_time))
                    g_afkCount[iTeam - 1]++
                }
            }
        }
        else
        {
            if (!afk_spec_time)
                continue
            if (!g_spec_time[iPlayer])
                g_spec_time[iPlayer] = cur_time
            else {
                if (g_spec_time[iPlayer] < afk_spec_time )
                    kickAFK(iPlayer)
            }
        }
    }
}

is_user_ingame(id) {
    new szTeam[2]
    get_user_team(id, szTeam, 1)
    switch( szTeam[0] ) {
        case 'T': return 1
            case 'C': return 2
            default : return 0
    }
    return 0
}

public kickAFK(id) {
    new name[32], reason[128], report
    if(get_user_team(id) != get_pcvar_num(g_iTeam))
    return
    get_user_name(id, name, 31)
    get_pcvar_string(g_Reason, reason, 127)
    report = get_pcvar_num(g_Report)
    
    message_begin( MSG_ONE, SVC_DISCONNECT, _, id )
    write_string( reason )
    message_end( )
    
    switch (report) {
        case 2 : ColorPrint(0, "%s %L", PREFIX, LANG_SERVER, "AFK_KICK", name)
            case 1 : {
            new iPlayers[32], iCount, i, iPlayer
            get_players( iPlayers, iCount, "ch" )   // skip bots and HLTV
            if ( !iCount )
                return
            for ( i = 0; i < iCount; i++ ) {
                iPlayer = iPlayers[i]
                if (get_user_flags(iPlayer) & ADMIN_CHAT)
                    ColorPrint(iPlayer, "%s %L", PREFIX, LANG_PLAYER, "AFK_KICK", name)
            }
        }
    }
}
/* Fedcomp is bot */   

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: simple afk manager for teams

Мнение от OciXCrom » 29 Мар 2017, 20:53

Код за потвърждение: Избери целия код

/*
Plugin: Simple AFK Manager
Version: 2.3
© [gm-project.net] #Staff.

Support on alliedmods.net: http://forums.alliedmods.net/showthread.php?t=110536
Support on gm-project.net: http://gm-community.net/showthread.php?t=581
*/

/*
* It is FIXED version NOT original!
* Changes by Safety1st
*/

#include <amxmodx>
#include <fakemeta>
#include <colorprint>

#define PLUGIN "Simple AFK Manager"
#define VERSION "2.4"
#define AUTHOR "[gm-project.net] #Staff"

#define PREFIX "^1[^4Control-Game^1]"

#define OFFSET_LAST_MOVEMENT 124

new Float:g_spec_time[33]

new g_Reason, g_aTime, g_sTime, g_Report, g_Info, g_iTeam
new g_Immunity, g_showMsg
new g_afkCount[2], bool:gbNoCheckNow

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar("sam_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY)
    register_dictionary("sam.txt")
   
    g_Reason = register_cvar("afk_kick_reason", "AFK")
    g_aTime = register_cvar("afk_time", "150.0")
    g_sTime = register_cvar("afk_spec_time", "300.0")
    g_Report = register_cvar("afk_report", "2")
    g_showMsg = register_cvar("afk_showmsg", "0")
    g_Info = register_cvar("afk_info_time", "20.0")
    g_Immunity = register_cvar("afk_immunity_flag", "а")
    g_iTeam = register_cvar("afk_team", "2")
   
    set_task(10.0, "checkAFK", _, _, _, "b")
    register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )
}

public client_putinserver(id) {
    g_spec_time[id] = 0.0
}

public Event_NewRound() {
    gbNoCheckNow = true // avoid checking first 10 seconds after new round (formerly dead players should be able to move)
}

public checkAFK() {
    static bAnnounce = false
    new iPlayers[32], iCount, i, iPlayer
    get_players( iPlayers, iCount, "ach" )   // skip bots and HLTV
   
    if ( !iCount )
        return
   
    if (gbNoCheckNow) {
        gbNoCheckNow = false
        if (get_pcvar_num(g_showMsg))
            bAnnounce = true
        return
    }
   
    if (bAnnounce) {
        ColorPrint(0, "%s %L", PREFIX, LANG_SERVER, "AFK_MSG", g_afkCount[1], g_afkCount[0])
        bAnnounce = false
    }
   
    new Float:afk_time = get_pcvar_float(g_aTime)
    new Float:afk_spec_time = get_pcvar_float(g_sTime)
    new Float:afk_info_time = get_pcvar_float(g_Info)
    new Float:cur_time, Float:last_activity
    new iTeam = get_pcvar_num(g_iTeam)
    g_afkCount[0] = 0
    g_afkCount[1] = 0
    new strFlag[20]
    get_pcvar_string(g_Immunity, strFlag, 19)
    new flag = read_flags(strFlag)
    cur_time = get_gametime()
    if (afk_time)
        afk_time = cur_time - afk_time
    if (afk_spec_time)
        afk_spec_time = cur_time - afk_spec_time
    if (afk_info_time)
        afk_info_time = cur_time - afk_info_time
   
    for ( i = 0, iUserTeam; i < iCount; i++ ) {
        iPlayer = iPlayers[i]
        iUserTeam = get_user_team(iPlayer)
        
        if (get_user_flags(iPlayer) & flag || iUserTeam != iTeam)
            continue
       
        if (iUserTeam)
        {
            if (!is_user_alive(iPlayer) || !afk_time)
                continue
            g_spec_time[iPlayer] = 0.0
            last_activity = get_pdata_float(iPlayer, OFFSET_LAST_MOVEMENT)
            if (last_activity < afk_time)
                kickAFK(iPlayer)
            else
            {
                if (last_activity < afk_info_time) {
                    ColorPrint(iPlayer, "%s %L", PREFIX, LANG_PLAYER, "AFK_WARN", floatround(last_activity - afk_time))
                    g_afkCount[iUserTeam - 1]++
                }
            }
        }
        else
        {
            if (!afk_spec_time)
                continue
            if (!g_spec_time[iPlayer])
                g_spec_time[iPlayer] = cur_time
            else {
                if (g_spec_time[iPlayer] < afk_spec_time )
                    kickAFK(iPlayer)
            }
        }
    }
}

is_user_ingame(id) {
    new szTeam[2]
    get_user_team(id, szTeam, 1)
    switch( szTeam[0] ) {
        case 'T': return 1
            case 'C': return 2
            default : return 0
    }
    return 0
}

public kickAFK(id) {
    new name[32], reason[128], report
    if(get_user_team(id) != get_pcvar_num(g_iTeam))
    return
    get_user_name(id, name, 31)
    get_pcvar_string(g_Reason, reason, 127)
    report = get_pcvar_num(g_Report)
   
    message_begin( MSG_ONE, SVC_DISCONNECT, _, id )
    write_string( reason )
    message_end( )
   
    switch (report) {
        case 2 : ColorPrint(0, "%s %L", PREFIX, LANG_SERVER, "AFK_KICK", name)
            case 1 : {
            new iPlayers[32], iCount, i, iPlayer
            get_players( iPlayers, iCount, "ch" )   // skip bots and HLTV
            if ( !iCount )
                return
            for ( i = 0; i < iCount; i++ ) {
                iPlayer = iPlayers[i]
                if (get_user_flags(iPlayer) & ADMIN_CHAT)
                    ColorPrint(iPlayer, "%s %L", PREFIX, LANG_PLAYER, "AFK_KICK", name)
            }
        }
    }
}
/* Fedcomp is bot */    

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Re: simple afk manager for teams

Мнение от Buzdrev » 29 Мар 2017, 21:24

:lock:

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 20 госта