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

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

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

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

Choose Menu

, Меню сервера нажав M
Статус пользователя user.gameover.user
сообщение 8.11.2014, 6:36
Сообщение #1
Стаж: 13 лет

Сообщений: 1470
Благодарностей: 426
Полезность: 700

Довольно известный плагин открытия меню сервера нажав кнопку M
Не требуется бинд клавиши.
Нет ограничения на количество открытия меню за один раунд
Позиции меню выбора команды как в стандартном choosemenu ,а именно:
1 Террорист
2 Спецназ
5 Автовыбор
6 Спектаторы
Нет меню выбора класа модели.

Choose Menu

Код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>

new bool:DetectVIPMap[33];


new act_menu[33] = 1; // Т.е. Вкл.
new bool: g_bChange[33];

// 1 2 5 6
#define MENU_KEYS (1<<0 | 1<<1 | 1<<4 | 1<<5)

public plugin_init()
{
    register_plugin("Choose Menu" , "1.0" , "unnamed" );
    
    register_message(get_user_msgid("ShowMenu"), "MessageShowMenu");
    register_message(get_user_msgid("VGUIMenu"), "MessageVGUIMenu");
    
    register_menucmd(register_menuid("\wВыберите команду:"), MENU_KEYS, "Menu_Team");
    register_clcmd("chooseteam", "OpenMenu");
    //register_clcmd("say /menu", "OpenMenu");
    //register_clcmd("menu", "OpenMenu");    
    //register_event("HLTV",         "event_HLTV", "a", "1=0", "2=0");
    
    
    new entity = -1;
    if((engfunc(EngFunc_FindEntityByString, entity, "classname", "info_vip_start")) > 0)
    {
        DetectVIPMap[0] = true;
    }
    else
    {
        DetectVIPMap[0] = false;
    }
}

public ShowMenu(id)
{
    new iPlayers[32], iNumCT , iNumT;
    get_players(iPlayers, iNumCT, "e", "CT" );
    get_players(iPlayers, iNumT, "e", "TERRORIST");
    
    static szMenu[256]

    static iLen;
    iLen = formatex(szMenu, charsmax(szMenu), "\wВыберите команду:^n^n");

    
    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w1. \rКрасные \r[%d]^n\w2. Белые \r[%d]^n\w5. \wАвто-выбор^n\w6. \dСерый", iNumT, iNumCT);
    
    show_menu(id, MENU_KEYS, szMenu, -1, "");
    
    return PLUGIN_HANDLED;
}

public Menu_Team(id, key)
{
    g_bChange[id] = true;
    set_task(2.0, "Clear", id)
    
    
    switch(++key)
    {
        case 1:
        {
            engclient_cmd(id, "jointeam", "1");
            engclient_cmd(id, "joinclass", "1");
        }
        case 2:
        {
            engclient_cmd(id, "jointeam", "2");
            engclient_cmd(id, "joinclass", "1");
        }
        case 5:
        {
            engclient_cmd(id, "jointeam", "5");
            engclient_cmd(id, "joinclass", "1");
        }
        case 6:
        {
            engclient_cmd(id, "jointeam", "6");
            engclient_cmd(id, "joinclass", "1");
        }
    }

    
    return PLUGIN_HANDLED;
}

public Clear(id) g_bChange[id] = false;
public client_putinserver(id) g_bChange[id] = false;

