Добавлен avuremybe
Есть функция SetUnitColor, которая устанавливает юниту цвет игрока-владельца. Но я не смог найти функции, которая бы возвращала текущий цвет юнита.
Принятый ответ
avuremybe:
cjass устроит?)Ну и видимо да, мне придется писать свою функцию
library UnitColor
{
#define HASHTABLE = // твоя хэш таблица
#define HAVE_CUSTOM_COLOR = 0 //номер ячейки, где хранится метка (bool) о нестандартном цвете
#define CUSTOM_COLOR_PLAYER = 0 //номер ячейки, где хранится игрок
player Color2Player(playercolor color)
{
for(integer i = 0; i < 12; i++) {
if color == ConvertPlayerColor(i) {
return Player(i)
}
}
return null
}
integer Color2PlayerId(playercolor color)
{
for(integer i = 0; i < 12; i++) {
if color == ConvertPlayerColor(i) {
return i
}
}
return -1
}
#define SetUnitColor(u, c) = {
SaveBoolean(HASHTABLE, GetHandleId(u), HAVE_CUSTOM_COLOR, true) //помечаем, что юнит имеет нестандартный цвет
SavePlayerHandle(HASHTABLE, GetHandleId(u), CUSTOM_COLOR_PLAYER, Color2Player(c)) //т.к. playercolor нельзя сохранить в hashtable, то сохраняем игрока
Set##UnitColor(u, c) //меняем цвет юниту
}
playercolor GetUnitColor(unit u)
{
if LoadBoolean(HASHTABLE, GetHandleId(u), HAVE_CUSTOM_COLOR) { // проверяем, имеет ли юнит нестандартный цвет
return GetPlayerColor(LoadPlayerHandle(HASHTABLE, GetHandleId(u), CUSTOM_COLOR_PLAYER)) // возвращаем нестандартный цвет
}
return GetPlayerColor(GetOwningPlayer(u)) // если нет, то возвращаем цвет владельца
}
}
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Но можно задействовать Custom Value, и базу создавать не придётся. Проверка: если CV = 1, то цвет = красный; если CV = 2, то цвет зелёный и т. д.