Есть функция 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)) // если нет, то возвращаем цвет владельца
	}
}
0
11
7 лет назад
0
Нет такой функции. Можешь написать свою функцию. отследить цвет юнита, через его владельца. Хотя в редакторе можна задать нестандартный цвет юнита, независимо от его владельца.
0
16
7 лет назад
0
Dragonear, об этом и речь. У меня цвет юнита изменяется в зависимости от репутации. Игрок-владелец при этом меняется крайне редко.
Ну и видимо да, мне придется писать свою функцию, опираясь на ту же репутацию. Мне просто не хочется этого делать в виду того, что есть куча юнитов без личной репутации, цвет которых мне тоже нужно будет узнавать. Слишком много проверок получится для такой простой задачи.
0
18
7 лет назад
0
avuremybe, при запуске карты и в триггере, где меняется цвет, можно установить переменные. Создать базу данных, в которой сохранять цвет каждого юнита.
Но можно задействовать Custom Value, и базу создавать не придётся. Проверка: если CV = 1, то цвет = красный; если CV = 2, то цвет зелёный и т. д.
3
7
7 лет назад
3
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)) // если нет, то возвращаем цвет владельца
	}
}
Принятый ответ
0
16
7 лет назад
0
Ige, спасибо за уделенное время, но я все таки пойду плясать от репутации. У меня уже есть некоторые идеи как идентифицировать цвет НПЦ не имеющих персональной репутации.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.