Вопрос по скрипту MENU

/_Parlament_\

Участник
Сообщения
134
Реакции
9
Видел в плагинах, в меню вылезает так [-] или [+] как это сделать?
и еще вопрос как сохранить это?
И на счет файла cfg, как сделать чтобы в cfg/vip/vip.cfg
можно было редактировать чат???
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #2
в меню вылезает так [-] или [+] как это сделать?
Это динамичное меню, работает по принципу форматирования строки. Для этого при нажатии на пункт, мы форматируем его строчку и изменяем + или - в зависимости от переменной (например bool).
 

/_Parlament_\

Участник
Сообщения
134
Реакции
9
R1KO, рико )
Вот с этим, как вызвать одну из них
PHP:
VIP_MENU(client)  
{  
    decl Handle:S_Menu; 
    SetMenuTitle(S_Menu = CreateMenu(InfoMenuHandler), "VIP Menu:"); 
    AddMenuItem(S_Menu, "HP", HP_ENABLED[client] ? "Здоровье [-]":"Здоровье [+]"); 
    AddMenuItem(S_Menu, "ARMOR", BR_ENABLED[client] ? "Бронь [-]":"Бронь [+]"); 
    DisplayMenu(S_Menu, client, MENU_TIME_FOREVER);  
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
/_Parlament_\, ну в твоем случае просто пересоздавать меню.
Но если меню не пересоздается каждый раз то тут 2 способа:
1. Удалять пунт и вставлять измененный
2. Работать с отображением пунктов в каллбеке меню
 

/_Parlament_\

Участник
Сообщения
134
Реакции
9
R1KO,
int HP_ENABLED[MAXPLAYERS+1]; вот начало
а чтобы эта функция работала, как надо?
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Пример:

decl String:info[40];
Format(info, sizeof(info), "Здоровье [%s]", b_Health[client]);
AddMenuItem(menu, "1", info);
 

/_Parlament_\

Участник
Сообщения
134
Реакции
9
VIP_MENU(client)
{
decl Handle:S_Menu;
SetMenuTitle(S_Menu = CreateMenu(InfoMenuHandler), "VIP Menu:");
AddMenuItem(S_Menu, "HP", HP_ENABLED[client] ? "Здоровье [-]":"Здоровье [+]");
AddMenuItem(S_Menu, "ARMOR", BR_ENABLED[client] ? "Бронь [-]":"Бронь [+]");
DisplayMenu(S_Menu, client, MENU_TIME_FOREVER);
}
На счет этого, дайте пример... А лучше урок. Тк все хотят знать как это сделать
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #10
На счет этого, дайте пример...
PHP:
bool g_bHPEnabled[MAXPLAYERS+1];
bool g_bArmEnabled[MAXPLAYERS+1];

void VIP_MENU(int client)
{
	Menu menu = new Menu(InfoMenuHandler);
	menu.SetTitle("VIP Menu:");
	char buffer[48];
	Format(buffer, sizeof(buffer), "[%s] Здоровье", (g_bHPEnabled) ? '-' : '+');
	menu.AddItem("HP", buffer);
	Format(buffer, sizeof(buffer), "[%s] Бронь", (g_bArmEnabled) ? '-' : '+');
	menu.AddItem("ARMOR", buffer);
	menu.Display(client, MENU_TIME_FOREVER);
}

public int InfoMenuHandler(Menu menu, MenuAction action, int param1, int param2)
{
	switch (action)
	{
		case MenuAction_End: menu.Close();
		case MenuAction_Select:
		{
			// Где param1 = client и param 2 = позиция в меню, начинается с 0
			if (!param2)
			{
				// Пункт с HP...
				g_bHPEnabled[param1] = !g_bHPEnabled[param1];
			}
			else if (param2 == 1)
			{
				// Пункт с ARMOR...
				g_bArmEnabled[param1] = !g_bArmEnabled[param1];
			}
		}
	}
}
Потом снова вызываешь меню и пункты изменят свои строчки.
P.S. Новый синтаксис, т.к. старый уже не помню даже)
 

/_Parlament_\

Участник
Сообщения
134
Реакции
9
White Wolf, а чтобы встать какой либо код, я не очень в новом синтаксисе понимаю
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #12
чтобы встать какой либо код, я не очень в новом синтаксисе понимаю
какой именно код?
Чтобы вызвать это меню, нужно вызвать функцию VIP_Menu(client) . В аргументы передается индекс клиента.
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #14
/_Parlament_\, в пункт с HP, где я закомментировал в коде.
PHP:
if (!param)
{
  if (g_dHPEnabled[param1] = !g_bHPEnabled[param1])
  {
      //мой код
  }
}
 
Сверху Снизу