Skocz do zawartości

Rekomendowane odpowiedzi

Mam do was pytanie bo specem od kodowania nie jestem, ukleiłem coś takie i teraz czy jest to w ogóle optymalne

Spoiler

 


#include <sourcemod>

public Plugin myinfo =
{
	name = "Menu z opisem VIPa",
	description = "",
	author = "sourZ",
	version = "1.0",
	url = "koderz.pl"
};

public void OnPluginStart()
{
	RegConsoleCmd("sm_vip", MenuVip);
	RegConsoleCmd("sm_serwery", MenuSerwery);
}

public Action MenuVip(int client, int args)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle("Menu VIP`a:");
	menu.AddItem("OpisVipa", "Opis Vipa");
	menu.AddItem("KupnoVipa", "Jak kupić?");
	menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}
public Action OpisVipa(int client)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle(" Korzyści z posiadania VIP`a: \n- Dostep do wszystkich skinow \n- Wyrózniony kolor na say oraz prefix \n- Dodatkowe $$ za podłozenie/rozbrojenie paki \n- Dodatkowe $$ za podłozenie/rozbrojenie paki \n- Tag vip w tabeli \n- Pokazuje zadane obrazenia \n- Immunitet na ping \n- Kamizelka + Helm \n- Defuse Kit dla CT \n- Granaty He,Flash,Smoke,Molotov \n- Dodatkowe hp za kill/hs \n- Dodatkowe $$ w nowej rundzie \n- Dodatkowe $$ w nowej rundzie \n");
	menu.AddItem("powrot", "Wróć");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public Action KupnoVipa(int client)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle("Jak kupić VIPA: \n- Aby kupić konto VIP uzyj komendy \n- !sklepsms \n- Forum: OneFrag.pl");
	menu.AddItem("powrot", "Wróć");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public Action MenuSerwery(int client, int args)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle("Lista serwerów:");
	menu.AddItem("Mirage", "5vs5 - Mirage");
	menu.AddItem("MapAll", "5vs5 All Map");
	menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}

