Русское сообщество по скриптингу

Открыть меню 1 раз за раунд  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Открыть меню 1 раз за раунд

Сообщение Husen » 08 май 2019, 19:10

Знаю , что тема заезженная но даже по инструкции у меня не выходит.
Вот само меню , покажите пожалуйста как сделать , что открыть его могли 1 раз за раунд.

Если кто есть добрый сегодня , можете отдельно написать как сделать чтобы ещё открывалось с 3 раунда)
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fakemeta> 
#include <cstrike>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>
#include <fun>


#define PLUGIN  "Pers Menu"
#define VERSION "1.0"
#define AUTHOR  "Volodarsky"

new SayText
new keys 
= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0

     public plugin_init
()
{
     register_plugin(PLUGIN, VERSION, AUTHOR)
     register_menu("Menu 1", keys, "func_menu") 
     register_concmd
("elite_guns", "Server_Menu")
}

     public Server_Menu(id)
{
            if(!(get_user_flags(id) & ADMIN_LEVEL_A))
        {
        print_col_chat(id,"^4[PBH] ^1Меню только для ^3элиты")
        return PLUGIN_HANDLED
        
}
     
     new name
[32]
     get_user_name(id, name, 31)
     static menu[650], iLen
     iLen 
= 0
     iLen 
= formatex(menu[iLen], charsmax(menu) - iLen, "\r[~] \wОружейка \rЭЛИТЫ^n\d[\r~\d]\dЗа раздачу оружия-бан^n^n")
    
     iLen 
+= formatex(menu[iLen], charsmax(menu) - iLen, "\y[•] \wСнайперка \r[TRG]^n")
     keys |= MENU_KEY_1
     
     iLen 
+= formatex(menu[iLen], charsmax(menu) - iLen, "\y[•] \wВинтовка \r[AK47 DRAGON]^n")
     keys |= MENU_KEY_1
     
     iLen 
+= formatex(menu[iLen], charsmax(menu) - iLen, "\y[•] \wВинтовка \r[M4A1 DRAGON^n^n")
     keys |= MENU_KEY_2
     
     iLen 
+= formatex(menu[iLen], charsmax(menu) - iLen, "\r[0] \wЗакрыть^n\d[\r~\d]\dВ комплекте пистолет Infinity")
     keys |= MENU_KEY_0

     show_menu
(id, keys, menu, -1, "Menu 1")
     return PLUGIN_HANDLED
}

     public func_menu(id, key)
{
     switch(key)
    {

            case 0: client_cmd(id, "trg42;infinity")
            case 1: client_cmd(id, "akdragon;infinity")
            case 2: client_cmd(id, "m4a1dragon;infinity")
    }
     return PLUGIN_HANDLED
}

     stock print_col_chat(const id, const input[], any:...) 
{
     new count = 1, players[32];
     static msg[191];
     vformat(msg, 190, input, 3);
     replace_all(msg, 190, "!g", "^4"); // Green Color (Зеленый)
     replace_all(msg, 190, "!y", "^1"); // Default Color (Желтый)
     replace_all(msg, 190, "!t", "^3"); // Team Color (Цвет Тимы)
     if (id) players[0] = id; else get_players(players, count, "ch");
    {
        for ( new i = 0; i < count; i++ )
        {
            if ( is_user_connected(players[i]) )
            {
                message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}
Аватара пользователя
Husen
 
Сообщения: 20
Зарегистрирован: 08 май 2019, 19:02
Благодарил (а): 11 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Открытие меню определённое кол-во раз за раунд

Сообщение Husen » 17 май 2019, 13:28

Добрый день.
Подобный статей очень много , но у меня всё же мало что получается . Поэтому , пожалуйста , на примере этого кода объясните , как это делается? И укажите , где менять значение сколько раз открывать меню
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fakemeta> 
#include <cstrike>

#define PLUGIN  "Pers Menu"
#define VERSION "1.0"
#define AUTHOR  "Volodarsky"

new SayText
new keys 
= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0

     public plugin_init
()
{
     register_plugin(PLUGIN, VERSION, AUTHOR)
     register_menu("Menu 1", keys, "func_menu") 
     register_concmd
("vip_menu", "Server_Menu")
     register_concmd("vip_menu", "Server_Menu")
}

     public Server_Menu(id)
{
            if(!(get_user_flags(id) & ADMIN_LEVEL_A))
        {
        print_col_chat(id,"^4[AMXX] ^1Меню только для ^3ELITE")
        return PLUGIN_HANDLED
        
}
     
     new name
[32]
     get_user_name(id, name, 31)
     static menu[650], iLen
     iLen 
= 0
     iLen 
= formatex(menu[iLen], charsmax(menu) - iLen, "\r[~] \wЭлитное Меню^n^n")
    
     iLen 
+= formatex(menu[iLen], charsmax(menu) - iLen, "\y[•] \wСкины Оружий^n^n")
     keys |= MENU_KEY_1
     
     iLen 
+= formatex(menu[iLen], charsmax(menu) - iLen, "\r[0] \wЗакрыть")
     keys |= MENU_KEY_0

     return PLUGIN_HANDLED
}

     public func_menu(id, key)
{
     switch(key)
    {
            case 0: client_cmd(id, "elite_guns")
    }
     return PLUGIN_HANDLED
}

     stock print_col_chat(const id, const input[], any:...) 
{
     new count = 1, players[32];
     static msg[191];
     vformat(msg, 190, input, 3);
     replace_all(msg, 190, "!g", "^4"); // Green Color (Зеленый)
     replace_all(msg, 190, "!y", "^1"); // Default Color (Желтый)
     replace_all(msg, 190, "!t", "^3"); // Team Color (Цвет Тимы)
     if (id) players[0] = id; else get_players(players, count, "ch");
    {
        for ( new i = 0; i < count; i++ )
        {
            if ( is_user_connected(players[i]) )
            {
                message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


Добавлено спустя 5 минут 3 секунды:
И если можно , просто отдельный код чтобы открывать с 3 раунда.
Запишу в блокнот :D
Аватара пользователя
Husen
 
Сообщения: 20
Зарегистрирован: 08 май 2019, 19:02
Благодарил (а): 11 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: Открытие меню определённое кол-во раз за раунд

Сообщение Lyse » 17 май 2019, 14:53

Husen, создай глобальную, каждый раз при открытии меню увеличивай значение переменной на 1, и делай проверку в нужном месте

Добавлено спустя 3 минуты 17 секунд:
Код: Выделить всё

new g_iCounter
;

ShowMenu()
{
 if(g_iCounter > 3)
 {
  return;
 }

  // меню

 g_iCounter++;
}
Аватара пользователя
Lyse
 
Сообщения: 18
Зарегистрирован: 12 авг 2018, 23:03
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Опыт программирования: Около года
Языки программирования: java
AMXX

Re: Открытие меню определённое кол-во раз за раунд

Сообщение Husen » 17 май 2019, 15:43

Lyse писал(а):Husen, создай глобальную, каждый раз при открытии меню увеличивай значение переменной на 1, и делай проверку в нужном месте

Добавлено спустя 3 минуты 17 секунд:
Код: Выделить всё

new g_iCounter
;

ShowMenu()
{
 if(g_iCounter > 3)
 {
  return;
 }

  // меню

 g_iCounter++;
}
 



Ты бы мог в самом коде это показать?
Аватара пользователя
Husen
 
Сообщения: 20
Зарегистрирован: 08 май 2019, 19:02
Благодарил (а): 11 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: Открыть меню 1 раз за раунд

Сообщение liFe iS GoOD » 18 май 2019, 03:27

Husen, ознакомьтесь , пожалуйста , с Вы должны зарегистрироваться, чтобы видеть ссылки., в частности с 14 пунктом:

Создавать дубликаты предыдущих своих тем. Темы дубликаты сливаются в одну. За повторное создание дубля своей темы выдается предупреждение.
Аватара пользователя
liFe iS GoOD
Модератор
 
Сообщения: 1416
Зарегистрирован: 24 май 2012, 19:48
Благодарил (а): 116 раз.
Поблагодарили: 472 раз.

Re: Открыть меню 1 раз за раунд  [Решено]

Сообщение Lyse » 18 май 2019, 12:54

Husen,
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1

#define LIMIT_ON_OPENING 3 // сколько раз можно открывать меню за раунд
#define LIMIT_WHAT_ROUND 2 // с какого раунда будет работать меню

const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0;

enum e_PlayerData
{
    DATA_LIMIT_ON_OPENING,
    DATA_LIMIT_WHAT_ROUND,
};

new g_PlayerData[33][e_PlayerData];

public plugin_init()
{
    register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0");

    register_menu("test_menu", KEYSMENU, "HandleMenu");

    register_clcmd("say /show", "Command_ShowMenu");
}

public Event_RoundStart()
{
    new players[32], pnum; get_players(players, pnum, "h");
    for(new i = 0, player; i < pnum; i++)
    {
        player = players[i];
        g_PlayerData[player][DATA_LIMIT_ON_OPENING] = 0;
        g_PlayerData[player][DATA_LIMIT_WHAT_ROUND]++;
    }
}
public Command_ShowMenu(id)
{
    if(!is_user_connected(id)) return;

    if(g_PlayerData[id][DATA_LIMIT_ON_OPENING] >= LIMIT_ON_OPENING
    
|| g_PlayerData[id][DATA_LIMIT_WHAT_ROUND] < LIMIT_WHAT_ROUND)
        return;

    new menu[300], len = 0;

    len += formatex(menu[len], charsmax(menu) - len, "\yTest menu^n^n\w1. Menu item 1^n2. Menu item 2^n^n0. Exit");

    show_menu(id, KEYSMENU, menu, -1, "test_menu");

    g_PlayerData[id][DATA_LIMIT_ON_OPENING]++;
}
public HandleMenu(id, item)
{
    if(!is_user_connected(id)) return PLUGIN_HANDLED;

    const MENU_KEYS_1 = 0;
    const MENU_KEYS_2 = 1;

    switch(item)
    {
        case MENU_KEYS_1: client_print(id, print_chat, "Menu item 1");
        case MENU_KEYS_2: client_print(id, print_chat, "Menu item 2");
        default: return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;
}
надеюсь поймешь суть
Аватара пользователя
Lyse
 
Сообщения: 18
Зарегистрирован: 12 авг 2018, 23:03
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Опыт программирования: Около года
Языки программирования: java
AMXX

Re: Открыть меню 1 раз за раунд

Сообщение 3BEPb » 19 май 2019, 03:44

Lyse писал(а):Husen,
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1

#define LIMIT_ON_OPENING 3 // сколько раз можно открывать меню за раунд
#define LIMIT_WHAT_ROUND 2 // с какого раунда будет работать меню

const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_0;

enum e_PlayerData
{
    DATA_LIMIT_ON_OPENING,
    DATA_LIMIT_WHAT_ROUND,
};

new g_PlayerData[33][e_PlayerData];

public plugin_init()
{
    register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0");

    register_menu("test_menu", KEYSMENU, "HandleMenu");

    register_clcmd("say /show", "Command_ShowMenu");
}

public Event_RoundStart()
{
    new players[32], pnum; get_players(players, pnum, "h");
    for(new i = 0, player; i < pnum; i++)
    {
        player = players[i];
        g_PlayerData[player][DATA_LIMIT_ON_OPENING] = 0;
        g_PlayerData[player][DATA_LIMIT_WHAT_ROUND]++;
    }
}
public Command_ShowMenu(id)
{
    if(!is_user_connected(id)) return;

    if(g_PlayerData[id][DATA_LIMIT_ON_OPENING] >= LIMIT_ON_OPENING
    
|| g_PlayerData[id][DATA_LIMIT_WHAT_ROUND] < LIMIT_WHAT_ROUND)
        return;

    new menu[300], len = 0;

    len += formatex(menu[len], charsmax(menu) - len, "\yTest menu^n^n\w1. Menu item 1^n2. Menu item 2^n^n0. Exit");

    show_menu(id, KEYSMENU, menu, -1, "test_menu");

    g_PlayerData[id][DATA_LIMIT_ON_OPENING]++;
}
public HandleMenu(id, item)
{
    if(!is_user_connected(id)) return PLUGIN_HANDLED;

    const MENU_KEYS_1 = 0;
    const MENU_KEYS_2 = 1;

    switch(item)
    {
        case MENU_KEYS_1: client_print(id, print_chat, "Menu item 1");
        case MENU_KEYS_2: client_print(id, print_chat, "Menu item 2");
        default: return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;
надеюсь поймешь суть


Увы он не учится писать плагины, он попросил сделать за него. И ты с этим хорошо справился!

Добавлено спустя 1 минуту 48 секунд:
А в обще если будет блокироваться после одного использования, то и булевым массивом можно сделать.
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: Открыть меню 1 раз за раунд

Сообщение Husen » 20 май 2019, 23:55

Увы , тугодумам вроде тебя не понятно , что для того чтобы писать их надо иметь перед глазами пример
Аватара пользователя
Husen
 
Сообщения: 20
Зарегистрирован: 08 май 2019, 19:02
Благодарил (а): 11 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Re: Открыть меню 1 раз за раунд

Сообщение 3BEPb » 22 май 2019, 03:20

Пример был, но тебе этого было мало, да и в инете примеров и статей хватает. Нужно лишь уметь искать и немного напрягать мозг.
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 12