Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: PlayerToKvadrat

  1. #1
    Аватар для lonin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Очаков, UA
    Сообщений
    25
    Репутация:
    4 ±

    PlayerToKvadrat

    Здравствуйте уважаемые форумчане!

    Возникла проблема с использованием функции PlayerToKvadrat(playerid,Float:min_x,Float:min_y,Float:max_x,Float:max_y)

    В общем у меня есть 3 глобальные переменные координат, в которые неважно каким образом, записываются координаты зараженной радиацией зоны:

    PHP код:
    new Float:posJad[MAX_PLAYERS][3]; 
    Где posJad[playerid][0] - ось Х, posJad[playerid][1] - ось У и posJad[playerid][2] - ось Z.

    Сделал системку которая при попадании человека в зону Хmin, Ymin, Xmax, Ymax будет отниматься по 0,5 ХП в секунду (использую паблик OnPlayerUpdate):

    PHP код:
    for(new 0MAX_PLAYERSx++)
        {
            if(
    PlayerToKvadrat(x,posJad[x][0]+30posJad[x][1]+30,posJad[x][0]-30posJad[x][1]-30) && radionucT 0)
            {
                new 
    Float:health;
                
    radionucT -=1;
                
    GetPlayerHealth(playeridhealth);
                
    SetPlayerHealth(playeridhealth 0.5);
            }
        } 
    Результат равен нулю, помогите советом! Благодарность обеспечена!

  2. #2
    Аватар для #Vito
    #define

    Статус
    Оффлайн
    Регистрация
    14.09.2013
    Адрес
    Одесса
    Сообщений
    129
    Репутация:
    38 ±
    паблик OnPlayerUpdate обновляется 25 раз в секунду, а Вы там еще цикл всех игроков используете
    Skype: vitya.saveliev


  3. #3
    Аватар для lonin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Очаков, UA
    Сообщений
    25
    Репутация:
    4 ±
    Цитата Сообщение от #Vito Посмотреть сообщение
    паблик OnPlayerUpdate обновляется 25 раз в секунду, а Вы там еще цикл всех игроков используете
    Спасибо за помощь! Но я не спрашивал, сколько он раз обновляется в секунду :D Я не использую его, для примера написал)

  4. #4
    Аватар для #Vito
    #define

    Статус
    Оффлайн
    Регистрация
    14.09.2013
    Адрес
    Одесса
    Сообщений
    129
    Репутация:
    38 ±
    Ну тогда, в
    PHP код:
    PlayerToKvadrat 
    нужно вводить координаты не игрока, а GangZone
    Skype: vitya.saveliev


  5. #5
    Аватар для lonin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Очаков, UA
    Сообщений
    25
    Репутация:
    4 ±
    Ты вообще мой первый пост читал? У меня там не координаты игрока :D

    - - - Добавлено - - -

    И да, PlayerToKvadrat это не обязательно GangZona, это просто ф-ция проверяющая игрока в квадрате.

    - - - Добавлено - - -

    там координаты минимальные по Х,У и максимальные по тем же осям.

  6. #6
    Аватар для #Vito
    #define

    Статус
    Оффлайн
    Регистрация
    14.09.2013
    Адрес
    Одесса
    Сообщений
    129
    Репутация:
    38 ±
    А что тогда?
    PHP код:
    new Float:posJad[MAX_PLAYERS][3]; 
    if(
    PlayerToKvadrat(x,posJad[x][0]+30posJad[x][1]+30,posJad[x][0]-30posJad[x][1]-30) && radionucT 0
    И, мб, ты квадрат не создал..
    Skype: vitya.saveliev


  7. #7
    Аватар для lonin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Очаков, UA
    Сообщений
    25
    Репутация:
    4 ±
    Цитата Сообщение от #Vito Посмотреть сообщение
    А что тогда?
    PHP код:
    new Float:posJad[MAX_PLAYERS][3]; 
    if(
    PlayerToKvadrat(x,posJad[x][0]+30posJad[x][1]+30,posJad[x][0]-30posJad[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, не нужно создавать никаких "квадратов", вот сток:
    PHP код:
    stock PlayerToKvadrat(playerid,Float:min_x,Float:min_y,Float:max_x,Float:max_y)
    {
        new 
    Float:xxp,Float:yyp,Float:zzp;
        
    GetPlayerPos(playeridxxpyypzzp);
        if((
    xxp <= max_x && xxp >= min_x) && (yyp <= max_y && yyp >= min_y)) return 1;
        return 
    0;

    Вот какие нужны координаты(верхняя левая и нижняя правая квадрата) :

    Вот пример применения:

    PHP код:
    if(strcmp(cmdtext,"/primer",true)==0)
    {
     if(!
    PlayerToKvadrat(playerid,-322.671722, -1436.344726, -154.671722, -1308.344726)) return SendClientMessage(playeridCOLOR_WHITE"Вы не в квадрате!");


  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, разве не так должно быть?
    PHP код:
    for(new 0MAX_PLAYERSx++)
    {
        if(
    PlayerToKvadrat(xposJad[x][0]-30posJad[x][1]+30posJad[x][0]-30posJad[x][1]+30) && radionucT 0)
        {
            new 
    Float:health;
            
    radionucT -=1;
            
    GetPlayerHealth(playeridhealth);
            
    SetPlayerHealth(playeridhealth 0.5);
        }

    Если не сработает, просто сделайте логирование и посмотрите какие значения выдаёт массив
    PHP код:
    for(new 0MAX_PLAYERSx++)
    {
        
    printf("%f, %f, %f, %f"posJad[x][0]-30posJad[x][1]+30posJad[x][0]-30posJad[x][1]+30);
        if(
    PlayerToKvadrat(xposJad[x][0]-30posJad[x][1]+30posJad[x][0]-30posJad[x][1]+30) && radionucT 0)
        {
            new 
    Float:health;
            
    radionucT -=1;
            
    GetPlayerHealth(playeridhealth);
            
    SetPlayerHealth(playeridhealth 0.5);
        }

    И логи уже скиньте нам. Ибо дело явно в вашем массиве. Не может же функция, которая у остальных работает, у вас вдруг перестать работать.

    P.S. И да, надеюсь вы и правда не собирались вставлять цикл на всех игроков в коллбэк, который вызывается индивидуально для каждого игрока туеву тучу раз.
    Последний раз редактировалось DeimoS; 15.09.2014 в 07:26.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для lonin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Очаков, UA
    Сообщений
    25
    Репутация:
    4 ±
    Проблема решена, ответы в теме были пустые Всем спасибо, все свободны

  10. #10
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Цитата Сообщение от lonin Посмотреть сообщение
    maxY будет вверху.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •