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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    Цвета в чате

    Здравствуйте, уважаемые пользователи. У меня такой вопрос, как можно в чате сделать так
    Код:
    {белый цвет}[ЧАТ]{цвет игрока}Untonyst:{белый цвет}бла-бла-бла
    Код:
    public OnPlayerText(playerid, text[])
    {
    	if p_logged{playerid} == 0 *then return 0;
    	new str[128];
    	format(str, sizeof(str), "[ЧАТ] {%d}%d: {FFFFFF}%s", GetPlayerColor(playerid), p_name[playerid], text);
    	SendClientMessageToAll(-1, str);
    	SetPlayerChatBubble(playerid, text, GetPlayerColor(playerid), 20.0, 10000);
    	return 0;
    }
    GetPlayerColor вышел не вариантом, в голове только набросок возможно будущего костыля. Я пока не решаюсь его сделать, по простой причине, может есть другой вариант?

     Костыль (((9(
    PHP код:
    new color_list_array[6][] =
        {
            
    "0x00FF00FF",
            
    "0xBFFF00FF",
            
    "0x66FF00FF",
            
    "0x30D5C8FF",
            
    "0xADFF2FFF",
            
    "0xC0C0C0FF"
        
    },
        
    color_list[6] =
        {
            
    0x00FF00FF,
            
    0xBFFF00FF,
            
    0x66FF00FF,
            
    0x30D5C8FF,
            
    0xADFF2FFF,
            
    0xC0C0C0FF
        
    }
    ;

    stock get_hex_color(color[11])
    {
        
    strdel(color02);
        
    strdel(color68);
        
    printf("HEX: %s"color);
    }

    public 
    OnPlayerText(playeridtext[])
    {
        if 
    p_logged{playerid} == *then return 0;
        new 
    str[128];
        
    format(strsizeof(str), "[ЧАТ] {%s}%d: {FFFFFF}%s"get_hex_color(color_list_array[1]), p_name[playerid], text);
        
    SendClientMessageToAll(-1str);
        
    SetPlayerChatBubble(playeridtextGetPlayerColor(playerid), 20.010000);
        return 
    0;
    }

    // при загрузке аккаунта
    SetPlayerColor(playeridcolor_list[playerid]); 

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Функция GetPlayerColor возвращает цвет в виде числа. Формат - RGBA.
    Пример такого числа:
    Код:
    0xFFFFFFFF
    В функции SendClientMessage встраиваемые цвета имеют формат RGB.
    Пример:
    Код:
    "{FFFFFF}"
    Чтобы получить из RGBA представление в формате RGB, нужно сдвинуть число на 8 разрядов вправо, "вытолкнув" A из RGBA.
    Едем дальше. В функции format поддерживается спецификатор "%x". Но с этим спецификатором получится число из 8 цифр, а нам нужно всего 6, поэтому лучше указать "%06x".
    В итоге получаем следующее:
    PHP код:
    static const fmt_str[] = "[ЧАТ] {%06x}%s: {FFFFFF}%s";
    new 
    string[144];
    format(stringsizeof(string), fmt_strGetPlayerColor(playerid) >> 8p_name[playerid], text); 
    Btw, строки (имя игрока в твоём примере) форматируются с помощью спецификатора "%s", а не "%d". Также не лишним будет вспомнить про макс. длину текста в SCM.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. Пользователь сказал cпасибо:
    Desulaid (31.10.2015)
  4. #3
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Функция GetPlayerColor возвращает цвет в виде числа. Формат - RGBA.
    Пример такого числа:
    Код:
    0xFFFFFFFF
    В функции SendClientMessage встраиваемые цвета имеют формат RGB.
    Пример:
    Код:
    "{FFFFFF}"
    Чтобы получить из RGBA представление в формате RGB, нужно сдвинуть число на 8 разрядов вправо, "вытолкнув" A из RGBA.
    Едем дальше. В функции format поддерживается спецификатор "%x". Но с этим спецификатором получится число из 8 цифр, а нам нужно всего 6, поэтому лучше указать "%06x".
    В итоге получаем следующее:
    PHP код:
    static const fmt_str[] = "[ЧАТ] {%06x}%s: {FFFFFF}%s";
    new 
    string[144];
    format(stringsizeof(string), fmt_strGetPlayerColor(playerid) >> 8p_name[playerid], text); 
    Btw, строки (имя игрока в твоём примере) форматируются с помощью спецификатора "%s", а не "%d". Также не лишним будет вспомнить про макс. длину текста в SCM.
    Предугадываю слова ТС: "Зачем 2 массива?"
    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

  5. #4
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Также не лишним будет вспомнить про макс. длину текста в SCM.
    Я всегда думал, что 128 ячеек для чатов. Просто на вики в строке "Ввод и вывод текста (чат и команды)" написано 128 ячеек.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Функция GetPlayerColor возвращает цвет в виде числа. Формат - RGBA.
    Пример такого числа:
    Код:
    0xFFFFFFFF
    В функции SendClientMessage встраиваемые цвета имеют формат RGB.
    Пример:
    Код:
    "{FFFFFF}"
    Чтобы получить из RGBA представление в формате RGB, нужно сдвинуть число на 8 разрядов вправо, "вытолкнув" A из RGBA.
    Едем дальше. В функции format поддерживается спецификатор "%x". Но с этим спецификатором получится число из 8 цифр, а нам нужно всего 6, поэтому лучше указать "%06x".
    В итоге получаем следующее:
    PHP код:
    static const fmt_str[] = "[ЧАТ] {%06x}%s: {FFFFFF}%s";
    new 
    string[144];
    format(stringsizeof(string), fmt_strGetPlayerColor(playerid) >> 8p_name[playerid], text); 
    Спасибо, особенно за пример и за "разжевывание" ;)




    Цитата Сообщение от $continue$ Посмотреть сообщение
    Предугадываю слова ТС: "Зачем 2 массива?"
    Из тебя плохая Ванга ((9(

    P.s. нарушение пунктов 4.1 и 16. И чтобы не началось сравнения с оксом, то давай по порядку.
    - 1 (4.1), так как тема создается с целью помощи, то кроме советов, встречных вопросов по теме и т.д. здесь явно излишни. Очень понравилась фраза из этого пункта: "Не можете сказать ничего полезного - не говорите."
    - 2 (16), вынесение завуалированной агрессии из нашей с тобой беседы (что уж там, спора) на люд, можно расчесть как явное желание продолжить этот спор. И если кто-то (ты :3) хочет копировать стиль кодинга у других (у Стаса) и при этом отчаянно срать на мнение других ("докапатся ..."), не приводя каких-нибудь аргументов в свое оправдание - не хорошо ... Ну не по нраву мне создавать два массива, что с того Работать же будет аналогично ;)
    - * Особенно обидно, когда говорят о тебе, но не с тобой (99((
    Просто не делай так больше

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

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

    Русский раздел сдох - как и SA-MP
    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

  7. #6
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Никакой разницы "Text I/O (Chat/Commands) 128 cells (512 bytes)"
    Add: I/O - это input/output, т.е. "ввод/вывод" )0
    Последний раз редактировалось Desulaid; 31.10.2015 в 19:42.

  8. #7
    Аватар для $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

  9. #8
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Поискать, не? Лучше, конечно нести бред.
    Искать? Пфф, ту ссылку, которую я скинул, я же не искал, я вручную ее набрал ...

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    PHP код:
    static const fmt_str[] = "[ЧАТ] {%06x}%s: {FFFFFF}%s";
    new 
    string[144];
    format(stringsizeof(string), fmt_strGetPlayerColor(playerid) >> 8p_name[playerid], text); 
    Всё-таки правильнее будет ">>>", а не ">>". Или я путаю?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Всё-таки правильнее будет ">>>", а не ">>". Или я путаю?
    Проверил. Да, так будет правильнее, но в данном случае это ни на что не повлияет. Число будет сдвинуто и в вывод попадут 6 младших шестнадцатеричных разрядов числа (RGB), как и было задумано.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

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

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

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

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

Ваши права

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