Admin cmd (преработка)

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
AfterLife
Извън линия
Потребител
Потребител
Мнения: 112
Регистриран на: 07 Юли 2021, 23:38
Се отблагодари: 42 пъти
Получена благодарност: 8 пъти
Обратна връзка:

Admin cmd (преработка)

Мнение от AfterLife » 13 Яну 2022, 19:48

Добър вечер, имам следната молба. Бих искал, kick с custom reason съобщение в чата, като да пише Admin Bkkk kick kuncho reason: changenick (примерно). Като Admin - жълто, ника на Админа зелен, както ника на играча също зелен и причината (след reason:). Същото бих искал, и когато се слейва даден играч: Admin Bkkkk slayed kuncho - цветовете по същия начин. И последно за слап. Admin Bkkkk slapped kuncho with X damage. Admin - жълто, за ника на Админа и играча зелен, и само Х (damage тоест), пак зелено, останалото просто по default- жълто. Целта ми като цяло е просто да се украсят малко съобщенията. Доколкото разбрах също, мисля, че трябва да се едитнат admincmd, plmenu (май) и menufront. Ако някой все пак реши да помогне, само да подчертае кои плъгини трябваше да се едитнат, пък аз ще ги предоставя по-късно понеже съм телефона в момента.
Благодаря предварително!

Аватар
monk
Извън линия
Потребител
Потребител
Мнения: 156
Регистриран на: 22 Окт 2016, 18:08
Местоположение: /gym
Се отблагодари: 2 пъти
Получена благодарност: 9 пъти

Admin cmd (преработка)

Мнение от monk » 14 Яну 2022, 20:19

Изнамерих го в старите ми файлове, тествах го и работи "уж'" (тествай си го и ти). Мога да ти предложа друг, но е с затворен код. (автора му е доверен). За другите, утре ще ти ги изпратя.

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

#include <amxmodx>
#include <amxmisc>

/** skip autoloading since it's optional */
#define AMXMODX_NOAUTOLOAD
#include <cstrike>

new g_menuPosition[33]
new g_menuPlayers[33][32]
new g_menuPlayersNum[33]
new g_menuOption[33]
new g_menuSettings[33]

new g_Reason[33][33];

new g_menuSelect[33][64]
new g_menuSelectNum[33]

#define MAX_CLCMDS 24

new g_clcmdName[MAX_CLCMDS][32]
new g_clcmdCmd[MAX_CLCMDS][64]
new g_clcmdMisc[MAX_CLCMDS][2]
new g_clcmdNum

new g_coloredMenus
new g_cstrike = 0

new Array:g_bantimes;
new Array:g_slapsettings;

new g_CSTeamNames[3][] = {
    "TERRORIST",
    "CT",
    "SPECTATOR"
}
new g_CSTeamNumbers[3][] = {
    "1",
    "2",
    "6"
}
new g_CSTeamiNumbers[3] = {
    1,
    2,
    6
}


public plugin_natives()
{
    set_module_filter("module_filter")
    set_native_filter("native_filter")
}

public plugin_init()
{
    register_plugin("Players Menu", AMXX_VERSION_STR, "AMXX Dev Team")
    register_dictionary("common.txt")
    register_dictionary("admincmd.txt")
    register_dictionary("plmenu.txt")

    register_clcmd("amx_kickmenu", "cmdKickMenu", ADMIN_KICK, "- displays kick menu")
    register_clcmd("amx_banmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu")
    register_clcmd("amx_slapmenu", "cmdSlapMenu", ADMIN_SLAY, "- displays slap/slay menu")
    register_clcmd("amx_teammenu", "cmdTeamMenu", ADMIN_LEVEL_A, "- displays team menu")
    register_clcmd("amx_clcmdmenu", "cmdClcmdMenu", ADMIN_LEVEL_A, "- displays client cmds menu")
    
    register_clcmd("RAZON", "messageRazon")

    register_menucmd(register_menuid("Ban Menu"), 1023, "actionBanMenu")
    register_menucmd(register_menuid("Kick Menu"), 1023, "actionKickMenu")
    register_menucmd(register_menuid("Slap/Slay Menu"), 1023, "actionSlapMenu")
    register_menucmd(register_menuid("Team Menu"), 1023, "actionTeamMenu")
    register_menucmd(register_menuid("Client Cmds Menu"), 1023, "actionClcmdMenu")
    
    
    g_bantimes = ArrayCreate();
    // Load up the old default values
    ArrayPushCell(g_bantimes, 0);
    ArrayPushCell(g_bantimes, 5);
    ArrayPushCell(g_bantimes, 10);
    ArrayPushCell(g_bantimes, 15);
    ArrayPushCell(g_bantimes, 30);
    ArrayPushCell(g_bantimes, 45);
    ArrayPushCell(g_bantimes, 60);
    
    
    g_slapsettings = ArrayCreate();
    // Old default values
    ArrayPushCell(g_slapsettings, 0); // First option is ignored - it is slay
    ArrayPushCell(g_slapsettings, 0); // slap 0 damage
    ArrayPushCell(g_slapsettings, 1);
    ArrayPushCell(g_slapsettings, 5);
    
    
    register_srvcmd("amx_plmenu_bantimes", "plmenu_setbantimes");
    register_srvcmd("amx_plmenu_slapdmg", "plmenu_setslapdmg");

    g_coloredMenus = colored_menus()

    new clcmds_ini_file[64]
    get_configsdir(clcmds_ini_file, 63)
    format(clcmds_ini_file, 63, "%s/clcmds.ini", clcmds_ini_file)
    load_settings(clcmds_ini_file)

    if (module_exists("cstrike"))
        g_cstrike = 1
}

