Введение

Здесь мы создадим оружие, на основе эффекта User Data Effects, и обернём его в коллекцию данных (Data Collection) для более удобной настройки этого оружия.

В чем особенность этого оружия?

Данное оружие, которое я назвал Light Strike, поражает цель разрядом молнии, после чего от пораженной цели вылетают ещё

Что нам потребуется?

Создайте заранее все эти объекты данных:
  • Оружие для примера айди будет "LightStrike"
  • Эффекты
    • 1 эффект урона ID: LightStrike@Damage
    • 1 эффект Create Persistent ID: LightStrike@Delay
    • 1 эффект Search Area ID: LightStrike@Search
    • 2 эффекта Set ID: LightStrike@Set, LightStrike@Set1
    • 1 эффект User Data: ID: LightStrike@User
  • Акторы
    • 1 актор типа Action, созданный по родителю GenericAttack ID: LightStrike@Attack
    • 1 актор типа Beam, созданный по родителю Beam (Simple) ID: LightStrike@Beam
    • 1 Актор типа Site, созданный по родителю GenericAttackImpactSite (Чтобы найти этот актор в списке включите галочку Show Non-default) ID: LightStrike@Site
  • 1 модель типа Generic, созданная по родителю CModel ID: LightStrike@Model
  • 1 звук, созданный по родителю Combat ID: LightStrike@AttackImpact

Порядок действий

Логика оружия

Сперва настроим оружие.
  • Здесь настроим скорость атаки оружия в поле Period.
  • Дальность атаки в поле Range.
  • Укажем создаваемый эффект LightStrike@Set1 для цели этого оружия в поле Effect.
  • В поле Damage Display Effect укажем фактический эффект урона LightStrike@Damage для отображения справочной информации на панели информации о единице.
  • И последнее, в поле Marker - Match Flags поставим галку у id (это нам потребуется для понимания, на кого не стоит направлять следующие удар молнии за одну атаку)
XML код
<CWeaponLegacy id="LightStrike">
    <EditorCategories value="Race:Protoss"/>
    <DisplayEffect value="LightStrike@Damage"/>
    <Effect value="LightStrike@Set1"/>
    <Range value="9"/>
    <Marker>
        <MatchFlags index="Id" value="1"/>
    </Marker>
    <Period value="1.2"/>
</CWeaponLegacy>

Логика эффектов

  • В эффекте LightStrike@Set1 укажем в его поле Effect следующие эффекты обязательно в таком же порядке
    • LightStrike@Damage
    • LightStrike@Search
  • В эффекте LightStrike@Damage, можно настроить урон в поле Amount или любые другие параметры (например, добавить бонус по определенным атрибутам или сделать уроном по площади в поле Area)
  • В поле Areas эффекта LightStrike@Search добавим область радиусом Radius и максимальным количеством целей Maximum Count как 2. А также в Effect укажем эффект LightStrike@User.
  • Также в эффекте LightStrike@Search в его поле Exlude добавим значение и укажем его как Target
  • Ещё в поле Search Filters укажем необходимые фильтры цели, по которым будет разрешён отскок молний (Да-да именно отскок, а не возможность атаки впринципе)
  • И два последних действия что нам нужно сделать это в поле Launch Location указать значение на Target unit, а в поле Target sorts добавить два значения таких как TSMarker и TSRandom
Target sorts
Определяет последовательность перебора единиц в области данного эффекта, например при сортировке TSLife игра будет перебирать юнитов в области в порядке по количеству здоровья единиц от большего к меньшему, когда по умолчанию игра будет перебирать всех от центральной точки области.
TSRandom означает что игра будет перебирать единиц произвольно.

  • В эффекте LightStrike@User добавим максимальное число отскоков в поле ValidateMax
  • Также добавим валидатор NoMarkers в поле Validator, чтобы эффект не срабатывал на том, кого уже поражала молния за эту атаку.
  • А в поле EffectSuccess укажем эффект LightStrike@Set, который должен сработать если этот эффект User за данное применение оружия сработал менее ValidateMax раз
  • В эффекте LightStrike@Set в его поле Effects укажем следующие эффекты
    • LightStrike@Damage
    • LightStrike@Delay
  • В эффекте LightStrike@Delay в его поле Effect - Initial укажем эффект LightStrike@Search
  • В поле Initial Delay установим задержку между отскоками молнии, например в 0.1 секунды (не рекомендуется устанавливать значения 1 и выше, так как по каким-то причинам может вызывать визуальные баги)
  • В поле Location указать значение как Target unit
