call ForGroupBJ(GetUnitsInRangeOfLocAll(200.00, GetUnitLoc(UntVarA1)), function SDoSkillB_Effect(IntVarA0))
call ForGroupBJ(GetUnitsInRangeOfLocAll(200.00, GetUnitLoc(UntVarA1)), SDoSkillB_Effect(IntVarA0))
Если так передавать параметр то оно не работает. Хеш таблиц боюсь.

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

Эту тему протерли чуть более, чем полностью. Используй глобалки или хэш
0
15
7 лет назад
0
Эту тему протерли чуть более, чем полностью. Используй глобалки или хэш
Принятый ответ
0
9
7 лет назад
0
EnergyFrost, Чертов хэш... Ну ок, спасибо
0
30
7 лет назад
Отредактирован Clamp
0
GetUnitsInRangeOfLocAll(200.00, GetUnitLoc(UntVarA1))
Что мешает заранее создать эту группу, поместив в переменную и использовать её?

Вообще, можно избавиться от фактического использования группы, поместив в представленную boolexpr функцию все проверки и действия, а возвращать всегда false, как в этом примере, где наносится урон в радиусе от точки:
		globals {
			boolexpr filter
			unit tempUnit // Дополнительные данные можно передавать через временные глобалки, в варкрафте это оправдано, но при параллельных потоках где-нибудь ещё неприменно выстрелит в ногу.
			group fictiveGroup = CreateGroup()
		}

        bool cond() {
			// По факту, вся эта функция вызывается через boolexpr, который из неё создан.
            unit u = GetEnumUnit()
            float amount // Сюда в этом примере кладётся урон, рассчитываемый тем или иным образом.
            if !IsUnitAlly(u, GetOwningPlayer(tempUnit)) {
                UnitDamageTarget(tempUnit, u, amount, false, false, ConvertAttackType(5), ConvertDamageType(0), ConvertWeaponType(0)) 
            }
            return false;
        }

        void dealDamageFromCoords(float x, float y, float radius, unit source) {
            tempUnit = source
			// Стоит использовать координаты, а не локации, GetUnitX/Y в помощь.
            GroupEnumUnitsInRange(fictiveGroup, x, y, radius, filter)
        }

        static void initFilter() {
			// Эта функция вызывается одножды после старта игры и забывается.
            filter = Condition(function cond)
        }
0
15
7 лет назад
0
WakVellios, говорю же, если не хочешь юзать хэш- юзай глобалку. От нее не жарко, не холодно. И + на сколько я помню использоване глобалок побыстрее хэша будет
0
29
7 лет назад
0
Можно сделать так
local unit u
call GroupEnumUnitsInRange(udg_G,0,0,999999,null)
loop
set u = FirstOfGroup(udg_G)
if IsUnitType(u,UNIT_TYPE_STRUCTURE) then
call SetUnitColor(u,PLAYER_COLOR_LIGHT_GRAY)
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
set u = null
0
15
7 лет назад
0
16GB, есть ли смысл в конце писать set u=null, если услвоие цикла нам это гарантирует?
0
29
7 лет назад
0
EnergyFrost,
хуже не будет
Чтобы оставить комментарий, пожалуйста, войдите на сайт.