szogun Napisano 19 Sierpnia 2018 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, 19 Sierpnia 2018 Dodano spoiler dla zwiększenia czytelności. Polecam robić to samemu ;) Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
MAGNET 1 Napisano 19 Sierpnia 2018 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
Vasto_Lorde 1 Napisano 19 Sierpnia 2018 @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
szogun Napisano 19 Sierpnia 2018 (edytowane) 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 19 Sierpnia 2018 przez szogun Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde Napisano 19 Sierpnia 2018 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 Napisano 20 Sierpnia 2018 @Vasto_Lorde i @szogun fajnie jakby nie było usuwane forum z którego bierze to @szogun albo dodane źródło ? Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 1 Napisano 20 Sierpnia 2018 @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
MAGNET Napisano 21 Sierpnia 2018 Czy problem został już rozwiązany? Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 21 Sierpnia 2018 Mozna zamknac Przez MAGNET, 21 Sierpnia 2018 Problem rozwiązany Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach