Необходимо посчитать количество боевых единиц (не зданий). Написал следующий код:
    integer result = -1
    unit first = null
    group units = GetUnitsInRectOfPlayer(GetPlayableMapRect(), Player(id))
    
    do {
        first = FirstOfGroup(units)
        if (not(IsUnitType(first, UNIT_TYPE_STRUCTURE))) {result++}
        GroupRemoveUnit(units, first)
    } while (first == null)    
    
    return result
Код написан на cJass. Есть ли возможность сделать то же без перебора группы?

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

Может это поможет?
native GetUnitCount           takes integer unitid              returns integer
native GetPlayerUnitTypeCount takes player p, integer unitid    returns integer

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
27
6 лет назад
Отредактирован MpW
0
Есть ли возможность сделать то же без перебора группы?
Нативки такой не видел, нет такой. Есть близзардская Bj-функция CountUnitsInGroup, там перебираем всех и складываем. И нативку GetPlayerStructureCount, показывающую, видимо, кол-во здании
отслеживать появление и исчезновение юнитов с карты с помощью счетчика. При появлении +1, при исчезновении -1. Нужно продумать все факторы: например, юнит красного игрока (-1) перешел на сторону синего игрока (+1) (короче смена хозяина). При событии юнит входит в зону может отслеживать москитов, призывников, что может не всегда нужно. Труднее отследить исчезновение, ведь неизвестно, что вам нужно? только живые? смерть отслеживанием событием юнит умирает (-1). Но этот труп можно воскресить (+1). Если нужно отследить исчезновение трупа юзаем (событие - юнит вышел из региона).
Знаю может быть муторным делом, но если проработать, то не нужно циклом будет делать. Сразу из переменной доставать значение будешь. Либо с группой (Bj-функция CountUnitsInGroup или loop с FirstOfGroup, по-другому никак.
Но у тебя BJ-функция GetUnitsInRectOfPlayer утекает =(( и группой в конце не удаляем
0
21
6 лет назад
Отредактирован scopterectus
0
Может это поможет?
native GetUnitCount           takes integer unitid              returns integer
native GetPlayerUnitTypeCount takes player p, integer unitid    returns integer
Принятый ответ
0
16
6 лет назад
0
ScopteRectuS, это кол-во юнитов такого типа.

А бж ф-ция, которая считает юнитов, работает точно так же, перебором группы.
0
21
6 лет назад
0
avuremybe, я знаю, но ТС же не указал, что именно он хочет реализовать.
0
16
6 лет назад
0
ScopteRectuS, всм не указал? Его код вполне понятен.
0
21
6 лет назад
Отредактирован scopterectus
0
avuremybe, Вы не поняли, он же не указал, где будет использовать код и каким образом.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.