Skocz do zawartości

Rekomendowane odpowiedzi

Witam,

Mam pytanie dotyczące tworzenia menu. A mianowicie piszę pewien plugin. To akurat nie ważne jaki, ale chciałbym zrobić coś takiego, że stworzę jakieś przykładowe menu.

I chciałbym zrobić, aby komendą sm_menu2 od razu odpaliło się 2 menu. To które, włącza się po kliknięciu na pierwszą opcje.

Nie wiem czy napisałem to zrozumiale także jakby co to pisać.

Spoiler
#include <sourcemod>
  
public void OnPluginStart() {
	RegConsoleCmd("sm_menu", MenuCommand);
}
  
public Action MenuCommand(int client, int args) {
    Menu menu = new Menu(MenuCommand_Handler);
    menu.SetTitle("Moje menu :)");
    menu.AddItem("", "Opcja");
    menu.AddItem("", "Opcja druga");
    
    menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}

public int MenuCommand_Handler(Menu menu, MenuAction action, int client, int position) {
    if (action == MenuAction_End) {
        delete menu;
    }
	switch (action) {
		case MenuAction_Select: {
			switch (position) {
				case 0:Opcja(client);
                case 1:OpcjaDruga(client);
			}
		}
		case MenuAction_End:delete menu;
	}
}

void Opcja(int client) {
    Menu menu = new Menu(Opcja_Handler);
    menu.SetTitle("Moje drugie menu :)");
    menu.AddItem("", "Opcja");
    menu.AddItem("", "Opcja druga");
    
    menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}

public int Opcja_Handler(Menu menu, MenuAction action, int client, int position) {
    if (action == MenuAction_End) {
        delete menu;
    }

void OpcjaDruga(int client) {
    Menu menu = new Menu(OpcjaDruga_Handler);
    menu.SetTitle("Moje trzecie menu :)");
    menu.AddItem("", "Opcja");
    menu.AddItem("", "Opcja druga");
    
    menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}

public int OpcjaDruga_Handler(Menu menu, MenuAction action, int client, int position) {
    if (action == MenuAction_End) {
        delete menu;
    }

// Mogą być jakiś błędy, ale pisałem na szybko.

 

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Możesz to zrobić na 2 sposoby.

 

Sposób 1

Tworzysz komendę sm_menu2 która będzie wywoływać funkcje Opcja(client).

 

Sposób 2

Tworzysz komendę sm_menu2 która będzie zawierać całą funkcje Opcja(...), a w pierwszym menu będziesz to wywoływać w taki sposób: CallbackKomendy(client, 0);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

@Bioły czy zrobić tak?

 

@edit dobra źle zrozumiałem, ale mógłbyś mi napisać jak ta funkcja ma wyglądać?

Edytowane przez Elite

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sposób 1

public void OnPluginStart() {
	RegConsoleCmd("sm_menu", MenuCommand);
	RegConsoleCmd("sm_menu2", Menu2Command);
}
public Action Menu2Command(int client, int args) {
	Opcja(client);
	return Plugin_Handled;
}

 

Sposób 2

public void OnPluginStart() {
	RegConsoleCmd("sm_menu", MenuCommand);
	RegConsoleCmd("sm_menu2", Menu2Command);
}
public Action Menu2Command(int client, int args) {
	Menu menu = new Menu(Opcja_Handler);
	menu.SetTitle("Moje drugie menu :)");
	menu.AddItem("", "Opcja");
	menu.AddItem("", "Opcja druga");
	menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
	return Plugin_Handled;
}
public int MenuCommand_Handler(Menu menu, MenuAction action, int client, int position) {
	if (action == MenuAction_End) {
		delete menu;
	}
	switch (action) {
		case MenuAction_Select: {
			switch (position) {
				case 0:Menu2Command(client, 0);
				case 1:OpcjaDruga(client);
			}
		}
		case MenuAction_End:delete menu;
	}
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wszystko działa można zamknąć dzięki.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...