LUA скрипт [Source | NL] Multi Color Render

Олдфаг
Статус
Оффлайн
Регистрация
28 Дек 2018
Сообщения
2,598
Реакции[?]
1,435
Поинты[?]
4K
1656546138122.png

Не придумал лучшего варианта.. но мне кажется что это уже лучше чем такой вариант.
1656546324909.png

Код:
math.calc_count = function(string, search)
    local count = 0

    for i = 1, #string do
        if string:sub(i, i) == search then
            count = count + 1
        end
    end

    return count
end

Render.MultiColorText = function(string, x, y, font_size)
    local old_text_size = 0

    for i = 1, math.calc_count(string, "{") do
        local start_prefix = string:find('{')
        local end_prefix = string:find('}')

        local string_color = string:sub(start_prefix, end_prefix)
        local load_color = loadstring('return ' .. string_color)()
        local next_string = string:sub(end_prefix + 1)

        local next_prefix_start = next_string:find('{')
        local new_string = next_prefix_start and next_string:sub(1, next_prefix_start - 1) or next_string

        string = next_string

        local color = Color.new(unpack(load_color))

        Render.Text(new_string, Vector2.new(x + old_text_size, y), color, font_size)

        old_text_size = old_text_size + Render.CalcTextSize(new_string, font_size).x
    end
end

Cheat.RegisterCallback('draw', function()   
    Render.MultiColorText('{1, 1, 1, 1}version: {0.2, 0.5, 0.6, 1}release', 100, 100, 15)
end)
 

Вложения

Дизайнер
Статус
Оффлайн
Регистрация
18 Авг 2017
Сообщения
1,925
Реакции[?]
2,244
Поинты[?]
146K
Посмотреть вложение 210007

Не придумал лучшего варианта.. но мне кажется что это уже лучше чем такой вариант.
Посмотреть вложение 210008

Код:
math.calc_count = function(string, search)
    local count = 0

    for i = 1, #string do
        if string:sub(i, i) == search then
            count = count + 1
        end
    end

    return count
end

Render.MultiColorText = function(string, x, y, font_size)
    local old_text_size = 0

    for i = 1, math.calc_count(string, "{") do
        local start_prefix = string:find('{')
        local end_prefix = string:find('}')

        local string_color = string:sub(start_prefix, end_prefix)
        local load_color = loadstring('return ' .. string_color)()
        local next_string = string:sub(end_prefix + 1)

        local next_prefix_start = next_string:find('{')
        local new_string = next_prefix_start and next_string:sub(1, next_prefix_start - 1) or next_string

        string = next_string

        local color = Color.new(unpack(load_color))

        Render.Text(new_string, Vector2.new(x + old_text_size, y), color, font_size)

        old_text_size = old_text_size + Render.CalcTextSize(new_string, font_size).x
    end
end

Cheat.RegisterCallback('draw', function()  
    Render.MultiColorText('{1, 1, 1, 1}version: {0.2, 0.5, 0.6, 1}release', 100, 100, 15)
end)
ну если так, то лучше сделай как в ските
“string \aAB7DCAcolored string”
 
Участник
Статус
Оффлайн
Регистрация
29 Дек 2019
Сообщения
381
Реакции[?]
168
Поинты[?]
3K
Посмотреть вложение 210007

Не придумал лучшего варианта.. но мне кажется что это уже лучше чем такой вариант.
Посмотреть вложение 210008

Код:
math.calc_count = function(string, search)
    local count = 0

    for i = 1, #string do
        if string:sub(i, i) == search then
            count = count + 1
        end
    end

    return count
end

Render.MultiColorText = function(string, x, y, font_size)
    local old_text_size = 0

    for i = 1, math.calc_count(string, "{") do
        local start_prefix = string:find('{')
        local end_prefix = string:find('}')

        local string_color = string:sub(start_prefix, end_prefix)
        local load_color = loadstring('return ' .. string_color)()
        local next_string = string:sub(end_prefix + 1)

        local next_prefix_start = next_string:find('{')
        local new_string = next_prefix_start and next_string:sub(1, next_prefix_start - 1) or next_string

        string = next_string

        local color = Color.new(unpack(load_color))

        Render.Text(new_string, Vector2.new(x + old_text_size, y), color, font_size)

        old_text_size = old_text_size + Render.CalcTextSize(new_string, font_size).x
    end
