Skocz do zawartości
Exive Group (c

Anty Money Hack

Rekomendowane odpowiedzi

Witajcie z tej strony Vortex. Na pewno w poradnikach zauważyliście już niby pseudo poradnik na temat anty money hacka.

Dziś postaram się wam wyjaśnić to wszystko.

A więc do roboty:

Spis:

  • Wprowadzenie
  • Zmienna i kod

Wprowadzenie

Anty Money Hack jest bardzo potrzebny na serwerach SA:MP. Jest on po to, aby zabezpieczyć nasz serwer przed spawnowaniem kasy, zazwyczaj jest on robiony na zasadzie zapisywania kasy w jakiejś zmiennej typu: New Kasa[MAX_PLAYERS].

Zmienna i kod

A więc tak, rozpoczynamy pracę, na początek trzeba napisać u góry skryptu include a_samp:

#include <a_samp> //Główna biblioteka SA:MP.

Potem pod include robimy zmienną, w której będzie kasa danego gracza w moim przypadku będzie to Kasa:

new Kasa[MAX_PLAYERS]; //Tworzymy zmienną.

Właśnie zrobliśmy zmienną co teraz? Musimy jakoś kickować czy cos. Do tego należy następujący kod:

public OnPlayerUpdate(playerid)
{
    if(Kasa[playerid] != GetPlayerMoney(playerid)) //Sprawdzamy czy zmienna Kasa ma taką samą wartość co kasa.
    {
        Kick(playerid); //Funkcja Kick, która zostanie wywołana gdy gracz nie będzie miał tyle samo kasy
    }
    return 1;
}

Dobra, a więc kod wygląda tak:

#include <a_samp> //Główna biblioteka SA:MP.

new Kasa[MAX_PLAYERS]; //Tworzymy zmienną.

public OnPlayerUpdate(playerid)
{
    if(Kasa[playerid] != GetPlayerMoney(playerid)) //Sprawdzamy czy zmienna Kasa ma taką samą wartość co kasa.
    {
        Kick(playerid); //Funkcja Kick, która zostanie wywołana gdy gracz nie będzie miał tyle samo kasy
    }
    return 1;
}

Oczywiście nie polecam teraz dawania kasy za pomocą GivePlayerMoney, tylko przez:

GivePlayerMoney(playerid, ilosc);
Kasa[playerid] += ilosc;

Tutaj macie funkcje, która będzie taka sama jak giveplayermoney, ale pod nasz skrypt:

stock GivePlayerCash(playerid, ilosc)
{
    GivePlayerMoney(playerid, ilosc);
    Kasa[playerid] += ilosc;
    return 1;
}

Zastosowanie:

GivePlayerCash(playerid, 100);

Właśnie zrobiłeś Anty Money Hack.

 

Edytowane przez Vortex

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Skoro Twój poradnik ma być zajebisty, to odpowiedz na moje pytanie. Czy funkcja GetPlayerMoney pobiera całość SetPlayerMoney, czy kwotę, jaką ma gracz podczas użycia? Czyli inaczej pisząc - ustawiasz graczowi 5mln, po 3 sek sprawdzasz GPM, pokaze 5mln czy tyle ile zdolalo sie zaladowac w ciagu 5 sek?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
stock GivePlayerCash(playerid, ilosc)
{
    Kasa[playerid] += ilosc;
    return 1;
}

W tym musisz także dodać GivePlayerMoney, bo inaczej w OPU pokaże Ci że jest różne Kasa od GetPlayerMoney.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@up Najwidoczniej się pomyliłem...

Już poprawiam.

 

@edit

Skoro Twój poradnik ma być zajebisty, to odpowiedz na moje pytanie. Czy funkcja GetPlayerMoney pobiera całość SetPlayerMoney, czy kwotę, jaką ma gracz podczas użycia? Czyli inaczej pisząc - ustawiasz graczowi 5mln, po 3 sek sprawdzasz GPM, pokaze 5mln czy tyle ile zdolalo sie zaladowac w ciagu 5 sek?

Pokaże taką kwotę jaką ma gracz podczas użycia. Jak mu sprawdzę to pokaże 5 mln

Edytowane przez Vortex

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak dla mnie to nie ma różnicy, ale zmienię dla innych ;p

 

Jakaś różnica jest, ponieważ pojawi się błąd w pawno. 

 

Co do tematu, to ładnie opracowane.

Edytowane przez GoldSerwer

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
if(Kasa[playerid] !== GetPlayerMoney(playerid))

Do poprawy. To nie jest JavaScript, gdzie zmienna może być dynamiczna i przybiera różne formy. Powinno być != bez dodatkowego znaku równania.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

public OnPlayerUpdate(playerid)

{

if(Kasa[playerid] !== GetPlayerMoney(playerid)) //Sprawdzamy czy zmienna Kasa ma taką samą wartość co kasa.

{

Kick(playerid); //Funkcja Kick, która zostanie wywołana gdy gracz nie będzie miał tyle samo kasy

}

return 1;

}

Tuning, Pay&Spray, 7up = Kick()

A oto mój kod - niezawodny od 4 lat

new pMoney[MAX_PLAYERS];

GetPlayerMoney_(playerid)
{
	if(GetPlayerMoney(playerid) >= 99999999)
	{
		Ban(playerid);
	    return 1;
	}
	return pMoney[playerid];
}

SetPlayerMoney(playerid, money)
{
	if(money > 99999998) money = 99999998;

	ResetPlayerMoney(playerid);
	GivePlayerMoney(playerid, money);
	pMoney[playerid] = money;
	return 1;
}

GivePlayerMoney_(playerid, money)
{
	if(money > 0 && money + GetPlayerMoney_(playerid) > 99999998)
	{
    	SendClientMessage(playerid, -1, "» Nie możesz chodzić z tak duża ilością pieniędzy! Zanieś ją do bankomatu!");
  	    SetPlayerMoney(playerid, 99999998);
		return 1;
	}
	SetPlayerMoney(playerid, money + GetPlayerMoney_(playerid));
	return 1;
}
#define ResetPlayerMoney(%0) SetPlayerMoney(%0,0)
#define GivePlayerMoney GivePlayerMoney_
#define GetPlayerMoney GetPlayerMoney_

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×