Добавлен Hodor,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Можно использовать в карте в качестве визуальной изюминки в своем нике, меняя цвет ника прямо во время игры
Покраска букв ника игрока в цвета
Добавление кастомных цветов
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 )
}
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Когда я делал покраску цвета в ник, использовал цвета из WE. Где их найти, я уже писал.
Отредактирован Hodor
И когда темные оттенки удалялись, они могли заменяться другими и даже мог меняться фоновый цвет
Вообще можно бесконечно перечислять то что мог делать алгоритм, т.к там конфиг был ну просто огромный, там могли меняться очень много оттенков (оттенки генерировались алгоритмом и вносились в массив) и движение могло быть в любые стороны и даже "разбивание" с центра или наоборот "столкновение" оттенков
В том числе можно было регулировать скорость и ширину оттенка на фоновом цвете
Помню даже делал возможность совмещать несколько видов оттенков на одном фоновом цвете
Жаль конечно, я потерял этот алгоритм, но приблизительно помню как он работал
Отредактирован PT153
Странно было, подумать, что это только в JNPG. Менять цвет воды и текста можно и в обычном редакторе.
Отредактирован Hodor
На вид и в paint, цвет ника WorldEdit и цвет "C" совпадают