Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Можно использовать в карте в качестве визуальной изюминки в своем нике, меняя цвет ника прямо во время игры
Покраска букв ника игрока в цвета
"-setcolor" далее номер игрока и далее конфигурация покраски:
[a-b] [c-d]
"a" и "c" - это номера (или индексы) нужных цветов
"b" и "d" - это номера букв
Добавление кастомных цветов
Палитра ограничивается 8190 цветами
Первый способ
"-addcolor" далее индекс нужного цвета, далее RGB цвет:
[r-g-b]
r - красный
g - зеленый
b - синий
Второй способ
"-addcolor" далее индекс нужного цвета, далее RGB цвет в виде hex:
Первые 12 цветов
cJass
define
{
    int = integer
    void = nothing
    bool = boolean
    <else if> = elseif
}

scope setcolor initializer setcolor_Init
{
    private int ColorNumber[]
    private int CharNumber[]
    private string Color[]
    private string ColorNative[]
    private string name[]
    
    private void setcolor_Change()
    {
        string s = GetEventPlayerChatString()
        int i = 10
        int l = StringLength(s)
        int lName = 0
        int move = 0
        int count = 0
        int id = 0
        
        whilenot( i >= l || SubString(s, i, i + 1) == " " ) {i++}
        
        id = S2I(SubString(s, 10, i )) - 1
        
        if( id < 0 || id > 11 )
        {
            return
        }
        
        lName = StringLength(GetPlayerName(Player(id)))
        
        loop
        {
            move = i + 2
            whilenot( i >= l || SubString(s, i, i + 1) == "-" ) {i++}
            ColorNumber[count] = S2I(SubString(s, move, i))
            exitwhen( ColorNumber[count] < 1 || ColorNumber[count] > 8190 )
            
            move = i + 1
            whilenot( i >= l || SubString(s, i, i + 1) == "]" ) {i++}
            CharNumber[count] = S2I(SubString(s, move, i))
            exitwhen( CharNumber[count] < 1 || CharNumber[count] > lName )
            i++
            count++
        }
        count--
        
        s = name[id]
        i = 0
        move = 0
        
        whilenot( i > count )
        {
            s = SubString(s, 0, CharNumber[i] - 1) + Color[ColorNumber[i]] + SubString(s, CharNumber[i] - 1, StringLength(s))
            move = i + 1
            whilenot( move > count )
            {
                if( CharNumber[move] > CharNumber[i] )
                {
                    CharNumber[move] = CharNumber[move] + 10
                }
                move++
            }
            i++
        }
        BJDebugMsg( ColorNative[GetPlayerId(GetTriggerPlayer())+1] + GetPlayerName(GetTriggerPlayer()) + "|r покрасил ник игрока " + ColorNative[id+1] + GetPlayerName(Player(id)) + "|r в " + ColorNative[id+1] + s )
        SetPlayerName(Player(id), s)
    }
    
    private string Dec2Hex(int i)
    {
        string s = ""
        int i_2 = i - (i/16)*16
        i = i/16
        if( i_2 == 10 )
        {
            s = "A" + s
        } else if( i_2 == 11 )
        {
            s = "B" + s
        } else if( i_2 == 12 )
        {
            s = "C" + s
        } else if( i_2 == 13 )
        {
            s = "D" + s
        } else if( i_2 == 14 )
        {
            s = "E" + s
        } else if( i_2 == 15 )
        {
            s = "F" + s
        } else
        {
            s = I2S(i_2) + s
        }
        
        if( i == 10 )
        {
            s = "A" + s
        } else if( i == 11 )
        {
            s = "B" + s
        } else if( i == 12 )
        {
            s = "C" + s
        } else if( i == 13 )
        {
            s = "D" + s
        } else if( i == 14 )
        {
            s = "E" + s
        } else if( i == 15 )
        {
            s = "F" + s
        } else
        {
            s = I2S(i) + s
        }
        return s
    }
    
    private int Hex2Dec(string str)
    {
        int i = 0
        string s = SubString(str, 0, 1)
        if( s == "A" || s == "a"  )
        {
            i = 160
        } else if( s == "B" || s == "b" )
        {
            i = 176
        } else if( s == "C" || s == "c"  )
        {
            i = 192
        } else if( s == "D" || s == "d"  )
        {
            i = 208
        } else if( s == "E" || s == "e"  )
        {
            i = 224
        } else if( s == "F" || s == "f"  )
        {
            i = 240
        } else
        {
            i = S2I(s) * 16
        }
        
        s = SubString(str, 1, 2)
        if( s == "A" )
        {
            return i + 10
        } else if( s == "B" )
        {
            return i + 11
        } else if( s == "C" )
        {
            return i + 12
        } else if( s == "D" )
        {
            return i + 13
        } else if( s == "E" )
        {
            return i + 14
        } else if( s == "F" )
        {
            return i + 15
        } else
        {
            return i + S2I(s)
        }
    }
    
    private void setcolor_Add()
    {
        string s = GetEventPlayerChatString()
        int l = StringLength(s)
        int i = 10
        int id = 0
        int move = 0
        
        whilenot( i >= l || SubString(s, i, i + 1) == " " ) {i++}
        
        id = S2I(SubString(s, 10, i ))
        
        if( id < 1 || id > 8190 )
        {
            return
        }
        
        if( SubString(s, i+1, i+2) != "c")
        {
            move = i + 2
            whilenot( i >= l || SubString(s, i, i + 1) == "-" ) {i++}
            ColorNumber[0] = S2I(SubString(s, move, i))
            if( ColorNumber[0] < 0 || ColorNumber[0] > 255 )
            {
                return
            }
            i++
            
            move = i
            whilenot( i >= l || SubString(s, i, i + 1) == "-" ) {i++}
            ColorNumber[1] = S2I(SubString(s, move, i))
            if( ColorNumber[1] < 0 || ColorNumber[1] > 255 )
            {
                return
            }
            i++
            
            move = i
            whilenot( i >= l || SubString(s, i, i + 1) == "-" ) {i++}
            ColorNumber[2] = S2I(SubString(s, move, i))
            if( ColorNumber[2] < 0 || ColorNumber[2] > 255 )
            {
                return
            }
            
            Color[id] = "|c00" + Dec2Hex(ColorNumber[0]) + Dec2Hex(ColorNumber[1]) + Dec2Hex(ColorNumber[2])
        } else
        {
            l = i
            i = Hex2Dec(SubString(s, l+4, l+6))
            Color[id] = "|c00" + Dec2Hex(i)
            i = Hex2Dec(SubString(s, l+6, l+8))
            Color[id] = Color[id] + Dec2Hex(i)
            i = Hex2Dec(SubString(s, l+8, l+10))
            Color[id] = Color[id] + Dec2Hex(i)
        }
        BJDebugMsg(ColorNative[GetPlayerId(GetTriggerPlayer())+1] + GetPlayerName(GetTriggerPlayer()) + "|r поменял цвет под индексом " + I2S(id) + " на " +  Color[id] + "ЦВЕТ")
    }
    
    private void setcolor_Actions()
    {
        string s = GetEventPlayerChatString()
        if( SubString(s, 0, 10) == "-setcolor " )
        {
            setcolor_Change()
        } else if( SubString(s, 0, 10) == "-addcolor " )
        {
            setcolor_Add()
        }
    }
    
    private void setcolor_Init()
    {
        trigger trg_setcolor = CreateTrigger(  )
        int i = 0
        
        ColorNative[1] = "|c00FF0303"
        ColorNative[2] = "|c000042FF"
        ColorNative[3] = "|c001CE6B9"
        ColorNative[4] = "|c00540081"
        ColorNative[5] = "|c00FFFC01"
        ColorNative[6] = "|c00fEBA0E"
        ColorNative[7] = "|c0020C000"
        ColorNative[8] = "|c00E55BB0"
        ColorNative[9] = "|c00959697"
        ColorNative[10] = "|c007EBFF1"
        ColorNative[11] = "|c00106246"
        ColorNative[12] = "|c004E2A04"
        
        Color[1] = "|c00FF0303"
        Color[2] = "|c000042FF"
        Color[3] = "|c001CE6B9"
        Color[4] = "|c00540081"
        Color[5] = "|c00FFFC01"
        Color[6] = "|c00fEBA0E"
        Color[7] = "|c0020C000"
        Color[8] = "|c00E55BB0"
        Color[9] = "|c00959697"
        Color[10] = "|c007EBFF1"
        Color[11] = "|c00106246"
        Color[12] = "|c004E2A04"
        
        whilenot( i >= 12 )
        {
            name[i] = GetPlayerName(Player(i))
            i++
        }
        
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(0), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(1), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(2), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(3), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(4), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(5), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(6), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(7), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(8), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(9), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(10), "", true )
        TriggerRegisterPlayerChatEvent( trg_setcolor, Player(11), "", true )
        TriggerAddAction( trg_setcolor, function setcolor_Actions )
    }
}
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
6 лет назад
0
Если сделать скрин экрана редактора со свойствами игроков, а потом в пейнте определить цвет, то как раз такие получаются.
0
28
6 лет назад
0
Если сделать скрин экрана редактора со свойствами игроков, а потом в пейнте определить цвет, то как раз такие получаются.
А, тогда ясно. Не теряется ли при этом качество?