public messageRazon(id)
{
    read_args(g_Reason[id], charsmax(g_Reason[]));
    remove_quotes(g_Reason[id]);
    trim(g_Reason[id]);
    
    if (equal(g_Reason[id], ""))
    {
        client_print(id, print_center, "INVALID REASON");
        g_Reason[id] = "None";
        
        displayKickMenu(id, g_menuPosition[id] = 0);
        
        return PLUGIN_HANDLED;
    }
    
    displayKickMenu(id, g_menuPosition[id] );
    
    return PLUGIN_HANDLED;
}

public plmenu_setbantimes()
{
    new buff[32];
    new args = read_argc();
    
    if (args <= 1)
    {
        server_print("usage: amx_plmenu_bantimes <time1> [time2] [time3] ...");
        server_print("   use time of 0 for permanent.");
        
        return;
    }
    
    ArrayClear(g_bantimes);
    
    for (new i = 1; i < args; i++)
    {
        read_argv(i, buff, charsmax(buff));
        
        ArrayPushCell(g_bantimes, str_to_num(buff));
        
    }
    
}
public plmenu_setslapdmg()
{
    new buff[32];
    new args = read_argc();
    
    if (args <= 1)
    {
        server_print("usage: amx_plmenu_slapdmg <dmg1> [dmg2] [dmg3] ...");
        server_print("   slay is automatically set for the first value.");
        
        return;
    }
    
    ArrayClear(g_slapsettings);
    
    ArrayPushCell(g_slapsettings, 0); // compensate for slay
    
    for (new i = 1; i < args; i++)
    {
        read_argv(i, buff, charsmax(buff));
        
        ArrayPushCell(g_slapsettings, str_to_num(buff));
        
    }
    
}
public module_filter(const module[])
{
    if (equali(module, "cstrike"))
        return PLUGIN_HANDLED
    
    return PLUGIN_CONTINUE
}

public native_filter(const name[], index, trap)
{
    if (!trap)
        return PLUGIN_HANDLED
        
    return PLUGIN_CONTINUE
}

/* Ban menu */

public actionBanMenu(id, key)
{
    switch (key)
    {
        case 7:
        {
            /* BEGIN OF CHANGES BY MISTAGEE ADDED A FEW MORE OPTIONS */
            
            ++g_menuOption[id]
            g_menuOption[id] %= ArraySize(g_bantimes);

            g_menuSettings[id] = ArrayGetCell(g_bantimes, g_menuOption[id]);

            displayBanMenu(id, g_menuPosition[id])
        }
        case 8: displayBanMenu(id, ++g_menuPosition[id])
        case 9: displayBanMenu(id, --g_menuPosition[id])
        default:
        {
            new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
            new name[32], name2[32], authid[32], authid2[32]
        
            get_user_name(player, name2, 31)
            get_user_authid(id, authid, 31)
            get_user_authid(player, authid2, 31)
            get_user_name(id, name, 31)
            
            new userid2 = get_user_userid(player)

            log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%d^")", name, get_user_userid(id), authid, name2, userid2, authid2, g_menuSettings[id])

            if (g_menuSettings[id]==0) // permanent
            {
                new maxpl = get_maxplayers();
                for (new i = 1; i <= maxpl; i++)
                {
                    show_activity_id(i, id, name, "%L %s %L", i, "BAN", name2, i, "PERM");
                }
            }
            else
            {
                new tempTime[32];
                formatex(tempTime,sizeof(tempTime)-1,"%d",g_menuSettings[id]);
                new maxpl = get_maxplayers();
                for (new i = 1; i <= maxpl; i++)
                {
                    show_activity_id(i, id, name, "%L %s %L", i, "BAN", name2, i, "FOR_MIN", tempTime);
                }
            }
            /* ---------- check for Steam ID added by MistaGee -------------------- 
            IF AUTHID == 4294967295 OR VALVE_ID_LAN OR HLTV, BAN PER IP TO NOT BAN EVERYONE */
            
            if (equal("4294967295", authid2)
                || equal("HLTV", authid2)
                || equal("STEAM_ID_LAN", authid2)
                || equali("VALVE_ID_LAN", authid2))
            {
                /* END OF MODIFICATIONS BY MISTAGEE */
                new ipa[32]
                get_user_ip(player, ipa, 31, 1)
                
                server_cmd("addip %d %s;writeip", g_menuSettings[id], ipa)
            }
            else
            {
                server_cmd("banid %d #%d kick;writeid", g_menuSettings[id], userid2)
            }

            server_exec()

            displayBanMenu(id, g_menuPosition[id])
        }
    }
    
    return PLUGIN_HANDLED
}