Код эффектов
    <CEffectSet id="LightStrike@Set1">
        <EditorCategories value="Race:Protoss"/>
        <EffectArray value="LightStrike@Damage"/>
        <EffectArray value="LightStrike@Search"/>
    </CEffectSet>
    <CEffectUserData id="LightStrike@User">
        <ValidatorArray value="noMarkers"/>
        <EditorCategories value="Race:Protoss"/>
        <ValidateMax value="100"/>
        <EffectSuccess value="LightStrike@Set"/>
    </CEffectUserData>
    <CEffectDamage id="LightStrike@Damage">
        <EditorCategories value="Race:Protoss"/>
        <Amount value="30"/>
    </CEffectDamage>
    <CEffectCreatePersistent id="LightStrike@Delay">
        <EditorCategories value="Race:Protoss"/>
        <WhichLocation Value="TargetUnit"/>
        <InitialDelay value="0.1"/>
        <InitialEffect value="LightStrike@Search"/>
    </CEffectCreatePersistent>
    <CEffectSet id="LightStrike@Set">
        <EditorCategories value="Race:Protoss"/>
        <EffectArray value="LightStrike@Damage"/>
        <EffectArray value="LightStrike@Delay"/>
    </CEffectSet>
    <CEffectEnumArea id="LightStrike@Search">
        <EditorCategories value="Race:Protoss"/>
        <LaunchLocation Value="TargetUnit"/>
        <ExcludeArray Value="Target"/>
        <SearchFilters value="Visible;Self,Player,Ally,Neutral,Missile,Dead,Hidden"/>
        <TargetSorts>
            <SortArray value="TSMarker"/>
            <SortArray value="TSRandom"/>
        </TargetSorts>
        <AreaArray MaxCount="2" Radius="2" Effect="LightStrike@User"/>
    </CEffectEnumArea>

Визуальная часть - Акторы

  • Для начала в акторе LightStrike@Attack зададим токен (это окно ниже окна со свойствами объекта), а конкретнее то в токен Attack Effect вставим эффект LightStrike@Damage
  • Далее в поле Beam Scope того же актора выберем значения Caster
  • В поле Beam, укажем актор LightStrike@Beam
  • В поле Impact Site, укажем актор LightStrike@Site
  • В поле Launch Request:
    • Actor укажем значение как Actor Find
    • Subject укажем как LightStrike@Site

  • В актор LightStrike@Beam а именно в его поле Model укажем модель LightStrike@Model
  • В поле Host Impact Site Ops добавим новое значение как SOpAttachHarness, а в поле Host Launch Site Ops добавим новое значение как SOpAttachCenter
Код Акторов
    <CActorBeamSimple id="LightStrike@Beam" parent="BeamSimpleAnimationStyleOneShot">
        <EditorCategories value=""/>
        <Model value="LightStrike@Model"/>
        <HostLaunchSiteOps Ops="SOpAttachCenter"/>
        <HostImpactSiteOps Ops="SOpAttachHarness"/>
    </CActorBeamSimple>
    <CActorAction id="LightStrike@Attack" parent="GenericAttack" effectAttack="LightStrike@Damage">
        <EditorCategories value=""/>
        <LaunchRequest Subject="LightStrike@Site" Actor="Find"/>
        <Beam value="LightStrike@Beam"/>
        <BeamScope value="Caster"/>
        <ImpactSite value="LightStrike@Site"/>
    </CActorAction>
    <CActorSite id="LightStrike@Site" parent="GenericAttackImpactSite">
        <EditorCategories value=""/>
    </CActorSite>

Модели и звуки

Насчёт модели LightStrike@Model и звука LightStrike@AttackImpact. Просто укажите в поле Model и Sound Assets желаемые модель луча и звуки попадания по цели соответственно. Тут ничего сложного. Если вы следовали рекомендуемым наименованиям ID, то редактор за вас сам подставит эти объекты в нужные поля актора, без вашего участия.

Оборачиваем получившиеся данные в Data Collection

Заходим в раздел "+" - Edit Game Data - Data Collections. Создаём новую дата коллекци (Точно также как например создавать новую единицу). Обязательно указываем ID как LightStrike (Если вы во всех объектах до этого перед "@" указывали что-то другое, то для ID коллекции указываем то, что вы указывали ранее в других объектах).
Далее выбираем нашу созданную коллекцию, и сверху во вкладке Data Collection нажимаем на пункт Auto Fill Data Collection. После чего у вас коллекция автоматически заполнится ранее созданными данными.
Далее переходим в раздел "+" - Edit Game Data - Data Collection Pattern
Здесь мы должны создать новый паттерн для коллекции. Назвать можете как хотите и айди тоже дайте какое хотите, главное вам нужно вставить этот код:
Код паттерна
        <Fields index="0" Reference="Weapon,^ParamId^,Name"/>
        <Fields Reference="Weapon,^ParamId^,Range"/>
        <Fields Reference="Effect,^ParamId^@Damage,Amount"/>
        <Fields Reference="Effect,^ParamId^@Search,AreaArray[0].Radius"/>
        <Fields Reference="Effect,^ParamId^@Search,AreaArray[0].MaxCount"/>
        <Fields Reference="Effect,^ParamId^@Delay,InitialDelay"/>
        <Fields Reference="Effect,^ParamId^@User,ValidateMax"/>
        <Fields Reference="Sound,^ParamId^@AttackImpact,AssetArray"/>
        <Fields Reference="Model,^ParamId^@Model,Model"/>
После этого в вашей дата коллекции, в поле Pattern указать ваш созданный паттерн коллекции.
После того как вы это сделаете, можете смело нажимать кнопку Упрощенный режим на верхней панели и удобно конфигурировать ваше созданное оружие.
`
ОЖИДАНИЕ РЕКЛАМЫ...