Jump to content
assignment_ind Existing user? Sign In

Sign In



person_add Sign Up
Go-Code.pl - Support SourceMod i Pluginy CS:GO

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

Prezentacja "zagnieżdzonego" menu na pewno okaże się pomocna

  • Lubię to! 1

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

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

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.


O NAS Jesteśmy społecznością łączącą ludzi, którzy dzielą pasję poznawania CS:GO od strony programistycznej. Posiadamy duże zaplecze merytoryczne i zawsze cieszymy się, gdy dołączają do nas osoby gotowe do nauki. Gwarantujemy, że z odrobiną wytrwałości i otwartym umysłem bardzo szybko napiszesz swój pierwszy plugin. Zapraszamy! 🙂
Szablon wykonany z dużą ilością przez cyberpixelz / Mesharsky / Sitefuture
Forum dumnie napędzane przez: Invision Power Services, Inc.
×
×
  • Create New...