Подскажите как сделать проверку для анти телепорта через 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]); )
codeo (12.08.2014)
Спасибо большое, теперь понял
а если я сделаю так:
то есть шанс что игрока кикнет?
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;
}
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
codeo (13.08.2014)
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;
}
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
А как сделать проверку на координату Z, то есть если игрок падает, то чтобы код не выполнялся?
PHP код:
new
Float: p_vel_z;
GetPlayerVelocity(playerid, p_vel_z, p_vel_z, p_vel_z);
if(p_vel_z < 0.0)
// падает
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)