Skripta koju koristim: Moja
Detaljan opis problema: Pa ovako, napravio sam neki svoj anticheat za teleport ali ne radi kako treba, pa mi vise nije jasno kako da ga sredim da bi radio kako treba.
Dio skripte:
Napravio sam recimo 1 tajmer koji se vrti svake sekunde a u njega ovo, e sada kada ovako uradi onda se nista ne desava.
new
Float:ProvX,
Float:ProvY,
Float:ProvZ;
GetPlayerPos(playerid, ProvX, ProvY, ProvZ);
if (ProvX < 20.0 && ProvY < 20.0 && ProvZ < 20.0)
{
if (AntiTeleport[playerid] < 1)
{
format(string, sizeof(string), "Anticheat: Igrac %s kikovan zbog Teleport Hack-a !", GetName(playerid));
SendClientMessageToAll(COLOR_WHITE, string);
Kick(playerid);
}
}
A kada ovako uradim onda me non stop kick-a bez razloga.
new
Float:ProvX,
Float:ProvY,
Float:ProvZ;
GetPlayerPos(playerid, ProvX, ProvY, ProvZ);
if (ProvX >= 20.0 && ProvY >= 20.0 && ProvZ >= 20.0)
{
if (AntiTeleport[playerid] < 1)
{
format(string, sizeof(string), "BE AntiCheat: Igrac %s kikovan zbog Teleport Hack-a !", GetName(playerid));
SendClientMessageToAll(COLOR_WHITE, string);
Kick(playerid);
}
}
A ovo je za tu neku proveru kada bih se neki Admin portao negde pa da ga nebi kick
stock AntiSetPlayerPos(playerid, Float:x, Float:y, Float:z)
{
SetPlayerPos(playerid, x, y, z);
Streamer_UpdateEx(playerid, x, y, z);
AntiTeleport[playerid] = 1;
SetTimerEx("ResetPort", 2000, false, "i", playerid);
return 1;
}
public ResetPort(playerid)
{
AntiTeleport[playerid] = 0;
return 1;
}
Neke slike/video za lakse dobivanje pomoci(neobavezno): /
kada kikuje igraca, napisi mu neku varijablu, npr varijabla_ac[playerid]++;
i onda ispod postavi tajmer koji ce da pokrece funkcije kroz neko vreme, a u funkciji ocisti tu varijablu, posto tako bukvalno pecatiras igraca da je kikovan, a ovako ce ga kikovati 200 puta
Ne razumem te bas najbolje oko ove varijable ...
// na vrh skripte
new varijabla_ac[MAX_PLAYERS];
//ovo stavi odmah ispod funkcije gde kikuje
varijabla_ac[playerid]++;
//ovo stavi na kraj skripte
forward Funkcija_Blaeks();
public Funkcija_Blaeks();
{
foreach(Player, i)
{
if(varijabla_ac[i] == 1)
{
varijabla_ac[i] = 0;
}
}
return 1;
}
Da... ali kako ce on sada prepoznati dali igrac koristi cit za teleport ili ne sad mi to nije jasno po ovom tvom sto si mi dao... Sta ce da kikuje igraca koji koristi teleport cheat ?
pa kako bi prepoznao, stavis samo proveru da li je igrac administrator servera ili ne, ako nije onda da ga kikuje, ako jeste onda da ga ne dira, prosto
Cekaj ne razumemo se izgleda bas najbolje :D ovako
1. Primer nista se ne desava kao da ovog ni nema u scripti...
new
Float:ProvX,
Float:ProvY,
Float:ProvZ;
GetPlayerPos(playerid, ProvX, ProvY, ProvZ);
if (ProvX < 20.0 && ProvY < 20.0 && ProvZ < 20.0)
{
if (AntiTeleport[playerid] < 1)
{
format(string, sizeof(string), "Anticheat: Igrac %s kikovan zbog Teleport Hack-a !", GetName(playerid));
SendClientMessageToAll(COLOR_WHITE, string);
Kick(playerid);
}
}
2. Primer sada radi kikuje... ali je problem u tome sto recimo SetPlayerPos ide za mnogo toga, ide recimo za spawn, za izlaz iz nekog inta itd.. I sta se desava u ovom 2 primeru, desava se to da ja odma nakon spawna posto ako si video radio sam stock za SetPlayerPos ubacio sam varijablu AntiTeleport da nebi dolazilo do greske u kicku jer da toga nema ocito bi kikovao sve zivo.. Najveci je problem sada u ovom 2 primeru sto mene nakon spawna stavlja na neke kordinate preko SetPlayerPos e sada ako si bacio pogled na stock koji sam za to radio mozes videti da varijabla AntiTeleport se postavlja na 0 nakon 2 sec jer mi to vise ne treba... Dok ponovo nebi usao u neki int... Glavni problem je u tome sto on mene kikuje odma cim mi se AntiTeleport postavi na 0 a pri tome nisam se pomerio ili se nisam pomerio ni 20 metara... Ja sam ovde namestio da u koliko se igras pomera po sekundi manje od 20 metara nece dobiti kick a u koliko se u sekundi pomeri vise od 20 metara onda dobija kick sem u koliko nije dobio varijablu AntiTeleport na 1 to je zbog eventualnog portanja na neku lokaciju kao Admin ili Vip... E sada ja ne znam dali sam ja to dobro uopste namestio za te metre sto sam spomenuo...
new
Float:ProvX,
Float:ProvY,
Float:ProvZ;
GetPlayerPos(playerid, ProvX, ProvY, ProvZ);
if (ProvX >= 20.0 && ProvY >= 20.0 && ProvZ >= 20.0)
{
if (AntiTeleport[playerid] < 1)
{
format(string, sizeof(string), "Anticheat: Igrac %s kikovan zbog Teleport Hack-a !", GetName(playerid));
SendClientMessageToAll(COLOR_WHITE, string);
Kick(playerid);
}
}
pa nisi se lepo dogovorio sam sa sobom, to je najgori nacin provere teleporta, najbolji je onaj koji sam ti dao, znaci proveris admina, pa zatim uporedis igracevu poziciju sa uzetom pozicijom, evo ti primer http://forum.sa-mp.com/showthread.php?t=492144
Pokusacu ovo sutra, hvala ti. Inace ovo je za vozila jel imas nesto i za ovako redovan teleport bez vozila onaj sobeit ima cuda u sebi :D
pa na ovom linku sto sam ti dao trebao bi imati u sklopu, jer ta 2 se podrazumevaju jedno s drugim(igrac u vozila, i igrac na nogama)
Ne radi brate ovo nista... Ovo je nesto tipa kada ja rtc vozilo e onda me porta zajedno sa vozilo na mesto spawna vozila... A to sto meni treba nije tu.
pa onda je najbolje da anticheat uradis sam
Pa ja bih ga uradio kada bi znao kako da ga uradim.... Nista hvala ti u svakom slucaju moze lock.
pa pogledaj na forum mozes naci neki pa tako napraviti svoj npr :)