27

» WarCraft 3 / Нужно объяснение по джассу (обнуление группы)

мб стоило просто единый счетчик на арене завести? сколько юнитов на арене, столько и овец, только в 5 раз больше. не знаю для чего ему так надо
27

» WarCraft 3 / Нужно объяснение по джассу (обнуление группы)

Clamp, ну он для каждого выбранного создает группу из 5 овец. А можно обойтись без группы, но 5 овечек хранят ссылку к выбранному. когда одна овца умирает, у выбранного счетчик -1
Это как, если на арену выйдет 20 юнитов, то наверное будет 20 групп создано. А еще 20 переборов на счетчиков групп
27

» WarCraft 3 / Нужно объяснение по джассу (обнуление группы)

Принятый ответ
ну не обнулили g
во-вторых, не привязали группу при ее создании к выбранному юниту. Короче, это уже ошибка.
    if g == null then
        set g = CreateGroup()
		//надо в хэш на зэндл выбранного записать группу
		set g = null //переменная - это просто ссылка
    endif
при смерти овцы удаляем ее из группы
при смерти выбранного юнита удаляем группу
может стоит подумать сделать на всю игру одну группу овечек или вообще обойтись без группы. будет фиксировать заход/выход овцы. На каждого выбранного заводим счетчик. А каждой овце привязываем выбранного. Когда овца умирает, то зная к кому привязана, у выбранного понижаем счетчик.
27

» WarCraft 3 / Как определить событиие -юнит покинул транспорт

Принятый ответ
ну такого события нету.
отследить можно приказом. Когда юниты садятся в транспорт, записываешь юнитов в группу. Группу можно сделать общую на всех-всех пассажиров. Все юниты, которые выходят из транспорта, получают приказ "stop". Событием приказам проверяешь юнит в группе, приказ стоп. Значит, вылезает. Из группы удаляем. все есть в наработке.
Однако, когда транспорт умирает, то юниты дропаются, то таким способом не отследишь дроп. Точно я не уверен работает. Или имелось в виду, что над водой дохнут.
Если транспорт умрет, значит, надо проверить какие пассажиры были в транспорте. Чтобы их вычистить из группы. Не знаю при событии смерти засекает ли функция что юнит в транспорте. Обычно некоторые событие в варкрафте не означают, что они произошли. А произойдут
27

» WarCraft 3 / Проглотить (devour)

попробуй отследить применение и записать инфу
все проглоченные юниты обычно находятся формально в транспорте. Не знаю, можно ли отследить нативками. Вот выблевать их можно абилками транспорта на дроп, так что можно считать ли это абилкой транспорта. или ждать смерти кодоя
можно попробовать отследить есть ли на проглоченном юните дебафф. весит у него и наноситч\ урон.
еще вариант: юниты спрятаны, мб проверять скрыт ли юнит в данный момент.
27

» WarCraft 3 / Как узнать находится юнит в пределах камеры игрока

Принятый ответ
первый способ - поле в плоскости XY
Это вариант норм работает.
//Простая матрица поворота вокруг оси Z
function Matrix takes unit u, real cx, real cy, real offsetx, real offsety, real theta returns nothing
//вектор
local real dx= (cx + offsetx)-cx
local real dy= (cy + offsety)-cy
//ищем offset-ы
local real vx= dx * Cos(theta) - dy * Sin(theta)
local real vy= dx * Sin(theta) + dy * Cos(theta) 
//сдвигаем
call SetUnitX(u,cx+vx)
call SetUnitY(u,cy+vy)
endfunction

function Trig_field_camera_Actions takes nothing returns nothing
//координаты центра обзора камеры
local real x2 = GetCameraTargetPositionX()
local real y2 = GetCameraTargetPositionY()
local real z2 = GetCameraTargetPositionZ()
//расстояние между камерой и целью
local real d = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
//поворот камеры
//показывает насколько изменился угол от стандартного угла и наскока нужна повернуть
local real theta = ModuloReal((GetCameraField(CAMERA_FIELD_ROTATION)-bj_CAMERA_DEFAULT_ROTATION* bj_DEGTORAD), 6.28)



//центр-таргет обзора камеры
call SetUnitX(un[0],x2)
call SetUnitY(un[0],y2)
//РИСУЕМ ПРЯМОУГОЛЬНИК. короче область
//ищем право-верхнюю вершину
    call Matrix(un[1],x2,y2,d*WidthScreen,d*HeightScreen,theta)