public OpenMenu(id)
{
    
    if(DetectVIPMap[0] == false)
    {
        menu_cancel(id);
        TeamMenu(id);
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}

public MessageShowMenu(iMsgID, iDest, iReceiver)
{
    if(g_bChange[iReceiver])
    {
        set_pdata_int(iReceiver, 205, 0);
        return PLUGIN_HANDLED;
    }
    
    new const Team_Select[] = "#Team_Select";
    
    new szMenu[sizeof(Team_Select)];
    get_msg_arg_string(4, szMenu, charsmax(szMenu));
    
    if(!equal(szMenu, Team_Select))
    {
         return PLUGIN_CONTINUE;
    }
    
    // reset CS menu code
    set_pdata_int(iReceiver, 205, 0);
    
    // show your own menu
    TeamMenu(iReceiver);
    return PLUGIN_HANDLED;
}

public MessageVGUIMenu(iMsgID, iDest, iReceiver)
{
    if(g_bChange[iReceiver])
    {
        return PLUGIN_HANDLED;    
    }
    
    if(get_msg_arg_int(1) != 2)
    {
        return PLUGIN_CONTINUE;
    }
    
    // show your own menu
    TeamMenu(iReceiver);
    return PLUGIN_HANDLED;
}

public TeamMenu(id)
{
    if (act_menu[id] == 1)
    {
        /*if(g_bChange[id] && !is_user_admin(id))
    {
        act_menu[id] = 0;
        client_print(id, print_chat, "Only One time in round!")
        return PLUGIN_HANDLED;
    }*/
    
    ShowMenu(id);
    act_menu[id] = 0;
    
    }
    else
    {
        new menu = menu_create("\dc-s.net.ua","func_menu");
        menu_setprop( menu,MPROP_NUMBER_COLOR,"\w")
        menu_additem( menu,"\rВыбрать команду")
        menu_additem( menu,"\yМеню сервера^nновая строка")
        menu_additem( menu,"\rПодпишись:^nновая строка^n")
        menu_setprop( menu, MPROP_EXITNAME, "Выход");
        menu_display(id, menu, 0);
        
    }
    act_menu[id] = 0;
    return PLUGIN_HANDLED;
}

    
public func_menu(id, menu, key)
{
  key++

  if(key==1)
    {
        act_menu[id] = 1;
        TeamMenu(id)
    }
  
  if(key==2) client_cmd(id,"amx_menu")
  
  return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/



Плагин предоставляется как есть,настраивается в исходнике который под спойлером
^n = новая строка

У меня данный плагин использую в связке с
auto_join_on_connect.sma

Код
/* AMX Mod X
*   Auto Join on Connect
*
* (c) Copyright 2007 by VEN
*
* This file is provided as is (no warranties)
*
*     DESCRIPTION
*       Plugin allow to players automatically join team/team&class on connect.
*
*     CVARS
*       ajc_team (0: OFF, N: team index, 5: auto team, default: 5) - controls team join
*       ajc_class (0: OFF, N: class index, 5: auto class, default: 5) - controls class join
*       ajc_imm (0: OFF, 1: ON, default: 1) - don't affect on immuned players (ON/OFF)
*
*     CREDITS
*       Major__ - inquiry
*/

#include <amxmodx>

#define PLUGIN_NAME "Auto Join on Connect"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"

#define IMMUNITY_ACCESS_LEVEL ADMIN_IMMUNITY

#define AUTO_TEAM_JOIN_DELAY 0.5

#define TEAM_SELECT_VGUI_MENU_ID 2

new g_pcvar_team
new g_pcvar_class
new g_pcvar_imm

public plugin_init() {
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

    register_message(get_user_msgid("ShowMenu"), "message_show_menu")
    register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")

    g_pcvar_team = register_cvar("ajc_team", "5")
    g_pcvar_class = register_cvar("ajc_class", "5")
    g_pcvar_imm = register_cvar("ajc_imm", "1")
}

public message_show_menu(msgid, dest, id) {
    if (!should_autojoin(id))
        return PLUGIN_CONTINUE

    static team_select[] = "#Team_Select"
    static menu_text_code[sizeof team_select]
    get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
    if (!equal(menu_text_code, team_select))
        return PLUGIN_CONTINUE

    set_force_team_join_task(id, msgid)

    return PLUGIN_HANDLED
}

public message_vgui_menu(msgid, dest, id) {
    if (get_msg_arg_int(1) != TEAM_SELECT_VGUI_MENU_ID || !should_autojoin(id))
        return PLUGIN_CONTINUE

    set_force_team_join_task(id, msgid)

    return PLUGIN_HANDLED
}

bool:should_autojoin(id) {
    return (get_pcvar_num(g_pcvar_team) && !get_user_team(id) && !task_exists(id) && (!get_pcvar_num(g_pcvar_imm) || !(get_user_flags(id) & IMMUNITY_ACCESS_LEVEL)))
}

set_force_team_join_task(id, menu_msgid) {
    static param_menu_msgid[2]
    param_menu_msgid[0] = menu_msgid
    set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
}

public task_force_team_join(menu_msgid[], id) {
    if (get_user_team(id))
        return

    static team[2], class[2]
    get_pcvar_string(g_pcvar_team, team, sizeof team - 1)
    get_pcvar_string(g_pcvar_class, class, sizeof class - 1)
    force_team_join(id, menu_msgid[0], team, class)
}

stock force_team_join(id, menu_msgid, /* const */ team[] = "5", /* const */ class[] = "0") {
    static jointeam[] = "jointeam"
    if (class[0] == '0') {
        engclient_cmd(id, jointeam, team)
        return
    }

    static msg_block, joinclass[] = "joinclass"
    msg_block = get_msg_block(menu_msgid)
    set_msg_block(menu_msgid, BLOCK_SET)
    engclient_cmd(id, jointeam, team)
    engclient_cmd(id, joinclass, class)
    set_msg_block(menu_msgid, msg_block)
}



unlimited_teamchanges.sma

Код
/*
    Copyleft 2014 @ HamletEagle
    Plugin Theard: https://forums.alliedmods.net/showthread.php?t=241943

    Unlimited team changes is free software;
    you can redistribute it and/or modify it under the terms of the
    GNU General Public License as published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Furiens; if not, write to the
    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.

    ChangeLog:
    V 1.0:
    +Initial Release
    V 1.1:
    + Added jointeam command
    V 1.2:
    + Arranged the code
    + Added plugin_enabled cvar
    V 1.3:
    + Rewrite all code from scratch
*/

#include < amxmodx >
#include < fakemeta >

#define PLUGIN  "Unlimited Team Changes"
#define VERSION "1.3"
#define AUTHOR  "HamletEagle"

#define BITS 1<<8
#define ADMIN_ACCES ADMIN_KICK

const m_bHasChangeTeamThisRound = 125
const XO_PLAYER = 5

enum _: eCvarsData
{
    cvar_OnlyAdmins,
    cvar_Enable
}

new g_iCvars[ eCvarsData ]
new g_iCachedCvars[ eCvarsData ]

new _pfnClientCommand

public plugin_init( )
{
    register_plugin
    (
        .plugin_name  = PLUGIN,
        .version      = VERSION,
        .author       = AUTHOR
    )
    
    g_iCvars[ cvar_OnlyAdmins ] = register_cvar( "only_admins_can_use", "1" )
    /*
    0 - all players
    1 - only admins with specified flag
    */

    g_iCvars[ cvar_Enable ] = register_cvar( "plugin_enabled", "1" )
    /*
    0 - plugin disabled
    1 - plugin enabled
    */
    
    _pfnClientCommand = register_forward( FM_ClientCommand, "pfnClientCommand", false )
    register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )  
    
    register_clcmd( "chooseteam", "ClientCommand_ChTeam" )
    register_clcmd( "jointeam"  , "ClientCommand_ChTeam" )
}

public plugin_cfg( )
{
    UTIL_CacheCvars( )
}

public pfnClientCommand( id )
{
    //We need to catch the exact moment, so the cached cvar is not reliable here
    if( get_pcvar_num( g_iCvars[ cvar_Enable ] ) == 0 )
    {
        log_amx( "Plugin paused by cvar" )
        unregister_forward( FM_ClientCommand, _pfnClientCommand, false )
        pause( "a" )
    }
}

public Event_NewRound( )
{
    UTIL_CacheCvars( )    
}

public ClientCommand_ChTeam( id )
{
    switch( g_iCachedCvars[ cvar_OnlyAdmins ] )
    {
        case 0 :
        {
            set_pdata_int( id, m_bHasChangeTeamThisRound , get_pdata_int( id, m_bHasChangeTeamThisRound, XO_PLAYER ) &  ~BITS, XO_PLAYER )    
        }
        
        case 1 :
        {
            if( get_user_flags( id ) & ADMIN_ACCES )
            {
                set_pdata_int( id, m_bHasChangeTeamThisRound , get_pdata_int( id, m_bHasChangeTeamThisRound, XO_PLAYER ) &  ~BITS, XO_PLAYER )    
            }
        }
        default:
        {
            return 0
        }
    }
    return 0
}

UTIL_CacheCvars( )
{
    for( new i; i < sizeof g_iCvars; i++ )
    {
        g_iCachedCvars[ i ] = get_pcvar_num( g_iCvars[ i ] )
    }    
}




menufront.amxx

Отредактировал: user.gameover.user, - 8.11.2014, 6:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   Цитировать сообщение
ekkko
сообщение 1.3.2015, 15:28
Сообщение #2
Стаж: 9 лет 4 месяца

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

Спасибо)) derisive.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rGame
сообщение 2.3.2015, 16:00
Сообщение #3
Стаж: 10 лет

Сообщений: 390
Благодарностей: 629
Полезность: 1016

Возможно сделать что бы при входе показывало Выбор команды , а на М было меню сервера?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 2.3.2015, 16:20
Сообщение #4


Стаж: 9 лет 3 месяца

Сообщений: 2723
Благодарностей: 533
Полезность: 40

Цитата(rGame @ 2.3.2015, 18:00) *
Возможно сделать что бы при входе показывало Выбор команды , а на М было меню сервера?

Ну при входе выбор команды и так будет показываться,Если же вы уберёте эту менюшку другим плагином)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rGame
сообщение 2.3.2015, 16:22
Сообщение #5
Стаж: 10 лет

Сообщений: 390
Благодарностей: 629
Полезность: 1016

Цитата(ThePhoenix @ 2.3.2015, 16:20) *
Ну при входе выбор команды и так будет показываться,Если же вы уберёте эту менюшку другим плагином)

Уже сделали. smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThePhoenix
сообщение 2.3.2015, 16:25
Сообщение #6


Стаж: 9 лет 3 месяца

Сообщений: 2723
Благодарностей: 533
Полезность: 40

Цитата(rGame @ 2.3.2015, 17:22) *
Уже сделали. smile.gif

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