Ryso 0 Odesláno: 24. Červenec, 2011 Share Odesláno: 24. Červenec, 2011 V dnesnej dobe ma kazdy server problem s cheatermi a ich odhalovanim. Neexistuje ziaden anticheat, ktory by na 100% odhalil cheatera. Vo svojom mode mam spraveny jeden stunt, ktory je nemozne prejst so SetVehicleHealth(vehicleid,1000);, tak som spravil script, ktory spravi vozidlo nesmrtelnym (SetVehicleHealth(vehicleid,9999*1000);. Po postupnom testovani niektorym hracom tie vozidla stale vybuchovali a ani za boha som nevedel najst chybu. Neskor som si nasiel na nete sobeit (potreboval som airbreak na rychlejsie ziskavanie suradnic pre tvorbu svojho modu) a ked som vyskusal ten stunt so zapnutym sobeitom, nesmrtelnost vozidla z nicoho nic prestala fungovat. Po chvili testovania som zistil, ze sobeit nikdy neprekroci hranicu zivota vozidla nad standartnych 1000. A tak mi napadlo spravit script, ktory zisti, ci ma hrac spusteny sobeit, avsak dany hrac musi byt vo vozidle. Tento anticheat funguje nasledovne: #include new Float:OldVehicleHealth[MAX_PLAYERS]; // sem sa ulozi prvotny zivot vozidla new Float:NewVehicleHealth[MAX_PLAYERS]; // sem sa ulozi zivot pocas zistovania sobeitu #define MAX_ODPOCET_TIMER 1 new Odpocet_Timer[MAX_PLAYERS][MAX_ODPOCET_TIMER]; // nadefinujeme timer enum Informacie // klasicky enum, do ktoreho bude ulozena casomiera { timerSobeitCheck }; new Hrac[MAX_PLAYERS][informacie]; COMMAND:sobeit(playerid,params[]) //zaciatok prikazu { if(!IsPlayerAdmin(playerid)) return false; // je hrac rcon admin ? new hrac = strval(params); // ulozi parameter do if(isnull(params)) return SendClientMessage(playerid,COLOR_RED,"Použitie: /sobeit [ ID ]"); // toto vypise, ak zadate bez paarmetra if(!IsPlayerConnected(hrac)) return SendClientMessage(playerid,COLOR_RED,"Hráč nie je pripojený na serveri!"); // je hrac pripojeny ? if(!IsPlayerInAnyVehicle(hrac)) return SendClientMessage(playerid,COLOR_RED,"[ADMIN] Hráč musí byť vo vozidle!"); // hrac musi byt vo vozidle GetVehicleHealth(GetPlayerVehicleID(hrac),OldVehicleHealth[hrac]); // ulozi prvotny zivot vozidla, ktory bude potom vrateny SetVehicleHealth(GetPlayerVehicleID(hrac),5000); // nastavime zivot vozidla Hrac[hrac][timerSobeitCheck] = 2; // casomiera 2 sekundy Odpocet_Timer[hrac][1] = SetTimerEx("SobeitCheck",1000,true,"i",hrac); // spustime casomieru SendClientMessage(playerid,COLOR_RED,"[ANTICHEAT] Počkaj 2 sekundy, kým prebehne kontrola..."); // oznamovaci text.. return true; } publicEx SobeitCheck(playerid) // timer { if(Hrac[playerid][timerSobeitCheck] > 0) // odpocet { Hrac[playerid][timerSobeitCheck]--; } if(Hrac[playerid][timerSobeitCheck] == 1) // ak ostava presne 1 sekunda do konca, zistime zivot vozidla { GetVehicleHealth(GetPlayerVehicleID(playerid),NewVehicleHealth[playerid]); } if(Hrac[playerid][timerSobeitCheck] == 0) // vyhodnotenie { KillTimer(Odpocet_Timer[playerid][1]); // zrusime timer Hrac[playerid][timerSobeitCheck] = 0; // vynulujeme casomieru new str[128]; if(NewVehicleHealth[playerid] > float(1000)) // ak zivot ostal na tych povodnych 5000, hrac ne negativny // ta podmienka "viac ako 1000" tam je preto, lebo hrac moze pocas tych dvoch sekund naburat a zivot sa znizi (za 2 sekundy je velmi mala pravdepodobnost, ze si ju znizi az o 4000 { format(str,sizeof(str),"[ANTICHEAT] %s (ID: %d) je negatívny na sobeit!",PlayerName(playerid),playerid); SendClientMessageToAll(COLOR_RED,str); // vypise spravu SetVehicleHealth(GetPlayerVehicleID(playerid),OldVehicleHealth[playerid]); // vrati prvotny zivot vozidla } else // to znamena, ze sa BUD zivotnost znizila o 4000 (velmi nepravdepodobne), ALEBO hrac ma zapnuty sobeit, ktory automaticky nastavil zivot vozidla na 1000 { format(str,sizeof(str),"[ANTICHEAT] %s (ID: %d) je pozitívny na sobeit!",PlayerName(playerid),playerid); SendClientMessageToAll(COLOR_RED,str); // vypise spravu SetVehicleHealth(GetPlayerVehicleID(playerid),OldVehicleHealth[playerid]); // vrati prvotny zivot vozidla } } return true; } alebo v pastebin http://pastebin.com/ZV2W1ZHy To je len taky zaklad, ale podstata je zachovana. Samozrejme tie "SendClientMessageToAll" si zmente, aby to vypisalo len adminom, nechceme predsa, aby cheateri o tom vedeli . Nevyhodou tohto scriptu je to, ze hrac musi byt vo vozidle, ale zase na 100% zisti, ak ma hrac co i len zapnuty sobeit, pricom nemusi pouzivat ziaden z jeho konkretnych cheatov. Testoval som to len raz, ziadne bugy som nenasiel, vsetko funguje. Vyhodou je, ze cheater o tom ani nevie, ze na nom prebieha kontrola. PS: Pouzil som include zcmd.inc (najdete si na samp fore) (Neviem, ci to na bicykloch funguje) Link to comment Share on other sites More sharing options...
Guest Odesláno: 24. Červenec, 2011 Share Odesláno: 24. Červenec, 2011 Zajímavý postřeh. Já s0beit nepoužívám. Ale tohle je hezkej postřeh. BTW nemusel jsi ten kód dělat tak těžko + v tom public SobeitCheck ti chybíé podmínka jestli je hráč ve vozidle.. if(IsPlayerInAnyVehicle(playerid)) { Link to comment Share on other sites More sharing options...
Ryso 0 Odesláno: 24. Červenec, 2011 Author Share Odesláno: 24. Červenec, 2011 Tu podmienku s vozidlom mam priamo v prikaze if(!IsPlayerInAnyVehicle(hrac)) return SendClientMessage(playerid,COLOR_RED,"[ADMIN] Hráč musí byť vo vozidle!"); // hrac musi byt vo vozidle Link to comment Share on other sites More sharing options...
Guest Odesláno: 24. Červenec, 2011 Share Odesláno: 24. Červenec, 2011 Tu podmienku s vozidlom mam priamo v prikaze if(!IsPlayerInAnyVehicle(hrac)) return SendClientMessage(playerid,COLOR_RED,"[ADMIN] Hráč musí byť vo vozidle!"); // hrac musi byt vo vozidle Nj ale za tu sekundu ten hráč může z toho auta vystoupit .. Link to comment Share on other sites More sharing options...
Ryso 0 Odesláno: 24. Červenec, 2011 Author Share Odesláno: 24. Červenec, 2011 Jo aha Preto odporucam danych hracov spectovat a uistit sa pred udelenim banu. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now