Раздел:
Триггеры и объекты
Каст каждой способность регистрируется в след порядке:
CHANNEL -> CAST -> EFFECT -> FINISH -> ENDCAST
Так это выглядит в коде:
EVENT_PLAYER_UNIT_SPELL_CHANNEL
EVENT_PLAYER_UNIT_SPELL_CAST
EVENT_PLAYER_UNIT_SPELL_EFFECT
EVENT_PLAYER_UNIT_SPELL_FINISH
EVENT_PLAYER_UNIT_SPELL_ENDCAST
В Редакторе Триггеров WE на RU это выглядит так:
Подробный расклад:
Есть некоторые исключения в виде способностей Огненный столб и Буран. У них Время подготовки заклинания срабатывает после события SPELL EFFECT (т.е. как у Канал ANcl Следовать в течение времени), а у способности Буран значение из этого поля ещё влияет на интервал между волнами…
Все, я, конечно не проверял, да и кому это нужно, советую все свои абилки делать на основе Канал ANcl.
Теперь самый главный вопрос, ради которого мы тут собрались — как сделать у каждой способности свой уникальный по длительности Cast Point?
Прежде всего скажу для чего это нужно:
При касте способности герой/юнит воспроизводит определённую анимацию, и чтобы всё смотрелось красиво, нам необходимо иметь возможность настраивать время каста.
Например, нам нужно чтобы герой при помощи способности бросал в указанную цель молот, т.е. во время каста его модель применяет анимацию броска и молот вылетает в момент когда герой вытянул руку вперёд, после чего анимация продолжается — герой возвращает руку назад и становится в обычное положение (это Cast Backswing).
А также делать отмену каста через приказ Отставить и всё такое.
Теперь, когда мы разобрались что к чему, отвечаю на главный вопрос:
Менять каст поинт у абилок мы будем через изменение полей у героя/юнита UNIT_RF_CAST_POINT и UNIT_RF_CAST_BACK_SWING через действие BlzSetUnitRealField.
Да, вот так это работает, только менять их нужно предварительно перед появлением у героя/юнита абилки, после чего значение закрепляется за абилкой и мы кайфуем.
Изменение полей у героя/юнита никак не влияет на уже существующие у него абилки.
Но сложностей в этом никаких нет — мы можем удалить абилку, изменить поля, а затем добавить сразу точно такую же абилку.
Вот триггер пример изменения Cast Point и Cast Backswing способностей у героев при их изучении:
function SetUnitAbilityCptNCbsw takes unit whichUnit, integer abilityId returns nothing
	if abilityId == 'AHtc' then
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_POINT, 0.666 )
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_BACK_SWING, 1.000 )
	elseif abilityId == 'AHtb' then
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_POINT, 0.750 )
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_BACK_SWING, 0.700 )
	elseif abilityId == 'AHbn' then
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_POINT, 1.300 )
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_BACK_SWING, 0.700 )
	elseif abilityId == 'ANcl' then
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_POINT, 0.100 )
		call BlzSetUnitRealField( whichUnit, UNIT_RF_CAST_BACK_SWING, 0.100 )
	endif
endfunction

function Trig_LearnedSkill_Actions takes nothing returns nothing
	if GetLearnedSkillLevel() == 1 then
		call UnitRemoveAbility(GetLearningUnit(), GetLearnedSkill())
		call SetUnitAbilityCptNCbsw(GetLearningUnit(), GetLearnedSkill())
		call UnitAddAbility(GetLearningUnit(), GetLearnedSkill())
	endif
endfunction

//===========================================================================
function InitTrig_LearnedSkill takes nothing returns nothing
    set gg_trg_LearnedSkill = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_LearnedSkill, EVENT_PLAYER_HERO_SKILL )
    call TriggerAddAction( gg_trg_LearnedSkill, function Trig_LearnedSkill_Actions )
endfunction
Разный cast point/backswing в действии:
Способности:
Удар Грома
Молот Бурь
Изгнание в астрал
Канал
в примере у всех абилок Время подготовки заклинания = 0.00 сек
Канал — Следовать в течение времени = 6.00 сек
использованы в примере:
Моделька героя
Моделька снаряда
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
6
9 месяцев назад
1
Спасибо за статью.
1
19
9 месяцев назад
1
Нормально так 2 поста выложили, интересная статья, лайк
1
10
9 месяцев назад
1
Годно, сразу вспомнил про свой вопрос давний, а потом посмотрел - ты ответил в нём теперь . Лучше поздно чем никогда :)
1
27
9 месяцев назад
1
Круто, тоже писал и разбирал в своем блоге для чего дали эти все события. У вас это выглядит лучше. Правда, это только для канала.
Да, вот так это работает, только менять их нужно предварительно перед появлением у героя/юнита абилки, после чего значение закрепляется за абилкой и мы кайфуем.
Интересно. Еще одна хитрость
0
22
9 месяцев назад
0
Darkmen500, пожалуйста )
ImNoobTarenas, это потому что ссылку поменял после появилось как 2 )
EviLInside, конечно, я помню про то, что отвечал на данную тему в прошлый раз ) тема с кастами абилок меня самого интересует ещё очень давно, а тут такая находка, из-за которой и образовалась статья ) просто карту какую-либо я уже вряд ли сделаю когда-либо, потому что мне это уже не особо нужно, но иногда я ковыряю варик и решил поделиться инфой
МрачныйВорон, это благословение от варика, как много нам ещё предстоит узнать, как глубоки его тайны! 😂
1
3
9 месяцев назад
1
День добрый!) Очень круто) у меня есть мысль как можно применить эту статью в моей личной практике) но! Можно вас пожалуйста попросить выложить ещё один скрин соотношения как выглядит триггер на русском и английском (именно в редакторе триллеров)
Заранее спасибо!)))
1
2
9 месяцев назад
1
Очень полезная статья, мне бы её год назад :).
0
22
9 месяцев назад
0
komarovba, мне надо немного дополнить статью и скрин приложу думаю
редакторе триллеров
😏🙃
Fen1, мне бы её лет 15 назад )
2
15
7 месяцев назад
2
Полезная статья, благодарю!
0
22
5 месяцев назад
0
Meddin, пожалуйста )

блин надо подредактировать статью, всё никак не соберусь )
Чтобы оставить комментарий, пожалуйста, войдите на сайт.