onServerMessage color

lembrooks

Участник
Автор темы
42
17
Версия MoonLoader
.026-beta
Не могу понять, как перевести цвет из строки сампа в формат #RRGGBB
 
Решение
вот так попробовал и получилось, как оказалось строка в луа начинается с первого, а не с нулевого элемента
Lua:
function sampev.onServerMessage(color, text)
    local hclr = tonumber("0x" .. ('%x'):format(color):sub(9, 14))
    sampAddChatMessage('Это сообщение имеет такой же цвет как серверное', hclr)
end

1678020559198.png

qdIbp

Автор темы
Проверенный
1,450
1,191
Разве она не приходит в hex формате?
че то ты деградировал...
это ток в тексте
Lua:
'egaa {FF00FF}тупит' -- в таком +- виде

Попробуй так
Lua:
function decimalToHex(num)
    return ('%x'):format(num)
end
 
Последнее редактирование:
  • Нравится
Реакции: lembrooks и whyega52

ARMOR

Waitin' on another black summer to end
Модератор
5,045
7,188
Попробуй так
Lua:
function decimalToHex(num)
    return ('%x'):format(num)
end
Не сильно поможет. Как я понял хук возвращает цвет в RGBA, а сообщения принимают цвет в формате ARGB ( Или наоборот. Ну кароче, тут с форматом цветов проблема. ). Поэтому при попытке сделать вот так:
Lua:
local ev = require 'lib.samp.events'

function ev.onServerMessage(color, text)
    sampAddChatMessage("Этот текст выведется с тем же цветом что и серверное сообщение", color)
end
Получается такой результат:
1678019058230.png


Единственное до чего я додумался это сделать вот так:
Lua:
local ev = require 'lib.samp.events'

function explode_argb(argb)
  local a = bit.band(bit.rshift(argb, 24), 0xFF)
  local r = bit.band(bit.rshift(argb, 16), 0xFF)
  local g = bit.band(bit.rshift(argb, 8), 0xFF)
  local b = bit.band(argb, 0xFF)
  return a, r, g, b
end

function join_argb(a, r, g, b)
  local argb = b  -- b
  argb = bit.bor(argb, bit.lshift(g, 8))  -- g
  argb = bit.bor(argb, bit.lshift(r, 16)) -- r
  argb = bit.bor(argb, bit.lshift(a, 24)) -- a
  return argb
end

function ev.onServerMessage(color, text)
    local r, g, b, a = explode_argb(color)
    sampAddChatMessage("Этот текст выведется с тем же цветом что и серверное сообщение", join_argb(a, r, g, b))
end
1678019099615.png

Конечно это костыль, скорее всего можно это сделать намного легче, но мне лень искать методы.
 

lembrooks

Участник
Автор темы
42
17
вот так попробовал и получилось, как оказалось строка в луа начинается с первого, а не с нулевого элемента
Lua:
function sampev.onServerMessage(color, text)
    local hclr = tonumber("0x" .. ('%x'):format(color):sub(9, 14))
    sampAddChatMessage('Это сообщение имеет такой же цвет как серверное', hclr)
end

1678020559198.png
 
  • Нравится
  • Вау
Реакции: whyega52, qdIbp и ARMOR