Pozdrav svima.. Evo jos jedan TuT od mene. Danas cemo da popricamo malo o Anti Money Hack-om.. Znaci, pokazacu vam kako kreirati sve to.. I pre toga cu da vam kazem na koju foru to radi..
Znaci, citer([cenzura]) preko s0beita ce i dalje moci da stvara pare, ali cim skripta detektuje non-server side cash, resetovace mu pare :)
Potrebno nam je:
a_samp include ( logicno -___- )
Bilo kakav sistem spremanja fajlova
Znaci, da bi ovo radilo, potrebno je u eNum-u PlayerInfo da imate ovako nesto.. Ako nemate, slobodno dodajte, jer ce nam biti potrebno :) Takodje, ako vam ide npr. pNovacDzep, recicu vam gde to da promenite :) samo me pratite
pCash
Dakle dodali smo ovo pod eNum pInfo, sad smo srecni... E sada, to trebate da spremate/ucitavate.. To necu da pokazujem jer ne znam da li koristite dINI, Y_INI , ili nesto drugo.. Ima mnogo sra.. mislim nacina za to.. Sledece sto izradjujemo je jednostavan stock.. Znaci umesto GivePlayerMoney, napravicemo AC_GivePlayerMoney .. To ce skripta prepoznavati kao siguran novac
Dakle, kao sto sam rekao. Negde na kraj skripte dodajte ovaj stock. U komentarima cu objasniti sta za sta sluzi
stock AC_GivePlayerMoney(playerid, amount) // Dodajemo stock, da definisemo detekciju za Anti Money Hack
{
GivePlayerMoney(playerid, amount); // Znaci, daje igracu novi amount(kolicinu) novca
PlayerInfo[playerid][pCash] += amount; // Takodje dodeljuje igracu novu kolicinu novca, pisajuci je u fajl.
return 1;
}
To je bilo za davanje/oduzimanje novca.. Sada krenimo za Resetovanje novca, ukoliko skripta prepozna nesiguran novac.
Takodje dodajte negde na kraj skripte, mozete i ispod ovoga ... sledeci stock. Takodje u komentare objasnjavam sta za sta sluzi
stock AC_ResetPlayerMoney(playerid) // Definisemo detekciju za Anti Money Hack
{
PlayerInfo[playerid][pCash] = 0; // Pise u igracev fajl novac u dzepu na 0
ResetPlayerMoney(playerid); // Resetuje mu novac ..
return 1;
}
Sada dodajemo AC_GetPlayerMoney funkciju, takodje ukoliko skripta prepozna money hack
stock AC_GetPlayerMoney(playerid) return PlayerInfo[playerid][pCash];
E sada, ukoliko anticit detektuje Money Hack, sta da uradimo :) Znaci, ovo jednostavno dodajte pod OnPlayerUpdate
if(PlayerInfo[playerid][pCash] != GetPlayerMoney(playerid))
{
ResetPlayerMoney(playerid); // Resetuje mu novac !
GivePlayerMoney(playerid, PlayerInfo[playerid][pNovac]); // Vraca mu staru svotu novca
SendClientMessage(playerid, -1, "{FF0000}ANTICHEAT:{FFFFFF} Detektovan ti je Money Hack ! Novac ti je resetovan !"); // Salje mu obavestenje
}
Eh, sada , da anticit ne bi neduznima resetovao novac, morate odraditi sledece !
Promeniti sledece stvari, u sledece :D
GivePlayerMoney => AC_GivePlayerMoney
GetPlayermoney => AC_GetPlayerMoney
ResetPlayerMoney => AC_ResetPlayerMoney
To je to :) Nadam se da ce nekome da posluzi ovaj tutorial :) Kao sto sam rekao :) Ovo je jednostavno za odraditi, ali ce pomoci pocetnicima :)
bolje bi bilo da hook-as funkcije a ne da se koristi AC_GivePlayerMoney, osim toga nema potrebe da u funkciji AC_GivePlayerMoney koristiš GivePlayerMoney pošto imaš
if(PlayerInfo[playerid][pCash] != GetPlayerMoney(playerid))
{
ResetPlayerMoney(playerid); // Resetuje mu novac !
GivePlayerMoney(playerid, PlayerInfo[playerid][pNovac]); // Vraca mu staru svotu novca
SendClientMessage(playerid, -1, "{FF0000}ANTICHEAT:{FFFFFF} Detektovan ti je Money Hack ! Novac ti je resetovan !"); // Salje mu obavestenje
}
Ovo će to odraditi... JoÅ¡ bi ti savjetovao da ne ispisujes nikakvu poruku jer recimo da doÄ'e do nekog san andreas aparata (recimo da je to onaj di kad stisnes enter mozes jest), automatski ce mu skinuti cca $2, tako da u tom slucaju umjesto usporednog operatora nejednakosti koristis <
if(PlayerInfo[playerid][pCash] < GetPlayerMoney(playerid))
{
ResetPlayerMoney(playerid); // Resetuje mu novac !
GivePlayerMoney(playerid, PlayerInfo[playerid][pNovac]); // Vraca mu staru svotu novca
}
I joÅ¡ jedna bespotrebna stvar je to Å¡to koristiÅ¡ enumerator (enum), jer kao Å¡to sama rijeÄ kaže enumerator (brojaÄ), ti kada recimo napraviÅ¡
enum
{
pCash
}
Zapravo si napravio isto kao da si napravio
#define pCash 0
samo Å¡to enumerator automatski numerira konstante redosljedom odozgo prema dolje, a u ovom sluÄaju ti si joÅ¡ definirao taj enumerator sa PlayerInfo Å¡to se nalazi u 90% servera, a to znaÄi da će doći do konflikta u skriptama...
JoÅ¡: vidim da si nisi uspoznat s time da od trenutka kada se server pokrene PAWNCC kompajler ima takozvani heap u kojem pohranjuje odreÄ'enu memoriju kao Å¡to su vrijednosti varijable i da pawn nije thread jezik nego switch by switch Å¡to znaÄi da ako ti postaviÅ¡ igraÄu ID:0 varijablu 'PlayerInfo[playerid][pCash]' na recimo 500 kada igraÄ izaÄ'e sa servera ta vrijednost ostaje saÄuvana u varijabli i nakon toga kada se (ukoliko se server ne resetira umeÄ'uvremenu) prikljuÄi igraÄ kojem će biti isto dodjeljen ID 0, za njega će poÄeti vrijediti varijabla od igraÄa kada mu je postavljena vrijednost 500, znaÄi varijable obavezno moraÅ¡ resetirati i prazniti kada je to potrebno...
Osim toga ovo još nije dorećen tutorial osim što ima dosta grešaka...
Moj savjet ti je:
Hookaj funkcije
Ukloni bespotrebno
Promjeni onaj usporedni operator
Ne koristi enumerator nego napravi obiÄnu varijablu sa poljem
Resetiraj varijable
Dovrši tutorial da bude potpun
Evo ispravka...
#tryinclude "a_samp.inc"
new
_novac[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
_novac[playerid] = 0;
return (true);
}
public OnPlayerUpdate(playerid)
{
if(GetPlayerMoney(playerid) > _novac[playerid])
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, _novac[playerid]);
}
return (true);
}
stock AC_GivePlayerMoney(playerid, const iznos) _novac[playerid] += iznos;
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney AC_GivePlayerMoney
stock AC_ResetPlayerMoney(playerid) _novac[playerid] = 0;
#if defined _ALS_ResetPlayerMoney
#undef ResetPlayerMoney
#else
#define _ALS_ResetPlayerMoney
#endif
#define ResetPlayerMoney AC_ResetPlayerMoney
stock AC_GetPlayerMoney(playerid) return _novac[playerid];
#if defined _ALS_GetPlayerMoney
#undef GetPlayerMoney
#else
#define _ALS_GetPlayerMoney
#endif
#define GetPlayerMoney AC_GetPlayerMoney
Druze, ja tebe nisam nista razumeo ??? Ali kada budem imao malo vise iskustva, nadam se da cu se setiti ovoga :)
Ovaj kod mislim da sam vec video negde...
Pa moguce da jesi.. Ovako ima slicno na UP modu... Svi ga edituju.. Ugl.. Uradio sam po mom modu
Nije lose.
Hvala :)