displayBanMenu(id, pos)
{
    if (pos < 0)
        return

    get_players(g_menuPlayers[id], g_menuPlayersNum[id])

    new menuBody[512]
    new b = 0
    new i
    new name[32]
    new start = pos * 7

    if (start >= g_menuPlayersNum[id])
        start = pos = g_menuPosition[id] = 0

    new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "BAN_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
    new end = start + 7
    new keys = MENU_KEY_0|MENU_KEY_8

    if (end > g_menuPlayersNum[id])
        end = g_menuPlayersNum[id]

    for (new a = start; a < end; ++a)
    {
        i = g_menuPlayers[id][a]
        get_user_name(i, name, 31)

        if (is_user_bot(i) || (access(i, ADMIN_IMMUNITY) && i != id))
        {
            ++b
            
            if (g_coloredMenus)
                len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name)
            else
                len += format(menuBody[len], 511-len, "#. %s^n", name)
        } else {
            keys |= (1<<b)
                
            if (is_user_admin(i))
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name)
            else
                len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
        }
    }

    if (g_menuSettings[id])
        len += format(menuBody[len], 511-len, "^n8. %L^n", id, "BAN_FOR_MIN", g_menuSettings[id])
    else
        len += format(menuBody[len], 511-len, "^n8. %L^n", id, "BAN_PERM")

    if (end != g_menuPlayersNum[id])
    {
        format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
        keys |= MENU_KEY_9
    }
    else
        format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

    show_menu(id, keys, menuBody, -1, "Ban Menu")
}

public cmdBanMenu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    g_menuOption[id] = 0
    
    if (ArraySize(g_bantimes) > 0)
    {
        g_menuSettings[id] = ArrayGetCell(g_bantimes, g_menuOption[id]);
    }
    else
    {
        // should never happen, but failsafe
        g_menuSettings[id] = 0
    }
    displayBanMenu(id, g_menuPosition[id] = 0)

    return PLUGIN_HANDLED
}

/* Slap/Slay */

public actionSlapMenu(id, key)
{
    switch (key)
    {
        case 7:
        {
            ++g_menuOption[id]
            
            g_menuOption[id] %= ArraySize(g_slapsettings);
            
            g_menuSettings[id] = ArrayGetCell(g_slapsettings, g_menuOption[id]);
            
            displaySlapMenu(id, g_menuPosition[id]);
        }
        case 8: displaySlapMenu(id, ++g_menuPosition[id])
        case 9: displaySlapMenu(id, --g_menuPosition[id])
        default:
        {
            new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
            new name2[32]
            
            get_user_name(player, name2, 31)

            if (!is_user_alive(player))
            {
                client_print(id, print_chat, "%L", id, "CANT_PERF_DEAD", name2)
                displaySlapMenu(id, g_menuPosition[id])
                return PLUGIN_HANDLED
            }

            new authid[32], authid2[32], name[32]

            get_user_authid(id, authid, 31)
            get_user_authid(player, authid2, 31)
            get_user_name(id, name, 31)

            if (g_menuOption[id])
            {
                log_amx("Cmd: ^"%s<%d><%s><>^" slap with %d damage ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, g_menuSettings[id], name2, get_user_userid(player), authid2)

                show_activity_key("ADMIN_SLAP_1", "ADMIN_SLAP_2", name, name2, g_menuSettings[id]);
            } else {
                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);
            }

            if (g_menuOption[id])
                user_slap(player, (get_user_health(player) > g_menuSettings[id]) ? g_menuSettings[id] : 0)
            else
                user_kill(player)

            displaySlapMenu(id, g_menuPosition[id])
        }
    }
    
    return PLUGIN_HANDLED
}

