Jump to content
assignment_ind Existing user? Sign In

Sign In



person_add Sign Up
Go-Code.pl - Support SourceMod i Pluginy CS:GO
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

@Vasto_Lorde i @szogun fajnie jakby nie było usuwane forum z którego bierze to @szogun albo dodane źródło ? 

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

Czy problem został już rozwiązany?

Share this post


Link to post
Share on other sites

Mozna zamknac

By MAGNET,

Problem rozwiązany

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.


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