Вход

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



m1n1vv
05.03.2016, 21:31
Привет. Сделал в OnPlayerLeaveDynamicArea кик игрока. Но из-за того что респавн начинается с нулевых координат, игрока кикает. Как это можно обойти?


#define MAX_ZONES 1
new zones[MAX_ZONES];
new Float:zones_points_0[] =
{
-3000.0,1410.0,-2706.0,1600.0,-2660.0,1598.0,-1740.0,1606.0,-1290.0,1516.0,-1280.0,1058.0,-1064.0,698.0,-820.0,344.0,-1062.0,-90.0,-1042.0,-376.0,
-1116.0,-434.0,-1186.0,-538.0,-1222.0,-696.0,-1500.0,-726.0,-1634.0,-716.0,-1710.0,-664.0,-1780.0,-662.0,-1778.0,-1232.0,-1856.0,-1488.0,-1935.0,-1404.0,
-2066.0,-1254.0,-2187.0,-1060.0,-2539.0,-867.0,-2808.0,-988.0,-3000.0,-972.0,-3000.0,1410.0
};
public OnPlayerEnterDynamicArea(playerid, areaid)
{
for (new zone = 0; zone < MAX_ZONES; zone++)
if (areaid == zones[zone])
//сообщение
return 1;
}
public OnPlayerLeaveDynamicArea(playerid, areaid)
{
for (new zone = 0; zone < MAX_ZONES; zone++)
{
if (areaid==zones[zone])
{
SetTimerEx("KickPublicSF", 100, false, "i", playerid);
}
}
return 1;
}
forward KickPublicSF(playerid);
public KickPublicSF(playerid)
Kick(playerid);

Daniel_Cortez
05.03.2016, 21:49
Попробуйте игнорировать игрока первые несколько секунд после спавна. Сделайте массив на MAX_PLAYERS ячеек (можно даже использовать char при задании размера и вместо ячеек обращаться к отдельным байтам) и в него записывайте флаг игнора игрока (1) при спавне и сбрасывайте его при срабатывании таймера, а OnPlayerLeaveDynamicArea проверяйте флаг перед киком.
И да, ещё есть возможность того, что игрок за те первые секунды куда-нибудь телепортируется читом, поэтому в таймерной функции проверяйте его нахождение в динамическом регионе.

m1n1vv
05.03.2016, 22:02
Попробуйте игнорировать игрока первые несколько секунд после спавна. Сделайте массив на MAX_PLAYERS ячеек (можно даже использовать char при задании размера и вместо ячеек обращаться к отдельным байтам) и в него записывайте флаг игнора игрока (1) при спавне и сбрасывайте его при срабатывании таймера, а OnPlayerLeaveDynamicArea проверяйте флаг перед киком.
И да, ещё есть возможность того, что игрок за те первые секунды куда-нибудь телепортируется читом, поэтому в таймерной функции проверяйте его нахождение в динамическом регионе.

Кик при условии, если sfnk =1. При смерти я присваиваю 0. И через пару сек после спавна 1. Ну в общем как ты сказал.

DeimoS
06.03.2016, 08:49
Хмм, а если просто попробовать играть по правилам сервера и создать ещё одну динамическую зону в тех координатах, куда помещает игрока при кике? И уже если игрок в этой зоне, просто игнорировать его и не кикать. Хотя не знаю, будет ли это выгодно в плане оптимизации, ибо не особо вникал в реализацию системы, что дана в шапке темы

m1n1vv
06.03.2016, 19:10
Хмм, а если просто попробовать играть по правилам сервера и создать ещё одну динамическую зону в тех координатах, куда помещает игрока при кике? И уже если игрок в этой зоне, просто игнорировать его и не кикать. Хотя не знаю, будет ли это выгодно в плане оптимизации, ибо не особо вникал в реализацию системы, что дана в шапке темы

Пробовал. Все равно кикакло. Я даже СФ и центр карты делал одной зоной.