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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±

    ProxDetector - сообщение ближайшим игрокам, с цветом зависящим от расстояния

    Описание:
    Функция отправляет сообщение ближайшим игрокам вычисляя цвет, интенсивность которого завит от расстояния.

    Параметры:
    playerid - игрок, от которого идёт сообщение
    Float:max_range - максимальное расстояние, на котором будет отправлено сообщение
    color - базовый цвет
    string[] - сообщение
    Float:max_ratio = 1.6 (необязательный) - коэффициент уменьшения интенсивности цвета

    Возвращаемое значение:
    Функция возвращает 0, если playerid не подключен, в остальных случаях возвращается 1.

    Код:
    1. stock ProxDetector(playerid, Float:max_range, color, const string[], Float:max_ratio = 1.6)
    2. {
    3. new
    4. Float:pos_x,
    5. Float:pos_y,
    6. Float:pos_z,
    7. Float:range,
    8. Float:range_ratio,
    9. Float:range_with_ratio,
    10. clr_r, clr_g, clr_b,
    11. Float:color_r, Float:color_g, Float:color_b;
    12.  
    13. if (!GetPlayerPos(playerid, pos_x, pos_y, pos_z)) {
    14. return 0;
    15. }
    16.  
    17. color_r = float(color >> 24 & 0xFF);
    18. color_g = float(color >> 16 & 0xFF);
    19. color_b = float(color >> 8 & 0xFF);
    20. range_with_ratio = max_range * max_ratio;
    21.  
    22. #if defined foreach
    23. foreach (new i : Player) {
    24. #else
    25. for (new i = GetPlayerPoolSize(); i != -1; i--) {
    26. #endif
    27. if (!IsPlayerStreamedIn(playerid, i)) {
    28. continue;
    29. }
    30.  
    31. range = GetPlayerDistanceFromPoint(i, pos_x, pos_y, pos_z);
    32. if (range > max_range) {
    33. continue;
    34. }
    35.  
    36. range_ratio = (range_with_ratio - range) / range_with_ratio;
    37. clr_r = floatround(range_ratio * color_r);
    38. clr_g = floatround(range_ratio * color_g);
    39. clr_b = floatround(range_ratio * color_b);
    40.  
    41. SendClientMessage(i, (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24), string);
    42. }
    43.  
    44. SendClientMessage(playerid, color, string);
    45. return 1;
    46. }


    Примечания:
    • Функция поддерживает любые комбинации цветов, прозрачность переданного цвета остаётся не тронутой.

    Пример использования:
    1. CMD:say(playerid, params[])
    2. {
    3. ProxDetector(playerid, 20.0, 0xFFAA99FF, params);
    4. return 1;
    5. }


    Автор: ziggi
    Последний раз редактировалось Daniel_Cortez; 01.10.2018 в 15:33. Причина: const-correctness fix

  2. 11 пользователя(ей) сказали cпасибо:
    #Djuga (04.04.2018) $continue$ (03.08.2016) 123 (04.08.2016) BadPawn (05.08.2016) Nash_Brigers (07.08.2016) Nexius_Tailer (03.08.2016) Nurick (06.08.2016) PawnoNoob (03.08.2016) Skull (03.08.2016) vovandolg (03.08.2016) [ForD] (12.08.2016)
  3. #2
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Изменение яркости цвета полезно, спасибо.
    Появилась тут мысль, как с её помощью реализовать 3d-тексты над пикапами с покупкой дома, как в сингле (когда при приближении к нему текст цены дома становился отчётливее)
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Изменение яркости цвета полезно, спасибо.
    Появилась тут мысль, как с её помощью реализовать 3d-тексты над пикапами с покупкой дома, как в сингле (когда при приближении к нему текст цены дома становился отчётливее)
    В сингле ещё размер менялся, а этого, увы, в сампе не сделать.

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

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Разве GetPlayerPos вернет 0, если игрок не подключен? В вики написано, что функция ничего не возвращает.

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Разве GetPlayerPos вернет 0, если игрок не подключен? В вики написано, что функция ничего не возвращает.
    Если написано в русской вики - врёт. Её обновляют гораздо реже, так что советую сверяться с английскими копиями статей.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Разве GetPlayerPos вернет 0, если игрок не подключен? В вики написано, что функция ничего не возвращает.
    Да, проверка игрока на подключение к серверу есть во всех функциях (скорее всего во всех, но я все не проверял).
    Последний раз редактировалось ziggi; 16.08.2016 в 15:52.

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±
    Блестящая работа!

    ziggi, если не сложно, напиши пожалуйста, что используется в коде, дабы разобрать код.

    Побитовые сдвиги вижу (или как правильно назвать :)))

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от BadPawn Посмотреть сообщение
    Побитовые сдвиги вижу (или как правильно назвать :)))
    Изучи работу побитовых операций, в интернете масса информации на эту тему.

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

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от BadPawn Посмотреть сообщение
    Блестящая работа!

    ziggi, если не сложно, напиши пожалуйста, что используется в коде, дабы разобрать код.

    Побитовые сдвиги вижу (или как правильно назвать :)))
    http://forum.sa-mp.com/showthread.php?t=177523 - тут расписана бинарная система и битовые операции



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Побитовые операции везде одинаковые (разве, что различие в синтаксисе и то не везде)
    Можешь посмотреть:

    Сам не давно посмотрел =)
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  12. Пользователь сказал cпасибо:
    _lizard (05.08.2016)
 

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

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

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

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

Ваши права

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