Reklam gösterimini engelleyici yazılım kullandığınızı görüyoruz.
Sitemizin ayakta kalıp sizlere hizmet edebilmek için en büyük gelir kaynağı sayfamızda gösterilen reklamlardır.
Reklam gösterimde bizim sayfamıza ayrıcalık tanıyarak ayakta kalmamıza destek olmak ister misiniz ?

Silinmiş Konu   | Banlayanı göster (Reason)

4
511

Konu

#1
Son Düzenleme: 22-09-2018, Saat: 15:06, Düzenleyen: Boyxx.
Aşağıda ki orjinal admincmd eklentisidir.

Eklentide isteğim şu;

Banlanan kişi, kimin ve kaç dakika banladığını reason'da görebilsin.
Tabi bunla beraber say'da renkli yazı da geçsin serverda ki oyuncular da görsün komutu
X isimli Admin x isimli oyuncuyu xxx dakika banladı.

register_dictionary("admincmd.txt")
register_dictionary("common.txt")


yerleri felan kaldırılabilir ise iyi olur. Txt yerine sma içinden düzenleme olsun.

Resimde ki gibi olacak

İnşallah yapabilen olur. Şimdiden teşekkürler

[Resim: DPjDk6.png]

Kod:
// 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_pauseCon
new Float:g_pausAble
new bool:g_Paused
new bool:g_PauseAllowed = false

new pausable;
new rcon_password;
new timelimit;
new p_amx_tempban_maxtime;

// Old connection queue
new 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_tempBans
new 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

    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)
    }
    
    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
    
    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)
    
    return PLUGIN_HANDLED
}

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;
}


Şu tanımlamalarda eklentiye renkli eklenirse iyi olur
Konuyu güncelleyemedim 5dakika süre kısıtlaması geçtiği için, özür dilerim.

X isimli Admin X isimli oyuncuyu oyundan attı
X isimli Admin X isimli oyuncuyu X dakika banladı.
X isimli Admin X isimli oyuncuyu slayladı.
X isimli Admin X isimli oyuncuyu X damage tokatladı.
X isimli Admin X haritasını açtı.


#2
Son Düzenleme: 22-09-2018, Saat: 19:24, Düzenleyen: ITenGriTR.
....
PHP Kod:
// 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_pauseCon
new Float:g_pausAble
new bool:g_Paused
new bool:g_PauseAllowed = false

new pausable;
new 
rcon_password;
new 
timelimit;
new 
p_amx_tempban_maxtime;

// Old connection queue
new 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_tempBans
new 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])){
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

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)
}

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;
}

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;
}

}

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],yenireason[26]
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")
formatex(yenireason,charsmax(yenireason),"%s banladi: %s (%i dakika ban)",name,reason,nNum)

if (
reason[0])
server_cmd("kick #%d ^"%s (%s %s)^";wait;banid %s %s;wait;writeid", userid2, yenireason, 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],yenireason[26]
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")
formatex(yenireason,charsmax(yenireason),"%s banladi: %s (%i dakika ban)",name,reason,nNum)

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, yenireason, 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

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)

return 
PLUGIN_HANDLED
}

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;
} 




#3
Eklentiyi inceledim, test etmedim fakat isteklerim de belirttiğim şeyleri tam olarak göremedim..

Yanlışım var mı yoksa? (varsa affola)

1) Txt uzantılar iptal edilmemiş, yani lang dosyaları kaldırılıp, mevcut yazılar sma dosyası içine gömülecekti.

2) chatcolor eklenmemiş.

3) Diğer istenilen işlevleri

@ MawiLarq @` bRae


#4
Dil dosyaları için örnek gösterilir gerisini siz yaparsınız uzun bir iş olduğu için yarın isteğe bakılır bakılmaz ise bakarım.


#5
Son Düzenleme: 23-09-2018, Saat: 09:16, Düzenleyen: ITenGriTR.
@ Boyxx eklentiden ne kadar anlarsın bilmmem veya ne kadar inceledin onuda bilmem , beni azcık tanıyan bir insan bilir özelliğim boş işlerle uğraşmayı sevmem burda bana tek boş gelmeyen yer reason bölümüydü orayıda halletim , gerisinde uğraşmam gereksiz olduğu için.

Açılan konularınız (Sadece Eklenti İstek Bölümünde) maximum olabilicek konu sayısı bir dir.

Forum kurallarına aykırı olduğun için konunuz silinmiştir .


Bir Hata Söz Konusu Olursa Bizlere Ulaşarak Düzeltebilirsiniz.






Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da

Task