Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Квары в AFK Manager by Leon McVeran.

exec1337
сообщение 30.5.2013, 17:32
Сообщение #1
Стаж: 13 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Ребята,а как можно...убрать в AFK Manager by Leon McVeran такую вещь,что некоторые квары имеют интервал значений(например afk_transfer_time) и если их изменить на недопустимое,то он как-то сам ставится на минимал... Чушь же.
Думаю может изменить время переодичности проверок,дак както чёто страшно.
Исходник плагина+немного описания ниже:
Раскрывающийся текст
Код:
#define PLUGIN  "AFK Manager"
#define AUTHOR  "Leon McVeran"
#define VERSION         "v1.4d"
#define PDATE   "19th May 2010"
 
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
 
#define KICK_IMMUNITY           ADMIN_BAN
 
#define TASK_AFK_CHECK          142500
#define FREQ_AFK_CHECK          5.0
#define MAX_WARN                3
 
static const OFFSET_LINUX = 5
new const m_iJoiningState = 125
 
new bool:g_bSpec[33]
new Float:g_fLastActivity[33]
new g_iAFKCheck
new g_iAFKTime[33]
new g_iDropBomb
new g_iKickTime
new g_iMaxPlayers
new g_iMinPlayers
new g_iTransferTime
new g_iWarn[33]
new g_vOrigin[33][3]
 
new CVAR_afk_drop_bomb
new CVAR_afk_check
new CVAR_afk_transfer_time
new CVAR_afk_kick_time
new CVAR_afk_kick_players
 
public plugin_init(){
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_dictionary("afk_manager.txt")
 
        register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End")
        register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start")
 
        // Support der alten Mens
        register_clcmd("jointeam", "cmd_jointeam") // new menu
        register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu
 
        register_clcmd("joinclass", "cmd_joinclass") // new menu
        register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu
        register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu
 
        CVAR_afk_check = register_cvar("afk_check", "1")
        CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2")
        CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "9")
        CVAR_afk_kick_time = register_cvar("afk_kick_time", "24")
        CVAR_afk_kick_players = register_cvar("afk_kick_players", "12")
}
 
public plugin_cfg(){
        g_iMaxPlayers = get_maxplayers()
}
 
public client_connect(id){
 
        // Spieler als Spectator entmarkieren
        g_bSpec[id] = false
 
        // Positionen zurcksetzen
        g_vOrigin[id] = {0, 0, 0}
 
        // Counter zurcksetzen
        g_iAFKTime[id] = 0
        g_iWarn[id] = 0
}
 
public event_round_start(){
 
        // AFK Check eingeschaltet
        g_iAFKCheck = get_pcvar_num(CVAR_afk_check)
        if (g_iAFKCheck){
 
                // Spawn-Positionen aktualisieren
                new iPlayers[32], pNum
                get_players(iPlayers, pNum, "a")
                for (new p = 0; p < pNum; p++){
                        get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]])
                }
 
                // Loop anlegen falls nicht vorhanden
                if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b")
 
                // Kick und Transferzeiten festlegen
                if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6)
                if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6)
                g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb)
                g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time)
                g_iKickTime = get_pcvar_num(CVAR_afk_kick_time)
                g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players)
        }
 
        // AFK Check ausgeschaltet
        else{
 
                // Loop l��en falls vorhanden
                if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK)
        }
 
 
}
 
public cmd_jointeam(id){
 
        // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined.
        g_bSpec[id] = true
}
 
public cmd_joinclass(id){
 
        // Spieler als Spectator entmarkieren
        g_bSpec[id] = false
 
        // Positionen zurcksetzen
        g_vOrigin[id] = {0, 0, 0}
 
        // Counter zurcksetzen
        g_iAFKTime[id] = 0
        g_iWarn[id] = 0
}
 
public event_round_end(){
 
        // Check darf nicht durchgefhrt werden
        g_iAFKCheck = 0
}
 
public func_afk_check(taskid){
        if (g_iAFKCheck){
                new CsTeams:eTeam
 
                // Alle Spieler berprfen
                for (new id = 1; id <= g_iMaxPlayers; id++){
 
                        // Bots nicht berprfen
                        if (is_user_bot(id)) continue
 
                        // AFK Funktionen fr Specs
                        if (is_user_connected(id) && !is_user_hltv(id)){
                                eTeam = cs_get_user_team(id)
                                if (eTeam == CS_TEAM_SPECTATOR || eTeam == CS_TEAM_UNASSIGNED || g_bSpec[id]){
 
                                        // Counter erh��
                                        g_iAFKTime[id]++
 
                                        // Spec-Kick
                                        if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){
                                                func_kick_player(id)
                                        }
                                }
                        }
 
                        // AFK Funktionen fr lebende Spieler
                        if (is_user_alive(id)){
 
                                // Positionen berprfen
                                if (g_iAFKCheck == 1){
                                        new vOrigin[3]
                                        get_user_origin(id, vOrigin)
 
                                        if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){
                                                g_vOrigin[id][0] = vOrigin[0]
                                                g_vOrigin[id][1] = vOrigin[1]
                                                g_vOrigin[id][2] = vOrigin[2]
                                                g_iAFKTime[id] = 0
                                                g_iWarn[id] = 0
                                        }
                                        else{
                                                g_iAFKTime[id]++
                                        }
                                }
 
                                // Letzte Aktivit㲠ermitteln
                                else{
                                        new Float:fLastActivity
                                        fLastActivity = cs_get_user_lastactivity(id)
 
                                        if (fLastActivity != g_fLastActivity[id]){
                                                g_fLastActivity[id] = fLastActivity
                                                g_iAFKTime[id] = 0
                                                g_iWarn[id] = 0
                                        }
                                        else{
                                                g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK)
                                        }
                                }
 
                                // Bombentransfer
                                if (g_iDropBomb && g_iAFKTime[id] >= 3){
                                        if (g_iDropBomb == 1){
                                                if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4")
                                        }
                                        else{
                                                func_transfer_bomb(id)
                                        }
                                }
 
                                // Spec-Switch
                                if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){
                                        func_transfer_player(id)
                                }
                        }
                }
        }
}
 