displaySlapMenu(id, pos)
{
    if (pos < 0)
        return

    get_players(g_menuPlayers[id], g_menuPlayersNum[id])

    new menuBody[512]
    new b = 0
    new i
    new name[32], team[4]
    new start = pos * 7

    if (start >= g_menuPlayersNum[id])
        start = pos = g_menuPosition[id] = 0

    new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "SLAP_SLAY_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
    new end = start + 7
    new keys = MENU_KEY_0|MENU_KEY_8

    if (end > g_menuPlayersNum[id])
        end = g_menuPlayersNum[id]

    for (new a = start; a < end; ++a)
    {
        i = g_menuPlayers[id][a]
        get_user_name(i, name, 31)
        
        if (g_cstrike)
        {
            if (cs_get_user_team(i) == CS_TEAM_T)
            {
                copy(team, 3, "TE")
            }
            else if (cs_get_user_team(i) == CS_TEAM_CT)
            {
                copy(team, 3, "CT")
            } else {
                get_user_team(i, team, 3)
            }
        } else {
            get_user_team(i, team, 3)
        }

        if (!is_user_alive(i) || (access(i, ADMIN_IMMUNITY) && i != id))
        {
            ++b
        
            if (g_coloredMenus)
                len += format(menuBody[len], 511-len, "\d%d. %s\R%s^n\w", b, name, team)
            else
                len += format(menuBody[len], 511-len, "#. %s   %s^n", name, team)        
        } else {
            keys |= (1<<b)
                
            if (is_user_admin(i))
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*\y\R%s^n\w" : "%d. %s *   %s^n", ++b, name, team)
            else
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s\y\R%s^n\w" : "%d. %s   %s^n", ++b, name, team)
        }
    }

    if (g_menuOption[id])
        len += format(menuBody[len], 511-len, "^n8. %L^n", id, "SLAP_WITH_DMG", g_menuSettings[id])
    else
        len += format(menuBody[len], 511-len, "^n8. %L^n", id, "SLAY")

    if (end != g_menuPlayersNum[id])
    {
        format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
        keys |= MENU_KEY_9
    }
    else
        format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

    show_menu(id, keys, menuBody, -1, "Slap/Slay Menu")
}

public cmdSlapMenu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    g_menuOption[id] = 0
    if (ArraySize(g_slapsettings) > 0)
    {
        g_menuSettings[id] = ArrayGetCell(g_slapsettings, g_menuOption[id]);
    }
    else
    {
        // should never happen, but failsafe
        g_menuSettings[id] = 0
    }

    displaySlapMenu(id, g_menuPosition[id] = 0)

    return PLUGIN_HANDLED
}

/* Kick */

public actionKickMenu(id, key)
{
    switch (key)
    {
        case 0: client_cmd(id, "messagemode RAZON");
        case 8: displayKickMenu(id, ++g_menuPosition[id])
        case 9: displayKickMenu(id, --g_menuPosition[id])
        default:
        {
            // Caso 1... o sea toque el 2
            client_print(id, print_chat, "Key Case %d", key)
            new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key - 1]
            new authid[32], authid2[32], name[32], name2[32]
            
            get_user_authid(id, authid, 31)
            get_user_authid(player, authid2, 31)
            get_user_name(id, name, 31)
            get_user_name(player, name2, 31)
            
            new userid2 = get_user_userid(player)

            log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s>^" Reason ^"<%s>^"", name, get_user_userid(id), authid, name2, userid2, authid2, g_Reason[id])

            show_activity_key("ADMIN_KICK_1", "ADMIN_KICK_2", name, name2);
            
            server_cmd("kick #%d ^"%s^"", userid2, g_Reason[id])
            server_exec()

            displayKickMenu(id, g_menuPosition[id])
        }
    }

    return PLUGIN_HANDLED
}

displayKickMenu(id, pos)
{
    if (pos < 0)
        return

    get_players(g_menuPlayers[id], g_menuPlayersNum[id])

    new menuBody[512]
    new b = 0
    new i
    new name[32]
    new start = pos * 7

    if (start >= g_menuPlayersNum[id])
        start = pos = g_menuPosition[id] = 0

    new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "KICK_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
    new end = start + 7
    new keys = MENU_KEY_0

    if (end > g_menuPlayersNum[id])
        end = g_menuPlayersNum[id]
        
    len += format(menuBody[len], 511-len, "1. Reason to Kick: \r%s\w^n^n", g_Reason[id])
    
    keys |= (1<<0)

    for (new a = start; a < end; ++a)
    {
        i = g_menuPlayers[id][a]
        get_user_name(i, name, 31)

        if (access(i, ADMIN_IMMUNITY) && i != id)
        {
            ++b
        
            if (g_coloredMenus)
                len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b+1, name)
            else
                len += format(menuBody[len], 511-len, "#. %s^n", name)
        } else {
            keys |= (1<<b+1)
                
            if (is_user_admin(i))
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b+1, name)
            else
                len += format(menuBody[len], 511-len, "%d. %s^n", ++b+1, name)
        }
    }

    if (end != g_menuPlayersNum[id])
    {
        format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
        keys |= MENU_KEY_9
    }
    else
        format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

    show_menu(id, keys, menuBody, -1, "Kick Menu")
}

public cmdKickMenu(id, level, cid)
{
    if (cmd_access(id, level, cid, 1))
        displayKickMenu(id, g_menuPosition[id] = 0)

    return PLUGIN_HANDLED
}

/* Team menu */

