PyNiO 7 Napisano 5 Listopada 2019 Achivements CS:GO Plugin na osiągnięcia na serwerze. Osiągnięcia zdobywane za kille, asysty, wygrane rundy itd. Gracze mogą zdobywać osiągnięcia i używać tagów osiągnięć. Jest to pierwszy plugin udostępniony publicznie przeze mnie,mam nadzieję, że wam się przyda. Każda opinia będzie dla mnie ważna. Instalacja: Wszystko zawarte w instrukcji w paczce. Wymagania: Sourcemod 1.8-10 Baza danych MySQL Reszta wymaganych plików w paczce. Komendy: !achievements - Główne menu !stats - Nasze statystki !tag - Menu tagów CVar'y "achievements_players", "2", "How many players for getting achievement?" "achievements_kills", "20", "How many kills for achievement?" "achievements_assists", "5", "How many assists for achievement?" "achivements_headshots", "5", "How many headshots for achievement?" "achievements_win", "10", "How many rounds wins for achievement?" "achievements_lose", "10", "How many rounds lost for achievement?" "achievements_plant", "5", "How many bomb plants for achievement?" "achievements_defuse", "5", "How many bomb defuses for achievement?" Achievements 1.0.rarHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Angel 1 Napisano 5 Listopada 2019 Ode mnie plus za chęci, chociaż używam innego bardziej rozbudowanego systemu ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Nikita Chruszczow 1 Napisano 5 Listopada 2019 Plusik za chęci 😄 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Mesharsky 2 Napisano 5 Listopada 2019 O mój boże.. Rozumiem, skleiłeś ten plugin z kilku ale jak już coś wypuszczasz publicznie, to dopracuj to. No dobra ale lećmy tak na szybciutko 😉 int g_iKills[MAXPLAYERS]; int g_iAssists[MAXPLAYERS]; int g_iHeadshots[MAXPLAYERS]; int g_iWin[MAXPLAYERS]; int g_iLose[MAXPLAYERS]; int g_iPlant[MAXPLAYERS]; int g_iDefuse[MAXPLAYERS]; int g_iKillsA[MAXPLAYERS]; int g_iAssistsA[MAXPLAYERS]; int g_iHeadshotsA[MAXPLAYERS]; int g_iWinA[MAXPLAYERS]; int g_iLoseA[MAXPLAYERS]; int g_iPlantA[MAXPLAYERS]; int g_iDefuseA[MAXPLAYERS]; @Brum Brum Kiedy gramy w statki? Wszystko źle, i niepotrzebne. new String:Error[100]; Globalnych errorów się nie tworzy... Czemu mieszasz starą składnie z nową? Wygląda to tak bardzo nieatrakcyjnie że aż kuje w oczy. public IsValidPlayers() { new players; for(new i = 1; i <= MaxClients; i ++) { if(!IsClientInGame(i) || IsFakeClient(i)) continue; players ++; } return players; } Po co to komu? if(IsValidPlayer(client)) { stats(client); } Nauczcie się w końcu.. Niepotrzebnie jest używać klamr gdy wpisujemy tylko 1 linię if(IsValidPlayer(client)) stats(client); DisplayMenu(menu, client, 30); Czemu 30? MENU_TIME_FOREVER PrintToChat(client, " \x02---------------- \x01My Achievements \x02----------------"); Zbędne i po co? Znowu to samo: if(g_iKillsA[client]==1) { PrintToChat(client, " \x04Killer [Owned]"); } if(g_iAssistsA[client]==1) { PrintToChat(client, " \x04Helpful guy [Owned]"); } if(g_iHeadshotsA[client]==1) { PrintToChat(client, " \x04Headhunter [Owned]"); } if(g_iWinA[client]==1) { PrintToChat(client, " \x04Winner [Owned]"); } if(g_iLoseA[client]==1) { PrintToChat(client, " \x04Loser [Owned]"); } if(g_iPlantA[client]==1) { PrintToChat(client, " \x04Planter [Owned]"); } if(g_iDefuseA[client]==1) { PrintToChat(client, " \x04Sapper [Owned]"); } Po co ci na coś takiego tyle klamr? Czytelniej prawda 🙂 ? if(g_iKillsA[client]==1) PrintToChat(client, " \x04Killer [Owned]"); if(g_iAssistsA[client]==1) PrintToChat(client, " \x04Helpful guy [Owned]"); if(g_iHeadshotsA[client]==1) PrintToChat(client, " \x04Headhunter [Owned]"); if(g_iWinA[client]==1) PrintToChat(client, " \x04Winner [Owned]"); if(g_iLoseA[client]==1) PrintToChat(client, " \x04Loser [Owned]"); if(g_iPlantA[client]==1) PrintToChat(client, " \x04Planter [Owned]"); if(g_iDefuseA[client]==1) PrintToChat(client, " \x04Sapper [Owned]"); g_iPlantA[client]==1 Czemu za każdym razem robisz ==1? Sprawdzaj prostym warunkiem czy coś jest a czegoś nie ma f(StrEqual(info, "op1")) { CS_SetClientClanTag(client, "[Killer]"); g_iPlayerTag[client] = 1; Save(client); } if(StrEqual(info, "op2")) { CS_SetClientClanTag(client, "[HelpfulGuy]"); g_iPlayerTag[client] = 2; Save(client); } if(StrEqual(info, "op3")) { CS_SetClientClanTag(client, "[Headhunter]"); g_iPlayerTag[client] = 3; Save(client); } if(StrEqual(info, "op4")) { CS_SetClientClanTag(client, "[Winner]"); g_iPlayerTag[client] = 4; Save(client); } if(StrEqual(info, "op5")) { CS_SetClientClanTag(client, "[Loser]"); g_iPlayerTag[client] = 5; Save(client); } if(StrEqual(info, "op6")) { CS_SetClientClanTag(client, "[Planter]"); g_iPlayerTag[client] = 6; Save(client); } if(StrEqual(info, "op7")) { CS_SetClientClanTag(client, "[Sapper]"); g_iPlayerTag[client] = 7; Save(client); } Nie, nie rób tak, robisz na złość sobie i ludziom którzy potem to muszą edytować. Od czego masz tablicę? Wszystko to mogłeś zmieścić w 3 linijkach. char g_sNames[][128] = { "Killer", "Helpful guy", "Headhunter", "Winner", "Loser", "Planter", "Sapper", }; Sprzyda ci się 😉. do tego zamiast wszędzie robić Killer [Owned] Jest coś takiego jak bool i możesz go sobie nawet globalnie użyć. g_iKillsA[client],g_iAssistsA[client],g_iHeadshotsA[client],g_iWinA[client],g_iLoseA[client],g_iPlantA[client],g_iDefuseA[client] Wszystko to możesz wywalić do śmieci. Niepotrzebnie. if(g_iAssistsA[client]==1) { AddMenuItem(menutag, "op2","HelpfulGuy"); } else { AddMenuItem(menutag, "op2","HelpfulGuy",ITEMDRAW_DISABLED); } Robisz sobie przykrość Patrz jak fajnie można to skrócić. menu.AddItem("op3", "▸ Headhunter", g_iHeadshotA[client] == 0 ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT); Teraz zapoznaj się z tymi tematami. Polecam również https://www.youtube.com/channel/UCSqIhkQrzh_QNnALNRpPd1g/videosHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Magnecik dobre poradniki nagrywa i na pewno lepiej będziesz po nich pisać. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
d0naciak 4 Napisano 5 Listopada 2019 @Mesharsky nie ma co ujmować koledze, pierwszy plugin a wygląda lepiej niż mój pierwszy udostępniony publicznie ^^ Każdy kiedyś zaczynał, pracuj tak dalej a będą z Ciebie ludzie 😄 Ode mnie dodam, że tutaj zamiast: bool g_bPlayerWczytane [MAXPLAYERS]; powinno być bool g_bPlayerWczytane [MAXPLAYERS+1]; Gdyż w przypadku gdy serwer będzie pełny, dla gracza z ostatnim client ID braknie miejsca w tablicy Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Mesharsky 1 Napisano 5 Listopada 2019 2 minuty temu, d0naciak napisał: @Mesharsky nie ma co ujmować koledze, pierwszy plugin a wygląda lepiej niż mój pierwszy udostępniony publicznie ^^ Każdy kiedyś zaczynał, pracuj tak dalej a będą z Ciebie ludzie 😄 Ode mnie dodam, że tutaj zamiast: bool g_bPlayerWczytane [MAXPLAYERS]; powinno być bool g_bPlayerWczytane [MAXPLAYERS+1]; Gdyż w przypadku gdy serwer będzie pełny, dla gracza z ostatnim client ID braknie miejsca w tablicy Nie ujmuje koledze. Mam nadzieje ze potem napisze zajebisty projekt lepszy od mojego i twojego więc życzyć jedynie powodzenia. Dałem jedynie krótkie tipy 🙂 Z nikogo nie powinno się nasmiewac i absolutnie tego nie robię. Jedynie pomagam bo widać że się gość stara więc czemu by nie pomoc Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 2 Napisano 5 Listopada 2019 Meszek trochę agresywnie 😅 Dzięki za podklejenie moich tematów @PyNiO mam nadzieję że się nie przestraszyłeś wytkniętymi błędami 😄 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
PyNiO 3 Napisano 5 Listopada 2019 (edytowane) @Vasto_Lorde wręcz przeciwnie, nie wystraszyłem się, a raczej jestem zadowolony, gdyż wiem nad czym muszę jeszcze popracować w moich pluginach. @Mesharsky dzięki za kilka porad i uwag, na pewno zerknę na wszystko co wysłałeś Edytowane 5 Listopada 2019 przez PyNiO Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Gość Napisano 5 Listopada 2019 @PyNiO, rzeczywiście Mesharsky kilka ważny uwag pokierował w Twoją stronę, ale też wiele osób pisze do dziś pojedyncze linie w klamrach po ifie, i to nie jest błąd. Kwestia przyzwyczajenia, może styl pisania. Ja też nie używam klamry przy jednej linijce, jednak często się na tym łapię, bo gdy coś nie śmiga przy testowaniu i chcę np dodać linijkę w której będę logował akcję pluginu np w takim switch&case, to muszę te klamry dorabiać za każdym razem a potem usuwać.. imo najlepsza praktyka nawet dla 1 klamry : if( ) { } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach