PDA

Просмотр полной версии : [Вопрос] Цвет в сообщении



Kamigakuro
21.12.2016, 22:56
Пытаюсь доработать под себя ProxDetector.


stock ProxDetectorChat(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;
foreach (new i : Player) {
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;
}

Как мне к сообщению добавить цвет ника? Цвет из SetPlayerColor.
З.Ы. код скомунизден, поэтому я такой и тупой.

qwezert
22.12.2016, 12:19
Пытаюсь доработать под себя ProxDetector.


stock ProxDetectorChat(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;
foreach (new i : Player) {
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;
}

Как мне к сообщению добавить цвет ника? Цвет из SetPlayerColor.
З.Ы. код скомунизден, поэтому я такой и тупой.
Немного не понял, где должен быть цвет ника? И какого ника? Отправителя?

Mike_World
22.12.2016, 13:38
Вариант 1
SendClientMessage(playerid, COLOR_RED, "%s текст")
Вариант 2
SendClientMessage(playerid,-1, "{FF0000}%s");
Если помог, +ик =)

vovandolg
22.12.2016, 13:56
Вариант 1
SendClientMessage(playerid, COLOR_RED, "%s текст")
Вариант 2
SendClientMessage(playerid,-1, "{FF0000}%s");
Если помог, +ик =)

Плохие примеры)
Без форматирования SendClientMessage не вывезет аргументы(если канеш у тебя не где не стоит перехватчик с внутренним форматированием в функции),
а с цветом лучше первый вариант выбрать,
так как во втором варианте он будет занимать 8 символов, из за того что юзается в строке.

Mike_World
22.12.2016, 14:03
Я ему просто дал знать как цвет ника делать =)

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

Я ему просто дал знать как цвет ника делать =)

DeimoS
22.12.2016, 14:31
Я ему просто дал знать как цвет ника делать =)

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

Я ему просто дал знать как цвет ника делать =)

А теперь перепрочти ещё раз сообщение автора и пойми, что он просил совсем не то, что ему дал ты.

И да, либо начинай излагать конструктив, либо покинь сей форум. А набивание сообщений путём поднятия старых тем и просто бессмысленной чуши - это ты не по адресу. Ещё раз подобное увижу от тебя - не просто удалю сообщение, а ещё и предупреждение выдам (3 предупреждения и добро пожаловать в бан).
Данный форум не любит тех, кто сидит на нём ради получения репутации. Для подобных действ существует другой (http://pawno-info.ru) форум. А тут, пожалуйста, без оффтопа.

Mike_World
22.12.2016, 15:11
А теперь перепрочти ещё раз сообщение автора и пойми, что он просил совсем не то, что ему дал ты.

И да, либо начинай излагать конструктив, либо покинь сей форум. А набивание сообщений путём поднятия старых тем и просто бессмысленной чуши - это ты не по адресу. Ещё раз подобное увижу от тебя - не просто удалю сообщение, а ещё и предупреждение выдам (3 предупреждения и добро пожаловать в бан).
Данный форум не любит тех, кто сидит на нём ради получения репутации. Для подобных действ существует другой (http://pawno-info.ru) форум. А тут, пожалуйста, без оффтопа.

1) Я сообщения не набивал.
2) Я не просил мне просто ставить "+", а при условии если помог. ( Если так нельзя, то не буду. Ок. )
3) И по крайней мере я хоть чем то помог, как то натолкнул человека на мысль.
4) В этой теме не очень вопрос был сформулирован, "Цвет из SetPlayerColor". Мы что ванги что бы знать какой у него цвет в SetPlayerColor ?
5) Я с Вами, "на ты" не разговаривал, и не хамил Вам.

Wise
22.12.2016, 15:30
1) Я сообщения не набивал.
2) Я не просил мне просто ставить "+", а при условии если помог. ( Если так нельзя, то не буду. Ок. )
3) И по крайней мере я хоть чем то помог, как то натолкнул человека на мысль.
4) В этой теме не очень вопрос был сформулирован, "Цвет из SetPlayerColor". Мы что ванги что бы знать какой у него цвет в SetPlayerColor ?
5) Я с Вами, "на ты" не разговаривал, и не хамил Вам.

Многие здесь просят помощи и надеются получить по крайней мере правильное напутствие.
Если вы действительно помогли человеку - он сам решит, как оценить ваши старания, будь то слова благодарности, или же, выражение её в виде положительной репутации. Он посмотрит на ваши варианты и подумает: "Хм.. Сейчас-ка я засуну идентификатор в SendClientMessage". В итоге у него появится ошибка и куча вопросов.
По теме: Тебе надо использовать во всех сообщениях цвет ника или только в конкретных случаях?

DeimoS
22.12.2016, 15:35
1) Я сообщения не набивал.

Показать скрины удалённых сообщений, где ты отвечаешь на какие-то вопросы, заданные, в лучшем случае, пару месяцев назад?


Если так нельзя

Можно. Суть не в попрошайничестве, а в некропостинге и оффтопе.


3) И по крайней мере я хоть чем то помог, как то натолкнул человека на мысль.

Если ты не заметил, то до тебя люди уже начали пытаться разбираться в проблеме человека, а не просто гадать на кофейной гуще и выдавать рандомные ответы. Именно поэтому тебе и было сделано замечание сейчас


4) В этой теме не очень вопрос был сформулирован, "Цвет из SetPlayerColor". Мы что ванги что бы знать какой у него цвет в SetPlayerColor ?

Так уточни. Поступи так же, как сделал qwezert. Разберись в проблеме, а не пытайся угадать.


5) Я с Вами, "на ты" не разговаривал, и не хамил Вам.

А ты пока и не сделал ничего стоящего, чтоб добиться чьего-либо уважения. А уважать человека лишь за то, что с ним не знаком - это ты ошибся веком, приятель.

VVWVV
22.12.2016, 15:40
Пытаюсь доработать под себя ProxDetector.


stock ProxDetectorChat(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;
foreach (new i : Player) {
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;
}

Как мне к сообщению добавить цвет ника? Цвет из SetPlayerColor.
З.Ы. код скомунизден, поэтому я такой и тупой.

Что именно вы хотели бы изменить? Цвет всего сообщения? Кроме того, не очень понятен смысл доработки, ведь вы и так можете указать цвет, ничего не меняя.

Если же вы об изменении части сообщения, то вам необходимо использовать функцию format для этого.


new buffer[144]; // 144 - максимальная длина сообщения.
format(buffer, sizeof buffer, "Игрок {FF00FF}%s{FFFFFF} говорит: %s", /* ... */);
ProxDetectorChat(playerid, /* дистанция */, /* основной цвет */, buffer);

qwezert
22.12.2016, 15:50
new buffer[144]; // 144 - максимальная длина сообщения.
format(buffer, sizeof buffer, "Игрок {FF00FF}%s{FFFFFF} говорит: %s", /* ... */);
ProxDetectorChat(playerid, /* дистанция */, /* основной цвет */, buffer);


144 - это не максимальная длинна сообщения, насколько я знаю максимальная длинна сообщения - 128 символов. Правильнее было бы написать 144 - максимальная длинна сообщения + длинна ника игрока в информационном тексте (Игрок {FF00FF}%s{FFFFFF} говорит)

VVWVV
22.12.2016, 15:53
144 - это не максимальная длинна сообщения, насколько я знаю максимальная длинна сообщения - 128 символов. Правильнее было бы написать 144 - максимальная длинна сообщения + длинна ника игрока в информационном тексте (Игрок {FF00FF}%s{FFFFFF} говорит)

Вы не правы. Я указал длину выводимого в чат сообщения. Вы же говорите о длине вводимого игроком сообщения.

wiki Limits (https://wiki.sa-mp.com/wiki/Limits)

qwezert
22.12.2016, 16:01
Вы не правы. Я указал длину выводимого в чат сообщения. Вы же говорите о длине вводимого игроком сообщения.

wiki Limits (https://wiki.sa-mp.com/wiki/Limits)
Да ошибся. Извиняюсь

middlematt
22.12.2016, 17:47
Плохие примеры)
Без форматирования SendClientMessage не вывезет аргументы(если канеш у тебя не где не стоит перехватчик с внутренним форматированием в функции),
а с цветом лучше первый вариант выбрать,
так как во втором варианте он будет занимать 8 символов, из за того что юзается в строке.

Не по теме:
То есть, цвет тоже считается в тексте как символ?

Geebrox
22.12.2016, 18:02
Не по теме:
То есть, цвет тоже считается в тексте как символ?

Да, занимает 8 ячеек,
{FFFFFF}

Kamigakuro
22.12.2016, 22:52
Фух, ну и срач) Проблему решил.


stock ProxDetectorChat(playerid, Float:max_range, color, text[], 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,
colored, string[128], playercolor;
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;
playercolor = GetPlayerColor(playerid);
foreach (new i : Player) {
if (GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(i)) continue;
if (!playerlogged{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);
colored = (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24);
switch(PlayerInfo[i][pChatSet])
{
case 1:
{
switch(PlayerInfo[i][pIdChatSet])
{
case 1: format(string, sizeof(string), "%s(%d): {%06x}%s", PlayerInfo[playerid][pName], playerid, colored >>> 8, text);
case 2: format(string, sizeof(string), "%s: {%06x}%s", PlayerInfo[playerid][pName], colored >>> 8, text);
}
SCM(i, playercolor, string);
}
case 2:
{
switch(PlayerInfo[i][pIdChatSet])
{
case 1: format(string, sizeof(string), " - %s {%06x}(%s)[%d]", text, playercolor >>> 8, PlayerInfo[playerid][pName], playerid);
case 2: format(string, sizeof(string), " - %s {%06x}(%s)", text, playercolor >>> 8, PlayerInfo[playerid][pName]);
}
SCM(i, colored, string);
}
}
}
return 1;
}


Не откажусь от помощи в оптимизации данной функции)

vovandolg
23.12.2016, 04:31
foreach (new i : Player) {
if (GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(i)) continue;

Перед циклом вытащи GetPlayerVirtualWorld(playerid) в переменную, и вроде всё...