Повышает скорость атаки и передвижения союзника на 50%. Действует в течение 10 секунд
Способность из кампании Legacy of The Void. Принадлежит одной из вариации Часового протоссов, а именно Заряжателю чистильшиков.
Для корректной работы требует только подключенную к карте стандартную модификацию Liberty.SC2Mod
Для корректной работы требует только подключенную к карте стандартную модификацию Liberty.SC2Mod
Видеодемонстрация
После активации
Здесь после активации срабатывает эффект Energizer_ChronoBeam@Beam, являющийся типом Create Persistent. Это нужно для актора жёлтого луча, создаваемый при касте способности, так как этот луч должен существовать около 1 секунды.
- В нём указан InitialDelay как 1 секунда. Это значит что эффект, указанный в InitialEffect сработает сразу же, а через эту 1 секунду, эффект только завершит своё выполнение, отправив в систему акторов сигнал Effect.Energizer_ChronoBeam@Beam.Stop о своём завершении. На такое событие подвязано уничтожение актора луча.
- Этот эффект после активации активирует другой эффект Energizer_ChronoBeam@AB, который как раз накладывает бафф на скорость атаки к цели.
Target Sorts
Также тут используется нестандартная сортировка целей для поиска цели к а
Что по акторам?
С ними таки всё очень просто... Есть актор типа модель Energizer_ChronoBeam@Impact, который отображает эту вращающуюся оранжевую модель на цели.
Он создаётся когда бафф на ускорение включается на юните, а когда отключается то уничтожается.
<On Terms="Behavior.Energizer_ChronoBeam.On" Send="Create"/>
<On Terms="Behavior.Energizer_ChronoBeam.Off" Send="AnimBracketStop BSD"/>
Хотя тут и написано не уничтожение, а некая остановка анимации BSD. Это потому что, запуск этой анимации определен в родителе актора ModelAnimationStyleContinuous, и там же указано, что после остановки такой анимации актор уничтожится.
Так и получается, что мы здесь завершаем анимацию, а уже событие из родителя, после завершения ломает этот актор.
Со звуком Energizer_ChronoBeam@SoundStart, всё ещё проще.
Здесь событие, что когда эффект способности стартует, тогда создаётся этот актор. А при создании, такой актор проигрывает свой звук (который указан в его поле Sound, но здесь он не указан, потому что он автоматически туда подставляется по одинаковому ID)
Здесь событие, что когда эффект способности стартует, тогда создаётся этот актор. А при создании, такой актор проигрывает свой звук (который указан в его поле Sound, но здесь он не указан, потому что он автоматически туда подставляется по одинаковому ID)
XML-Код
<CButton id="Energizer_ChronoBeam">
<Icon value="Assets\Textures\btn-ability-protoss-chronobeam.dds"/>
</CButton>
<CAbilEffectTarget id="Energizer_ChronoBeam">
<EditorCategories value="AbilityorEffectType:Units"/>
<CmdButtonArray index="Execute" DefaultButtonFace="Energizer_ChronoBeam"/>
<Range value="8"/>
<Arc value="4.9987"/>
<Effect index="0" value="Energizer_ChronoBeam@Beam"/>
<Flags index="AutoCast" value="1"/>
<Flags index="AutoCastOn" value="1"/>
<Flags index="Smart" value="1"/>
<TargetFilters value="Visible;Self,Neutral,Enemy,Structure,Heroic,Missile,Item,Uncommandable,Stasis,Dead,Hidden"/>
<AutoCastFilters value="Visible;Self,Neutral,Enemy,Structure,Missile,Item,Uncommandable,Stasis,Dead,Hidden"/>
<AutoCastRange value="8"/>
<AutoCastValidatorArray value="TargetIsFiringWeapon"/>
<AutoCastValidatorArray value="Energizer_ChronoBeam@Exlusion"/>
<TargetSorts RequestCount="1">
<SortArray value="Energizer_ChronoBeam"/>
</TargetSorts>
<Cost>
<Vital index="Energy" value="3"/>
</Cost>
</CAbilEffectTarget>
<CEffectCreatePersistent id="Energizer_ChronoBeam@Beam">
<EditorCategories value="Race:Purifier"/>
<WhichLocation Value="TargetUnit"/>
<InitialDelay value="1"/>
<InitialEffect value="Energizer_ChronoBeam@AB"/>
<Flags index="Channeled" value="1"/>
<ValidatorArray value="Energizer_ChronoBeam@NotChrono"/>
</CEffectCreatePersistent>
<CEffectApplyBehavior id="Energizer_ChronoBeam@AB">
<EditorCategories value="Race:Purifier"/>
<Behavior value="Energizer_ChronoBeam"/>
</CEffectApplyBehavior>
<CBehaviorBuff id="Energizer_ChronoBeam">
<EditorCategories value="Race:Purifier"/>
<Duration value="10"/>
<Modification AdditiveMoveSpeedFactor="0.5" AdditiveAttackSpeedFactor="0.5"/>
<Alignment value="Positive"/>
<InfoIcon value="Assets\Textures\btn-ability-protoss-chronobeam.dds"/>
</CBehaviorBuff>
<CActorBeamSimple id="Energizer_ChronoBeam@Beam" parent="BeamSimpleAnimationStyleContinuous">
<On Terms="Effect.Energizer_ChronoBeam@Beam.Start" Send="Create"/>
<On Terms="Effect.Energizer_ChronoBeam@Beam.Stop" Send="AnimBracketStop BSD"/>
<HostForProps Subject="_Unit" Scope="Caster" Actor="Find"/>
<HostLaunch Subject="_Unit" Scope="Caster" Actor="Find"/>
<HostImpact Subject="_Unit" Scope="Target" Actor="Find"/>
<HostLaunchSiteOps Ops="SOpAttachCenter"/>
<HostImpactSiteOps Ops="SOpAttachCenter"/>
<Inherits index="Visibility" value="1"/>
<ModelFlags index="AutomateGlobalLoops" value="1"/>
</CActorBeamSimple>
<CActorModel id="Energizer_ChronoBeam@Impact" parent="ModelAnimationStyleContinuous">
<On Terms="Behavior.Energizer_ChronoBeam.On" Send="Create"/>
<On Terms="Behavior.Energizer_ChronoBeam.Off" Send="AnimBracketStop BSD"/>
<AutoScaleFactor value="0.600000"/>
<Host Subject="_Unit"/>
<HostSiteOps Ops="SOpAttachCenter"/>
<ModelFlags index="AllowHitTest" value="0"/>
<ModelFlags index="AutomateGlobalLoops" value="1"/>
</CActorModel>
<CActorSound id="Energizer_ChronoBeam@SoundStart" parent="SoundOneShot">
<On Terms="Effect.Energizer_ChronoBeam@Beam.Start; At Target" Send="Create"/>
<On Terms="ActorOrphan" Send="Destroy"/>
<Host Subject="_Selectable"/>
<HostSiteOps Ops="SOpAttachOverhead"/>
</CActorSound>
<CModel id="Energizer_ChronoBeam@Beam" parent="PersistentSpellFX">
<EditorCategories value="Race:Purifier"/>
<Model value="Assets\Effects\Protoss\Sentry_Purifier_ChronoBeam\Sentry_Purifier_ChronoBeam.m3"/>
</CModel>
<CModel id="Energizer_ChronoBeam@Impact" parent="PersistentSpellFX">
<EditorCategories value="Race:Purifier"/>
<Model value="Assets\Effects\Protoss\Sentry_Purifier_ChronoBeam_Impact\Sentry_Purifier_ChronoBeam_Impact.m3"/>
</CModel>
<CSound id="Energizer_ChronoBeam@SoundStart" parent="Spell">
<EditorCategories value="Race:Purifier"/>
<AssetArray File="Assets\Sounds\SentryPurifier_ChronoBeam_01.wav" FacialGroup=""/>
<AssetArray File="Assets\Sounds\SentryPurifier_ChronoBeam_02.wav" FacialGroup=""/>
<AssetArray File="Assets\Sounds\SentryPurifier_ChronoBeam_03.wav" FacialGroup=""/>
<AssetArray File="Assets\Sounds\SentryPurifier_ChronoBeam_04.wav" FacialGroup=""/>
<AssetArray File="Assets\Sounds\SentryPurifier_ChronoBeam_05.wav" FacialGroup=""/>
<Pitch value="-1.000000,0.000000"/>
<Volume value="-3.000000,-1.000000"/>
</CSound>
<CTargetSortBehaviorCount id="Energizer_ChronoBeam">
<WhichUnit Value="Target"/>
<Behavior value="Energizer_ChronoBeam"/>
</CTargetSortBehaviorCount>
<CValidatorCombine id="Energizer_ChronoBeam@Exlusion" parent="PersistentSpellFX">
<Type value="And"/>
<CombineArray value="Energizer_ChronoBeam@NotChrono"/>
</CValidatorCombine>
<CValidatorUnitCompareBehaviorCount id="Energizer_ChronoBeam@NotChrono">
<Behavior value="Energizer_ChronoBeam"/>
<Compare value="LT"/>
<Value value="1"/>
</CValidatorUnitCompareBehaviorCount>
SC2