public func_transfer_bomb(id){
 
        // Abbrechen wenn der Spieler keine Bombe hat
        if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return
 
        // Ermittle alle lebenden Terroristen
        new iPlayers[32], pNum
        get_players(iPlayers, pNum, "ae", "TERRORIST")
 
        // Abbrechen falls weniger als 2 Terroristen leben
        if (pNum < 2) return
 
        // Finde den n㢨sten Terroristen der nicht AFK ist
        new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999
        get_user_origin(id, vCarrier)
        for (new p = 0; p < pNum; p++){
                if (g_iAFKTime[iPlayers[p]] < 2){
                        get_user_origin(iPlayers[p], vRecipient)
                        iDistance = get_distance(vCarrier, vRecipient)
                        if (iDistance < iMinDistance){
                                iMinDistance = iDistance
                                iRecipient = iPlayers[p]
                        }
                }
        }
 
        // Abbrechen wenn alle Terroristen AFK sind
        if (!iRecipient) return
 
        // Bombe transferieren
        engclient_cmd(id, "drop", "weapon_c4")
        new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4")
        if (pev_valid(iC4)){
                new iBackpack = pev(iC4, pev_owner)
                if (iBackpack > g_iMaxPlayers){
                        set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND)
                        dllfunc(DLLFunc_Touch, iBackpack, iRecipient)
                }
        }
 
        // Nachrichten anzeigen
        new szRecipient[32], szMsg[128]
        get_user_name(iRecipient, szRecipient, 31)
        set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1)
        for (new p = 0; p < pNum; p++){
                if (iPlayers[p] != iRecipient){
                        format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient)
                        show_hudmessage(iPlayers[p], "%s", szMsg)
                }
        }
        format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB")
        show_hudmessage(iRecipient, szMsg)
}
 
public func_transfer_player(id){
 
        // Warnung anzeigen, wenn nicht schon max-mal verwarnt
        if (g_iWarn[id] < MAX_WARN){
                client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id]))
                g_iWarn[id]++
                return
        }
 
        // Eigentlich sollte die Bombe schon transferiert worden sein
        if (pev(id, pev_weapons) & (1 << CSW_C4)){
                engclient_cmd(id, "drop", "weapon_c4")
        }
 
        // Spieler tranferieren
        if (is_user_alive(id)) user_silentkill(id)
 
        // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod)
        // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT)
        set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX)
        engclient_cmd(id, "jointeam", "6")
        set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX)
        //cs_set_user_team(id, CS_TEAM_SPECTATOR)
        //cs_reset_user_model(id)
 
        // Positionen zurcksetzen
        g_vOrigin[id] = {0, 0, 0}
 
        // Counter zurcksetzen
        g_iAFKTime[id] = 0
        g_iWarn[id] = 0
 
        // Nachrichten anzeigen
        new szName[32]
        get_user_name(id, szName, 31)
        client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName)
}
 
public func_kick_player(id){
 
        // Abbrechen wenn es sich um einen Admin handelt
        if (get_user_flags(id) & KICK_IMMUNITY) return
 
        // Anzahl der  aktuellen Spieler ermitteln
        new iCurrentPlayers = get_playersnum(1)
 
        // Sind noch Pl㳺e frei?
        if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return
 
        // Warnung anzeigen, wenn nicht schon max-mal verwarnt
        if (g_iWarn[id] < MAX_WARN){
                client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id]))
                g_iWarn[id]++
                return
        }
 
        // Spieler kicken
        new szMsg[192]
        format(szMsg, 191, "%L", id, "AFK_KICK_REASON")
        server_cmd("kick #%d ^"%s^"", get_user_userid(id), szMsg)
 
        // Nachrichten anzeigen
        new szName[32]
        get_user_name(id, szName, 31)
        client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName)
}

Раскрывающийся текст
afk_transfer_time "9" (минимум 6)
- Перекидывает игрока в наблюдатели после 45 секунд (9*5=45. Т.е. через 45 игрока кикнет. Нужно 5 умножить на число, сумма которых будет нужным числом)

afk_kick_time "24" (минимум 6)
- Кикает игрока из наблюдателей после 120 секунд (24*5=120)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
mde...
сообщение 30.5.2013, 17:39
Сообщение #2
Стаж: 13 лет

Сообщений: 333
Благодарностей: 61
Полезность: 0

Код:
                if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6)
if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
exec1337
сообщение 4.6.2013, 14:00
Сообщение #3
Стаж: 13 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Вопрос решён.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: