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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±

    Проблема с GetPlayerHealth

    Почему GetPlayerHealth не корректно показывает информацию о хп? Для теста поставил себе 8 с чем-то тысяч здоровья, но выводит далеко не эти числа.
    PHP код:
    new 
        
    Float:health;
    GetPlayerHealth(playeridhealth);
    printf("HP: %.0f, %.0f"pInfo[playerid][pHealth], health); 
    PHP код:
    HP8562114 
    Это баг или я что-то не так делаю?

    P.S. На деле выдало 8562 хп. Проверял на взрывах )

  2. #2
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от wiki.sa-mp.com/wiki/GetPlayerHealth
    * Even though the health can be set to near infinite values on the server side, the individual clients will only report values up to 255. Anything higher will wrap around; 256 becomes 0, 257 becomes 1, etc.
    Фича такая: за 255 значением следует "количество хп - 256"
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    25.06.2016
    Сообщений
    9
    Репутация:
    1 ±
    А если вот так попробовать?

    PHP код:
    new  
    Float:health
    GetPlayerHealth(playeridhealth); 
    printf("{HP: %.0f, %.0f},"pInfo[playerid][pHealth], health); 

  4. #4
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Фича такая: за 255 значением следует "количество хп - 256"
    Неверно перевели.
    Все значения которые идут после 255 корректируются как (не дословный перевод, но понятный):
    Код:
    256 -> 0
    257 -> 1
    258 -> 2

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Есть выход с ситуации?

  6. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Есть выход с ситуации?
    Перехват GetPlayerHealth с целью подмены значения и собственная система урона.

  7. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Есть выход с ситуации?
    Только если сделать что-то типа античита - перехватить вызовы Get/SetPlayerHealth и контролировать HP на стороне сервера.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. #8
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Неверно перевели.
    Все значения которые идут после 255 корректируются как (не дословный перевод, но понятный):
    Код:
    256 -> 0
    257 -> 1
    258 -> 2
    Я написал о том же

    Цитата Сообщение от Deni$ Посмотреть сообщение
    А если вот так попробовать?

    PHP код:
    new  
    Float:health
    GetPlayerHealth(playeridhealth); 
    printf("{HP: %.0f, %.0f},"pInfo[playerid][pHealth], health); 
    Со скобками ж просто выведет, толку то)
    Последний раз редактировалось Nexius_Tailer; 02.07.2016 в 22:01.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Ну SetPlayerHealth это не коснулось
    Последний раз редактировалось m1n1vv; 03.07.2016 в 00:25.

  10. #10
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    А вот просто использовать переменную pInfo[playerid][pHealth] ненадежно?
    Надёжно, но тогда если где-нибудь сверить хп в переменной и только что узнанное хп, то они не будут совпадать даже будучи реально равными. Если такая проверка где-то будет, то вот пример, как сделать чтобы она работала корректно:
    Код:
    //Где-нибудь
    SetPlayerHealth(playerid, 10000);
    pInfo[playerid][pHealth] = 10000;
    Код:
    new Float:hp;
    GetPlayerHealth(playerid, hp);
    while(pInfo[playerid][pHealth] > hp + 255) hp += 256;
    //нужные нам проверки
    //(теперь переменная с новым хп "hp" будет с правильным значением)
    
    //Ну и если это какой-нибудь таймер и нам нужно обновить старое хп, просто делаем следующее
    pInfo[playerid][pHealth] = floatround(hp, floatround_tozero);
    Таким образом если хп в статистике будет больше 255, то новое хп будет "подгонять" под правильное значение.
    Возможно есть побочные эффекты, вроде если резко игрок умрёт и новое хп изменится на реальный 0, тогда возможно система будет всё также думать, что хп у игрока за 255, тем самым будет выдавать неправильное значение. Наверное всё-же своя система урона или что-то вроде этого - это лучший вариант.
    Последний раз редактировалось Nexius_Tailer; 03.07.2016 в 00:39.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  11. Пользователь сказал cпасибо:
    m1n1vv (03.07.2016)
 

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

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

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

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

Ваши права

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