public actionTeamMenu(id, key)
{
    switch (key)
    {
        case 7:
        {
            g_menuOption[id] = (g_menuOption[id] + 1) % (g_cstrike ? 3 : 2);
            displayTeamMenu(id, g_menuPosition[id])
        }
        case 8: displayTeamMenu(id, ++g_menuPosition[id])
        case 9: displayTeamMenu(id, --g_menuPosition[id])
        default:
        {
            new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
            new authid[32], authid2[32], name[32], name2[32]

            get_user_name(player, name2, 31)
            get_user_authid(id, authid, 31)
            get_user_authid(player, authid2, 31)
            get_user_name(id, name, 31)
                
            log_amx("Cmd: ^"%s<%d><%s><>^" transfer ^"%s<%d><%s><>^" (team ^"%s^")", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2, g_menuOption[id] ? "TERRORIST" : "CT")

            show_activity_key("ADMIN_TRANSF_1", "ADMIN_TRANSF_2", name, name2, g_CSTeamNames[g_menuOption[id] % 3]);

            if (g_cstrike)
            {
                if (is_user_alive(player))
                {
                    new deaths = cs_get_user_deaths(player)
                    user_kill(player, 1)
                    cs_set_user_deaths(player, deaths)
                }
                // This modulo math just aligns the option to the CsTeams-corresponding number
                cs_set_user_team(player, (g_menuOption[id] % 3) + 1)
                cs_reset_user_model(player)
            } else {
                new limit_setting = get_cvar_num("mp_limitteams")
                
                set_cvar_num("mp_limitteams", 0)
                engclient_cmd(player, "jointeam", g_CSTeamNumbers[g_menuOption[id] % 2])
                engclient_cmd(player, "joinclass", "1")
                set_cvar_num("mp_limitteams", limit_setting)
            }

            displayTeamMenu(id, g_menuPosition[id])
        }
    }
    
    return PLUGIN_HANDLED
}

displayTeamMenu(id, pos)
{
    if (pos < 0)
        return

    get_players(g_menuPlayers[id], g_menuPlayersNum[id])

    new menuBody[512]
    new b = 0
    new i, iteam
    new name[32], team[4]
    new start = pos * 7

    if (start >= g_menuPlayersNum[id])
        start = pos = g_menuPosition[id] = 0

    new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "TEAM_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
    new end = start + 7
    new keys = MENU_KEY_0|MENU_KEY_8

    if (end > g_menuPlayersNum[id])
        end = g_menuPlayersNum[id]

    for (new a = start; a < end; ++a)
    {
        i = g_menuPlayers[id][a]
        get_user_name(i, name, 31)
        
        if (g_cstrike)
        {
            iteam = _:cs_get_user_team(i)
            
            if (iteam == 1)
            {
                copy(team, 3, "TE")
            }
            else if (iteam == 2)
            {
                copy(team, 3, "CT")
            }
            else if (iteam == 3)
            {
                copy(team, 3, "SPE");
                iteam = 6;
            } else {
                iteam = get_user_team(i, team, 3)
            }
        } else {
            iteam = get_user_team(i, team, 3)
        }

        if ((iteam == g_CSTeamiNumbers[g_menuOption[id] % (g_cstrike ? 3 : 2)]) || (access(i, ADMIN_IMMUNITY) && i != id))
        {
            ++b
            
            if (g_coloredMenus)
                len += format(menuBody[len], 511-len, "\d%d. %s\R%s^n\w", b, name, team)
            else
                len += format(menuBody[len], 511-len, "#. %s   %s^n", name, team)        
        } else {
            keys |= (1<<b)
                
            if (is_user_admin(i))
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*\y\R%s^n\w" : "%d. %s *   %s^n", ++b, name, team)
            else
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s\y\R%s^n\w" : "%d. %s   %s^n", ++b, name, team)
        }
    }

    len += format(menuBody[len], 511-len, "^n8. %L^n", id, "TRANSF_TO", g_CSTeamNames[g_menuOption[id] % (g_cstrike ? 3 : 2)])

    if (end != g_menuPlayersNum[id])
    {
        format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
        keys |= MENU_KEY_9
    }
    else
        format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

    show_menu(id, keys, menuBody, -1, "Team Menu")
}

public cmdTeamMenu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    g_menuOption[id] = 0

    displayTeamMenu(id, g_menuPosition[id] = 0)

    return PLUGIN_HANDLED
}

/* Client cmds menu */

public actionClcmdMenu(id, key)
{
    switch (key)
    {
        case 7:
        {
            ++g_menuOption[id]
            g_menuOption[id] %= g_menuSelectNum[id]
            displayClcmdMenu(id, g_menuPosition[id])
        }
        case 8: displayClcmdMenu(id, ++g_menuPosition[id])
        case 9: displayClcmdMenu(id, --g_menuPosition[id])
        default:
        {
            new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
            new flags = g_clcmdMisc[g_menuSelect[id][g_menuOption[id]]][1]
            
            if (is_user_connected(player))
            {
                new command[512], authid[32], name[32], userid[32]
                
                copy(command, charsmax(command), g_clcmdCmd[g_menuSelect[id][g_menuOption[id]]])
                get_user_authid(player, authid, 31)
                get_user_name(player, name, 31)
                num_to_str(get_user_userid(player), userid, 31)
                
                replace(command, charsmax(command), "%userid%", userid)
                replace(command, charsmax(command), "%authid%", authid)
                replace(command, charsmax(command), "%name%", name)
                
                if (flags & 1)
                {
                    server_cmd("%s", command)
                    server_exec()
                } else if (flags & 2)
                    client_cmd(id, "%s", command)
                else if (flags & 4)
                    client_cmd(player, "%s", command)
            }
            
            if (flags & 8)
                displayClcmdMenu(id, g_menuPosition[id])
        }
    }
    
    return PLUGIN_HANDLED
}

