Skocz do zawartości
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Master

[CS:GO] Proste Menu

Polecane posty

Witam!

Prosty plugin wyświetlający w pierwszej kolejności menu, a następnie panel z dowolną informacją. Wystarczy dostosować pod własny serwer.

Spoiler

#pragma semicolon 1
#pragma newdecls required

#define NAME		"Simple Menu"
#define AUTHOR		"Master"
#define VERSION		"1.0"
#define URL			"https://cswild.pl/"

#define nullstr		NULL_STRING

public Plugin myinfo =
{ 
	name	= NAME,
	author	= AUTHOR,
	version	= VERSION,
	url		= URL
};

public void OnPluginStart()
{
	RegConsoleCmd("sm_help", CMD_Help);
	RegConsoleCmd("sm_pomoc", CMD_Help);
}

public Action CMD_Help(int client, int args)
{
	Menu menu = new Menu(Menu_Handler);
	menu.SetTitle("Wprowadzenie do gry\n \n");
	menu.AddItem(nullstr, "Ogólne zasady Deathruna");
	menu.AddItem(nullstr, "System punktów i rang");
	menu.AddItem(nullstr, "System nagród dziennych");
	menu.AddItem(nullstr, "Wszystkie komendy oraz ich opis");
	menu.Display(client, 60);
	return Plugin_Handled;
}

public int Menu_Handler(Menu menu, MenuAction action, int client, int a)
{
	switch(action)
	{
		case MenuAction_Select:
		{
			switch(a)
			{
				case 0: DrawPanel(client, "Serwer Deathrun opiera się na przechodzeniu map z różnorodnymi pułapkami.\nTerrorysta ma za zadanie utrudnić oponentowi skończenie mapy.");

				case 1: DrawPanel(client, "Za każde przejście mapy dostajemy pewną ilość punktów.\nPunkty określają naszą rangę oraz pozycję w globalnym rankingu.\nModele postaci w sklepie odblokowuje się stopniowo z zdobywaniem punktów.");

				case 2:DrawPanel(client, "Na serwerze obowiązuje system nagród za grę dzienną. Za każdy kolejny dzień dostajemy więcej kredytów, aż do 7 dni.\nNastępnie zeruje się strike. Nagrodę aktywujemy komendą !dni");

				case 3: FakeClientCommandEx(client, "sm_komendy");
			}
		}
		case MenuAction_End:
			delete menu;
	}
	return 0;
}

public void DrawPanel(int client, const char[] buffer)
{
	Panel panel = new Panel();
	panel.SetTitle("Wprowadzenie do gry");
	panel.DrawText("--------------------------------------");
	panel.DrawText(buffer);
	panel.DrawText("--------------------------------------");
	panel.DrawItem("Wróć");
	panel.DrawItem("Wyjdź");
	panel.Send(client, PanelHandler, 30);
	delete panel;
}

public int PanelHandler(Menu menu, MenuAction action, int client, int item)
{
	switch(action)
	{
		case MenuAction_Select:
		{
			switch(item)
			{
				case 1: CMD_Help(client, 0);
				case 2: delete menu;
			}
		}
	}
}

 

 

  • Lubię to! 4
Przez MAGNET,

Przeniesione do działu "Gotowe funkcje"

Przez Vasto_Lorde,

Dodano tag spoiler dla poprawy widoczności tematu ^^

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hej! Super wstawka kodu, na pewno można z tego wyciągnąć dużo informacji na temat jak zrobić menu. Mam tylko jedną wątpliwość co do użycia NULL_STRING. Czy użycie wprost NULL_STRING nie byłoby lepsze? Nie dość że ze względu na czytelność, to "#define nullstr" nie zbytnio zgadza się z zasadami prefediniowania zmiennych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 1.08.2018 o 10:46, Vasto_Lorde napisał:

Hej! Super wstawka kodu, na pewno można z tego wyciągnąć dużo informacji na temat jak zrobić menu. Mam tylko jedną wątpliwość co do użycia NULL_STRING. Czy użycie wprost NULL_STRING nie byłoby lepsze? Nie dość że ze względu na czytelność, to "#define nullstr" nie zbytnio zgadza się z zasadami prefediniowania zmiennych.

