[TuT] Anti Money Hack by Lazarevic

Započeo lv, Avgust 06, 2014, 19:34:10 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

lv

*

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 :)
Pišem skriptu isključivo kad sam naduvan

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
Kristijan Stipić

lv

*

Druze, ja tebe nisam nista razumeo   ??? Ali kada budem imao malo vise iskustva, nadam se da cu se setiti ovoga :)
Pišem skriptu isključivo kad sam naduvan

Ovaj kod mislim da sam vec video negde...

exDeveloper | Generation, Zara Gaming, Meanwhile |
"If nobody hates you, you're doing something wrong."


Citat: TheP4vO poslato Jul 29, 2014, 20:42:16 POSLE PODNE
Glasao sam ali ovo je vrlo [cenzura]o svima je favorit neprikosloveni levu :D

lv

*

Pa moguce da jesi.. Ovako ima slicno na UP modu... Svi ga edituju.. Ugl.. Uradio sam po mom modu
Pišem skriptu isključivo kad sam naduvan

Nije lose.

================================================
Radovi:
[FILTERSCRIPT] Jetpack
[FILTERSCRIPT] Glasanje
[MAP] NG Hospital
[MAP] NG Ostrvo

================================================
NouZI Gaming Loading: 30% BaySide
================================================
POTREBAN MAPPER ZA MAPANJE ENTERIJERA
================================================

lv

*

Hvala :)
Pišem skriptu isključivo kad sam naduvan



Lack of planning on your part does not constitute an emergency on my part.