Согласно триггеру мы видим:
Атакующий - Потрошитель (бездна) (условие)
Создаётся dummy в позиции Потрошителя под управлением игрока, что является владельцем этого Потрошителя.
Даётся команда dummy использовать способность Пламя Обречённости на атакованном бойце.
Ждать
Удалить последнего созданного.
Из того что мы видим всё должно сработать.
Если не работает:
Проверить наличие способности у dummy.
Наличие маны у dummy.
Требования на использование способности. (Исследования и т.п.)
Прежде чем запускать dummy триггерно, рекомендую вручную создать выбираемого dummy и дать им приказ на использование способности. Если конечно впервые пробуем подобное.
Я не совсем прав... Глянул common.j и согласно ему можно сделать такую вещь:
native RegionAddRect takes region whichRegion, rect r returns nothing
native RegionClearRect takes region whichRegion, rect r returns nothing
То бишь можно будет повесить, предварительно сохранив в переменную, на регион событие входа и таймером сначала удалять область, а потом добавить в новом положении область в регион. Должно сработать.
В данный момент не имею доступа к ПК для сверки теории.
И да, писать всё придется на Jass, либо GUI+custom code.
в область ("юнит входит в область") срабатывает только в исходной позиции области
Происходит это из-за события (функции), оно при создании триггера создаёт утекающий region и вешает на этот region событие входа/выхода.
Выход: создавать регион и перемещать его, а не область.
CreateTimerDialogBJ рассказываем и видим, что оно создаёт при вызове TimerDialog.
Если вызвать функцию дважды, то создаст 2 отдельных окна таймера привязанных к одному таймеру. Завершив таймер уничтожить можно будет только последнее окно, если первое небыло привязано к какой либо переменной, то оно (первое) утекает.
local unit whichUnit=GetKillingUnit()
local integer data=GetUnitUserData(whichUnit)
call SetUnitUserData (whichUnit, data+1)
if(data==5)then
call UnitAddAbility(whichUnit, 'A000')
else
...
endif
...
set whichUnit=null
На скриншоте всё верно. Видимо этого действия не достаточно. Сам не сталкивался с такой проблемой и в данный момент не могу реализовать. Однако посидев немного в поиске нашел подобное решение
В таком случае я бы хотел увидеть, что вы понимаете под "физический размер", ибо этого действия должно быть достаточно для вашей задачи.
Скриншот Редактора Объектов с нужным полем будет прекрасным аргументом.
Способность любого пассивно нейтрального животного - Нейтральный (Лягушка, пингвин и т.п.)
Способность у торнадо (смерч) Медузы тоже даёт обладателю ходить в случайном направлении без остановки.
local real x=GetUnitX(udg_Hero)
local real y=GetUnitY(udg_Hero)
set bj_lastCreatedUnit=CreateUnit(GetOwningPlayer(udg_Hero),'hspt',x,y,GetUnitFacing(udg_Hero))
Афтар, попытки были? Насколько удачные? Что использовалось (GUI, JASS, zinc, lua)? В случае не желания самостоятельно или с помощью текущего раздела (вопросы) разобраться в создании способности - обращаемся в раздел Заклинания на заказ и оформляем по примеру.
В вопросах не всегда дают итоговое решение (скопировал-вставил). По моему мнению ответ должен научить, а не кормить готовым.
function TreeDestroyerSystemFilter takes nothing returns boolean
local destructable d=GetFilterDestructable()
local real x=GetDestructableX(d)-udg_TreeDestr_X
local real y=GetDestructableY(d)-udg_TreeDestr_Y
local real r=SquareRoot(x*x+y*y)
if(GetWidgetLife(d)>.405 and r<=udg_TreeDestr_R and IssueTargetOrderById(udg_TreeDestr_DUMMY,852018,d) and IssueImmediateOrderById(udg_TreeDestr_DUMMY, 851972))then//852018=="harvest" 851972=="stop"
call KillDestructable(d)
set udg_TreeDestr_N=udg_TreeDestr_N+1
endif
set d=null
return false
endfunction
function TreeDestroyerSystem takes real x,real y,real r returns integer
local rect rt=Rect(x-r,y-r,x+r,y+r)
local boolexpr b=Filter(function TreeDestroyerSystemFilter)
set udg_TreeDestr_R=r
set udg_TreeDestr_X=x
set udg_TreeDestr_Y=y
set udg_TreeDestr_N=0
call EnumDestructablesInRect(rt,b,null)
call DestroyBoolExpr(b)
call RemoveRect(rt)
set b=null
set rt=null
return udg_TreeDestr_N
endfunction
function InitTrig_TreeDestrSystem takes nothing returns nothing
//set gg_trg_TreeDestrSystem=CreateTrigger( )
//call TriggerAddAction( gg_trg_TreeDestrSystem, function Trig_TreeDestrSystem_Actions)
set udg_TreeDestr_DUMMY=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),'uloc',.0,.0,.0)
call UnitAddAbility(udg_TreeDestr_DUMMY,'Ahar')
call ShowUnit(udg_TreeDestr_DUMMY,false)
endfunction
library TreeDestroyerSystem initializer Init
globals
private constant integer DummyID='dumy'
private constant integer AbilityID='Ahar'
private constant integer OrderID=852018
private unit Dummy=null
private real AoE=.0
private real X=.0
private real Y=.0
endglobals
private function Filtering takes nothing returns boolean
local destructable d=GetFilterDestructable()
local real x=GetDestructableX(d)-X
local real y=GetDestructableY(d)-Y
local real r=SquareRoot(x*x+y*y)
if(GetWidgetLife(d)>.405 and r<=AoE and IssueTargetOrderById(Dummy,OrderID,d) and IssueImmediateOrderById(Dummy, 851972))then// and GetUnitCurrentOrder(Dummy)==OrderID
call KillDestructable(d)
endif
set d=null
return false
endfunction
function TreeDestroyerSystem takes real x,real y,real a returns boolean
local rect r=Rect(x-a,y-a,x+a,y+a)
local boolexpr b=Filter(function Filtering)
set AoE=a
set X=x
set Y=y
call EnumDestructablesInRect(r,b,null)
call DestroyBoolExpr(b)
call RemoveRect(r)
set b=null
set r=null
set AoE=.0
set X=.0
set Y=.0
return false
endfunction
private function Init takes nothing returns nothing
set Dummy=CreateUnit(Player(15),DummyID,.0,.0,.0)
call UnitAddAbility(Dummy,'Aloc')
call UnitAddAbility(Dummy,AbilityID)
call ShowUnit(Dummy,false)
endfunction
endlibrary
Делаем триггер на него вешаем бойцов и смерть бойцов по хэндлу триггера.
Один из них умер - убиваем второго (или двоих). Ну, и не забываем очищать всё. Дабы утечек небыло.
Профит
Правильно, но один раз на всю игру и скрыть. Можно его дать нейтралам (открыта карта). Нам самое главное отслеживать им приказ. Я бы создал москита ('uloc') для нейтрала, добавил способность добычи и скрыл. Место создания не нужно(X=.0, Y=.0). Передвигать к месту проверки так же не нужно.
...приказ не срабатывает то продолжать перебор?
Не совсем... Допустим приказ сработал, то этот даммик будет пытаться добывать дерево. Следовательно нужно его будет как-то остановить.
Установить способности 2 уровня. На первом уровне - все значения в 0. На втором - необходимые значения.
Сделать по аналогии с "Мастерство скелетов (Skeletal Mastery)" улучшение. То бишь улучшение должно увеличить уровень выбранной способности (Ability Level Bonus).
При данном способе:
нет нужды в триггерах (+);
способность всегда видна (как и эффект атаки в данном случае) и нет указания о необходимости улучшения (-).
» WarCraft 3 / call GroupEnumUnitsInRect - Помогите внести корректив в сценарий
» WarCraft 3 / Уменьшение урона юнита при атаке
Атакующий - Потрошитель (бездна) (условие)
Создаётся dummy в позиции Потрошителя под управлением игрока, что является владельцем этого Потрошителя.
Даётся команда dummy использовать способность Пламя Обречённости на атакованном бойце.
Ждать
Удалить последнего созданного.
Если не работает:
» WarCraft 3 / Движущийся Портал
Отредактирован DazzleFirst
» WarCraft 3 / Движущийся Портал
Выход: создавать регион и перемещать его, а не область.
Отредактирован DazzleFirst
» WarCraft 3 / как уничтожить все таймер-диалоги timerdialog ?
Если вызвать функцию дважды, то создаст 2 отдельных окна таймера привязанных к одному таймеру. Завершив таймер уничтожить можно будет только последнее окно, если первое небыло привязано к какой либо переменной, то оно (первое) утекает.
» WarCraft 3 / Тройной выстрел
Настраиваем цели и радуемся.
» WarCraft 3 / Количество убийств юнита
Отредактирован DazzleFirst
» WarCraft 3 / Юнит мешает пройти
Отредактирован DazzleFirst
» WarCraft 3 / Юнит мешает пройти
Скриншот Редактора Объектов с нужным полем будет прекрасным аргументом.
» WarCraft 3 / KillUnit
call SetUnitState(target, UNIT_STATE_MANA, 0.)
call UnitDamageTarget(source, target, 1.1, false, false, null, null, null)
source - убивец
target - цель убийства
» WarCraft 3 / Как сделать рандомное перемещение
Отредактирован DazzleFirst
» WarCraft 3 / Как сделать рандомное перемещение
Боевая единица вышла из области
Ваши условия
Отправить в случайную точку области
» WarCraft 3 / Как сделать рандомное перемещение
Способность у торнадо (смерч) Медузы тоже даёт обладателю ходить в случайном направлении без остановки.
» WarCraft 3 / Создание юнита по координатам
» WarCraft 3 / Триггерная способность
» WarCraft 3 / Триггер активируется со второго раза
» WarCraft 3 / Способность исчезает при использовании
» WarCraft 3 / Разрушение деревьев
Отредактирован DazzleFirst
» WarCraft 3 / Разрушение деревьев
Отредактирован DazzleFirst
» WarCraft 3 / Связанные юниты
Один из них умер - убиваем второго (или двоих). Ну, и не забываем очищать всё. Дабы утечек небыло.
Профит
» WarCraft 3 / Связанные юниты
» WarCraft 3 / Как отделить деревья от разрушаемого?
» WarCraft 3 / Как отделить деревья от разрушаемого?
Даммик со способностью Добыча ресурсов
» WarCraft 3 / Как не выбирать строения?
native IsUnitType takes unit whichUnit, unittype whichUnitType
» WarCraft 3 / Добавление способности юниту тригерно
Сделать по аналогии с "Мастерство скелетов (Skeletal Mastery)" улучшение. То бишь улучшение должно увеличить уровень выбранной способности (Ability Level Bonus).
нет нужды в триггерах (+);
способность всегда видна (как и эффект атаки в данном случае) и нет указания о необходимости улучшения (-).