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

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

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

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

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

Статус пользователя Captain
сообщение 24.9.2017, 14:37
Сообщение #1
Стаж: 12 лет

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

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

Cкрытый текст
Код:
#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(menu, MPROP_EXITNAME, "Выход")
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}

public func_menu(id, menu, key)
{
key ++
switch(key)
{
case 1:
{
client_print(id, print_chat, "бла")
g_limit ++
}
case 2:
{
client_print(id, print_chat, "бла-бла")
}
case 3:
{
client_print(id, print_chat, "бла-бла-бла")
}
}
}


Например сделать, чтобы "Пункт 1" можно было взять 1 раз в 3 раунда (1 игроку ток).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fullserver
сообщение 24.9.2017, 14:45
Сообщение #2


Иконка группы

Стаж: 11 лет

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Cкрытый текст
Код:
#include <amxmodx>

new g_limit[33]

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

public client_putinserver(id)
g_limit[id] = 3

public new_round()
{
new players[32], player, pnum;
get_players(players, pnum, "ch");
for(new i = 0; i < pnum; i++)
{
player = players[i];
++g_limit[player]
}
}

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(g_limit[id]<3){
client_print(id, print_chat, "Подождите %d раунда, перед тем как воспользоваться", 3-g_limit[id])
return;
}
client_print(id, print_chat, "бла")
g_limit = 0
}
case 2:
{
client_print(id, print_chat, "бла-бла")
}
case 3:
{
client_print(id, print_chat, "бла-бла-бла")
}
}
}


Причина: Кое-что подправил
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 24.9.2017, 15:32
Сообщение #3
Стаж: 12 лет

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

Fullserver, а есть ещё другие варианты решения вопроса? Смущает Код:
3-g_limit[id]
и

Код:
public client_putinserver(id)
g_limit[id] = 3


Отредактировал: Captain, - 24.9.2017, 15:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 24.9.2017, 15:42
Сообщение #4


Иконка группы

Стаж: 11 лет

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Не работает плагин?

Чем смущает то? Ну можно сделать так, но ничего не изменится.

Cкрытый текст
Код:
#include <amxmodx>

new g_limit[33]

#define ROUNDS 3

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

public client_putinserver(id)
g_limit[id] = ROUNDS

public new_round()
{
new players[32], player, pnum;
get_players(players, pnum, "ch");
for(new i = 0; i < pnum; i++)
{
player = players[i];
++g_limit[player]
}
}

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(g_limit[id]<3){
client_print(id, print_chat, "Подождите %d раунда, перед тем как воспользоваться", ROUNDS-g_limit[id])
return;
}
client_print(id, print_chat, "бла")
g_limit = 0
}
case 2:
{
client_print(id, print_chat, "бла-бла")
}
case 3:
{
client_print(id, print_chat, "бла-бла-бла")
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 24.9.2017, 16:03
Сообщение #5
Стаж: 12 лет

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

Fullserver, ну мне нужно максимально простой вариант.

Как насчёт такого?

Cкрытый текст
Код:
#include <amxmodx>

static g_limit

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

public new_round()
{
if(g_limit > 0 ) g_limit --
}

public round_restart()
{
g_limit = 0
}

public show_menu(id)
{
new menu = menu_create("\yMenu:", "func_menu")

if(g_limit > 0)
menu_additem(menu, "\dПункт 1 [%d]", g_limit)
else
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:
{
client_print(id, print_chat, "бла")
g_limit = 3
}
case 2:
{
client_print(id, print_chat, "бла-бла")
}
case 3:
{
client_print(id, print_chat, "бла-бла-бла")
}
}
}


Отредактировал: Fullserver, - 24.9.2017, 16:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 24.9.2017, 16:12
Сообщение #6


Иконка группы

Стаж: 11 лет

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Cкрытый текст
Код:
#include <amxmodx>

new g_limit[33]

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

public new_round(){
new players[32], player, pnum;
get_players(players, pnum, "ch");
for(new i = 0; i < pnum; i++)
{
player = players[i];
if(g_limit[player] > 0 ) g_limit[player] --
}
}

public client_disconnect(id)
g_limit[id] = 0

public round_restart()
{
new_round()
}

public show_menu(id)
{
new menu = menu_create("\yMenu:", "func_menu")

if(g_limit[id] > 0)
menu_additem(menu, "\dПункт 1 [раундов до использования: %d]", g_limit[id])
else
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(g_limit[id] > 0){
client_print(id, print_center, "Подождите %d раунда, перед тем как воспользоваться", g_limit[id])
show_menu(id)
return;
}
client_print(id, print_chat, "бла")
g_limit[id] = 3
}
case 2:
{
client_print(id, print_chat, "бла-бла")
}
case 3:
{
client_print(id, print_chat, "бла-бла-бла")
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 24.9.2017, 16:43
Сообщение #7
Стаж: 12 лет

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

Fullserver, ну я не пойму, почему так g_limit[33] и get_players используете, если можно g_limit только использовать и получать не нужно кол-во игроков
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 24.9.2017, 16:44
Сообщение #8


Иконка группы

Стаж: 11 лет

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Captain, Вам ведь нужно для каждого игрока, а не для всех.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 24.9.2017, 17:26
Сообщение #9
Стаж: 12 лет

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

Цитата(Fullserver @ 24.9.2017, 17:44) *
Captain, Вам ведь нужно для каждого игрока, а не для всех.
название темы же "Общий лимит на несколько раундов"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 24.9.2017, 17:51
Сообщение #10


Иконка группы

Стаж: 11 лет

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Цитата
сделать, чтобы "Пункт 1" можно было взять 1 раз в 3 раунда (1 игроку ток).

Как-то детальнее и понятнее выражайтесь тогда.

Хотите, чтобы в случае, когда 1 игрок выбрал пункт меню, на 3 раунда данный пункт блокировался для всех присутствующих игроков, независимо открывали они меню или нет?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 25.9.2017, 16:13
Сообщение #11
Стаж: 12 лет

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

Fullserver, ну, 1 игроку. Если бы я написал всем, то ваш код верный был бы.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fullserver
сообщение 25.9.2017, 16:19
Сообщение #12


Иконка группы

Стаж: 11 лет

Сообщений: 5122
Благодарностей: 2100
Полезность: 1394

Captain, ваш код как раз всем, а мой 1 игроку. Вижу, вы не понимаете принцип работы языка pawn. Чтобы сделать акцент на каком-либо игроке нужно таргетировать его id. Функция get_players собирает вкучу всех игроков, после чего выполняется таргетирование конкретного человека, который выбрал пункт меню.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 25.9.2017, 21:02
Сообщение #13
Стаж: 12 лет

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

Цитата(Fullserver @ 25.9.2017, 17:19) *
Captain, ваш код как раз всем, а мой 1 игроку. Вижу, вы не понимаете принцип работы языка pawn. Чтобы сделать акцент на каком-либо игроке нужно таргетировать его id. Функция get_players собирает вкучу всех игроков, после чего выполняется таргетирование конкретного человека, который выбрал пункт меню.

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