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

[ROZWIĄZANE] Optymalizacja kodu menu serwera

Recommended Posts

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);
}

 

 

By MAGNET,

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

Share this post


Link to post
Share on other sites

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

  • Lubię to! 1

Share this post


Link to post
Share on other sites

@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

  • Lubię to! 1

Share this post


Link to post
Share on other sites

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);
}

 

 

Edited by szogun

Share this post


Link to post
Share on other sites

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"

Share this post


Link to post
Share on other sites

@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

  • Lubię to! 1

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

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