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

Меню / Общий лимит на несколько раундов

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

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

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

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

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

Меню / Общий лимит на несколько раундов

Сообщение dvahitov95 » 24 сен 2017, 13:55

Всем привет. Как сделать общий лимит на какой-то пункт из меню на несколько раундов?

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

new g_limit

public plugin_init()
{
    
register_event("HLTV""new_round""a""1=0""2=0")
    
register_clcmd("menu""show_menu")
}

public 
new_round()
{
    
g_limit 1
}

public 
show_menu(id)
{
    new 
menu menu_create("\yMenu:""func_menu")
    
menu_additem(menu"Пункт 1")
    
menu_additem(menu"Пункт 2")
    
menu_additem(menu"Пункт 3")

    
menu_setprop(menuMPROP_EXITNAME"Выход")
    
menu_display(idmenu0)
    return 
PLUGIN_HANDLED
}

public 
func_menu(idmenukey)
{
    
key ++
    switch(
key)
    {
        case 
1:
        {
            
client_print(idprint_chat"бла")
            
g_limit ++
        }
        case 
2:
        {
            
client_print(idprint_chat"бла-бла")
        }
        case 
3:
        {
            
client_print(idprint_chat"бла-бла-бла")
        }
    }
}  


Например сделать, чтобы "Пункт 1" можно было взять 1 раз в 3 раунда (1 игроку ток).
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Меню / Общий лимит на несколько раундов

Сообщение Lethargy » 24 сен 2017, 19:10

С синтаксисом pawn не дружу, так что если где-то ошибка - говорите.
public new_round() вызывается каждый раунд?
Получается как-то так.

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

new gRoundCounter = 0; //Счетчик раундов
new gSlotNextUse_1 = -10; //Отрицательное число что бы можно было сразу использовать в 1-м раунде
new gSlotNextUse_2 = -10;
new gSlotNextUse_3 = -10;

public plugin_init()
{
    register_event("HLTV", "new_round", "a", "1=0", "2=0")
    register_clcmd("menu", "show_menu")
}

public new_round()
{
    gRoundCounter++; //Каждый раунд прибавляем еденичку
}

public show_menu(id)
{
    new menu = menu_create("\yMenu:", "func_menu")
    menu_additem(menu, "Пункт 1")
    menu_additem(menu, "Пункт 2")
    menu_additem(menu, "Пункт 3")

    menu_setprop(menu, MPROP_EXITNAME, "Выход")
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}

public func_menu(id, menu, key)
{
    key ++
    switch(key)
    {
        case 1:
        {
            if(gSlotNextUse_1 <= gRoundCounter){
                gSlotNextUse_1 = gRoundCounter + (задержка в раундах) //число
                client_print(id, print_chat, "бла")
            }
        }
        case 2:
        {
            if(gSlotNextUse_2 <= gRoundCounter){
                gSlotNextUse_2 = gRoundCounter + 2
                client_print
(id, print_chat, "бла-бла")
            }
        }
        case 3:
        {
            if(gSlotNextUse_3 <= gRoundCounter){
                gSlotNextUse_3 = gRoundCounter + 1
                client_print
(id, print_chat, "бла-бла-бла")
        }
    }
}
  



Добавлено спустя 50 секунд:
Наверное еще надо break ставить в каждом case
Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: Меню / Общий лимит на несколько раундов

Сообщение dvahitov95 » 25 сен 2017, 18:19

Lethargy писал(а):С синтаксисом pawn не дружу, так что если где-то ошибка - говорите.
public new_round() вызывается каждый раунд?
Получается как-то так.

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

new gRoundCounter = 0; //Счетчик раундов
new gSlotNextUse_1 = -10; //Отрицательное число что бы можно было сразу использовать в 1-м раунде
new gSlotNextUse_2 = -10;
new gSlotNextUse_3 = -10;

public plugin_init()
{
    register_event("HLTV", "new_round", "a", "1=0", "2=0")
    register_clcmd("menu", "show_menu")
}

public new_round()
{
    gRoundCounter++; //Каждый раунд прибавляем еденичку
}

public show_menu(id)
{
    new menu = menu_create("\yMenu:", "func_menu")
    menu_additem(menu, "Пункт 1")
    menu_additem(menu, "Пункт 2")
    menu_additem(menu, "Пункт 3")

    menu_setprop(menu, MPROP_EXITNAME, "Выход")
    menu_display(id, menu, 0)
    return PLUGIN_HANDLED
}

public func_menu(id, menu, key)
{
    key ++
    switch(key)
    {
        case 1:
        {
            if(gSlotNextUse_1 <= gRoundCounter){
                gSlotNextUse_1 = gRoundCounter + (задержка в раундах) //число
                client_print(id, print_chat, "бла")
            }
        }
        case 2:
        {
            if(gSlotNextUse_2 <= gRoundCounter){
                gSlotNextUse_2 = gRoundCounter + 2
                client_print
(id, print_chat, "бла-бла")
            }
        }
        case 3:
        {
            if(gSlotNextUse_3 <= gRoundCounter){
                gSlotNextUse_3 = gRoundCounter + 1
                client_print
(id, print_chat, "бла-бла-бла")
        }
    }
}
  



Добавлено спустя 50 секунд:
Наверное еще надо break ставить в каждом case

а зачем break?
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Меню / Общий лимит на несколько раундов

Сообщение артист666 » 25 сен 2017, 18:40

В павне не нужно break ставить, тут и так прервётся выполнение.
Кроме того, тут можно делать перечисления в 1 строку, сработает при любом из чисел:
Код: Выделить всё
case 1, 4, 6, 54


И ставить "от сих до сих"(правда компилятор может зависнуть при большом диапазоне):
Код: Выделить всё
case 1..34


Рестарт нужно учитывать, сбрасывать на 0...
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Меню / Общий лимит на несколько раундов

Сообщение dvahitov95 » 25 сен 2017, 22:53

артист666 писал(а):В павне не нужно break ставить, тут и так прервётся выполнение.
Кроме того, тут можно делать перечисления в 1 строку, сработает при любом из чисел:
Код: Выделить всё
case 1, 4, 6, 54:


И ставить "от сих до сих"(правда компилятор может зависнуть при большом диапазоне):
Код: Выделить всё
case 1..34:


Рестарт нужно учитывать, сбрасывать на 0...

а что будет, если при рестарте не сбрасывать на 0?
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Меню / Общий лимит на несколько раундов

Сообщение артист666 » 25 сен 2017, 23:53

Останется 1 игрок на сервере, зайдет 2й, а раунды так и будут считаться.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Меню / Общий лимит на несколько раундов

Сообщение dvahitov95 » 26 сен 2017, 01:42

Так: до использования пункта надо было ждать 4 раунда, заходит игрок, производится рестарт, уже до использования пункта надо ждать 3 раунда?
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11