Skocz do zawartości

Rekomendowane odpowiedzi

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.rar
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ode mnie plus za chęci, chociaż używam innego bardziej rozbudowanego systemu ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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/videos
Hej! 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ć. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@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

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
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 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Meszek trochę agresywnie 😅 Dzięki za podklejenie moich tematów

 

@PyNiO mam nadzieję że się nie przestraszyłeś wytkniętymi błędami 😄 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@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 przez PyNiO

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość

@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( ) {

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...