To już kwestia gustu i upodobań kodera. 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Cześć mam pytanie odnośnie pluginu można jakoś zrobić, aby to menu wyskakiwało po wejściu gracza na serwer?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Możesz przykładowo wyświetlać menu w momencie, kiedy dany gracz zmieni drużynę:

public void OnPluginStart()
{
    HookEvent("player_team", EventPlayerTeam);
}

public Action EventPlayerTeam(Event event, const char[] name, bool dontBroadcast)
{
    // Tu wyświetlasz menu - ładnie byłoby zrobić timer np. 2-sekundowy i wtedy owe menu odpalić
} 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spoiler

#pragma semicolon 1
#pragma newdecls required

#define nullstr		NULL_STRING

public Plugin myinfo =
{ 
	name	= "Simple Menu",
	author	= "Master",
	version	= "1.0",
	url		= "https://cswild.pl/"
};

public void OnPluginStart()
{
	HookEvent("player_team", EventPlayerTeam);
}

public Action EventPlayerTeam(Event event, const char[] name, bool dontBroadcast)
{
	int clientUserId = event.GetInt("userid");
	
	CreateTimer(2.0, ShowMenu, clientUserId);
} 

public Action ShowMenu(Handle timer, int clientUserId)
{
	int client = GetClientOfUserId(clientUserId);
	
	if (client)	CMD_Help(client);
}

public void CMD_Help(int client)
{
	Menu menu = new Menu(Menu_Handler);
	menu.SetTitle("Wprowadzenie do gry\n \n");
	menu.AddItem(nullstr, "Ogólne zasady Deathruna");
	menu.AddItem(nullstr, "System punktów i rang");
	menu.AddItem(nullstr, "System nagród dziennych");
	menu.AddItem(nullstr, "Wszystkie komendy oraz ich opis");
	menu.Display(client, 60);
}

public int Menu_Handler(Menu menu, MenuAction action, int client, int a)
{
	switch(action)
	{
		case MenuAction_Select:
		{
			switch(a)
			{
				case 0: DrawPanel(client, "Serwer Deathrun opiera się na przechodzeniu map z różnorodnymi pułapkami.\nTerrorysta ma za zadanie utrudnić oponentowi skończenie mapy.");

				case 1: DrawPanel(client, "Za każde przejście mapy dostajemy pewną ilość punktów.\nPunkty określają naszą rangę oraz pozycję w globalnym rankingu.\nModele postaci w sklepie odblokowuje się stopniowo z zdobywaniem punktów.");

				case 2:DrawPanel(client, "Na serwerze obowiązuje system nagród za grę dzienną. Za każdy kolejny dzień dostajemy więcej kredytów, aż do 7 dni.\nNastępnie zeruje się strike. Nagrodę aktywujemy komendą !dni");

				case 3: FakeClientCommandEx(client, "sm_komendy");
			}
		}
		case MenuAction_End:
			delete menu;
	}
	return 0;
}

public void DrawPanel(int client, const char[] buffer)
{
	Panel panel = new Panel();
	panel.SetTitle("Wprowadzenie do gry");
	panel.DrawText("--------------------------------------");
	panel.DrawText(buffer);
	panel.DrawText("--------------------------------------");
	panel.DrawItem("Wróć");
	panel.DrawItem("Wyjdź");
	panel.Send(client, PanelHandler, 30);
	delete panel;
}

public int PanelHandler(Menu menu, MenuAction action, int client, int item)
{
	switch(action)
	{
		case MenuAction_Select:
		{
			switch(item)
			{
				case 1: CMD_Help(client);
				case 2: delete menu;
			}
		}
	}
}

 

Spróbuj

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

mam pytanie odnośnie case 3: FakeClientCommandEx(client, "sm_komendy"); bo kiedyś słyszałem że wywoływanie komendy connect + ip w ten sposób nie działa jak to z tym jest?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
1 godzinę temu, whnl napisał:

mam pytanie odnośnie case 3: FakeClientCommandEx(client, "sm_komendy"); bo kiedyś słyszałem że wywoływanie komendy connect + ip w ten sposób nie działa jak to z tym jest?

Nie zadziała, nie ma sposobu na przekierowanie gracza na inny serwer.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×