Повышает скорость атаки и передвижения союзника на 50%. Действует в течение 10 секунд

Способность из кампании Legacy of The Void. Принадлежит одной из вариации Часового протоссов, а именно Заряжателю чистильшиков.
Для корректной работы требует только подключенную к карте стандартную модификацию 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)

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>
`
ОЖИДАНИЕ РЕКЛАМЫ...