Просмотр полной версии : [Вопрос] PlayerToKvadrat
Здравствуйте уважаемые форумчане!
Возникла проблема с использованием функции PlayerToKvadrat(playerid,Float:min_x,Float:min_y,Float:max_x,Float:max_y)
В общем у меня есть 3 глобальные переменные координат, в которые неважно каким образом, записываются координаты зараженной радиацией зоны:
new Float:posJad[MAX_PLAYERS][3];
Где posJad[playerid][0] - ось Х, posJad[playerid][1] - ось У и posJad[playerid][2] - ось Z.
Сделал системку которая при попадании человека в зону Хmin, Ymin, Xmax, Ymax будет отниматься по 0,5 ХП в секунду (использую паблик OnPlayerUpdate):
for(new x = 0; x < MAX_PLAYERS; x++)
{
if(PlayerToKvadrat(x,posJad[x][0]+30, posJad[x][1]+30,posJad[x][0]-30, posJad[x][1]-30) && radionucT > 0)
{
new Float:health;
radionucT -=1;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health - 0.5);
}
}
Результат равен нулю, помогите советом! Благодарность обеспечена!
паблик OnPlayerUpdate обновляется 25 раз в секунду, а Вы там еще цикл всех игроков используете
паблик OnPlayerUpdate обновляется 25 раз в секунду, а Вы там еще цикл всех игроков используете
Спасибо за помощь! :thank_you: Но я не спрашивал, сколько он раз обновляется в секунду :D Я не использую его, для примера написал)
Ну тогда, в
PlayerToKvadrat нужно вводить координаты не игрока, а GangZone
Ты вообще мой первый пост читал? :help: У меня там не координаты игрока :D
- - - Добавлено - - -
И да, PlayerToKvadrat это не обязательно GangZona, это просто ф-ция проверяющая игрока в квадрате.
- - - Добавлено - - -
там координаты минимальные по Х,У и максимальные по тем же осям.
А что тогда?
new Float:posJad[MAX_PLAYERS][3];
if(PlayerToKvadrat(x,posJad[x][0]+30, posJad[x][1]+30,posJad[x][0]-30, posJad[x][1]-30) && radionucT > 0)
И, мб, ты квадрат не создал..
А что тогда?
new Float:posJad[MAX_PLAYERS][3];
if(PlayerToKvadrat(x,posJad[x][0]+30, posJad[x][1]+30,posJad[x][0]-30, posJad[x][1]-30) && radionucT > 0)
И, мб, ты квадрат не создал..
posJad[playerid][0] - ось Х, posJad[playerid][1] - ось У и posJad[playerid][2] - ось Z.
В PlayerToKvadrat:
posJad[x][0]+30 - Xmin, posJad[x][1]+30 - Ymin, posJad[x][0]-30 - Xmax, posJad[x][1]-30 - Ymax; Это глобальные переменные в которые, ранние были записаны координаты...
На сколько я помню для функции PlayerToKvadrat, не нужно создавать никаких "квадратов", вот сток:
stock PlayerToKvadrat(playerid,Float:min_x,Float:min_y,Float:max_x,Float:max_y)
{
new Float:xxp,Float:yyp,Float:zzp;
GetPlayerPos(playerid, xxp, yyp, zzp);
if((xxp <= max_x && xxp >= min_x) && (yyp <= max_y && yyp >= min_y)) return 1;
return 0;
}
Вот какие нужны координаты(верхняя левая и нижняя правая квадрата) :
http://i.imgur.com/Tr3Y5Wx.png?1
Вот пример применения:
if(strcmp(cmdtext,"/primer",true)==0)
{
if(!PlayerToKvadrat(playerid,-322.671722, -1436.344726, -154.671722, -1308.344726)) return SendClientMessage(playerid, COLOR_WHITE, "Вы не в квадрате!");
}
Эмм, разве не так должно быть?
for(new x = 0; x < MAX_PLAYERS; x++)
{
if(PlayerToKvadrat(x, posJad[x][0]-30, posJad[x][1]+30, posJad[x][0]-30, posJad[x][1]+30) && radionucT > 0)
{
new Float:health;
radionucT -=1;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health - 0.5);
}
}
Если не сработает, просто сделайте логирование и посмотрите какие значения выдаёт массив
for(new x = 0; x < MAX_PLAYERS; x++)
{
printf("%f, %f, %f, %f", posJad[x][0]-30, posJad[x][1]+30, posJad[x][0]-30, posJad[x][1]+30);
if(PlayerToKvadrat(x, posJad[x][0]-30, posJad[x][1]+30, posJad[x][0]-30, posJad[x][1]+30) && radionucT > 0)
{
new Float:health;
radionucT -=1;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health - 0.5);
}
}
И логи уже скиньте нам. Ибо дело явно в вашем массиве. Не может же функция, которая у остальных работает, у вас вдруг перестать работать.
P.S. И да, надеюсь вы и правда не собирались вставлять цикл на всех игроков в коллбэк, который вызывается индивидуально для каждого игрока туеву тучу раз.
Проблема решена, ответы в теме были пустые :stop: Всем спасибо, все свободны :wacko:
http://i.imgur.com/Tr3Y5Wx.png?1
maxY будет вверху.
Проблема решена, ответы в теме были пустые :stop: Всем спасибо, все свободны :wacko:
Ну так поделитесь со всеми тем, как всё исправили. Не жадничайте =(
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot