05.04.2013, 07:33
(
Last edited by AirKite; 05/04/2013 at 08:12 AM.
)
Кстати, а что будет если точка находится с краю чанка, но её радиус выходит за пределы этого чанка. Сработает ли она на соседнем чанке?
UPD: стало так интересно, что не выдержал и порылся немного в коде. Как я понял, ищет ещё и в окружных, 8 чанках. Лучше всего при создании поинта проверять на какие чанки попадает его радиус, и в эти чанки добавлять информацию о чанках в которые и попадают поинты а-ля ярлыки. (В pawn скорее извращение, а вот в плагине можно... хотя если использовать GVar плагин, то вполне).
Далее не понял зачем в GetPlayerPoint второй аргумент. Так называемый MODE.
UPD: стало так интересно, что не выдержал и порылся немного в коде. Как я понял, ищет ещё и в окружных, 8 чанках. Лучше всего при создании поинта проверять на какие чанки попадает его радиус, и в эти чанки добавлять информацию о чанках в которые и попадают поинты а-ля ярлыки. (В pawn скорее извращение, а вот в плагине можно... хотя если использовать GVar плагин, то вполне).
Далее не понял зачем в GetPlayerPoint второй аргумент. Так называемый MODE.
pawn Code:
if(WorldID != PointW[P] || PointW[P]!=-1)continue;
// В чём разница? Смысли, один метод будет всегда быстрее или на ровне другого, с итоговым всегда одинаковым результатом.
// И с каких пор виртуальный мир может быть -1? Разве недостаточно WorldID != PointW[P]?
if(WorldID != PointW[P] && PointW[P]!=-1)continue;
// 1 метод
if(IsPlayerInRangeOfPoint(playerid, PointR[P], PointX[P], PointY[P], PointZ[P]))return P;
// 2 метод
y=GetPlayerDistanceFromPoint(playerid, PointX[P], PointY[P], PointZ[P]);
if(y < z) // выше z=1000.0;
{
z=y; P2=P;
}
// 3 метод
y=GetPlayerDistanceFromPoint(playerid, PointX[P], PointY[P], PointZ[P]);
if(y > PointR[P])continue;
if(y < z)
{
z=y; P2=P;
}
// Так и не понял зачем присваивать радиус "z" когда она далее нигде не используется и никуда не возвращается.
// Про сами методы, получение дистанции заместо IsPlayerInRangeOfPoint я вообще нихрена не понимаю. ЗАЧЕМ???