displayClcmdMenu(id, pos)
{
    if (pos < 0)
        return

    get_players(g_menuPlayers[id], g_menuPlayersNum[id])

    new menuBody[512]
    new b = 0
    new i
    new name[32]
    new start = pos * 7

    if (start >= g_menuPlayersNum[id])
        start = pos = g_menuPosition[id] = 0

    new len = format(menuBody, 511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id, "CL_CMD_MENU", pos + 1, (g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0)))
    new end = start + 7
    new keys = MENU_KEY_0|MENU_KEY_8

    if (end > g_menuPlayersNum[id])
        end = g_menuPlayersNum[id]

    for (new a = start; a < end; ++a)
    {
        i = g_menuPlayers[id][a]
        get_user_name(i, name, 31)

        if (!g_menuSelectNum[id] || (access(i, ADMIN_IMMUNITY) && i != id))
        {
            ++b
            
            if (g_coloredMenus)
                len += format(menuBody[len], 511-len, "\d%d. %s^n\w", b, name)
            else
                len += format(menuBody[len], 511-len, "#. %s^n", name)        
        } else {
            keys |= (1<<b)
                
            if (is_user_admin(i))
                len += format(menuBody[len], 511-len, g_coloredMenus ? "%d. %s \r*^n\w" : "%d. %s *^n", ++b, name)
            else
                len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
        }
    }

    if (g_menuSelectNum[id])
        len += format(menuBody[len], 511-len, "^n8. %s^n", g_clcmdName[g_menuSelect[id][g_menuOption[id]]])
    else
        len += format(menuBody[len], 511-len, "^n8. %L^n", id, "NO_CMDS")

    if (end != g_menuPlayersNum[id])
    {
        format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
        keys |= MENU_KEY_9
    }
    else
        format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")

    show_menu(id, keys, menuBody, -1, "Client Cmds Menu")
}

public cmdClcmdMenu(id, level, cid)
{
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    g_menuSelectNum[id] = 0

    for (new a = 0; a < g_clcmdNum; ++a)
        if (access(id, g_clcmdMisc[a][0]))
            g_menuSelect[id][g_menuSelectNum[id]++] = a

    g_menuOption[id] = 0

    displayClcmdMenu(id, g_menuPosition[id] = 0)

    return PLUGIN_HANDLED
}

