PDA

Просмотр полной версии : [Вопрос] Как найти квадрат из позиции игрока.



Jackal
06.10.2015, 18:24
Нужно сделать создание гангзоны из того места, где стоит игрок.
Нужна функция типа GetPlayerKvadrat.



CMD:zone(playerid, params[])
{
new Float: bzX;
new Float: bzY;
new Float: bzZ;
GetPlayerPos(playerid, bzX, bzY, bzZ);
myzone[playerid] = GangZoneCreate(?, ?, ?, ?);
return 1;
}

Jackal
06.10.2015, 18:56
Вроде разобрался.


CMD:bzon(playerid)
{
new Float:bzX,Float:bzY,Float:bzZ;
GetPlayerPos(playerid, bzX, bzY, bzZ);
battlezone[playerid] = CreateDynamicRectangle(bzX-100.0, bzY-100.0, bzX+100.0, bzY+100.0, 0, 0, -1);
myzone[playerid] = GangZoneCreate(bzX-100.0, bzY-100.0, bzX+100.0, bzY+100.0);
GangZoneShowForAll(myzone[playerid],COLOR_RED);
return 1;
}

L0ndl3m
06.10.2015, 20:28
Спасибо, что поделились решением.

Daniel_Cortez
07.10.2015, 02:35
Вроде разобрался.


CMD:bzon(playerid)
{
new Float:bzX,Float:bzY,Float:bzZ;
GetPlayerPos(playerid, bzX, bzY, bzZ);
battlezone[playerid] = CreateDynamicRectangle(bzX-100.0, bzY-100.0, bzX+100.0, bzY+100.0, 0, 0, -1);
myzone[playerid] = GangZoneCreate(bzX-100.0, bzY-100.0, bzX+100.0, bzY+100.0);
GangZoneShowForAll(myzone[playerid],COLOR_RED);
return 1;
}
Выглядит более-менее правильно, но в чём смысл создавать динамический регион (CreateDynamicRectangle)?
Вы его вообще как-нибудь используете? И удаляете ли вы регион при выходе игрока с сервера? (я так понимаю, именно при выходе игрока нужно убирать регион, раз индексация сделана по ID игрока, иначе каждый игрок сможет бесконтрольно создавать регионы, пока сервер не зависнет)

Jackal
07.10.2015, 05:44
Да, использую регион в случае входа или выхода игрока из него вывожу ему SCM. Насчет удаления при дисконнекте, возможно не обратил бы на это должное внимание, благодарю.

Daniel_Cortez
07.10.2015, 06:59
Да, использую регион в случае входа или выхода игрока из него вывожу ему SCM. Насчет удаления при дисконнекте, возможно не обратил бы на это должное внимание, благодарю.
Чуть не забыл, во время повторного использовани команды регион тоже нужно удалять (либо вообще запретить повторное использование). Иначе ID старого региона будет перезаписан ID нового региона, а старый так и потеряется, а заодно ещё и появится возможность флудом командой насоздавать кучу регионов и повесить сервер.

Jackal
09.10.2015, 20:12
Чуть не забыл, во время повторного использовани команды регион тоже нужно удалять (либо вообще запретить повторное использование). Иначе ID старого региона будет перезаписан ID нового региона, а старый так и потеряется, а заодно ещё и появится возможность флудом командой насоздавать кучу регионов и повесить сервер.

Да, спасибо ещё раз, замечал то же самое с таймерами, после освобождения из КПЗ, игрока несколько раз "освобождало" т.к. таймер выставлялся несколько раз после смерти в КПЗ. Сделал удаление и сразу повторное выставление цикличного посекундного таймера, а потом и вовсе переделал под не цикличный.

С созданием региона есть переменная на проверку - создан регион уже или нет. Пока не закончится время в таймере, нельзя создать регион повторно. Также по истечении времени регион удаляю.