//ищем право-нижнюю вершину
    call Matrix(un[2],x2,y2,d*WidthScreen,-d*HeightScreen,theta)
//ищем лево-нижнюю вершину
    call Matrix(un[3],x2,y2,-d*WidthScreen,-d*HeightScreen,theta)
//ищем лево-верхнюю вершину    
    call Matrix(un[4],x2,y2,-d*WidthScreen,d*HeightScreen,theta)
    //молнии
    call MoveLightning(lightning_1[0],true,GetUnitX(un[1]),GetUnitY(un[1]),GetUnitX(un[2]),GetUnitY(un[2]))
    call MoveLightning(lightning_1[1],true,GetUnitX(un[2]),GetUnitY(un[2]),GetUnitX(un[3]),GetUnitY(un[3]))
    call MoveLightning(lightning_1[2],true,GetUnitX(un[3]),GetUnitY(un[3]),GetUnitX(un[4]),GetUnitY(un[4]))
    call MoveLightning(lightning_1[3],true,GetUnitX(un[4]),GetUnitY(un[4]),GetUnitX(un[1]),GetUnitY(un[1]))
    call MoveLightning(lightning_1[4],true,GetUnitX(un[1]),GetUnitY(un[1]),GetUnitX(un[3]),GetUnitY(un[3]))
    call MoveLightning(lightning_1[5],true,GetUnitX(un[2]),GetUnitY(un[2]),GetUnitX(un[4]),GetUnitY(un[4]))
call BJDebugMsg("center camera x: " + R2S(x2) + " - center camera y: " + R2S(y2))
call BJDebugMsg("d: " + R2S(d) + " theta: " + R2S(theta))

endfunction

//===========================================================================
function InitTrig_field_camera takes nothing returns nothing
    set gg_trg_field_camera = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_field_camera, 1.00 )
    call TriggerAddAction( gg_trg_field_camera, function Trig_field_camera_Actions )
endfunction
второй способ (не рабочий) из-за 3d HELP
Сколько не изучай углы Эйлера или матрицы, не смог норм сделать. У камеры есть все данные: roll, pitch, yaw, distanse,zoom. никак не может offsets подобрать для 4 точек в 3d. Не знаю что делать. Но соображать стал получше. Возможно стоит посмотреть Dgui. хотя это уже не так важно, мне нужны были юниты. это 3d только визуально экран прорисовать хотел.
function Trig_field_camera_Actions2 takes nothing returns nothing
//координаты камеры
local real x1 = GetCameraEyePositionX()
local real y1 = GetCameraEyePositionY()
local real z1 = GetCameraEyePositionZ()
//координаты центра обзора камеры
local real x2 = GetCameraTargetPositionX()
local real y2 = GetCameraTargetPositionY()
local real z2 = GetCameraTargetPositionZ()
//смещение высоты камеры
local real ZOffset = GetCameraField(CAMERA_FIELD_ZOFFSET) 
//расстояние между камерой и целью
local real r = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
//поворот камеры вокруг оси Z
local real alpha = ModuloReal((GetCameraField(CAMERA_FIELD_ROTATION)-bj_CAMERA_DEFAULT_ROTATION* bj_DEGTORAD), bj_PI*2)
//вращение камеры аокруг оси X
local real beta = ModuloReal((GetCameraField(CAMERA_FIELD_ROLL)-bj_CAMERA_DEFAULT_ROLL* bj_DEGTORAD), bj_PI*2)
//наклоны камеры вокруг оси Y
local real gamma = ModuloReal((GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)-bj_CAMERA_DEFAULT_AOA* bj_DEGTORAD), bj_PI*2)
//координаты смещения
local real x = x2-x1
local real y = y2-y1
local real z = z2-x1+ZOffset