end

Cheat.RegisterCallback('draw', function()  
    Render.MultiColorText('{1, 1, 1, 1}version: {0.2, 0.5, 0.6, 1}release', 100, 100, 15)
end)
Вариант не кайф
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,757
Реакции[?]
1,464
Поинты[?]
2K
Не придумал лучшего варианта.. но мне кажется что это уже лучше чем такой вариант.
С циклом будет проще, да и, может быть, быстрее, ибо ты все равно каждый раз прыгаешь на следующую часть строки
 
Олдфаг
Статус
Оффлайн
Регистрация
28 Дек 2018
Сообщения
2,598
Реакции[?]
1,435
Поинты[?]
4K
С циклом будет проще, да и, может быть, быстрее, ибо ты все равно каждый раз прыгаешь на следующую часть строки
ну мне не пришло в голову ничего лучше этого, пока идей как это улучшить - нет
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,757
Реакции[?]
1,464
Поинты[?]
2K
ну мне не пришло в голову ничего лучше этого, пока идей как это улучшить - нет
Я для себя сделал такую штуку:
1656630411211.png
result:
1656630395389.png
Довольно удобно и кайфарики

Твоя же позволяет делать string.format(str, ...), что очень удобно при рендере, например, хитлогов.
Разницы особо никакой, тут уже дело удобства
 
Последнее редактирование:
Олдфаг
Статус
Оффлайн
Регистрация
28 Дек 2018
Сообщения
2,598
Реакции[?]
1,435
Поинты[?]
4K
Я для себя сделал такую штуку:
Посмотреть вложение 210141
result:
Посмотреть вложение 210140
Довольно удобно и кайфарики

Твоя же позволяет делать string.format(str, ...), что очень удобно при рендере, например, хитлогов.
Разницы особо никакой, тут уже дело удобства
такой вариант максимально хуево себя показывает при рендере логов например, ибо чтобы отмени цвет 1 буквы надо опять открывать массив, писать фулл цвет и так далее, это максимально долго и неудобно
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,757
Реакции[?]
1,464
Поинты[?]
2K
такой вариант максимально хуево себя показывает при рендере логов например, ибо чтобы отмени цвет 1 буквы надо опять открывать массив, писать фулл цвет и так далее, это максимально долго и неудобно
Ну если ты хочешь делать лгбт цвет с отдельным цветом на каждую буковку, то это твои проблемы))0
А так все хитлоги у меня умещаются в 9-10 строчек
1656693044499.png

+ Если их сравнить, и поставить перед собой задачу с покраской каждой буквы отдельным цветом, то оба способа выглядят как мусор:
1656693856602.png
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
29 Дек 2019
Сообщения
381
Реакции[?]
168
Поинты[?]
3K
Ну если ты хочешь делать лгбт цвет с отдельным цветом на каждую буковку, то это твои проблемы))0
А так все хитлоги у меня умещаются в 9-10 строчек
Посмотреть вложение 210213

+ Если их сравнить, и поставить перед собой задачу с покраской каждой буквы отдельным цветом, то оба способа выглядят как мусор:
Посмотреть вложение 210214
Если и делать, то метод автора и эти говно
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июн 2022
Сообщения
12
Реакции[?]
1
Поинты[?]
0
Эксперт
Статус
Оффлайн
Регистрация
24 Апр 2018
Сообщения
1,499
Реакции[?]
928
Поинты[?]
68K
а каким образом сделать это легче, ничего в голову не приходит даже
А теперь подумай, что будет, если у тебя цвет будет менятся постоянно. Ты его в сроку форматить будешь?
 
Сверху Снизу