16.02.2019, 14:58
Fiz um anti TP hack que detecta a distancia do player de tempos em tempos e diz que se tava muito longe em um curto periodo
numa distancia X de carro e Y a pй o player estб de hack e manda o player pra posiзгo antiga que ele tava.
Pra nгo bugar a entrada e saнda de interiores eu substitui todos os setplayerpos por setplayerposex, ajustando com as configuraзхes
do anti hack, mas ainda assim estб dando falsos positivos ao entrar e sair dos interiores...
O que eu to fazendo de errado?
1
2
numa distancia X de carro e Y a pй o player estб de hack e manda o player pra posiзгo antiga que ele tava.
Pra nгo bugar a entrada e saнda de interiores eu substitui todos os setplayerpos por setplayerposex, ajustando com as configuraзхes
do anti hack, mas ainda assim estб dando falsos positivos ao entrar e sair dos interiores...
O que eu to fazendo de errado?
1
PHP Code:
new Float:Xtp[MAX_PLAYERS], Float:Ytp[MAX_PLAYERS], Float:Ztp[MAX_PLAYERS], VWtp[MAX_PLAYERS], INTtp[MAX_PLAYERS];
new ContadorTeleport[MAX_PLAYERS];
PHP Code:
stock SetPlayerPosEx(playerid,Float:x,Float:y,Float:z,Float:angle,int,vw, bool:carregar = false) {
// atualizar anti TP
Xtp[playerid] = x;
Ytp[playerid] = y;
Ztp[playerid] = z;
INTtp[playerid] = int;
VWtp[playerid] = vw;
//
SetPlayerInterior(playerid,int);
SetPlayerVirtualWorld(playerid, vw);
SetPlayerPos(playerid, x,y,z);
// se tiver sem angulo pre definido, setar camera atrasa do player, se tiver definido carregar, carregar
if(angle == 0) SetCameraBehindPlayer(playerid);
if(carregar == true) PlayerCarregando(playerid);
// ativar,reativer,zerar o anti tp
KillTimer(ContadorTeleport[playerid]);
ContadorTeleport[playerid] = SetTimerEx("DetectTeleport", 50, false, "i", playerid);
return 1;
}
forward CheckTeleport(playerid); public CheckTeleport(playerid) {
KillTimer(ContadorTeleport[playerid]);
if(IsPlayerConnected(playerid) && playerid != INVALID_PLAYER_ID) {
GetPlayerPos(playerid, Xtp[playerid], Ytp[playerid], Ztp[playerid]);
INTtp[playerid] = GetPlayerInterior(playerid);
VWtp[playerid] = GetPlayerVirtualWorld(playerid);
ContadorTeleport[playerid] = SetTimerEx("DetectTeleport", 6666, false, "i", playerid);
}
}
forward DetectTeleport(playerid); public DetectTeleport(playerid) {
KillTimer(ContadorTeleport[playerid]);
if(gSpectateID[playerid] == 65535 && paused[playerid] == false) {
new Float:rangeMAX = 99.9; // ON_FOOT
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) rangeMAX = 399.9; // ON_VEHICLES
if(!IsPlayerInRangeOfPoint(playerid, rangeMAX, Xtp[playerid], Ytp[playerid], Ztp[playerid])) {
new string[128];
format(string, sizeof(string), "Xtp[%.4f], Ytp[%.4f], Ztp[%.4f]", Xtp[playerid], Ytp[playerid], Ztp[playerid] );
ABroadCast(COLOR_LIGHTGREEN,string,3);
format(string, sizeof(string), "TELEPORT HACK: %s TELEPORTADO DE VOLTA", PlayerName(playerid) );
ABroadCast(COLOR_LIGHTGREEN,string,3);
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) SetVehiclePos(GetPlayerVehicleID(playerid), Xtp[playerid], Ytp[playerid]+4, Ztp[playerid]);
else SetPlayerPosEx(playerid, Xtp[playerid], Ytp[playerid], Ztp[playerid], 0, INTtp[playerid], VWtp[playerid]);
}
}
ContadorTeleport[playerid] = SetTimerEx("CheckTeleport", 6666, false, "i", playerid);
}