!===============================================================================================================================
Ability01
!===============================================================================================================================
Описание способности:
Выбирает всех союзных юнитов (кроме здания) в радиусе 900 от кастера
и добавляет способность которая удаляется спустя 6 секунд от всех выбранных юнитов
Ability01
!===============================================================================================================================
Описание способности:
Выбирает всех союзных юнитов (кроме здания) в радиусе 900 от кастера
и добавляет способность которая удаляется спустя 6 секунд от всех выбранных юнитов
function Ability01_Filter takes nothing returns boolean
return GetUnitAbilityLevel(GetFilterUnit(), 'B413') == 0 and IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == false and IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) == false and IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) == false
endfunction
function Ability01_Timer takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit u = LoadUnitHandle(H,h,0)
local real time = LoadReal(H,h,1)
local real proverka = LoadReal(H,h,2)
if GetWidgetLife(u) < .405 and proverka == 0 then
call UnitRemoveAbility( u, LoadInteger(H, h, 3 ))
call UnitRemoveAbility( u, LoadInteger(H, h, 4 ))
set proverka = proverka+1
call SaveReal(H,h,2,proverka)
endif
if time < 0 then
call UnitRemoveAbility( u, LoadInteger(H, h, 3 ))
call UnitRemoveAbility( u, LoadInteger(H, h, 4 ))
call FlushChildHashtable(H, h)
call PauseTimer(t)
call DestroyTimer(t)
else
call SaveReal(H, h, 1, time - .025)
endif
set u = null
set t = null
endfunction
function Ability01Group takes nothing returns nothing
local timer t = CreateTimer()
local integer h = GetHandleId(t)
local unit u = GetEnumUnit()
local real proverka = 0
local real time = 6
call UnitAddAbility(u,'A535')
call SetPlayerAbilityAvailable(GetOwningPlayer(u),'A535',false)
call SaveUnitHandle(H,h,0,u)
call SaveReal(H,h,1,time)
call SaveReal(H,h,2,proverka)
call SaveInteger(H,h,3,'A535')
call SaveInteger(H,h,4,'B413')
call TimerStart(t,.025,true,function Ability01_Timer)
set t=null
set u=null
endfunction
function Ability01 takes unit a returns nothing
local group g = CreateGroup()
local boolexpr b = Condition(function Ability01_Filter)
call GroupEnumUnitsInRange(g,GetUnitX(a),GetUnitX(a),900.00,b)
call ForGroup(g,function Ability01Group)
call DestroyBoolExpr(b)
call DestroyGroup(g)
set g=null
set b=null
set a=null
endfunction
//Условие
function AbilityCondition takes nothing returns boolean
local unit u = GetSpellAbilityUnit()
if GetSpellAbilityId() == 'A1ZW' then
call Ability01(u)
endif
set u = null
return false
endfunction
Принятый ответ
Zeuz, в доте нету такого количества таймеров
во многих нормальных картах сделано так как в статьях
Zeuz:
во многих нормальных картах сделано так как в статьях
Zeuz:
покажи пример в обычном jass
скопируй в карту а потом вытащи из неё j файл или напиши в коде букву на отдельной строке (тогда тебе выдаст ошибку и будет показан исходный код)
но на обычном джассе этот код больше и писать/читать его неудобно так что держи
но на обычном джассе этот код больше и писать/читать его неудобно так что держи
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
наверно сам вар тупит
задолбался уже весь день сижу и никак не пойму где здесь ошибка?
иногда функция работает,но это только временно,
потом снова не берет забывает что ли? forgoup тупит по пойму...
но видимо у современных мапмейкеров использование мозга считается дурным тоном
ошибка во всём
начиная с неправильного использования условий триггера (вроде же задавал вопрос уже) и ненужны переменных
и заканчивая кучей параллельных таймеров
и у меня только один таймер
а про условие у меня там просто много проверяющих if GetSpellAbilityId() endif это просто я укоротил
Описание способности:
Выбирает всех союзных юнитов (кроме здания) в радиусе
900 от кастера
и добавляет способность которая удаляется спустя 6
секунд от всех выбранных юнитов
Отредактирован NekoriDes
Далее цикл, в нем просто
set u = FirstOfGroup(g)
Твои действия
Удаляешь юнита u из группы. И так до тех пор, пока не истечет таймер.
Весь триггер за тебя здесь вряд ли кто-то намерен писать.
просто я в нынешнем уровне не могу создать способность которая временно добавляет абилиту к группе юнитов и спустя некоторое время потом обратно их удаляет
вроде спелл очень легок в исполнении
жаль что я умею работать только одним targetom ) могу спокойно добавить способность одному конкретному юниту и спустя некоторое время удалить
но с группой такое не прокатишь разве что могу добавить способность и оставить т.е не удалять хаха
количество таймеров равно количесту юнитов которые попали под спелл
если 10 юнитов кастанут способность и вокруг каждого из них будет по 10 разных юнитов то вар вылетит нафиг
без таймера никак,
вот статьи в тему
https://xgm.guru/p/blog-nvc123/101422
ведь они создают примерно так же
т.е крепят юнита хэндлу таймера..,
Отредактирован nvc123
во многих нормальных картах сделано так как в статьях
Zeuz:
но на обычном джассе этот код больше и писать/читать его неудобно так что держи