Как привязать один юнит к другому - чтобы при смерте одного умирал и другой. Связываются они способностью. Таких войск на карте очень много. Повторяться они не будут.

Принятый ответ

Extremator, эмм, перебирать всех юнитов это тупо. Есть же хэш-таблица.
А как сделать хэш-таблицей?
Могу предположить, что это будет работать так, на примере созданных юнитов: Так то любых можно добавить, наступивших в область, убивших и так далее
    ...
    local unit UNIT_1=CreateUnitAtLoc(Player(0),'hfoo',REGION, bj_UNIT_FACING)
    local unit UNIT_2=CreateUnitAtLoc(Player(0),'hfoo',REGION2, bj_UNIT_FACING)
    ...
	//Сохраняем пару по уникальному id первого Объекта
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_1),1,UNIT_1)
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_1),2,UNIT_2)
    //Сохраняем пару по уникальному id второго Объекта
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_2),1,UNIT_2)
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_2),2,UNIT_1)
    ...
	//Условие
    if GetDyingUnit()=='hfoo' or (GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE)) then
		//Загружаем по уникальному ID умирающего юнита его вторую половинку)
        call KillUnit(LoadUnitHandle(HASH_TABLE, GetHandleId(GetDyingUnit()), 2)
    endif
...
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
2 года назад
0
Можно записывать пары юнитов и при смерти одного из них - убивать его пару.
set UnitsMax = UnitsMax + 1
set UnitsA[UnitsMax] = первый юнит из пары (при этом добавить его в общую группу)
set UnitsB[UnitsMax] = второй юнит из пары (тоже добавить в группу)
Пособытию смерти юнита проверяешь что он находится в группе. Далее ищешь его номер из массива.
set u = юнит который умер
set l = 0 для тела цикла
set n = 0 для результата
loop
set l = l + 1
if u == UnitsA[l] or u == UnitsB[l] then
set n = l
endif
exitwhen l == UnitsMax or n > 0
endloop
Всё, у тебя есть n , по которому можно получить обоих юнитов из ой пары, в которой один умер.
3
29
2 года назад
3
Extremator, эмм, перебирать всех юнитов это тупо. Есть же хэш-таблица.
0
26
2 года назад
0
...которая медленнее
2
4
2 года назад
2
0
5
2 года назад
0
Extremator, эмм, перебирать всех юнитов это тупо. Есть же хэш-таблица.
А как сделать хэш-таблицей?
2
29
2 года назад
2
...которая медленнее
Получить однно значение из ХТ медленнее перебора массива непонятной длины?
0
27
2 года назад
0
...которая медленнее
какую-то чушь сказал_)
поиск ключа циклом намного медленнее хэштаблицы
1
3
2 года назад
1
Extremator, эмм, перебирать всех юнитов это тупо. Есть же хэш-таблица.
А как сделать хэш-таблицей?
Могу предположить, что это будет работать так, на примере созданных юнитов: Так то любых можно добавить, наступивших в область, убивших и так далее
    ...
    local unit UNIT_1=CreateUnitAtLoc(Player(0),'hfoo',REGION, bj_UNIT_FACING)
    local unit UNIT_2=CreateUnitAtLoc(Player(0),'hfoo',REGION2, bj_UNIT_FACING)
    ...
	//Сохраняем пару по уникальному id первого Объекта
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_1),1,UNIT_1)
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_1),2,UNIT_2)
    //Сохраняем пару по уникальному id второго Объекта
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_2),1,UNIT_2)
    call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_2),2,UNIT_1)
    ...
	//Условие
    if GetDyingUnit()=='hfoo' or (GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE)) then
		//Загружаем по уникальному ID умирающего юнита его вторую половинку)
        call KillUnit(LoadUnitHandle(HASH_TABLE, GetHandleId(GetDyingUnit()), 2)
    endif
...
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.