[AMXX] CTmenu

Vaata eelmist teemat Vaata järgmist teemat Go down

Sulipoiss Peeter
Sulipoiss Peeter
Juunior
Liitus : 10/01/2015
Postitusi : 28

PostitamineSulipoiss Peeter 01.02.15 13:52

AMXX Ctmenu kust võiks neid leida ??? :D
Tonight
Tonight

[AMXX] CTmenu Vetera11
Liitus : 19/02/2012
Postitusi : 17983

PostitamineTonight 01.02.15 13:55

Kood:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <fun>

#define PLUGIN "JB CT Menu"
#define VERSION "1.0"
#define AUTHOR "MiX"

#define COLOR_OFF -1
#define COLOR_RED 0
#define COLOR_BLUE 1
#define COLOR_GREEN 2
#define COLOR_LAST 2

new found[10];

new const MSG_PREFIX[] = "|Fn|"; // Defines the Message Prefix
new g_iSelectedColor[33], g_sayText;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("say /ctmenu", "clcmd_say_ctmenu", _, "- Opens a menu for CTs");
    register_logevent("logevent_roundstart", 2, "1=Round_Start");
    g_sayText = get_user_msgid("SayText");
}

// Unglow all Terrorists on round start
public logevent_roundstart()
{
    static i;
    for (i = 0; i < 33; ++i)
        if (is_user_alive(i))
            set_user_rendering(i, kRenderFxGlowShell, 0, 0, 0);   
}

srv_message(id, const message[], any:...)
{
    static szMessage[192];
    static const MSG_PREFIX_LENGTH = (sizeof(MSG_PREFIX) + 3);
    formatex(szMessage, MSG_PREFIX_LENGTH, "^x04%s^x01 ", MSG_PREFIX);
    vformat(szMessage[MSG_PREFIX_LENGTH], 191 - MSG_PREFIX_LENGTH, message, 3);

    if (!id) {
        message_begin(MSG_BROADCAST, g_sayText, _, -1);
        write_byte(-1);
    } else {
        message_begin(MSG_ONE_UNRELIABLE, g_sayText, _, id);
        write_byte(id);
    }
    write_string(szMessage);
    message_end();
}

// A player said /ctmenu in chat
public clcmd_say_ctmenu(id)
{
    // Check if user is an alive CT, else print an error message
    if (cs_get_user_team(id) != CS_TEAM_CT || !is_user_alive(id)) {
        srv_message(id, "You cannot open this menu as it's for alive CTs only.");
        return PLUGIN_HANDLED;
    }
    new menu = menu_create("CT Menu", "menu_handle_ct");
    menu_additem(menu, "Glow Players");
    menu_additem(menu, "Glow into 50/50");
    menu_additem(menu, "\dOpen Cells");
    menu_additem(menu, "\dStart a Funday");
    menu_display(id, menu);
    return PLUGIN_HANDLED;
}

// Handles the option chosen in the CT Menu
public menu_handle_ct(id, menu, item)
{
    switch (item) {
        case 0: {
            menu_destroy(menu);
            g_iSelectedColor[id] = 0; // Set the first color option to the default color
            menu_display(id, menu_create_glow(id));
        }
        case 1: {
            menu_destroy(menu);
            glow_terrors_random(id);
        }
        case 2: {
            menu_destroy(menu);
            Push_Button()
        }
        case 3: {
            menu_destroy(menu);
            srv_message(id, "Functionality not yet implemented");
        }
        default: // On exit
            menu_destroy(menu);
    }
    return PLUGIN_HANDLED;
}

// Creates and returns the menu for glowing Terrorists
public menu_create_glow(id)
{
    static i, iTerrors[32], iTerrorsNum, iItemCount, szColorItem[17], szTempName[34], szMenuInfo[1];
    static iTempId;

    // The currently selected color
    switch (g_iSelectedColor[id]) {
        case COLOR_RED:
            copy(szColorItem, 16, "\yColor: \wRed");
        case COLOR_BLUE:
            copy(szColorItem, 16, "\yColor: \wBlue");
        case COLOR_GREEN:
            copy(szColorItem, 16, "\yColor: \wGreen");
        default:
            copy(szColorItem, 16, "\yColor: \wOff");
    }

    new menu = menu_create("CT Menu - Glow", "menu_handle_glow");
    menu_additem(menu, "\yUnglow all", {-1});

    get_players(iTerrors, iTerrorsNum, "e", "TERRORIST");
    iItemCount = 1; // The amount of items on the current page
    for (i = 0; i < iTerrorsNum; i++) {
        iItemCount++;
        if (iItemCount > 6) {
            // The 7th item is the color chooser; 8 and 9 are previous and next page
            menu_additem(menu, szColorItem, {0});
            iItemCount = 0;
        }
        iTempId = iTerrors[i];
        szMenuInfo[0] = iTempId; // Store the ID in the info
        if (is_user_alive(iTempId)) {
            get_user_name(iTempId, szTempName, 33);
        } else {
            copy(szTempName, 2, "\d");
            get_user_name(iTempId, szTempName[2], 31);
        }
        menu_additem(menu, szTempName, szMenuInfo);
    }
    menu_additem(menu, szColorItem, {0}); // The last item is always the color chooser

    return menu;
}

