PDA

Просмотр полной версии : [Вопрос] Анти телепорт



codeo
12.08.2014, 21:02
Подскажите как сделать проверку для анти телепорта через GetPlayerPos если игрок изменил позицию на 10м. то кик

felix_font
12.08.2014, 22:37
/* Global */
new Float:pPos[MAX_PLAYERS][3];
new bool:newplayer[MAX_PLAYERS] = true;
/* Global */

public OnPlayerUpdate(playerid);
{
if(newplayers[MAX_PLAYERS] == false) if(!IsPlayerInRangeOfPoint(playerid,10.0,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2]))
{
Kick(playerid);
}
GetPlayerPos(playerid,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2]);
newplayers[MAX_PLAYERS] = false;
}


Примерно так думаю.
Но это лишь набросок который криво будет работать.

Нужно все тестировать и т.д.
+ Нужно учесть телепорт игрока сервером или админом. (при телепорте: GetPlayerPos(playerid,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2]); )

codeo
12.08.2014, 23:11
Спасибо большое, теперь понял :hi:

codeo
12.08.2014, 23:56
а если я сделаю так:
то есть шанс что игрока кикнет?

CMD:tp( playerid, params[ ] )
{
Tp_OK[playerid] = true;
SetPlayerPos(playerid,304.7148,-1755.4130,7.6797);
return 1;
}



if(Tp_OK[playerid] == false) if(!IsPlayerInRangeOfPoint(playerid,10.0,pPos[playerid][0],pPos[playerid]
Kick(playerid)

DeimoS
13.08.2014, 04:44
/* Global */
new Float:pPos[MAX_PLAYERS][3];
new bool:newplayer[MAX_PLAYERS char] = true;

stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z)
{
pPos[playerid][0] = x;
pPos[playerid][1] = y;
pPos[playerid][2] = z;
newplayers{playerid} = true;
SetPlayerPos(playerid, x, y, z);
return 1;
}
#define SetPlayerPos SetPlayerPosEx
/* Global */
public OnPlayerUpdate(playerid);
{
if(newplayers{playerid} == false)
{
if(!IsPlayerInRangeOfPoint(playerid,10.0,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2])) return Kick(playerid);
}
GetPlayerPos(playerid,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2]);
newplayers{playerid} = false;
return 1;
}

codeo
14.08.2014, 19:49
/* Global */
new Float:pPos[MAX_PLAYERS][3];
new bool:newplayer[MAX_PLAYERS char] = true;

stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z)
{
pPos[playerid][0] = x;
pPos[playerid][1] = y;
pPos[playerid][2] = z;
newplayers{playerid} = true;
SetPlayerPos(playerid, x, y, z);
return 1;
}
#define SetPlayerPos SetPlayerPosEx
/* Global */
public OnPlayerUpdate(playerid);
{
if(newplayers{playerid} == false)
{
if(!IsPlayerInRangeOfPoint(playerid,10.0,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2])) return Kick(playerid);
}
GetPlayerPos(playerid,pPos[playerid][0],pPos[playerid][1],pPos[playerid][2]);
newplayers{playerid} = false;
return 1;
}

При телепорте почему то иногда все равно орет(

DeimoS
14.08.2014, 21:56
/* Global */
new Float:pPos[MAX_PLAYERS][3];
new bool:newplayer[MAX_PLAYERS char] = true;

stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z)
{
pPos[playerid][0] = x;
pPos[playerid][1] = y;
pPos[playerid][2] = z;
newplayers{playerid} = true;
SetPlayerPos(playerid, x, y, z);
return 1;
}
#define SetPlayerPos SetPlayerPosEx
/* OnPlayerConnect */
SetTimerEx("AntiTeleport", 1000, 0, "i", playerid);

forward AntiTeleport(playerid);
public AntiTeleport(playerid)
{
if(newplayers{playerid} == false)
{
if(!IsPlayerInRangeOfPoint(playerid, 10.0, pPos[playerid][0], pPos[playerid][1], pPos[playerid][2])) return Kick(playerid);
else return newplayers{playerid} = true;
}
GetPlayerPos(playerid, pPos[playerid][0], pPos[playerid][1], pPos[playerid][2]);
newplayers{playerid} = false;
return 1;
}

codeo
24.08.2014, 22:41
А как сделать проверку на координату Z, то есть если игрок падает, то чтобы код не выполнялся?

L0ndl3m
24.08.2014, 22:45
new
Float: p_vel_z;

GetPlayerVelocity(playerid, p_vel_z, p_vel_z, p_vel_z);

if(p_vel_z < 0.0)
// падает