load_settings(szFilename[])
{
    if (!file_exists(szFilename))
        return 0

    new text[256], szFlags[32], szAccess[32]
    new a, pos = 0

    while (g_clcmdNum < MAX_CLCMDS && read_file(szFilename, pos++, text, 255, a))
    {
        if (text[0] == ';') continue

        if (parse(text, g_clcmdName[g_clcmdNum], 31, g_clcmdCmd[g_clcmdNum], 63, szFlags, 31, szAccess, 31) > 3)
        {
            while (replace(g_clcmdCmd[g_clcmdNum], 63, "\'", "^""))
            {
                // do nothing
            }

            g_clcmdMisc[g_clcmdNum][1] = read_flags(szFlags)
            g_clcmdMisc[g_clcmdNum][0] = read_flags(szAccess)
            g_clcmdNum++
        }
    }

    return 1
} 
Прикачени файлове
Screenshot 2022-01-14 201800.png
Screenshot 2022-01-14 201800.png (30.68 KiB) Преглеждано 1183 пъти
Screenshot 2022-01-14 201800.png
Screenshot 2022-01-14 201800.png (30.68 KiB) Преглеждано 1183 пъти
My body is like breakfast, lunch, and dinner. I don't think about it, I just have it.
- Arnold Schwarzenegger
--
45.144.155.105:27029 -Ex0t1C-pLay # > Dust 2 Only <
--

Аватар
AfterLife
Извън линия
Потребител
Потребител
Мнения: 112
Регистриран на: 07 Юли 2021, 23:38
Се отблагодари: 42 пъти
Получена благодарност: 8 пъти
Обратна връзка:

Admin cmd (преработка)

Мнение от AfterLife » 14 Яну 2022, 20:40

Добре, ще почакам, ако не. Благодаря ти.

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

Admin cmd (преработка)

Мнение от OciXCrom » 14 Яну 2022, 20:52

Можеш да направиш оригиналния плъгин да работи с цветни съобщения като просто добавиш #include <cromchat> в кода и си добавиш цветовете в lang файла.

Библиотеката автоматично презаписва функциите които се ползват за изпращане съобщения в тези плъгини.

Аватар
monk
Извън линия
Потребител
Потребител
Мнения: 156
Регистриран на: 22 Окт 2016, 18:08
Местоположение: /gym
Се отблагодари: 2 пъти
Получена благодарност: 9 пъти

Admin cmd (преработка)

Мнение от monk » 15 Яну 2022, 11:47

Пробвай с това кик меню, не съм го тествал, понеже нямам време.

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

#include <amxmodx>
#include <amxmisc>
new reason[32]
new damage
new target[33];
new type = 0;

public plugin_init()
{
register_plugin("slap/slay/kick reason", "val", "1.0");
register_clcmd("amx_kickmenu", "cmdKickMenu")
register_clcmd("amx_slapmenu", "cmdSlapMenu")
}


/////////////////////SLAP MENU////////////////////////////////
public cmdSlapMenu(id) {
    if(!(get_user_flags(id) & ADMIN_SLAY)) {
    return PLUGIN_HANDLED
    }
    type = 1;
    
    //Create a variable to hold the menu
    new menu = menu_create( "\rChoose a player!:", "menu_handler4" );

    //We will need to create some variables so we can loop through all the players
    new players[32], pnum, tempid;

    //Some variables to hold information about the players
    new szName[32],szUserId[32]

    //Fill players with available players
    get_players( players, pnum,"a"); 

    //Start looping through all players
    for ( --pnum; pnum>=0; pnum-- )
    {
        //Save a tempid so we do not re-index
        tempid = players[pnum];

        //Get the players name and userid as strings
        get_user_name( tempid, szName, charsmax( szName ) );
        formatex(szUserId, charsmax(szUserId), "%d", tempid)

        //Add the item for this player
        menu_additem( menu, szName,szUserId, 0 );
    }

    //We now have all players in the menu, lets display the menu
    menu_display( id, menu);

    return PLUGIN_HANDLED
}

public menu_handler4( id, menu, item )
{
    if ( item == MENU_EXIT )
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    new szData4[6], szName[64];
    new access, item_callback;
    menu_item_getinfo( menu, item,access, szData4,charsmax(szData4), szName,charsmax( szName ), item_callback );

    target[id] = str_to_num(szData4)
    
    menu_destroy( menu );
    ChooseDamage(id)
    
    return PLUGIN_HANDLED;
}

/////////////////////KICK MENU////////////////////////////////
public cmdKickMenu(id) {
    if(!(get_user_flags(id) & ADMIN_KICK)) {
    return PLUGIN_HANDLED
    }

    type = 2;
    //Create a variable to hold the menu
    new menu = menu_create( "\rChoose a player!:", "menu_handler3" );

    //We will need to create some variables so we can loop through all the players
    new players[32], pnum, tempid;

    //Some variables to hold information about the players
    new szName[32],szUserId[32];

    //Fill players with available players
    get_players( players, pnum);

    //Start looping through all players
    for ( --pnum; pnum>=0; pnum-- )
    {
        //Save a tempid so we do not re-index
        tempid = players[pnum];

        //Get the players name and userid as strings
        get_user_name( tempid, szName, charsmax( szName ) );
        formatex(szUserId, charsmax(szUserId), "%d", tempid)
        
        //Add the item for this player
        menu_additem( menu, szName,szUserId, 0 );
    }

    //We now have all players in the menu, lets display the menu
    menu_display( id, menu);

    return PLUGIN_HANDLED
}

public menu_handler3( id, menu, item )
{
    if ( item == MENU_EXIT )
    {
        return PLUGIN_HANDLED;
    }
    new szData3[6], szName[64];
    new access, item_callback;
    menu_item_getinfo( menu, item,access, szData3,charsmax(szData3), szName,charsmax( szName ), item_callback );

    target[id] = str_to_num(szData3)
    menu_destroy( menu );
    AwesomeMenu( id )
    
    return PLUGIN_HANDLED;
}


public ChooseDamage(id) {
new menu = menu_create( "\rChoose Damage!:", "menu_handler5" );
menu_additem( menu, "\w1 DMG", "", 0 );
menu_additem( menu, "\w5 DMG", "", 0 );
menu_additem( menu, "\w10 DMG", "", 0 );
menu_additem( menu, "\w50 DMG", "", 0 );
menu_additem( menu, "\wSLAY", "", 0 );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu, 0 );
}

public menu_handler5( id, menu, item )
{
if ( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}

new szData[6], szName[64];
new item_access, item_callback;
menu_item_getinfo( menu, item, item_access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
    
switch( item )
{
                case 0:
                {
                  damage = 1;
                }
                case 1:
                {
                  damage = 5
                }
                case 2:
                {
                  damage = 10
                }
                case 3:
                {
                  damage = 50
                }
                case 4:
                {
                  damage = 999
                } 
}    
menu_destroy( menu );    
AwesomeMenu( id )
return PLUGIN_HANDLED;
}

public AwesomeMenu( id ) {
new menu = menu_create( "\rChoose Reason!:", "menu_handler" );
menu_additem( menu, "\wRetry", "", 0 );
menu_additem( menu, "\wAFK", "", 0 );
menu_additem( menu, "\wSpamer", "", 0 );
menu_additem( menu, "\wBot", "", 0 );
menu_additem( menu, "\wDruga prichina", "", 0 );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu, 0 );
}

public menu_handler( id, menu, item )
{
if ( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}

new szData[6], szName[64];
new access, item_callback;
menu_item_getinfo( menu,item, access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
    
switch( item )
{
                case 0:
                {
                   format(reason,charsmax(reason),"Retry")
                }
                case 1:
                {
                    format(reason,charsmax(reason),"AFK")
                }
                case 2:
                {
                     format(reason,charsmax(reason),"Spamer")
                }
                case 3:
                {
                     format(reason,charsmax(reason),"Bot")
                }
                case 4:
                {
                     format(reason,charsmax(reason),"Druga prichina")
                }
}

menu_destroy( menu );
Punish(id)
return PLUGIN_HANDLED;
}

public Punish(id) {

//slap
if(type == 1) {

if (is_user_alive( target[id] ))
{
        if( is_user_admin(target[id])) {
        client_print(id,print_chat,"This user is admin!");
        return PLUGIN_HANDLED;
        }
        user_slap(target[id],damage)
        new name[32]
        get_user_name(id,name,31)
        new name2[32]
        get_user_name(target[id],name2,31)
        client_print(0,print_chat,"Admin %s has slapped %s with %d damage, Reason: %s",name,name2,damage,reason)
}

} 
//kick
else if(type == 2){

if (is_user_connected( target[id] ))
{
        if( is_user_admin(target[id])) {
        client_print(id,print_chat,"This user is admin!");
        return PLUGIN_HANDLED;
        }
        server_cmd("kick #%d ^"%s^"",get_user_userid(target[id]),reason)
        new name[32]
        get_user_name(id,name,31)
        new name2[32]
        get_user_name(target[id],name2,31)
        client_print(0,print_chat,"Admin %s has kicked %s, Reason: %s",name,name2,reason)
}
    
}

//clear
target[id] = 0
type = 0
damage = 0
//end clear
return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1026\\ f0\\ fs16 \n\\ par }
*/
Прикачени файлове
Screenshot 2022-01-15 114445.png
Screenshot 2022-01-15 114445.png (29.77 KiB) Преглеждано 1128 пъти
Screenshot 2022-01-15 114445.png
Screenshot 2022-01-15 114445.png (29.77 KiB) Преглеждано 1128 пъти
admincmd.sma
(34.62 KiB) Свалено 44 пъти
admincmd.sma
(34.62 KiB) Свалено 44 пъти
plmenu.sma
(28.77 KiB) Свалено 39 пъти
plmenu.sma
(28.77 KiB) Свалено 39 пъти
My body is like breakfast, lunch, and dinner. I don't think about it, I just have it.
- Arnold Schwarzenegger
--
45.144.155.105:27029 -Ex0t1C-pLay # > Dust 2 Only <
--

Аватар
AfterLife
Извън линия
Потребител
Потребител
Мнения: 112
Регистриран на: 07 Юли 2021, 23:38
Се отблагодари: 42 пъти
Получена благодарност: 8 пъти
Обратна връзка:

Admin cmd (преработка)

Мнение от AfterLife » 15 Яну 2022, 13:39

Снощи ми помогнаха да оцветя съобщенията, които исках. Обаче доколкото разбрах за кика с причина, променя изцяло amxnodmenu и трябвало после да се редактирали плъгините пак... Но ти благодаря много, че си отделил време за казуса ми!

Аватар
monk
Извън линия
Потребител
Потребител
Мнения: 156
Регистриран на: 22 Окт 2016, 18:08
Местоположение: /gym
Се отблагодари: 2 пъти
Получена благодарност: 9 пъти

Admin cmd (преработка)

Мнение от monk » 15 Яну 2022, 13:52

Погледни това, води се Warn menu, но ги киква с причина. (Това ти е варианта, без да едитваш plmenu-то)

Warn Menu (не е реклама)
My body is like breakfast, lunch, and dinner. I don't think about it, I just have it.
- Arnold Schwarzenegger
--
45.144.155.105:27029 -Ex0t1C-pLay # > Dust 2 Only <
--

Аватар
AfterLife
Извън линия
Потребител
Потребител
Мнения: 112
Регистриран на: 07 Юли 2021, 23:38
Се отблагодари: 42 пъти
Получена благодарност: 8 пъти
Обратна връзка:

Admin cmd (преработка)

Мнение от AfterLife » 15 Яну 2022, 14:00

Ще го прегледам, благодаря ти! Нека засега темата остане отключена

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

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

Кой е на линия

Потребители разглеждащи този форум: Semrush [Bot] и 29 госта