перекраска текста в чате

Qwerty???

Участник
Автор темы
175
8
Версия MoonLoader
.027.0-preview
кусолам, как перекрашивать цвет определенного текста в чате?
например чтобы цвет SpaceFlight было красным цветом а не белым
1757079104671.png
 

kyrtion

Известный
1,356
520
Lua:
local sampev = require('samp.events')

function sampev.onServerMessage(color, text)
    if text:find('SpaceFlight') then
        local hex_color = text:match('({%x+}).-SpaceFlight')
        -- если там нету, в таком случае использовать color
        if hex_color then
            text = text:gsub('SpaceFlight', '{FF7777}SpaceFlight' .. hex_color)
            return { color, text } -- заставляем заменить
            -- return color, text -- так это не сработает, нужно указать как таблица
        end
    end
end
 

Qwerty???

Участник
Автор темы
175
8
Lua:
local sampev = require('samp.events')

function sampev.onServerMessage(color, text)
    if text:find('SpaceFlight') then
        local hex_color = text:match('({%x+}).-SpaceFlight')
        -- если там нету, в таком случае использовать color
        if hex_color then
            text = text:gsub('SpaceFlight', '{FF7777}SpaceFlight' .. hex_color)
            return { color, text } -- заставляем заменить
            -- return color, text -- так это не сработает, нужно указать как таблица
        end
    end
end
не перекрашивает чет
 

БеzликиЙ

Автор темы
Проверенный
1,885
1,110
на самом деле аризона просто режет цветовые кода из чата, специально, чтобы так не перекрашивали. потому что если дать игроку возможность перекрашивать чат, он в /do будет подражать системным сообщениям и это будет сложнее отличить от реальных.

ты, скорее всего, имеешь в виду новую систему отображения в чате предметов - кнопка в поле ввода слева от смайликов или в новом инвентаре кнопка "Поделиться" в контекстном меню. для старого инвентаря придётся ставить IEditor, потому что разработчики не добавили кнопку "Поделиться" в старый инвентарь. всё приходится делать самому...
 

менталейшн

Известный
1,291
234
на самом деле аризона просто режет цветовые кода из чата, специально, чтобы так не перекрашивали. потому что если дать игроку возможность перекрашивать чат, он в /do будет подражать системным сообщениям и это будет сложнее отличить от реальных.

ты, скорее всего, имеешь в виду новую систему отображения в чате предметов - кнопка в поле ввода слева от смайликов или в новом инвентаре кнопка "Поделиться" в контекстном меню. для старого инвентаря придётся ставить IEditor, потому что разработчики не добавили кнопку "Поделиться" в старый инвентарь. всё приходится делать самому...
Не, ему скорее для себя нужно перекрашивать через луа, тема ж тут создана
 
  • Нравится
Реакции: БеzликиЙ

chapo

tg/inst: @moujeek
Всефорумный модератор
9,206
12,543
Lua:
local sampev = require('lib.samp.events');

local targetText = 'SpaceFlight';

---@param str string
---@param pos number
---@param startColor? string
---@return string?
function string.getColorAtPos(str, pos, startColor)
    local result, parts, charIndex = nil, { [0] = startColor or '{ffffff}' }, 0;
    for char in str:gmatch('.') do
        charIndex = charIndex + 1;
        if (char == '{') then
            local colorTag = str:sub(charIndex, charIndex + 7):match('{%x+}');
            if (colorTag) then
                parts[charIndex] = colorTag;
            end
        end
    end
    for partIndex, partColorTag in pairs(parts) do
        if (pos >= partIndex) then
            result = partColorTag:match('{(%x+)}');
        end
    end
    return result or (startColor or 'ffffff');
end

function sampev.onServerMessage(color, text)
    local targetWordIndex = text:find(targetText);
    if (targetWordIndex) then
        local textColor = string.getColorAtPos(text, targetWordIndex);
        local text = text:gsub(targetText, ('{ff0000}%s{%s'):format(targetText, textColor));
        return { color, text };
    end
end
 
Последнее редактирование:
  • Нравится
Реакции: 2elnwndrer.