Introduzione
Ecco una guida semplice sul come bloccare ogni tipo di WallHack, del presente, del passato e magari del futuro, sui nostri server. Ovviamente bisogna avere la possibilità di modificare l'eseguibile server del gioco dal codice sorgente.
Guida
Il tutto va fatto nel file input_main.cpp, sopra
Codice:
constfloat fDist = DISTANCE_SQRT((ch->GetX()- pinfo->lX)/100,(ch->GetY()- pinfo->lY)/100);
In questo spazio, incolliamo quanto segue:
Codice:
PIXEL_POSITION pos = ch->GetXYZ(); //Ottengo la posizione del giocatore
if(!SECTREE_MANAGER::instance().GetMovablePosition(ch->GetMapIndex(), pos.x, pos.y, pos)){ //Qualora non sia in una zona calpestabile...
if(ch->GetDesc()){ // ..e possa ottenere informazioni sul player..
LogManager::instance().HackLog("WALLHACK", ch); //Salvo il tutto nei log
ch->GetDesc()->DelayedDisconnect(1); //Mando il player offline
}
}
Ovviamente il codice può essere modificato a vostro piacimento salvando, ad esempio, le coordinate in cui è avvenuto il controllo, semplicemente modificando gli argomenti di questa funzione: LogManager::instance().HackLog()
Breve Spiegazione del Codice
Quel che andremo a fare non è altro che interrogare il server affinché ci dica se le coordinate su cui è posizionato il personaggio sono "calpestabili" tramite un metodo della classe SECTREE_MANAGER chiamato GetMovablePosition(x,y,z). Qualora non sia calpestabile, otteniamo le informazioni su ch (puntatore a cui precedentemente è stato assegnato l'indirizzo in memoria dell'oggetto del personaggio, ovvero character) tramite il metodo GetDesc()
(relativo alla classe LPCHARACTER se non erro). Se queste informazioni sono reperibili, tramite il metodo HackLog(text, lpcharacter) del LogManager
salvo negli HackLOG il testo "WALLHACK" collegato al player trasgressore ed infine faccio disconnettere il player dopo 1 secondo.
La guida è "pubblica" e rispetta le norme di licenza per i prodotti come da T&C della piattaforma in uso ed è altresì regolata dalla medesima norma. È autorizzata la copia ed il riutilizzo a fini non commerciali previa citazione del sottoscritto.