Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: ProxDetector - сообщение ближайшим игрокам - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

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

#1
Пользователь офлайн   Jeckson! 

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


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


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


Код:
stock ProxDetector(playerid, Float:max_range, color, string[], Float:max_ratio = 1.6)
{
    new
        Float:pos_x,
        Float:pos_y,
        Float:pos_z,
        Float:range,
        Float:range_ratio,
        Float:range_with_ratio,
        clr_r, clr_g, clr_b,
        Float:color_r, Float:color_g, Float:color_b;

    if (!GetPlayerPos(playerid, pos_x, pos_y, pos_z)) {
        return 0;
    }

    color_r = float(color >> 24 & 0xFF);
    color_g = float(color >> 16 & 0xFF);
    color_b = float(color >> 8 & 0xFF);
    range_with_ratio = max_range * max_ratio;

#if defined foreach
    foreach (new i : Player) {
#else
    for (new i = GetPlayerPoolSize(); i != -1; i--) {
#endif
        if (!IsPlayerStreamedIn(playerid, i)) {
            continue;
        }

        range = GetPlayerDistanceFromPoint(i, pos_x, pos_y, pos_z);
        if (range > max_range) {
            continue;
        }

        range_ratio = (range_with_ratio - range) / range_with_ratio;
        clr_r = floatround(range_ratio * color_r);
        clr_g = floatround(range_ratio * color_g);
        clr_b = floatround(range_ratio * color_b);

        SendClientMessage(i, (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24), string);
    }

    SendClientMessage(playerid, color, string);
    return 1;
}


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


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


Автор: ziggi
3

#2
Пользователь офлайн   Kamigakuro 

  • Новичок
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
а как можно добавить цвет для ника? К примеру у меня идет так NickName[id]: text.
0

#3
Пользователь онлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияKamigakuro (21 Декабрь 2016 - 23:14) писал:

а как можно добавить цвет для ника? К примеру у меня идет так NickName[id]: text.

В параметр цвета поставить функцию GetPlayerColor, и перед спецификатором текста игрока уже ставить {ffffff}.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей