Skocz do zawartości

[Poradnik] Proste menu - CS:GO

 Udostępnij


Pawel

Rekomendowane odpowiedzi

Witam wszystkich udostępniam tutaj poradnik ze starego forum :)

W ostatnim czasie przybyło nam kilku opiekunów dlatego uznałem ,że może im się przydać umiejętność napisania jakiegoś menu. Z doświadczenia wiem ,że będą oni nie jednokrotnie z tego korzystać, więc zaczynajmy.

Na początku musimy dodać includy. Domyślnie w programie SPEdit przy tworzeniu nowego skryptu mamy 2 includy.

#include <sourcemod>
#include <sdktools>

Nie ma sensu usuwać żadnego include jeśli nie będziemy go używać, ponieważ tak czy tak biblioteka się nie załączy i nie będzie żadnych errorów.

Po includach dodajemy:

#pragma semicolon 1
#pragma newdecls required

Dzięki tym dwóm linijkom będziemy pamiętać o nowej składni .

Jeżeli chcemy możemy również dodać info o autorze pluginu czyli po prostu o sobie.

public Plugin myinfo = 
{
	name = "Nazwa Pluginu",
	author = "Autor",
	description = "Opis Pluginu",
	version = "Wersja Pluginu",
	url = "Link do np. swojego profilu steam lub strony."
};

Po w miarę krótkim wstępie przechodzimy do startu pluginu. 
W tym celu do:

public void OnPluginStart()
{

}

dodajemy:

RegConsoleCmd("sm_tutorial", Tutorial_CMD);

 

W tym momencie zarejestrowaliśmy swoją komendę oraz jej callback.
Eh5hbf3.png

Callback posłuży nam do wywołania akcji podczas wpisania komendy.

Następnym krokiem będzie bezpośrednie zbudowanie menu. W tym celu rozpoczynamy nową akcję z naszym callbackiem.

public Action Tutorial_CMD(int client, int args)
{

}

Po rozpoczęciu akcji tworzymy menu:
 

Menu yMenu = new Menu(yMenu_Handler);

Ja moje menu nazwałem "yMenu" wy możecie wprowadzić tam własną nazwę. Dodatkowo w miejscu gdzie jest "yMenu_Handler" możecie zrobić to samo.
Teraz należy ustawić jakiś tytuł menu. Robimy to poprzez wpisanie.

yMenu.SetTitle("Proste Menu");

Gdy już to zrobimy możemy dodać różne opcje wyboru np. jaki jest link do grupy steam oraz kto jest właścicielem serwera. (Sorry ale nie mam żadnego pomysłu.)

yMenu.AddItem("1", "Grupa Steam");
yMenu.AddItem("2", "Administracja");

Nasze menu automatycznie będzie miało przycisk zamknięcia pod "9". Jednak jeżeli chcemy aby był on pod następną opcją ( w tym przypadku pod 3, ponieważ nasza ostatnia opcja to 2) dodajemy do kodu:

yMenu.AddItem("no", "Zamknij");
yMenu.ExitButton = false;


Możemy również ustalić przez jaki czas nasze menu będzie się wyświetlać w moim przypadku będzie to 30 sekund, więc do kodu dodaję:

yMenu.Display(client, 30);

Następnie odowłujemy się do naszego handlera.

public int yMenu_Handler(Menu menu, MenuAction action, int client, int Position)
{

}

Do tego dodajemy:

if(action == MenuAction_Select)
{
	char Item[32];
	GetMenuItem(menu, Position, Item, sizeof(Item));
	if(StrEqual(Item, "1"))
	{
		PrintToChat(client, "Link do grupy steam: https://steamcommunity.com/groups/ArenaSkilla_pl
	}
	else if(StrEqual(Item, "2"))
	{
		PrintToChat(client, "Wypisana administracja");
	}
}
else if(action == MenuAction_End)
CloseHandle(menu);

 

Krótkie wyjaśnienie jeżeli wybierzemy opcję numer 1 na chacie wyświetli nam się link do grupy steam. Do tego użyliśmy funkcji StrEqual.

Jednak jeżeli wybierzemy zamiast opcji numer 1 opcję numer 2 na chacie wyświeli nam się administracja serwera. Dlatego do:

if(StrEqual(Item, "2"))

dodaliśmy słowo "else".

Funkcja "PrintToChat" jak można się domyślić służy do napisania tekstu na chacie.
 

Cały kod powinien wyglądać tak:

#include <sourcemod>
#include <sdktools>

#pragma newdecls required
#pragma semicolon 1

public Plugin myinfo = 
{
	name = "Proste Menu",
	author = "Yamakashi",
	description = "Proste Menu",
	version = "1.0",
	url = "http://forum.arenaskilla.pl/"
};

public void OnPluginStart()
{
	RegConsoleCmd("sm_tutorial", Tutorial_CMD);
}

public Action Tutorial_CMD(int client, int args)
{
	Menu yMenu = new Menu(yMenu_Handler);
	yMenu.SetTitle("Proste Menu");
	yMenu.AddItem("1", "Grupa Steam");
	yMenu.AddItem("2", "Administracja");
	yMenu.AddItem("no", "Zamknij");
	yMenu.ExitButton = false;
	yMenu.Display(client, 30);
}

public int yMenu_Handler(Menu menu, MenuAction action, int client, int Position)
{
	if(action == MenuAction_Select)
	{
		char Item[32];
		GetMenuItem(menu, Position, Item, sizeof(Item));
		if(StrEqual(Item, "1"))
		{
			PrintToChat(client, "Link do grupy steam: https://steamcommunity.com/groups/ArenaSkilla_pl");
		}
		else if(StrEqual(Item, "2"))
		{
			PrintToChat(client, "Wypisana administracja");
		}
	}
	else if(action == MenuAction_End)
		CloseHandle(menu);
}

Dorzucam plik do pobrania :) 

poradnik.sp

  • Lubię to! 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • Pawel zablokował(a) ten temat
  • 4 lata później...
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Polityka prywatności