public Action MapAll(int client)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle("Lista serwerów");
	menu.AddItem("Mirage", "5vs5 - Połącz z serwerem");
	menu.AddItem("AllMap", "5vs5 - Połącz z serwerem");
	menu.AddItem("powrot", "back");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public int VipH(Handle handle, MenuAction action, int client, int pos)
{
	if(action == MenuAction_Select)
	{
		char item[32];
		GetMenuItem(handle, pos, item, sizeof(item));

		if(StrEqual(item, "OpisVipa"))
		{
			OpisVipa(client);
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [VIP] \x04%N \x05właśnie czyta o tym, co posiada konto VIP! \n★ Więcej szczegołów pod komendą \x04!VIP", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
		else if(StrEqual(item, "KupnoVipa"))
		{
			KupnoVipa(client);
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [VIP] \x04%N \x05właśnie czyta jak zakupić konto VIP! \n★ Więcej szczegołów pod komendą \x04!VIP", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
		else if(StrEqual(item, "AllMap"))
		{
			AllMap(client);
			PrintToConsole(client, "==============================================")
			PrintToConsole(client, "     	  connect 123.456.789:1234         ")
			PrintToConsole(client, "==============================================")
			PrintToChat(client, "\x07 =============================================================");
			PrintToChat(client," \x02«INFO» \x04IP Serwera zostalo wydrukowane w konsoli.");
			PrintToChat(client," \x02«INFO» \x04Wynik ten skopiuj i wklej do konsoli.");
			PrintToChat(client, "\x07 =============================================================");
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [SERWERY] \x04%N \x05Przegląda informacje o serwerze 5vs5 \n★ Więcej szczegołów pod komendą \x04!SERWERY", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
			else if(StrEqual(item, "Mirage"))
		{
			Mirage(client);
			PrintToConsole(client, "==============================================")
			PrintToConsole(client, "     	  connect 123.456.789:1234         ")
			PrintToConsole(client, "==============================================")
			PrintToChat(client, "\x07 =============================================================");
			PrintToChat(client," \x02«INFO» \x04IP Serwera zostalo wydrukowane w konsoli.");
			PrintToChat(client," \x02«INFO» \x04Wynik ten skopiuj i wklej do konsoli.");
			PrintToChat(client, "\x07 =============================================================");
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [SERWERY] \x04%N \x05Przegląda informacje o serwerze 5vs5 \n★ Więcej szczegołów pod komendą \x04!SERWERY", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
			else if(StrEqual(item, "powrot"))
			{
				MenuVip(client, 0);
			}
			else if(StrEqual(item, "back"))
			{
				MenuSerwery(client, 0);
			}

		}
	else if(action == MenuAction_End) CloseHandle(handle);
}

 

 

Przez MAGNET,

Dodano spoiler dla zwiększenia czytelności. Polecam robić to samemu ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To zależy co rozumiesz przez optymalność. Osobiście nigdy nie spotkałem się, żeby kilka menu było podpięte pod jeden handler.

Jedyny, a zarazem kluczowy, problem, który tutaj widzę, to duża nieczytelność kodu. Ciężko połapać się z początku o co chodzi, choć może to spowodowane tym, że nigdy takiego sposobu pisania menu nie widziałem ?

Osobiście radzę używać jednego handlera do jednego menu, aby w kodzie panował porządek.

I fakt, tutaj nie ma to aż tak dużego znaczenia ze względu na mały rozmiar pluginu, jednak w większych modyfikacjach robi się niepotrzebny bałagan w kodzie.

 

Jeżeli natomiast chodzi o szybkość, to o ile działa, jest w porządku - nie ma tu nic poza zwykłym menu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@MAGNET Bo to menu jest robione obiektowo
I tak jak napisał przedmówca, nie ma tu w ogóle mowy o optymalizacji bo to za prosty plugin żeby cokolwiek móc zrobić nieoptymalnie. Jedyne co jest niepoprawne to wcięcia (tabulatory) w ostatnich linijkach kodu. Nie ma to wpływu na kompilator czy plugin, natomiast poprawne wcięcia ułatwiają czytelność kodu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Okej, rozbiłem aby nie używać jednego Handle pod dwa menu.

Teraz jeszcze mam pytanie jak poprawnie, zrobić aby plugin pokazywał info na say/ w konsoli dopiero po kliknięciu połącz się z serwerem bo teraz obecnie wystarczy wybrać jego nazwę w menu i już mamy info. Obecny sposób w samym kodzie wywala błąd przy kompilacji.

 

Spoiler

#include <sourcemod>

public Plugin myinfo =
{
	name = "Menu z opisem VIPa",
	description = "",
	author = "sourZ",
	version = "1.0",
	url = "koderz.pl"
};

public void OnPluginStart()
{
	RegConsoleCmd("sm_vip", MenuVip);
	RegConsoleCmd("sm_serwery", MenuSerwery);
}

public Action MenuVip(int client, int args)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle("Menu VIP`a:");
	menu.AddItem("OpisVipa", "Opis Vipa");
	menu.AddItem("KupnoVipa", "Jak kupić?");
	menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}
public Action OpisVipa(int client)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle(" Korzyści z posiadania VIP`a: \n- Dostep do wszystkich skinow \n- Wyrózniony kolor na say oraz prefix \n- Dodatkowe $$ za podłozenie/rozbrojenie paki \n- Dodatkowe $$ za podłozenie/rozbrojenie paki \n- Tag vip w tabeli \n- Pokazuje zadane obrazenia \n- Immunitet na ping \n- Kamizelka + Helm \n- Defuse Kit dla CT \n- Granaty He,Flash,Smoke,Molotov \n- Dodatkowe hp za kill/hs \n- Dodatkowe $$ w nowej rundzie \n- Dodatkowe $$ w nowej rundzie \n");
	menu.AddItem("powrot", "Wróć");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public Action KupnoVipa(int client)
{
	Menu menu = new Menu(VipH);
	menu.SetTitle("Jak kupić VIPA: \n- Aby kupić konto VIP uzyj komendy \n- !sklepsms \n- Forum: OneFrag.pl");
	menu.AddItem("powrot", "Wróć");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public Action MenuSerwery(int client, int args)
{
	Menu menu = new Menu(SerwerH);
	menu.SetTitle("Lista serwerów:");
	menu.AddItem("Mirage", "5vs5 - Mirage");
	menu.AddItem("MapAll", "5vs5 All Map");
	menu.ExitButton = true;
	menu.Display(client, MENU_TIME_FOREVER);
}

public Action MapAll(int client)
{
	Menu menu = new Menu(SerwerH);
	menu.SetTitle("Lista serwerów");
	menu.AddItem("Mirage", "5vs5 - Połącz z serwerem");
	menu.AddItem("AllMap", "5vs5 - Połącz z serwerem");
	menu.AddItem("powrot", "back");
	menu.ExitButton = false;
	menu.Display(client, MENU_TIME_FOREVER);
}

public int VipH(Handle handle, MenuAction action, int client, int pos)
{
	if(action == MenuAction_Select)
	{
		char item[32];
		GetMenuItem(handle, pos, item, sizeof(item));

		if(StrEqual(item, "OpisVipa"))
		{
			OpisVipa(client);
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [VIP] \x04%N \x05właśnie czyta o tym, co posiada konto VIP! \n★ Więcej szczegołów pod komendą \x04!VIP", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
		else if(StrEqual(item, "KupnoVipa"))
		{
			KupnoVipa(client);
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [VIP] \x04%N \x05właśnie czyta jak zakupić konto VIP! \n★ Więcej szczegołów pod komendą \x04!VIP", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
		else if(StrEqual(item, "powrot"))
			{
				MenuVip(client, 0);
			}
		}
	else if(action == MenuAction_End) CloseHandle(handle);
}

public int SerwerH(Handle handle, MenuAction action, int client, int pos)
{
	if(action == MenuAction_Select)
	{
		char item[32];
		GetMenuItem(handle, pos, item, sizeof(item));

	if(StrEqual(item, "AllMap"))
		{
			AllMap(client);
			PrintToConsole(client, "==============================================")
			PrintToConsole(client, "     	  connect 145.239.236.12:27045         ")
			PrintToConsole(client, "==============================================")
			PrintToChat(client, "\x07 =============================================================");
			PrintToChat(client," \x02«INFO» \x04IP Serwera zostalo wydrukowane w konsoli.");
			PrintToChat(client," \x02«INFO» \x04Wynik ten skopiuj i wklej do konsoli.");
			PrintToChat(client, "\x07 =============================================================");
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [SERWERY] \x04%N \x05Przegląda informacje o serwerze 5vs5 \n★ Więcej szczegołów pod komendą \x04!SERWERY", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
	else if(StrEqual(item, "Mirage"))
		{
			Mirage(client);
			PrintToConsole(client, "==============================================")
			PrintToConsole(client, "     	  connect 145.239.236.12:27045         ")
			PrintToConsole(client, "==============================================")
			PrintToChat(client, "\x07 =============================================================");
			PrintToChat(client," \x02«INFO» \x04IP Serwera zostalo wydrukowane w konsoli.");
			PrintToChat(client," \x02«INFO» \x04Wynik ten skopiuj i wklej do konsoli.");
			PrintToChat(client, "\x07 =============================================================");
			PrintToChatAll("\x07 =============================================================", client);
			PrintToChatAll("★\x07 [SERWERY] \x04%N \x05Przegląda informacje o serwerze 5vs5 \n★ Więcej szczegołów pod komendą \x04!SERWERY", client);
			PrintToChatAll("\x07 =============================================================", client);
		}
	else if(StrEqual(item, "back"))
			{
				MenuSerwery(client, 0);
			}
		}
	else if(action == MenuAction_End) CloseHandle(handle);
}

 

 

Edytowane przez szogun

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Odpowiedź jest prosta, masz te same nazwy:

menu.AddItem("Mirage", "5vs5 - Połącz z serwerem");

W jednym menu i w drugim. Handler "SerwerH" poznaje tylko po nazwie "Mirage", nie patrzy na to z której funkcji się wywołuje. Rozbij to znowu na następny handler lub w obecnym Handlerze rozbij odpowiedzi na na przykład "Mirage" oraz "MirageShowIP"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@laskaa To już musisz gonić @szogun'a za to, Administracja nic nie usuwała ^^ Nie mamy zamiaru usuwać "reklam", Autorzy pluginu mogą wstawiać w pole "url" w kodzie jakikolwiek link (który jest zgodny z naszym regulaminem) i nie będziemy mieć z tym żadnych problemów

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ę...