Введение
Здесь мы создадим оружие, на основе эффекта 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 (это нам потребуется для понимания, на кого не стоит направлять следующие удар молнии за одну атаку)
Логика эффектов
- В эффекте 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 означает что игра будет перебирать единиц произвольно.
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 указать ваш созданный паттерн коллекции.
После того как вы это сделаете, можете смело нажимать кнопку Упрощенный режим на верхней панели и удобно конфигурировать ваше созданное оружие.
После того как вы это сделаете, можете смело нажимать кнопку Упрощенный режим на верхней панели и удобно конфигурировать ваше созданное оружие.