Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek

Recommended Posts

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
By MAGNET,

Przeniesione do działu "Gotowe funkcje"

By Vasto_Lorde,

Dodano tag spoiler dla poprawy widoczności tematu ^^

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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. 

Share this post


Link to post
Share on other sites

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ć
} 

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...