Проблема с DEC цветами

nist1

Активный
Автор темы
148
46
Версия MoonLoader
.026-beta
хотел сделать раскраску чата по клисту, но если делать через sampAddChatMessage(text, color), то другие скрипты не будут видеть рп чат.
решил сделать так
1696807249159.png

но что-то пошло не так и скрипт красит мой ник в совершенно другие цвета
к примеру по клисту белый, а отправляет цветом клиста ацтеков
 
Решение
Цвет игрока возвращается в формате RGBA а цвет сообщения в ARGB. Вот тебе и ошибка. Вот способ как это исправить, но скорее всего это костыль ебаный и можно намного проще сделать:

Lua:
local sampev = 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 argb_to_rgba(argb)
    local a, r, g, b =...

ARMOR

011110000111100101101001
Модератор
4,941
6,748
Цвет игрока возвращается в формате RGBA а цвет сообщения в ARGB. Вот тебе и ошибка. Вот способ как это исправить, но скорее всего это костыль ебаный и можно намного проще сделать:

Lua:
local sampev = 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 argb_to_rgba(argb)
    local a, r, g, b = explode_argb(argb)
    return join_argb(r, g, b, a)
end

function sampev.onServerMessage(color, text)
    if text:find(".+%[%d+%] говорит:.+") then
        name, id, message = text:match("(.+)%[(%d+)%] говорит:(.+)");
        clr = sampGetPlayerColor(id);
        local a, r, g, b = explode_argb(clr);
        print(string.format("a: %d\nr: %d\ng: %d\n b: %d", a, r, g, b));
        return {clr, string.format("%s[%d] говорит:%s", name, id, message)};
    end
end
 
  • Bug
  • Нравится
Реакции: CaJlaT и nist1

nist1

Активный
Автор темы
148
46
Цвет игрока возвращается в формате RGBA а цвет сообщения в ARGB. Вот тебе и ошибка. Вот способ как это исправить, но скорее всего это костыль ебаный и можно намного проще сделать:

Lua:
local sampev = 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 argb_to_rgba(argb)
    local a, r, g, b = explode_argb(argb)
    return join_argb(r, g, b, a)
end

function sampev.onServerMessage(color, text)
    if text:find(".+%[%d+%] говорит:.+") then
        name, id, message = text:match("(.+)%[(%d+)%] говорит:(.+)");
        clr = sampGetPlayerColor(id);
        local a, r, g, b = explode_argb(clr);
        print(string.format("a: %d\nr: %d\ng: %d\n b: %d", a, r, g, b));
        return {clr, string.format("%s[%d] говорит:%s", name, id, message)};
    end
end
сделал всё так, как ты и сказал, но проблема осталась та же

решил это вот так

1696811348588.png


ты просто забыл добавить argb_to_rgba
 
  • Влюблен
Реакции: ARMOR