Когда я делал покраску цвета в ник, использовал цвета из WE. Где их найти, я уже писал.
Scenario -> Map Options -> Use Water Tinting Color; File -> Preferences -> Test Colors
0
18
6 лет назад
Отредактирован Hodor
0
PT153:
Где их найти, я уже писал.
Scenario -> Map Options -> Use Water Tinting Color; File -> Preferences -> Test Colors
как думаешь откуда они там взялись? Вдруг там просто подогнали на глаз)
Ещё был алгоритм, который мог делать подобное с ником в мультиборде:
Темные оттенки на скриншоте плавно передвигались по строке в любом направлении (как было задано в конфиге)
И когда темные оттенки удалялись, они могли заменяться другими и даже мог меняться фоновый цвет
Вообще можно бесконечно перечислять то что мог делать алгоритм, т.к там конфиг был ну просто огромный, там могли меняться очень много оттенков (оттенки генерировались алгоритмом и вносились в массив) и движение могло быть в любые стороны и даже "разбивание" с центра или наоборот "столкновение" оттенков
В том числе можно было регулировать скорость и ширину оттенка на фоновом цвете
Помню даже делал возможность совмещать несколько видов оттенков на одном фоновом цвете
Жаль конечно, я потерял этот алгоритм, но приблизительно помню как он работал
Загруженные файлы
0
28
6 лет назад
0
как думаешь откуда они там взялись? Вдруг там просто подогнали на глаз)
Не понял. Там сразу с RGB кодом цвет показывается.
0
18
6 лет назад
0
PT153:
Не понял. Там сразу с RGB кодом цвет показывается.
это в JNGP?
0
28
6 лет назад
Отредактирован PT153
0
это в JNGP?
В обычном.
Странно было, подумать, что это только в JNPG. Менять цвет воды и текста можно и в обычном редакторе.
0
18
6 лет назад
Отредактирован Hodor
0
об этих цветах идет речь?
Если да, то A - это 1 вариант синего, B - 2 вариант синего, а C - это ColorNative.
На вид и в paint, цвет ника WorldEdit и цвет "C" совпадают
Загруженные файлы
0
3
0
а можешь состряпать код для рпг чтоб в дом можно было войти, но и сломать его тоже можно было, пж кто может помогите!
1 пункт от ScorpioT1000: 4.1.2 (оффтоп)
0
1
3 года назад
0
через какую программу это всё нужно делать?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.