Подскажите как сделать проверку для анти телепорта через GetPlayerPos если игрок изменил позицию на 10м. то кик
Вид для печати
Подскажите как сделать проверку для анти телепорта через GetPlayerPos если игрок изменил позицию на 10м. то кик
Примерно так думаю.PHP код:
/* 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]); )
Спасибо большое, теперь понял :hi:
а если я сделаю так:
то есть шанс что игрока кикнет?
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)
PHP код:
/* 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;
}
PHP код:
/* 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;
}
А как сделать проверку на координату Z, то есть если игрок падает, то чтобы код не выполнялся?
PHP код:
new
Float: p_vel_z;
GetPlayerVelocity(playerid, p_vel_z, p_vel_z, p_vel_z);
if(p_vel_z < 0.0)
// падает