Dėl slay / kick ribojimo.

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
User avatar
ArtHa123
Flooderis arba specialistas
Posts: 738
Joined: 2014 Feb 19 18:40

Dėl slay / kick ribojimo.

Post by ArtHa123 »

Sveiki,
pasidariau kodą, kad ribotu slay/kick. Ta prasme kad 1 panaudojimas per 60 sekundžių, puikiai veikia per amx_slay nick arba amx_kick nick, tačiau per amxmodmenu nereaguoja, kas gali būti? :|

Code: Select all

// vim: set ts=4 sw=4 tw=99 noet://// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").// Copyright (C) The AMX Mod X Development Team.//// This software is licensed under the GNU General Public License, version 3 or higher.// Additional exceptions apply. For full license details, see LICENSE.txt or visit://     https://alliedmods.net/amxmodx-license //// Admin Commands Plugin// #include <amxmodx>#include <amxmisc> // This is not a dynamic array because it would be bad for 24/7 map servers.#define OLD_CONNECTION_QUEUE 10 new g_pauseConnew Float:g_pausAblenew bool:g_Pausednew bool:g_PauseAllowed = false new pausable;new rcon_password;new timelimit;new p_amx_tempban_maxtime;new bool:g_slay[33]new bool:g_kick[33]// Old connection queuenew g_Names[OLD_CONNECTION_QUEUE][MAX_NAME_LENGTH];new g_SteamIDs[OLD_CONNECTION_QUEUE][32];new g_IPs[OLD_CONNECTION_QUEUE][32];new g_Access[OLD_CONNECTION_QUEUE];new g_Tracker;new g_Size; public Trie:g_tempBansnew Trie:g_tXvarsFlags; stock InsertInfo(id){        // Scan to see if this entry is the last entry in the list    // If it is, then update the name and access    // If it is not, then insert it again.     if (g_Size > 0)    {        new ip[32]        new auth[32];         get_user_authid(id, auth, charsmax(auth));        get_user_ip(id, ip, charsmax(ip), 1/*no port*/);         new last = 0;                if (g_Size < sizeof(g_SteamIDs))        {            last = g_Size - 1;        }        else        {            last = g_Tracker - 1;                        if (last < 0)            {                last = g_Size - 1;            }        }                if (equal(auth, g_SteamIDs[last]) &&            equal(ip, g_IPs[last])) // need to check ip too, or all the nosteams will while it doesn't work with their illegitimate server        {            get_user_name(id, g_Names[last], charsmax(g_Names[]));            g_Access[last] = get_user_flags(id);                        return;        }    }        // Need to insert the entry        new target = 0;  // the slot to save the info at     // Queue is not yet full    if (g_Size < sizeof(g_SteamIDs))    {        target = g_Size;                ++g_Size;            }    else    {        target = g_Tracker;                ++g_Tracker;        // If we reached the end of the array, then move to the front        if (g_Tracker == sizeof(g_SteamIDs))        {            g_Tracker = 0;        }    }        get_user_authid(id, g_SteamIDs[target], charsmax(g_SteamIDs[]));    get_user_name(id, g_Names[target], charsmax(g_Names[]));    get_user_ip(id, g_IPs[target], charsmax(g_IPs[]), 1/*no port*/);        g_Access[target] = get_user_flags(id); }stock GetInfo(i, name[], namesize, auth[], authsize, ip[], ipsize, &access){    if (i >= g_Size)    {        abort(AMX_ERR_NATIVE, "GetInfo: Out of bounds (%d:%d)", i, g_Size);    }        new target = (g_Tracker + i) % sizeof(g_SteamIDs);        copy(name, namesize, g_Names[target]);    copy(auth, authsize, g_SteamIDs[target]);    copy(ip,   ipsize,   g_IPs[target]);    access = g_Access[target];    }public client_disconnect(id){    if (!is_user_bot(id))    {        InsertInfo(id);    }} public plugin_init(){    register_plugin("Admin Commands", AMXX_VERSION_STR, "AMXX Dev Team")     register_dictionary("admincmd.txt")    register_dictionary("common.txt")    register_dictionary("adminhelp.txt")     register_concmd("amx_kick", "cmdKick", ADMIN_KICK, "<name or #userid> [reason]")    register_concmd("amx_ban", "cmdBan", ADMIN_BAN|ADMIN_BAN_TEMP, "<name or #userid> <minutes> [reason]")    register_concmd("amx_banip", "cmdBanIP", ADMIN_BAN|ADMIN_BAN_TEMP, "<name or #userid> <minutes> [reason]")    register_concmd("amx_addban", "cmdAddBan", ADMIN_BAN, "<^"authid^" or ip> <minutes> [reason]")    register_concmd("amx_unban", "cmdUnban", ADMIN_BAN|ADMIN_BAN_TEMP, "<^"authid^" or ip>")    register_concmd("amx_slay", "cmdSlay", ADMIN_SLAY, "<name or #userid>")    register_concmd("amx_slap", "cmdSlap", ADMIN_SLAY, "<name or #userid> [power]")    register_concmd("amx_leave", "cmdLeave", ADMIN_KICK, "<tag> [tag] [tag] [tag]")    register_concmd("amx_pause", "cmdPause", ADMIN_CVAR, "- pause or unpause the game")    register_concmd("amx_who", "cmdWho", ADMIN_ADMIN, "- displays who is on server")    register_concmd("amx_cvar", "cmdCvar", ADMIN_CVAR, "<cvar> [value]")    register_concmd("amx_xvar_float", "cmdXvar", ADMIN_CVAR, "<xvar> [value]")    register_concmd("amx_xvar_int", "cmdXvar", ADMIN_CVAR, "<xvar> [value]")    register_concmd("amx_plugins", "cmdPlugins", ADMIN_ADMIN)    register_concmd("amx_modules", "cmdModules", ADMIN_ADMIN)    register_concmd("amx_map", "cmdMap", ADMIN_MAP, "<mapname>")    register_concmd("amx_extendmap", "cmdExtendMap", ADMIN_MAP, "<number of minutes> - extend map")    register_concmd("amx_cfg", "cmdCfg", ADMIN_CFG, "<filename>")    register_concmd("amx_nick", "cmdNick", ADMIN_SLAY, "<name or #userid> <new nick>")    register_concmd("amx_last", "cmdLast", ADMIN_BAN, "- list the last few disconnected clients info");    register_clcmd("amx_rcon", "cmdRcon", ADMIN_RCON, "<command line>")    register_clcmd("amx_showrcon", "cmdShowRcon", ADMIN_RCON, "<command line>")    register_clcmd("pauseAck", "cmdLBack")     rcon_password=get_cvar_pointer("rcon_password");    pausable=get_cvar_pointer("pausable");    timelimit=get_cvar_pointer( "mp_timelimit" );    p_amx_tempban_maxtime = register_cvar("amx_tempban_maxtime", "4320", FCVAR_PROTECTED);     g_tempBans = TrieCreate();     new flags = get_pcvar_flags(rcon_password);     if (!(flags & FCVAR_PROTECTED))    {        set_pcvar_flags(rcon_password, flags | FCVAR_PROTECTED);    }} public cmdKick(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        if( g_kick[id] )    {        ChatColor( id, "^1 Gerbiamas^4 Administratoriau,^1 sia komanda galima naudoti tik kas 60 sekundziu." )        return PLUGIN_HANDLED    }        else if( !g_kick[id] )    {        new arg[32]        read_argv(1, arg, charsmax(arg))        new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF)                if (!player)            return PLUGIN_HANDLED                new authid[32], authid2[32], name2[MAX_NAME_LENGTH], name[MAX_NAME_LENGTH], userid2, reason[32]                get_user_authid(id, authid, charsmax(authid))        get_user_authid(player, authid2, charsmax(authid2))        get_user_name(player, name2, charsmax(name2))        get_user_name(id, name, charsmax(name))        userid2 = get_user_userid(player)        read_argv(2, reason, charsmax(reason))        remove_quotes(reason)                log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^" (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, reason)         show_activity_key("ADMIN_KICK_1", "ADMIN_KICK_2", name, name2);         if (is_user_bot(player))            server_cmd("kick #%d", userid2)        else        {            if (reason[0])                server_cmd("kick #%d ^"%s^"", userid2, reason)            else                server_cmd("kick #%d", userid2)        }                g_kick[id] = true        set_task(60.0, "Remove_kick", id)        console_print(id, "[AMXX] Client ^"%s^" kicked", name2)    }        return PLUGIN_HANDLED} public cmdUnban(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        new arg[32], authid[32], name[MAX_NAME_LENGTH]        read_argv(1, arg, charsmax(arg))     get_user_authid(id, authid, charsmax(authid))     if( ~get_user_flags(id) & ( ADMIN_BAN | ADMIN_RCON ) )    {        new storedAdminAuth[32]        if( !TrieGetString(g_tempBans, arg, storedAdminAuth, charsmax(storedAdminAuth)) || !equal(storedAdminAuth, authid) )        {            console_print(id, "%L", id, "NO_ACC_COM"); // may be someone wants to create a new sentence and to translate it in all languages ?            return PLUGIN_HANDLED;        }    }        if (contain(arg, ".") != -1)    {        server_cmd("removeip ^"%s^";writeip", arg)        console_print(id, "[AMXX] %L", id, "IP_REMOVED", arg)    } else {        server_cmd("removeid %s;writeid", arg)        console_print(id, "[AMXX] %L", id, "AUTHID_REMOVED", arg)    }     get_user_name(id, name, charsmax(name))     show_activity_key("ADMIN_UNBAN_1", "ADMIN_UNBAN_2", name, arg);     log_amx("Cmd: ^"%s<%d><%s><>^" unban ^"%s^"", name, get_user_userid(id), authid, arg)        return PLUGIN_HANDLED} /* amx_addban is a special command now. * If a user with rcon uses it, it bans the user.  No questions asked. * If a user without rcon but with ADMIN_BAN uses it, it will scan the old * connection queue, and if it finds the info for a player in it, it will * check their old access.  If they have immunity, it will not ban. * If they do not have immunity, it will ban.  If the user is not found, * it will refuse to ban the target. */ public cmdAddBan(id, level, cid){    if (!cmd_access(id, level, cid, 3, true)) // check for ADMIN_BAN access    {        if (get_user_flags(id) & level) // Getting here means they didn't input enough args        {            return PLUGIN_HANDLED;        }        if (!cmd_access(id, ADMIN_RCON, cid, 3)) // If somehow they have ADMIN_RCON without ADMIN_BAN, continue        {            return PLUGIN_HANDLED;        }    }     new arg[32], authid[32], name[MAX_NAME_LENGTH], minutes[32], reason[32]        read_argv(1, arg, charsmax(arg))    read_argv(2, minutes, charsmax(minutes))    read_argv(3, reason, charsmax(reason))        trim(arg);        if (!(get_user_flags(id) & ADMIN_RCON))    {        new bool:canban = false;        new bool:isip = false;        // Limited access to this command        if (equali(arg, "STEAM_ID_PENDING") ||            equali(arg, "STEAM_ID_LAN") ||            equali(arg, "HLTV") ||            equali(arg, "4294967295") ||            equali(arg, "VALVE_ID_LAN") ||            equali(arg, "VALVE_ID_PENDING"))        {            // Hopefully we never get here, so ML shouldn't be needed            console_print(id, "Cannot ban %s", arg);            return PLUGIN_HANDLED;        }                if (contain(arg, ".") != -1)        {            isip = true;        }                // Scan the disconnection queue        if (isip)        {            new IP[32];            new Name[MAX_NAME_LENGTH];            new dummy[1];            new Access;            for (new i = 0; i < g_Size; i++)            {                GetInfo(i, Name, charsmax(Name), dummy, 0, IP, charsmax(IP), Access);                                if (equal(IP, arg))                {                    if (Access & ADMIN_IMMUNITY)                    {                        console_print(id, "[AMXX] %s : %L", IP, id, "CLIENT_IMM", Name);                                                return PLUGIN_HANDLED;                    }                    // User did not have immunity                    canban = true;                }            }        }        else        {            new Auth[32];            new Name[MAX_NAME_LENGTH];            new dummy[1];            new Access;            for (new i = 0; i < g_Size; i++)            {                GetInfo(i, Name, charsmax(Name), Auth, charsmax(Auth), dummy, 0, Access);                                if (equal(Auth, arg))                {                    if (Access & ADMIN_IMMUNITY)                    {                        console_print(id, "[AMXX] %s : %L", Auth, id, "CLIENT_IMM", Name);                                                return PLUGIN_HANDLED;                    }                    // User did not have immunity                    canban = true;                }            }        }                if (!canban)        {            console_print(id, "[AMXX] You may only ban recently disconnected clients.  Use ^"amx_last^" to view.");                        return PLUGIN_HANDLED;        }            }        // User has access to ban their target    if (contain(arg, ".") != -1)    {        server_cmd("addip ^"%s^" ^"%s^";wait;writeip", minutes, arg)        console_print(id, "[AMXX] Ip ^"%s^" added to ban list", arg)    } else {        server_cmd("banid %s %s;wait;writeid", minutes, arg)        console_print(id, "[AMXX] Authid ^"%s^" added to ban list", arg)    }     get_user_name(id, name, charsmax(name))     show_activity_key("ADMIN_ADDBAN_1", "ADMIN_ADDBAN_2", name, arg);     get_user_authid(id, authid, charsmax(authid))    TrieSetString(g_tempBans, arg, authid)    log_amx("Cmd: ^"%s<%d><%s><>^" ban ^"%s^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, arg, minutes, reason)     return PLUGIN_HANDLED} public cmdBan(id, level, cid){    if (!cmd_access(id, level, cid, 3))        return PLUGIN_HANDLED     new target[32], minutes[8], reason[64]        read_argv(1, target, charsmax(target))    read_argv(2, minutes, charsmax(minutes))    read_argv(3, reason, charsmax(reason))        new player = cmd_target(id, target, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS | CMDTARGET_ALLOW_SELF)        if (!player)        return PLUGIN_HANDLED     new nNum = str_to_num(minutes)    if( nNum < 0 ) // since negative values result in permanent bans    {        nNum = 0;        minutes = "0";    }    if( ~get_user_flags(id) & ( ADMIN_BAN | ADMIN_RCON ) && (nNum <= 0 || nNum > get_pcvar_num(p_amx_tempban_maxtime)) )    {        console_print(id, "%L", id, "NO_ACC_COM"); // may be someone wants to create a new sentence and to translate it in all languages ?        return PLUGIN_HANDLED    }     new authid[32], name2[MAX_NAME_LENGTH], authid2[32], name[MAX_NAME_LENGTH]    new userid2 = get_user_userid(player)     get_user_authid(player, authid2, charsmax(authid2))    get_user_authid(id, authid, charsmax(authid))    get_user_name(player, name2, charsmax(name2))    get_user_name(id, name, charsmax(name))        log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, minutes, reason)     TrieSetString(g_tempBans, authid2, authid); // store all bans in case a permanent ban would override a temporary one.        new temp[64], banned[16]    if (nNum)        formatex(temp, charsmax(temp), "%L", player, "FOR_MIN", minutes)    else        formatex(temp, charsmax(temp), "%L", player, "PERM")     formatex(banned, charsmax(banned), "%L", player, "BANNED")     if (reason[0])        server_cmd("kick #%d ^"%s (%s %s)^";wait;banid %s %s;wait;writeid", userid2, reason, banned, temp, minutes, authid2)    else        server_cmd("kick #%d ^"%s %s^";wait;banid %s %s;wait;writeid", userid2, banned, temp, minutes, authid2)         // Display the message to all clients     new msg[256];    new len;    new players[MAX_PLAYERS], pnum, plr    get_players(players, pnum, "ch")    for (new i; i<pnum; i++)    {        plr = players[i]         len = formatex(msg, charsmax(msg), "%L", plr, "BAN");        len += formatex(msg[len], charsmax(msg) - len, " %s ", name2);        if (nNum)        {            len += formatex(msg[len], charsmax(msg) - len, "%L", plr, "FOR_MIN", minutes);        }        else        {            len += formatex(msg[len], charsmax(msg) - len, "%L", plr, "PERM");        }        if (strlen(reason) > 0)        {            formatex(msg[len], charsmax(msg) - len, " (%L: %s)", plr, "REASON", reason);        }        show_activity_id(plr, id, name, msg);    }        console_print(id, "[AMXX] %L", id, "CLIENT_BANNED", name2)        return PLUGIN_HANDLED} public cmdBanIP(id, level, cid){    if (!cmd_access(id, level, cid, 3))        return PLUGIN_HANDLED        new target[32], minutes[8], reason[64]        read_argv(1, target, charsmax(target))    read_argv(2, minutes, charsmax(minutes))    read_argv(3, reason, charsmax(reason))        new player = cmd_target(id, target, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS | CMDTARGET_ALLOW_SELF)        if (!player)        return PLUGIN_HANDLED     new nNum = str_to_num(minutes)    if( nNum < 0 ) // since negative values result in permanent bans    {        nNum = 0;        minutes = "0";    }    if( ~get_user_flags(id) & ( ADMIN_BAN | ADMIN_RCON ) && (nNum <= 0 || nNum > get_pcvar_num(p_amx_tempban_maxtime)) )    {        console_print(id, "%L", id, "NO_ACC_COM"); // may be someone wants to create a new sentence and to translate it in all languages ?        return PLUGIN_HANDLED    }        new authid[32], name2[MAX_NAME_LENGTH], authid2[32], name[MAX_NAME_LENGTH]    new userid2 = get_user_userid(player)        get_user_authid(player, authid2, charsmax(authid2))    get_user_authid(id, authid, charsmax(authid))    get_user_name(player, name2, charsmax(name2))    get_user_name(id, name, charsmax(name))        log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, minutes, reason)     TrieSetString(g_tempBans, authid2, authid);     new temp[64], banned[16]    if (nNum)        formatex(temp, charsmax(temp), "%L", player, "FOR_MIN", minutes)    else        formatex(temp, charsmax(temp), "%L", player, "PERM")    format(banned, 15, "%L", player, "BANNED")     new address[32]    get_user_ip(player, address, charsmax(address), 1)     if (reason[0])        server_cmd("kick #%d ^"%s (%s %s)^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, reason, banned, temp, minutes, address)    else        server_cmd("kick #%d ^"%s %s^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, banned, temp, minutes, address)     // Display the message to all clients     new msg[256];    new len;    new players[MAX_PLAYERS], pnum, plr    get_players(players, pnum, "ch")    for (new i; i<pnum; i++)    {        plr = players[i]         len = formatex(msg, charsmax(msg), "%L", plr, "BAN");        len += formatex(msg[len], charsmax(msg) - len, " %s ", name2);        if (nNum)        {            formatex(msg[len], charsmax(msg) - len, "%L", plr, "FOR_MIN", minutes);        }        else        {            formatex(msg[len], charsmax(msg) - len, "%L", plr, "PERM");        }        if (strlen(reason) > 0)        {            formatex(msg[len], charsmax(msg) - len, " (%L: %s)", plr, "REASON", reason);        }        show_activity_id(plr, id, name, msg);    }     console_print(id, "[AMXX] %L", id, "CLIENT_BANNED", name2)        return PLUGIN_HANDLED} public cmdSlay(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED    if( g_slay[id] )    {        ChatColor( id, "^1 Gerbiamas^4 Administratoriau,^1 sia komanda galima naudoti tik kas 60 sekundziu." )        return PLUGIN_HANDLED    }        else if( !g_slay[id] )    {        new arg[32]                read_argv(1, arg, charsmax(arg))                new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_ONLY_ALIVE)                if (!player)            return PLUGIN_HANDLED                user_kill(player)                new authid[32], name2[MAX_NAME_LENGTH], authid2[32], name[MAX_NAME_LENGTH]                get_user_authid(id, authid, charsmax(authid))        get_user_name(id, name, charsmax(name))        get_user_authid(player, authid2, charsmax(authid2))        get_user_name(player, name2, charsmax(name2))                log_amx("Cmd: ^"%s<%d><%s><>^" slay ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2)         show_activity_key("ADMIN_SLAY_1", "ADMIN_SLAY_2", name, name2);         console_print(id, "[AMXX] %L", id, "CLIENT_SLAYED", name2)        g_slay[id] = true        set_task(60.0, "Remove_slap", id)    }        return PLUGIN_HANDLED} public Remove_slap(id){    if( g_slay[id] )    {        g_slay[id] = false    }} public Remove_kick(id){    if( g_kick[id] )    {        g_kick[id] = false    }} public cmdSlap(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED     new arg[32]        read_argv(1, arg, charsmax(arg))    new player = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF | CMDTARGET_ONLY_ALIVE)        if (!player)        return PLUGIN_HANDLED     new spower[32], authid[32], name2[MAX_NAME_LENGTH], authid2[32], name[MAX_NAME_LENGTH]        read_argv(2, spower, charsmax(spower))        new damage = clamp( str_to_num(spower), 0)        user_slap(player, damage)        get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))    get_user_authid(player, authid2, charsmax(authid2))    get_user_name(player, name2, charsmax(name2))        log_amx("Cmd: ^"%s<%d><%s><>^" slap with %d damage ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, damage, name2, get_user_userid(player), authid2)     show_activity_key("ADMIN_SLAP_1", "ADMIN_SLAP_2", name, name2, damage);     console_print(id, "[AMXX] %L", id, "CLIENT_SLAPED", name2, damage)        return PLUGIN_HANDLED} public chMap(map[]){    engine_changelevel(map);} public cmdMap(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED     new arg[32]    new arglen = read_argv(1, arg, charsmax(arg))        if (!is_map_valid(arg))    {        console_print(id, "[AMXX] %L", id, "MAP_NOT_FOUND")        return PLUGIN_HANDLED    }     new authid[32], name[MAX_NAME_LENGTH]        get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))        show_activity_key("ADMIN_MAP_1", "ADMIN_MAP_2", name, arg);        log_amx("Cmd: ^"%s<%d><%s><>^" changelevel ^"%s^"", name, get_user_userid(id), authid, arg)        new _modName[10]    get_modname(_modName, charsmax(_modName))        if (!equal(_modName, "zp"))    {        message_begin(MSG_ALL, SVC_INTERMISSION)        message_end()    }        set_task(2.0, "chMap", 0, arg, arglen + 1)        return PLUGIN_HANDLED} public cmdExtendMap(id, level, cid){    if(!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        new arg[32]    read_argv(1, arg, charsmax(arg))    new mns = str_to_num(arg)        if(mns <= 0)        return PLUGIN_HANDLED        new mapname[32]    get_mapname(mapname, charsmax(mapname))    set_pcvar_num( timelimit , get_pcvar_num( timelimit ) + mns)        new authid[32], name[MAX_NAME_LENGTH]        get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))        show_activity_key("ADMIN_EXTEND_1", "ADMIN_EXTEND_2", name, mns)        log_amx("ExtendMap: ^"%s<%d><%s><>^" extended map ^"%s^" for %d minutes.", name, get_user_userid(id), authid, mapname, mns)    console_print(id, "%L", id, "MAP_EXTENDED", mapname, mns)        return PLUGIN_HANDLED} stock bool:onlyRcon(const name[]){    new ptr=get_cvar_pointer(name);    if (ptr && get_pcvar_flags(ptr) & FCVAR_PROTECTED)    {        return true;    }    return false;} public cmdCvar(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        new arg[32], arg2[64]        read_argv(1, arg, charsmax(arg))    read_argv(2, arg2, charsmax(arg2))        new pointer;        if (equal(arg, "add") && (get_user_flags(id) & ADMIN_RCON))    {        if ((pointer=get_cvar_pointer(arg2))!=0)        {            new flags=get_pcvar_flags(pointer);                        if (!(flags & FCVAR_PROTECTED))            {                set_pcvar_flags(pointer,flags | FCVAR_PROTECTED);            }        }        return PLUGIN_HANDLED    }        trim(arg);        if ((pointer=get_cvar_pointer(arg))==0)    {        console_print(id, "[AMXX] %L", id, "UNKNOWN_CVAR", arg)        return PLUGIN_HANDLED    }        if (onlyRcon(arg) && !(get_user_flags(id) & ADMIN_RCON))    {        // Exception for the new onlyRcon rules:        //   sv_password is allowed to be modified by ADMIN_PASSWORD        if (!(equali(arg,"sv_password") && (get_user_flags(id) & ADMIN_PASSWORD)))        {            console_print(id, "[AMXX] %L", id, "CVAR_NO_ACC")            return PLUGIN_HANDLED        }    }        if (read_argc() < 3)    {        get_pcvar_string(pointer, arg2, charsmax(arg2))        console_print(id, "[AMXX] %L", id, "CVAR_IS", arg, arg2)        return PLUGIN_HANDLED    }     new authid[32], name[MAX_NAME_LENGTH]        get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))        log_amx("Cmd: ^"%s<%d><%s><>^" set cvar (name ^"%s^") (value ^"%s^")", name, get_user_userid(id), authid, arg, arg2)    set_pcvar_string(pointer, arg2)            // Display the message to all clients     new cvar_val[64];    new players[MAX_PLAYERS], pnum, plr    get_players(players, pnum, "ch")    for (new i; i<pnum; i++)    {        plr = players[i]        if (get_pcvar_flags(pointer) & FCVAR_PROTECTED || equali(arg, "rcon_password"))        {            formatex(cvar_val, charsmax(cvar_val), "*** %L ***", plr, "PROTECTED");        }        else        {            copy(cvar_val, charsmax(cvar_val), arg2);        }        show_activity_id(plr, id, name, "%L", plr, "SET_CVAR_TO", "", arg, cvar_val);    }     console_print(id, "[AMXX] %L", id, "CVAR_CHANGED", arg, arg2)        return PLUGIN_HANDLED} public cmdXvar(id, level, cid){    if( !cmd_access(id, level, cid, 2) )    {        return PLUGIN_HANDLED;    }     new cmd[15], arg1[32], arg2[32];        read_argv(0, cmd, charsmax(cmd));    read_argv(1, arg1, charsmax(arg1));    trim(arg1);    if( read_argc() > 2 )    {        read_argv(2, arg2, charsmax(arg2));        trim(arg2);         if( equali(arg1, "add") )        {            if( get_user_flags(id) & ADMIN_RCON && xvar_exists(arg2) )            {                if( !g_tXvarsFlags )                {                    g_tXvarsFlags = TrieCreate();                }                TrieSetCell(g_tXvarsFlags, arg2, 1);            }            return PLUGIN_HANDLED;        }    }     new bFloat = equali(cmd, "amx_xvar_float");     new xvar = get_xvar_id( arg1 );     if( xvar == -1 )    {        console_print(id, "[AMXX] %L", id, "UNKNOWN_XVAR", arg1)        return PLUGIN_HANDLED    }     new any:value;     if( !arg2[0] ) // get value    {        value = get_xvar_num(xvar);        if( bFloat )        {            float_to_str(value, arg2, charsmax(arg2));        }        else        {            num_to_str(value, arg2, charsmax(arg2));        }        console_print(id, "[AMXX] %L", id, "XVAR_IS", arg1, arg2);        return PLUGIN_HANDLED;    }     // set value    if( g_tXvarsFlags && TrieKeyExists(g_tXvarsFlags, arg1) && ~get_user_flags(id) & ADMIN_RCON )    {        console_print(id, "[AMXX] %L", id, "XVAR_NO_ACC");        return PLUGIN_HANDLED;    }     new endPos;    if( bFloat )    {        value = strtof(arg2, endPos);        if( !endPos )        {            return PLUGIN_HANDLED;        }    }    else    {        value = strtol(arg2, endPos);        if( !endPos )        {            return PLUGIN_HANDLED;        }    }     set_xvar_num(xvar, value);     // convert back value to string so admin can know value has been set correctly    if( bFloat )    {        float_to_str(value, arg2, charsmax(arg2));    }    else    {        num_to_str(value, arg2, charsmax(arg2));    }     new authid[32], name[MAX_NAME_LENGTH];        get_user_authid(id, authid, charsmax(authid));    get_user_name(id, name, charsmax(name));        log_amx("Cmd: ^"%s<%d><%s><>^" set xvar (name ^"%s^") (value ^"%s^")", name, get_user_userid(id), authid, arg1, arg2);        // Display the message to all clients    new players[MAX_PLAYERS], pnum, plr;    get_players(players, pnum, "ch");    for (new i; i<pnum; i++)    {        plr = players[i];        show_activity_id(plr, id, name, "%L", plr, "SET_XVAR_TO", "", arg1, arg2);    }        console_print(id, "[AMXX] %L", id, "XVAR_CHANGED", arg1, arg2);     return PLUGIN_HANDLED;} public cmdPlugins(id, level, cid){    if (!cmd_access(id, level, cid, 1))        return PLUGIN_HANDLED            if (id==0) // If server executes redirect this to "amxx plugins" for more in depth output    {        server_cmd("amxx plugins");        server_exec();        return PLUGIN_HANDLED;    }     new name[MAX_NAME_LENGTH], version[32], author[32], filename[32], status[32]    new lName[32], lVersion[32], lAuthor[32], lFile[32], lStatus[32]     format(lName, charsmax(lName), "%L", id, "NAME")    format(lVersion, charsmax(lVersion), "%L", id, "VERSION")    format(lAuthor, charsmax(lAuthor), "%L", id, "AUTHOR")    format(lFile, charsmax(lFile), "%L", id, "FILE")    format(lStatus, charsmax(lStatus), "%L", id, "STATUS")     new StartPLID=0;    new EndPLID;     new Temp[96]     new num = get_pluginsnum()        if (read_argc() > 1)    {        read_argv(1,Temp,charsmax(Temp));        StartPLID=str_to_num(Temp)-1; // zero-based    }     EndPLID=min(StartPLID + 10, num);        new running = 0        console_print(id, "----- %L -----", id, "LOADED_PLUGINS")    console_print(id, "%-18.17s %-11.10s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus)     new i=StartPLID;    while (i <EndPLID)    {        get_plugin(i++, filename, charsmax(filename), name, charsmax(name), version, charsmax(version), author, charsmax(author), status, charsmax(status))        console_print(id, "%-18.17s %-11.10s %-17.16s %-16.15s %-9.8s", name, version, author, filename, status)                if (status[0]=='d' || status[0]=='r') // "debug" or "running"            running++    }    console_print(id, "%L", id, "PLUGINS_RUN", EndPLID-StartPLID, running)    console_print(id, "----- %L -----",id,"HELP_ENTRIES",StartPLID + 1,EndPLID,num);        if (EndPLID < num)    {        formatex(Temp,charsmax(Temp),"----- %L -----",id,"HELP_USE_MORE", EndPLID + 1);        replace_all(Temp,charsmax(Temp),"amx_help","amx_plugins");        console_print(id,"%s",Temp);    }    else    {        formatex(Temp,charsmax(Temp),"----- %L -----",id,"HELP_USE_BEGIN");        replace_all(Temp,charsmax(Temp),"amx_help","amx_plugins");        console_print(id,"%s",Temp);    }     return PLUGIN_HANDLED} public cmdModules(id, level, cid){    if (!cmd_access(id, level, cid, 1))        return PLUGIN_HANDLED     new name[32], version[32], author[32], status, sStatus[16]    new lName[32], lVersion[32], lAuthor[32], lStatus[32];     format(lName, charsmax(lName), "%L", id, "NAME")    format(lVersion, charsmax(lVersion), "%L", id, "VERSION")    format(lAuthor, charsmax(lAuthor), "%L", id, "AUTHOR")    format(lStatus, charsmax(lStatus), "%L", id, "STATUS")     new num = get_modulesnum()        console_print(id, "%L:", id, "LOADED_MODULES")    console_print(id, "%-23.22s %-11.10s %-20.19s %-11.10s", lName, lVersion, lAuthor, lStatus)        for (new i = 0; i < num; i++)    {        get_module(i, name, charsmax(name), author, charsmax(author), version, charsmax(version), status)                switch (status)        {            case module_loaded: copy(sStatus, charsmax(sStatus), "running")            default:             {                copy(sStatus, charsmax(sStatus), "bad load");                copy(name, charsmax(name), "unknown");                copy(author, charsmax(author), "unknown");                copy(version, charsmax(version), "unknown");            }        }                console_print(id, "%-23.22s %-11.10s %-20.19s %-11.10s", name, version, author, sStatus)    }    console_print(id, "%L", id, "NUM_MODULES", num)     return PLUGIN_HANDLED} public cmdCfg(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        new arg[128]    read_argv(1, arg, charsmax(arg))        if (!file_exists(arg))    {        console_print(id, "[AMXX] %L", id, "FILE_NOT_FOUND", arg)        return PLUGIN_HANDLED    }        new authid[32], name[MAX_NAME_LENGTH]        get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))        log_amx("Cmd: ^"%s<%d><%s><>^" execute cfg (file ^"%s^")", name, get_user_userid(id), authid, arg)        console_print(id, "[AMXX] Executing file ^"%s^"", arg)    server_cmd("exec %s", arg)     show_activity_key("ADMIN_CONF_1", "ADMIN_CONF_2", name, arg);     return PLUGIN_HANDLED} public cmdLBack(){    if (!g_PauseAllowed)        return PLUGIN_CONTINUE       new paused[25]        format(paused, 24, "%L", g_pauseCon, g_Paused ? "UNPAUSED" : "PAUSED")    set_pcvar_float(pausable, g_pausAble)    console_print(g_pauseCon, "[AMXX] Server %s", paused)    g_PauseAllowed = false        if (g_Paused)        g_Paused = false    else         g_Paused = true        return PLUGIN_HANDLED} public cmdPause(id, level, cid){    if (!cmd_access(id, level, cid, 1))        return PLUGIN_HANDLED         new authid[32], name[MAX_NAME_LENGTH], slayer = id        get_user_authid(id, authid, charsmax(authid))     get_user_name(id, name, charsmax(name))     if (pausable!=0)    {        g_pausAble = get_pcvar_float(pausable)    }        if (!slayer)        slayer = find_player("h")         if (!slayer)    {         console_print(id, "[AMXX] %L", id, "UNABLE_PAUSE")         return PLUGIN_HANDLED    }     set_pcvar_float(pausable, 1.0)    g_PauseAllowed = true    client_cmd(slayer, "pause;pauseAck")        log_amx("Cmd: ^"%s<%d><%s><>^" %s server", name, get_user_userid(id), authid, g_Paused ? "unpause" : "pause")        console_print(id, "[AMXX] %L", id, g_Paused ? "UNPAUSING" : "PAUSING")     // Display the message to all clients     new players[MAX_PLAYERS], pnum    get_players(players, pnum, "ch")    for (new i; i<pnum; i++)    {        show_activity_id(players[i], id, name, "%L server", i, g_Paused ? "UNPAUSE" : "PAUSE");    }     g_pauseCon = id        return PLUGIN_HANDLED}  public cmdShowRcon(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED            new password[64]        get_pcvar_string(rcon_password, password, charsmax(password))        if (!password[0])    {        cmdRcon(id, level, cid)    }     else     {        new args[128]                read_args(args, charsmax(args))        client_cmd(id, "rcon_password %s", password)        client_cmd(id, "rcon %s", args)    }        return PLUGIN_HANDLED} public cmdRcon(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        new arg[128], authid[32], name[MAX_NAME_LENGTH]        read_args(arg, charsmax(arg))    get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))        log_amx("Cmd: ^"%s<%d><%s><>^" server console (cmdline ^"%s^")", name, get_user_userid(id), authid, arg)        console_print(id, "[AMXX] %L", id, "COM_SENT_SERVER", arg)    server_cmd("%s", arg)        return PLUGIN_HANDLED} public cmdWho(id, level, cid){    if (!cmd_access(id, level, cid, 1))        return PLUGIN_HANDLED     new players[MAX_PLAYERS], inum, cl_on_server[64], authid[32], name[MAX_NAME_LENGTH], flags, sflags[32], plr    new lImm[16], lRes[16], lAccess[16], lYes[16], lNo[16]        formatex(lImm, charsmax(lImm), "%L", id, "IMMU")    formatex(lRes, charsmax(lRes), "%L", id, "RESERV")    formatex(lAccess, charsmax(lAccess), "%L", id, "ACCESS")    formatex(lYes, charsmax(lYes), "%L", id, "YES")    formatex(lNo, charsmax(lNo), "%L", id, "NO")        get_players(players, inum)    format(cl_on_server, charsmax(cl_on_server), "%L", id, "CLIENTS_ON_SERVER")    console_print(id, "^n%s:^n #  %-16.15s %-20s %-8s %-4.3s %-4.3s %s", cl_on_server, "nick", "authid", "userid", lImm, lRes, lAccess)        for (new a = 0; a < inum; ++a)    {        plr = players[a]        get_user_authid(plr, authid, charsmax(authid))        get_user_name(plr, name, charsmax(name))        flags = get_user_flags(plr)        get_flags(flags, sflags, charsmax(sflags))        console_print(id, "%2d  %-16.15s %-20s %-8d %-6.5s %-6.5s %s", plr, name, authid,         get_user_userid(plr), (flags&ADMIN_IMMUNITY) ? lYes : lNo, (flags&ADMIN_RESERVATION) ? lYes : lNo, sflags)    }        console_print(id, "%L", id, "TOTAL_NUM", inum)    get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))    log_amx("Cmd: ^"%s<%d><%s><>^" ask for players list", name, get_user_userid(id), authid)         return PLUGIN_HANDLED} hasTag(name[], tags[4][32], tagsNum){    for (new a = 0; a < tagsNum; ++a)        if (contain(name, tags[a]) != -1)            return a    return -1} public cmdLeave(id, level, cid){    if (!cmd_access(id, level, cid, 2))        return PLUGIN_HANDLED        new argnum = read_argc()    new ltags[4][32]    new ltagsnum = 0        for (new a = 1; a < 5; ++a)    {        if (a < argnum)            read_argv(a, ltags[ltagsnum++], charsmax(ltags[]))        else            ltags[ltagsnum++][0] = 0    }        new nick[MAX_NAME_LENGTH], ires, pnum = MaxClients, count = 0, lReason[128]        for (new b = 1; b <= pnum; ++b)    {        if (!is_user_connected(b) && !is_user_connecting(b)) continue         get_user_name(b, nick, charsmax(nick))        ires = hasTag(nick, ltags, ltagsnum)                if (ires != -1)        {            console_print(id, "[AMXX] %L", id, "SKIP_MATCH", nick, ltags[ires])            continue        }                if (get_user_flags(b) & ADMIN_IMMUNITY)        {            console_print(id, "[AMXX] %L", id, "SKIP_IMM", nick)            continue        }                console_print(id, "[AMXX] %L", id, "KICK_PL", nick)                if (is_user_bot(b))            server_cmd("kick #%d", get_user_userid(b))        else        {            formatex(lReason, charsmax(lReason), "%L", b, "YOU_DROPPED")            server_cmd("kick #%d ^"%s^"", get_user_userid(b), lReason)        }        count++    }        console_print(id, "[AMXX] %L", id, "KICKED_CLIENTS", count)        new authid[32], name[MAX_NAME_LENGTH]     get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))    log_amx("Kick: ^"%s<%d><%s><>^" leave some group (tag1 ^"%s^") (tag2 ^"%s^") (tag3 ^"%s^") (tag4 ^"%s^")", name, get_user_userid(id), authid, ltags[0], ltags[1], ltags[2], ltags[3])     show_activity_key("ADMIN_LEAVE_1", "ADMIN_LEAVE_2", name, ltags[0], ltags[1], ltags[2], ltags[3]);     return PLUGIN_HANDLED} public cmdNick(id, level, cid){    if (!cmd_access(id, level, cid, 3))        return PLUGIN_HANDLED     new arg1[32], arg2[32], authid[32], name[32], authid2[32], name2[32]     read_argv(1, arg1, charsmax(arg1))    read_argv(2, arg2, charsmax(arg2))     new player = cmd_target(id, arg1, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF)        if (!player)        return PLUGIN_HANDLED     get_user_authid(id, authid, charsmax(authid))    get_user_name(id, name, charsmax(name))    get_user_authid(player, authid2, charsmax(authid2))    get_user_name(player, name2, charsmax(name2))     set_user_info(player, "name", arg2)     log_amx("Cmd: ^"%s<%d><%s><>^" change nick to ^"%s^" ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, arg2, name2, get_user_userid(player), authid2)     show_activity_key("ADMIN_NICK_1", "ADMIN_NICK_2", name, name2, arg2);     console_print(id, "[AMXX] %L", id, "CHANGED_NICK", name2, arg2)     return PLUGIN_HANDLED} public cmdLast(id, level, cid){    if (!cmd_access(id, level, cid, 1))    {        return PLUGIN_HANDLED;    }        new name[MAX_NAME_LENGTH];    new authid[32];    new ip[32];    new flags[32];    new access;            // This alignment is a bit weird (it should grow if the name is larger)    // but otherwise for the more common shorter name, it'll wrap in server console    // Steam client display is all skewed anyway because of the non fixed font.    console_print(id, "%19s %20s %15s %s", "name", "authid", "ip", "access");        for (new i = 0; i < g_Size; i++)    {        GetInfo(i, name, charsmax(name), authid, charsmax(authid), ip, charsmax(ip), access);                get_flags(access, flags, charsmax(flags));                console_print(id, "%19s %20s %15s %s", name, authid, ip, flags);    }        console_print(id, "%d old connections saved.", g_Size);        return PLUGIN_HANDLED;}  stock ChatColor(const id, const input[], any:...){    new count = 1, players[32]    static msg[192]    vformat(msg, 191, input, 3)       replace_all(msg, 191, "!g", "^4") // Green Color    replace_all(msg, 191, "!y", "^1") // Default Color    replace_all(msg, 191, "!t", "^3") // Team Color       if (id) players[0] = id; else get_players(players, count, "ch")    {        for (new i = 0; i < count; i++)        {            if (is_user_connected(players[i]))            {                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])                write_byte(players[i]);                write_string(msg);                message_end();            }        }    }} 
Image

Post Reply

Who is online

Users browsing this forum: No registered users and 10 guests