0
3
6 лет назад
0

» WarCraft 3 / Помогите с функцией

Работают оба варианта. Проверял по сети! Спасибо всем за помощь.
Система предложенная ScopteRectuS, впечатлила)
0
3
6 лет назад
0

» WarCraft 3 / Помогите с функцией

вечером напишу решение.
Было-бы здорово! Я новичок в этих делах, мне пока тяжело решать задачи подобного уровня. Но триггер необходим для моей карты.
0
3
6 лет назад
Отредактирован hell_bent
0

» WarCraft 3 / Помогите с функцией

Я постараюсь объяснить!
Я делаю триггер в котором на месте убитого здание будет создано новое здание.
(не построено а именно создано, как-бы подмена!)
Вроде ничего сложного одна функция) но есть проблема. Новое здание скачет, не
создается на том-же месте если вблизи(точки создание) есть юниты.
Эту проблему мне решить удалось.
Всего то нужно до создания здания (CreateNUnitsAtLoc )
пикнуть всех ближайших юнитов, скрыть их(ShowUnitHide)
потом после создание показать, (ShowUnitShow)
все идеально работает!!!
Но есть минус с пикнутых юнитов после (ShowUnitHide) снимается выделение.
Я попробовал решить эту проблему, отследив выделенных юнитов с помошью функции abc,
(так как не все юниты могут быть выделены игроками)
записать их в группу, и после (ShowUnitShow) вернуть выделение.
У меня получилось вернуть выделение только хозяину здания!
А нужно вернуть всем игрокам чьи юниты находились в эпицентре.
не могу их отследить и записать игроков.
В общем нужно скрыть действие ShowUnitHide,ShowUnitShow.
0
3
6 лет назад
0

» WarCraft 3 / Помогите с функцией

Steal nerves:
посоветовал бы юзать фильтр, отсеивает не нужных.
Фильтр работает!
Но мне нужно записать игрока в переменную которому принадлежат выделенные юниты
и потом совершить действие выделенными юнитами для игрока
Вот весь код помогите пожалуйста, а то у меня уже голова трескается(
function abc takes nothing returns boolean
local unit u = GetFilterUnit()
local player p = GetOwningPlayer(u) нужно записать этих играков если таковы имеются
return IsUnitSelected(u,p)
endfunction
function hideg takes nothing returns nothing
call ShowUnitHide( GetEnumUnit() )
endfunction
function unhideg takes nothing returns nothing
call ShowUnitShow( GetEnumUnit() )
endfunction
function Trig_Untitled_Trigger_001_Copy_Actions takes nothing returns nothing
local unit d = GetDyingUnit()
local player p = GetOwningPlayer(d)
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
local group g2 = CreateGroup()
call GroupEnumUnitsInRange(g2,x,y,512,Condition(function abc))
call GroupEnumUnitsInRange( g, x, y, 512, null )
call ForGroup( g, function hideg)
call CreateNUnitsAtLoc (1,'eate',p,Location(x,y),bj_UNIT_FACING)
call ForGroup( g, function unhideg)
call SelectGroupForPlayerBJ( g2,p)// эту функцию нужно использовать не для p а для игроков чьи
юниты были фильтрованы
call DestroyGroup( g)
endfunction
Вот карта если что
Загруженные файлы
0
3
6 лет назад
0

» WarCraft 3 / Помогите с функцией

лучше сделайте abc( ) boolexpr'ом. и впишите это вместо null, где у Вас GroupEnumUnitsInRange( ). В этом случае нужда в группе g2 отпадает, а нужные юниты будут добавлены в группу g.
Идеально подошло спасибо!
А тут что не так:
local unit d = GetDyingUnit()
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
call GroupEnumUnitsInRange( g, x, y, 512, null)
local unit u
local player p
loop
exitwhen u == 0
set u = FirstOfGroup(g)
set p = GetOwningPlayer(u)
if (( IsUnitSelected(u,p)== true)) then
call GroupAddUnit(g,u)
endif
call GroupRemoveUnit(g,u)
endloop
И еще вопрос про abc
Как себя поведет функция если будут юниты несколько игроков ??
0
3
6 лет назад
0

» WarCraft 3 / Помогите с функцией

Я запутался совсем(
вот как сделал
local group g = CreateGroup()
local group g2 = CreateGroup()
call GroupEnumUnitsInRange( g, x, y, 512, null)
local unit u
local player p
local integer i = CountUnitsInGroup(g)
loop
exitwhen i < 1
set u = FirstOfGroup(g)
set p = GetOwningPlayer(u)
if (( IsUnitSelected(u,p)== true)) then
call GroupAddUnit(g2,u)
endif
call GroupRemoveUnit(g,u)
set i = CountUnitsInGroup(g)
endloop
call DestroyGroup(g)
Что-то не выходит
0
3
6 лет назад
Отредактирован hell_bent
0

» WarCraft 3 / Создание юнита в конкретном месте

Нет, причина не в картах путей и вообще всем выше сказанном. При создании проверяется есть ли рядом юниты, если они слишком близко, то смещается точка создание в свободную зону, мне удалось найти выход только как всегда есть проблемы от нехватки знаний)).
Оказалось нужно скрывать юнитов (hide) а после создания показыать (unhide).
Но я не знаю как вернуть всю группу(
Помогите разобраться!
function hideg takes nothing returns nothing

call GroupAddUnitSimple( GetEnumUnit(), udg_G )
call ShowUnitHide( GetEnumUnit() )
endfunction
function Trig_Untitled_Trigger_001_Copy_Actions takes nothing returns nothing
local player p
local unit d
local real x
local real y
local unit u
set d = GetDyingUnit()
set x = GetUnitX(d)
set y = GetUnitY(d)
set p = GetOwningPlayer(d)
call ForGroupBJ( GetUnitsInRangeOfLocAll(512, GetUnitLoc(d)), function hideg)
call CreateNUnitsAtLoc (1,'eate',p,Location(x,y),bj_UNIT_FACING)
как можно реализовать без глобалки
..........................................
call ShowUnitShow( GroupPickRandomUnit(udg_G))
Нужно чтобы тут возравщались все юниты
call SelectGroupForPlayerBJ( udg_G, p )

endfunction
Загруженные файлы
0
3
6 лет назад
0

» WarCraft 3 / Создание юнита в конкретном месте

Область точно не работает, если юнитов примерно на расстоянии 300 нету то оно норм создается. Я думаю есть функция, и работает она на рудниках плетеных и проклятых при их уничтожении возводиться рудник в том-же месте. Думаю так это работает
0
3
6 лет назад
0

» WarCraft 3 / Как отследить количество юнитов?

Не может) рядом нету имелось ввиду
0
3
6 лет назад
0

» WarCraft 3 / Как сделать ауру активной?

А если не герою?!