local real l = SquareRoot(x*x + y*y + z*z) 
//вектор
local real dx = (x2-(x1+l*Sin(beta)*Cos(alpha)))//*WidthScreen
local real dy = (y2-(y1+l*Sin(beta)*Sin(alpha)))//*HeightScreen
local real dz = z2-(z1+l*Cos(beta))
//offsets
set x = (dx*Cos(alpha)*Cos(gamma)-dx*Sin(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Cos(alpha)*Sin(gamma) -dy*Sin(alpha)*Cos(beta)*Cos(gamma)) +(dz*Sin(alpha)*Sin(beta)) 
set y = (dx*Sin(alpha)*Cos(gamma)+dx*Cos(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Sin(alpha)*Sin(gamma) +dy*Cos(alpha)*Cos(beta)*Cos(gamma)) +(-dz*Cos(alpha)*Sin(beta)) 
set z = (dx*Sin(beta)* Sin(gamma))  + (dy*Sin(beta)*Cos(gamma)) + dz*Cos(beta) 


//центр-таргет обзора камеры
call SetUnitX(un[0],x2)
call SetUnitY(un[0],y2)
call UnitAddAbility(un[0], 'Amrf')
call UnitRemoveAbility(un[0], 'Amrf')
call SetUnitFlyHeight(un[0],z2,0)

set x = x2+r*WidthScreen
set y = y2+r*HeightScreen
set z = z2
set l = SquareRoot(x*x + y*y + z*z) 
//вектор
set dx = (x2-(x1+l*Sin(beta)*Cos(alpha)))//*WidthScreen
set dy = (y2-(y1+l*Sin(beta)*Sin(alpha)))//*HeightScreen
set dz = z2-(z1+l*Cos(beta))
//offsets
set x = (dx*Cos(alpha)*Cos(gamma)-dx*Sin(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Cos(alpha)*Sin(gamma) -dy*Sin(alpha)*Cos(beta)*Cos(gamma)) +(dz*Sin(alpha)*Sin(beta)) 
set y = (dx*Sin(alpha)*Cos(gamma)+dx*Cos(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Sin(alpha)*Sin(gamma) +dy*Cos(alpha)*Cos(beta)*Cos(gamma)) +(-dz*Cos(alpha)*Sin(beta)) 
set z = (dx*Sin(beta)* Sin(gamma))  + (dy*Sin(beta)*Cos(gamma)) + dz*Cos(beta) 
call SetUnitX(un[1],x1+x)
call SetUnitY(un[1],y1+y)
call UnitAddAbility(un[1], 'Amrf')
call UnitRemoveAbility(un[1], 'Amrf')
call SetUnitFlyHeight(un[1],z1+z,0)

set x = x2+r*WidthScreen
set y = y2-r*HeightScreen
set z = z2
set l = SquareRoot(x*x + y*y + z*z) 
//вектор
set dx = (x2-(x1+l*Sin(beta)*Cos(alpha)))//*WidthScreen
set dy = (y2-(y1+l*Sin(beta)*Sin(alpha)))//*HeightScreen
set dz = z2-(z1+l*Cos(beta))
//offsets
set x = (dx*Cos(alpha)*Cos(gamma)-dx*Sin(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Cos(alpha)*Sin(gamma) -dy*Sin(alpha)*Cos(beta)*Cos(gamma)) +(dz*Sin(alpha)*Sin(beta)) 
set y = (dx*Sin(alpha)*Cos(gamma)+dx*Cos(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Sin(alpha)*Sin(gamma) +dy*Cos(alpha)*Cos(beta)*Cos(gamma)) +(-dz*Cos(alpha)*Sin(beta)) 
set z = (dx*Sin(beta)* Sin(gamma))  + (dy*Sin(beta)*Cos(gamma)) + dz*Cos(beta) 
call SetUnitX(un[2],x1+x)
call SetUnitY(un[2],y1+y)
call UnitAddAbility(un[2], 'Amrf')
call UnitRemoveAbility(un[2], 'Amrf')
call SetUnitFlyHeight(un[2],z1+z,0)

set x = x2-r*WidthScreen
set y = y2-r*HeightScreen
set z = z2
set l = SquareRoot(x*x + y*y + z*z) 
//вектор
set dx = (x2-(x1+l*Sin(beta)*Cos(alpha)))//*WidthScreen
set dy = (y2-(y1+l*Sin(beta)*Sin(alpha)))//*HeightScreen
set dz = z2-(z1+l*Cos(beta))
//offsets
set x = (dx*Cos(alpha)*Cos(gamma)-dx*Sin(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Cos(alpha)*Sin(gamma) -dy*Sin(alpha)*Cos(beta)*Cos(gamma)) +(dz*Sin(alpha)*Sin(beta)) 
set y = (dx*Sin(alpha)*Cos(gamma)+dx*Cos(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Sin(alpha)*Sin(gamma) +dy*Cos(alpha)*Cos(beta)*Cos(gamma)) +(-dz*Cos(alpha)*Sin(beta)) 
set z = (dx*Sin(beta)* Sin(gamma))  + (dy*Sin(beta)*Cos(gamma)) + dz*Cos(beta) 
call SetUnitX(un[3],x1+x)
call SetUnitY(un[3],y1+y)
call UnitAddAbility(un[3], 'Amrf')
call UnitRemoveAbility(un[3], 'Amrf')
call SetUnitFlyHeight(un[3],z1+z,0)

set x = x2-r*WidthScreen
set y = y2+r*HeightScreen
set z = z2
set l = SquareRoot(x*x + y*y + z*z) 
//вектор
set dx = (x2-(x1+l*Sin(beta)*Cos(alpha)))//*WidthScreen
set dy = (y2-(y1+l*Sin(beta)*Sin(alpha)))//*HeightScreen
set dz = z2-(z1+l*Cos(beta))
//offsets
set x = (dx*Cos(alpha)*Cos(gamma)-dx*Sin(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Cos(alpha)*Sin(gamma) -dy*Sin(alpha)*Cos(beta)*Cos(gamma)) +(dz*Sin(alpha)*Sin(beta)) 
set y = (dx*Sin(alpha)*Cos(gamma)+dx*Cos(alpha)*Cos(beta)*Sin(gamma)) +(- dy*Sin(alpha)*Sin(gamma) +dy*Cos(alpha)*Cos(beta)*Cos(gamma)) +(-dz*Cos(alpha)*Sin(beta)) 
set z = (dx*Sin(beta)* Sin(gamma))  + (dy*Sin(beta)*Cos(gamma)) + dz*Cos(beta) 
call SetUnitX(un[4],x1+x)
call SetUnitY(un[4],y1+y)
call UnitAddAbility(un[4], 'Amrf')
call UnitRemoveAbility(un[4], 'Amrf')
call SetUnitFlyHeight(un[4],z1+z,0)

//РИСУЕМ ПРЯМОУГОЛЬНИК. короче область
//ищем право-верхнюю вершину
call BJDebugMsg("r: " + R2S(r) + " alpha: " + R2S(alpha)+ " beta: " + R2S(beta)+ " gamma: " + R2S(gamma))
    
endfunction

//===========================================================================
function InitTrig_field_camera_2 takes nothing returns nothing
    set gg_trg_field_camera_2 = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_field_camera_2, 1.00 )
    call TriggerAddAction( gg_trg_field_camera_2, function Trig_field_camera_Actions2 )
endfunction

все нашел. на нашем сайте. очень много писали ребята на декартовых координатах
к примеру вот это
Загруженные файлы
27

» WarCraft 3 / Как узнать находится юнит в пределах камеры игрока

Вроде нашел способ как определить поле камеры, которое лежит в плоскости xy. Высоту камеры просто не учитывал. Поскольку с сферичными координатами проблемы, матрицу опять мучить. Если камеру наклоним колесом мыши, это будет не так важно, даже, если мы не видим, текстаги создадутся, не так и срашно.
если немного вспомнить функции
есть координаты камеры, а есть координаты таргет-центра обзора камеры. Берутся координаты таргет-центра обзора камеры. Относительно центра обзора клепаем вершины ректа с шириной*WidthScreen высотой*HeightScreen. Из DGUI взял
real WidthScreen = 0.544
real HeightScreen = 0.302
В принципе ширина и высота - один и тот же размер, дистанция камеры CAMERA_FIELD_TARGET_DISTANCE. Поэтому и проблем и не было.
Изменяется в зависимости от угла поворота камеры CAMERA_FIELD_ROTATION и расстояния CAMERA_FIELD_TARGET_DISTANCE. Но не учитывал такие как zoom, ролл.
Повороты поля (прямоугольника) можно попробовать через это ссылка
27

» WarCraft 3 / Как узнать находится юнит в пределах камеры игрока

Maniac_91:
Можно проверять видимость точки (в которой стоит юнит) игроку. Не проверял, но, возможно, под видимостью игроку имеется в виду отсутствие тумана войны (то есть "у игрока есть возможность видеть эту точку", а не "точка находится в пределах видимости камеры").
Проверял давно. так и есть ссылка
Vlod:
Можно выводить диалоги когда проходишь рядом с npc, как будто подслушиваешь разговор
Так у меня НПС все жители деревни. Ими управлять можно. Просто для веселухи и смешных моментов хочется оживить. И чтобы передавали мысли. Но у меня это не одним героем управляется.
27

» WarCraft 3 / Триггерно заменить призываемого юнита (в ро)

Принятый ответ
Roy Mustang, наверное имелось в виду костыль, когда ваше здание переключается на дайми, и там оно начинает строить.
ссылка
недостаток: модель потрета все равно должно быть привязано к юниту. Это получится, если для каждой башни делать копии даймиков. Эта система работает для одного хорошо. Но возможно в рефордже есть инструменты, которыми можно портреты менять или модельки, типы, морфить
27

» WarCraft 3 / Можно ли посчитать кол-во юнитов в транспорте

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

» WarCraft 3 / Утечки

NazarPunk, векторы удобны тем что код упрощают. разве не так?: просто x и y запара писать. хоть не использую структуры векторов, но на jass это дико неудобно, но терпимо. хотя многие действия с векторами непонятны к примеру деление, умножение итд не понятно где они применимы
но видел системы, где все кратко и красиво написано
27

» Зона Агрена. / Ремастер моих Добрых Монстров.

Ярг Восьмой,
когда будут самые сисястые и сочные монстрихи в рамках приличия, естественно?
27

» WarCraft 3 / Не всегда работает проверка точек пересечения

Принятый ответ
Короче нашел причину, но не уверен. Пошел на маленькую хитрость.
Условие пересечения отрезков работает иногда не стабильно. Поэтому я в условии записываю отрезок, который будет удлинен на 1.00 по обе стороны. И теперь работает норм. Но сами точки пересечения определяются норм отрезками, в то время как в условии пересечения отрезки удлинены +1/-1. Чтобы в условие попало, иначе просто не проходит пересечение отрезок, хер знает почему.
Вторая проблема, теперь у меня больше точек пересечения, чем должно быть. В одной точке находит несколько точек пересечения. Например, вместо двух находит 4:
x1 = 1281 y1= -64 этот явно лишний
x2 = 1280 y2= -64
x3 = 1280 y3= 64
x4 = 1281 y4 = 64 лишний
Они все лежат в одной точке, но погрешность координаты плюс/минус 1. Так определили формулы пересечения с погрешностями
Эх. удлинил отрезок +1 в стороны, но все равно не проходит иногда. Наверное надо еще больше растянуть.

Все проблема решена. Оказывается дело в формуле определения пересечения отрезков. Как-то шалит она, случайно другую использовал. Оказывается надо заменить в условиях "меньше или равно" на "меньше" и "больше или равно" на "больше". И отрезки удлинить на 1 в каждую сторону, иначе это условие не прокатит. Вроде норм, но надо потестить.

все чекнул. норм.
27

» WarCraft 3 / Проблема с jngp

у меня не появились новые условия
новые
попробуй снести руссификатор и проверить без него.
у тебя условии нет? или просто пустые окошки отображаются? пустые окна означают, что руссификатор не все перевел. с таким сталкивался давно, когда начинал редачить в триггерах


тут еще пишут функции триггера отсутствуют. потому что вы открываете обычным редактором. обычно если редактировать в jgnp с какими-новыми функциями, которых нет в обычном. то такое не удивительно, что происходит. пробуйте соблюсти правила установки. хз
интересно после чего перестало работать? не от антиваря / обновления ?
27

» WarCraft 3 / Способность завод не работает

Omg_bounty_lord, мы только можем гадать что у вас не работает. если не работает, попробуйте другие способы. Как говорится: умный в гору не пойдет, умный гору обойдет.
27

» WarCraft 3 / Способность завод не работает

какие требование ставите?
если действительно не работает, попробуй триггерную пустышку использовать через дайми-каст, в ней задай требование.
27

» WarCraft 3 / Пассивка. Таймеры.

Если пассивка только у одного героя, то создай один таймер. И работай с этим. И проверяй живой ваш герой еще.
Если пассивка у нескольких героев, можно создать один таймер и группу. Периодически таймер чекает группу. В эту группу заноси своих героев, у которых есть эта пассивка. И можно включать таймер, если в группе появляется герой, и выключать.
27

» Мир безумного / Ремейк Warcraft II на движке Warcraft III: Reforged

Я вот по варкрафту 1.и 2 не могу поностальгировать, это игра была деревянная. Не могут вспомнить ни сюжета, ни одного главного персонажа, их там по-моему не было. В этой игре на классических сражениях завязаны, и много ограничении, ресурсы там с умом надо тратить. Если настроишь армию, не хватит на транспортные корабли, чтобы переплыть.
27

» WarCraft 3 / Рандом без повтора

Можно бд сделать, массивы на тип героя и логическую. И потом выдавать рандом, и когда выбирается гер, то у него логическая приравнится как нет. И если у след игрока выпал этот гер, то нужно проверять лог переменную, занят ли такой герой. Короче сделать цикл в цикле
А можно просто без лог переменной обойтись, обнули тип гера. И тогда проверяй, не обнулена ли переменная. Если обнулена, значит, он выбран, тогда в цикле заново рандомим, и так работает цикл до сих пор пока не найдет.
27

» WarCraft 3 / Способность предательство

Я к сожалению, жизнь на арене не играл. мб там просто передача другому игроку. триггерная команда есть или абилка перехвата какая нибудь стандартная юзается?
27

» WarCraft 3 / Способность предательство

Мне нужно так, что юниты не вокруг героя, а юниты только там где проюзал способность в определённой области и срабатывает триггер на смену игрока. Если не сложно можно карту с триггерами)
Omg_bounty_lord, тебе же сказали же, что выделяешь юнитов группу. А там есть разные варианты выделения в группу: вокруг героя или точки, пик в области, пик в регионе, юниты игрока, или всех на карте. далее есть фильтры-условия, которыми можно отсеивать не нужных
27

» WarCraft 3 / Способность предательство

так это настройки союза
всех делаешь нейтралами. А когда атакуешь их, то делаешь врагами (они же не будут стоять, им нужно агр включить). Вопрос как это у вас будет происходить? нужно ли разбивать войска противника на части по области и по местам обитания. А то прикинь, это как в готике 3, в одной деревне подрался, все уже враги. пошел в другой город, то там уже не должны знать об этом.
или передача другому игроку
когда начал бить одного, то всех ближайших юнитов передаем враждебному игроку. И они все на тебя агрятся. в чем фишка? а в том, что определенная часть переходит в агр. А не весь город. Не нужно с настройками союза с данным игроком портить. Мб в городе какая часть принадлежит одной банде или группировке
можно использовать абилу Заводной зверь 'Amec'
всех делаем врагами, морфим предателя в абилу. Заводной зверь 'Amec' - вызывает нейтральную зверушку (здесь не указано ничего, и нельзя указать какой тип призывается. Всегда рандомно вызывает зверушку: это может быть кроликом, лягушкой, енотом, цыпленком, свиньей, овца (часто выпадают именно эти зверьки, возможно есть другие, но это не попадались мне). Вшито в игре где-то). Зато можно указать количество вызываемых зверей. Эта абилка вставлена в одноразовый предмет. Вызывает навсегда (длительность задано на "ноль", но можно задать время действия вызова). Вызывает безграничное число юнитов. Это не совсем нейтральное существо, оно может подчиняться вашим указаниям (у нее есть, конечно, бродилка. чтоб не стояло на месте). Это существо больше создано для разведки, вы можете создать неподалеку от базы противника и заслать на базу. Враги не трогают нейтралов. В чем суть этой абилки? Если создать изначально цыпленка на карте, и заслать на базу врага, этого цыпленка тут же заметят как врага, и сразу же прирежут. А если вызвать через эту способность, то враг игнорит вашу зверушку (в некоторых играх против ботов надо попробовать сделать препятствие - если узкие проходы просто загородить цыплятами, то возможно пройти будет сложно). Единственное, что настоящий игрок может заподозрить и убить.
есть фишка со способностью 'Amec' mecanical critter, юниты созданные этой абилкой отабражаются всем врагам нейтралами, ровно до тех пор пока они не нападут на игрока, тогда они отображаются как юниты владельца, только они выйдут из боя и поля зрения снова будут считатся нейтралами.
ПРИМЕЧАНИЕ: Увы настроить тип призванного существа нельзя, но его можно морфнуть во что угодно с помощью морф абилок. Главная фишка - это сохранить полученный эффект (флаг) нейтрала. Отлавливаете через событие вызова призыв, и с помощью руны морфите в нужный тип