// Handles the option chosen in the Glow menu
public menu_handle_glow(id, menu, item)
{
    if (item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    // Get the selected item from the info
    static szMenuInfo[1], iTarget, iAccess, iCallback, iPage;
    menu_item_getinfo(menu, item, iAccess, szMenuInfo, 1, _, _, iCallback);
    iTarget = szMenuInfo[0];

    // Check which item was selected
    switch (iTarget) {
        case -1: { // Unglow all
            static i, iTerrors[32], iTerrorsNum, szName[32];
            get_players(iTerrors, iTerrorsNum, "ae", "TERRORIST");
            for (i = 0; i < iTerrorsNum; i++)
                set_user_rendering(iTerrors[i], kRenderFxGlowShell, 0, 0, 0);   

            // Announce in chat
            get_user_name(id, szName, 31);
            srv_message(0, "%s has split the prisoners into two teams.", szName);
        }
        case 0: { // Change color
            if (g_iSelectedColor[id] >= COLOR_LAST)
                g_iSelectedColor[id] = COLOR_OFF;
            else
                g_iSelectedColor[id]++;
        }
        default: { // Glow a player
            if (is_user_alive(iTarget)) { // Disregard dead players
                static iColor[3], szColor[6] //szName[32], szTarg[32];

                // The selected color
                switch (g_iSelectedColor[id]) {
                    case COLOR_RED:{
                        iColor = {255, 0, 0};
                        copy(szColor, 5, "red");
                    }
                    case COLOR_BLUE: {
                        iColor = {0, 0, 255};
                        copy(szColor, 5, "blue");
                    }
                    case COLOR_GREEN: {
                        iColor = {0, 255, 0};
                        copy(szColor, 5, "green");
                    }
                    default: iColor = {0, 0, 0};
                }
                set_user_rendering(iTarget, kRenderFxGlowShell, iColor[0], iColor[1], iColor[2]);
            }
        }
    }
    menu_destroy(menu);
    iPage = (item / 7); // 7 items per page (previous/next page and exit do not count as items)
    menu_display(id, menu_create_glow(id), iPage);
    return PLUGIN_HANDLED;
}

// Divide all alive Terrorists into two Teams and glows them accordingly
public glow_terrors_random(id)
{
    static i, iTerrors[32], iTerrorsNum, iTeamMax, iTeamANum, iTeamBNum, iTeamA[16], iTeamB[16];
    get_players(iTerrors, iTerrorsNum, "ae", "TERRORIST");

    iTeamMax = (iTerrorsNum / 2);
    iTeamANum = 0;
    iTeamBNum = 0;
    for (i = 0; i < iTerrorsNum; i++) {
        if (iTeamANum < iTeamMax) { // Check if Team A isn't full yet
            // Check if Team B isn't full yet, then randomly decide
            if ((iTeamBNum < iTeamMax) && random(2)) {
                iTeamB[iTeamBNum] = iTerrors[i];
                iTeamBNum++;
            } else { // Fill Team A with (remaining) Players
                iTeamA[iTeamANum] = iTerrors[i];
                iTeamANum++;
            }
        } else { // Fill Team B with remaining Players
            iTeamB[iTeamBNum] = iTerrors[i];
            iTeamBNum++;
        }
    }
    for (i = 0; i < iTeamANum; i++)
        set_user_rendering(iTeamA[i], kRenderFxGlowShell, 255, 0, 0);

    for (i = 0; i < iTeamBNum; i++)
        set_user_rendering(iTeamB[i], kRenderFxGlowShell, 0, 0, 255);

    // Announce in chat
    static szName[32];
    get_user_name(id, szName, 31);
    srv_message(0, "%s has randomly divided the Terrorists into two Teams.", szName);
}

public Push_Button()
{
        new ent = 1
        new ent3
        new Float:origin[3]
        new Float:radius = 200.0
        new class[32]
        new name[32]
        new pos
        while((pos <= sizeof(found)) && (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_player_deathmatch")))
        {
                new ent2 = 1
                pev(ent, pev_origin, origin)
                while((ent2 = engfunc(EngFunc_FindEntityInSphere, ent2, origin, radius)))
                {
                        if(!pev_valid(ent2))
                                continue

                        pev(ent2, pev_classname, class, charsmax(class))
                        if(!equal(class, "func_door"))
                                continue

                        pev(ent2, pev_targetname, name, charsmax(name))
                        ent3 = engfunc(EngFunc_FindEntityByString, 0, "target", name)
                        if(pev_valid(ent3) && (in_array(ent3, found, sizeof(found)) < 0))
                        {
                                ExecuteHamB(Ham_Use, ent3, 0, 0, 1, 1.0)
                                found[pos] = ent3
                                pos++
                                break
                        }
                }
        }
        return pos
}

stock in_array(needle, data[], size)
{
        for(new i = 0; i < size; i++)
        {
                if(data[i] == needle)
                        return i
        }
        return -1

http://www.amxmodx.org/webcompiler.cgi
Sulipoiss Peeter
Sulipoiss Peeter
Juunior
Liitus : 10/01/2015
Postitusi : 28

PostitamineSulipoiss Peeter 01.02.15 13:57

Vaata eelmist teemat Vaata järgmist teemat Tagasi üles

Soovid vestluses osaleda?

Selleks logi sisse või tee endale kasutaja.

Liitu foorumiga

Tee endale kasutaja ning osale aruteludes.


Tee uus kasutaja

Logi sisse

Omad foorumis juba kasutajat? Logi sisse.


Logi sisse

 
Permissions in this forum:
Sa ei saa vastata siinsetele teemadele