Функция устанавливает позицию игрока рандомно в периметре указанного прямоугольника. Если не указывать позицию Z, сервер попытается установить её автоматически
PHP код:
SpawnPlayerToRect(playerid, Float:min_x, Float:min_y, Float:max_x, Float:max_y, Float:posZ = 65535.0)
{
new Float:fPos[2];
fPos[0] = fRand(floatround(min_x), floatround(max_x));
fPos[1] = fRand(floatround(min_y), floatround(max_y));
if(posZ == 65535.0)
SetPlayerPosFindZ(playerid, fPos[0], fPos[1], posZ);
else
SetPlayerPos(playerid, fPos[0], fPos[1], posZ);
}
Лучшая, по мнению Ziggi, реализация функции fRand
PHP код:
stock Float:fRand(Float:min, Float:max)
return floatadd(frandom(floatsub(max, min)), min);
Сюда же, дополнительно спавн по указанному радиусу. Аналогично предыдущей функции,
позиция по оси Z будет выставлена автоматически, если её не указать в аргументах
PHP код:
SpawnPlayerToCircle(playerid, Float:cRad, Float:cPosX, Float:cPosY, Float:cPosZ = 65535.0)
{
new Float:rPos[2];
rPos[0] = cRad *floatcos(random(360), degrees) +cPosX;
rPos[1] = cRad *floatsin(random(360), degrees) +cPosY;
if(cPosZ == 65535.0)
SetPlayerPosFindZ(playerid, rPos[0], rPos[1], cPosZ);
else
SetPlayerPos(playerid, rPos[0], rPos[1], cPosZ);
}
Примечание:
Координата по оси Z вычисляется неточно, её правильность зависит от того, находится ли игрок в зоне видимости новой точки. Для более точного вычисления используйте плагин
Map Andreas
Автор: Edwin (am I)