Поправьте мой склероз, никак не вспомню как без нагромождения функций выбрать юнитов определенного типа принадлежащих только определенному игроку, насколько мне известно в булэкспр нельзя передать функцию с аргументами игрока и типа юнита. В идеале в одну-две строки это реализовать

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

darkowlom, нужен 1 массив и 1 функция
примерно так будет выглядеть
int types[];

bool myBoolExp(){
	return GetUnitTypeId(GetFilterUnit())==types[GetPlayerId(GetOwningPlayer(GetFilterUnit()))];
}

...
types[GetPlayerId(myPlayer)]=myType;
GroupEnumUnitsOfPlayer(myGroup, myPlayer, function myBoolExp);
либо перебирать группу вручную
unit Picked
group myGroup
...
GroupEnumUnitsOfPlayer(myGroup, myPlayer, null);
loop{
	Picked = FirstOfGroup(myGroup)
exitwhen Picked == null
	GroupRemoveUnit(myGroup,Picked)
}
в данной ситуации лучше использовать первый вариант
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
26
8 лет назад
2
Что мешает сделать это на гуях, перевести в jass, и посмотреть что куда и как посылается, м?
0
32
8 лет назад
0
GroupEnemUnitsOfPlayer -вроде так, в бульекспры можно передавать глобальные переменные.
0
24
8 лет назад
Отредактирован darkowlom
0
Extremator, там на каждое условие создается функция и передается в другую, я могу так сделать но это как-то кривовато. Или создавать на каждого игрока свою глобалку, то есть без лишнего когда я не создам функцию MSS_Select(Player(0),MSS_Group, UnitType)? Подразумевается МУИ и вызвать эту функцию может любой игрок, что ли придется делать для каждого игрока по глобалке и функции?
0
20
8 лет назад
0
12 глобалок не займут много места
0
28
8 лет назад
0
darkowlom, нужен 1 массив и 1 функция
примерно так будет выглядеть
int types[];

bool myBoolExp(){
	return GetUnitTypeId(GetFilterUnit())==types[GetPlayerId(GetOwningPlayer(GetFilterUnit()))];
}

...
types[GetPlayerId(myPlayer)]=myType;
GroupEnumUnitsOfPlayer(myGroup, myPlayer, function myBoolExp);
либо перебирать группу вручную
unit Picked
group myGroup
...
GroupEnumUnitsOfPlayer(myGroup, myPlayer, null);
loop{
	Picked = FirstOfGroup(myGroup)
exitwhen Picked == null
	GroupRemoveUnit(myGroup,Picked)
}
в данной ситуации лучше использовать первый вариант
Принятый ответ
0
24
8 лет назад
Отредактирован darkowlom
0
nvc123, без лишинх глобалок не обойтись все равно - пусть так и будет. Но в целом вопррос закрыт
0
28
8 лет назад
Отредактирован nvc123
0
darkowlom, во 2 варианте могут быть локалки
если быть точнее то первый более быстрый и удобный а второй используется там где из за необходимости муи нельзя юзать первый
но так как у тебя по 1 набору данных на каждого игрока то хватит и 1 варианта
0
29
8 лет назад
Отредактирован 16GB
0
call GroupEnumUnitsInRange(udg_G,x,y,300.,null)
loop
set u = FirstOfGroup(udg_G)
if нужное условие then
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
Чтобы оставить комментарий, пожалуйста, войдите на сайт.