Как известно, у единиц есть разные виды голосов:
- Когда единица выделяется игроком (What)
- Когда единица получает приказ (Yes)
- Когда единица получает приказ атаковать другую единицу (Attack)
- Когда единица движется (Movement)
- Когда единицу закликивает игрок (Pissed)
И может замечали, но по умолчанию, когда единице отдаётся приказ "Атаковать" точку поверхности, а не какую-то конкретную цель, то воспроизводится звук "Yes". И возможно некоторым хотелось бы изменить это поведение.
Здесь показан очень простой и элегантный способ сделать так чтобы проигрывался звук атаки при атаке поверхности
Реализация
- Для этого нам нужно зайти в модуль триггеров
- Добавить новый триггер с событием Target Mode Updated в котором в качестве Ability Command указать способность как Attack
- Также добавим одну локальную переменную _unit типом Unit с указанным начальным значением как функция Unit From Unit Group, в которой в качестве группы единиц укажем функцию Selected Subgroup Units, уже в которой в качестве игрока укажем функцию Triggering Player
- В действиях добавим If Then Else в условии которого добавим новое условие сравнения первым значением которого будет функция Target Mode State, а вторым будет On
- В блоке Then добавьте действие Catalog Field Value Set, в котором:
- Каталог укажите как Actors
- Для Entry укажите функцию Unit Type Of Unit в которой в качестве единицы укажите нашу локальную переменную "_unit"
- Для FieldPath укажите поле SoundArray по scope как Unit (CActorUnit), укажите индекс на 4 (в поле SoundArray у актора под этим индексом находятся звуки атаки юнита)
- А в блоке Else тоже добавьте Catalog Field Value Set (Можно даже скопировать уже имеющийся) только в строковом значении укажите функцию Catalog Field Value Get, с теми же самыми параметрами Catalog, Entry, FieldPath как у Catalog Field Value Set, только игрока оставьте как Any Player
Код триггера в виде текста
Playing Attack Sounds Using Attack Towards
Events
UI -Player Any Player turns target mode Any for Attack
Local Variables
unit = (Unit 1 from (Selected subgroup of units for player (Triggering player))) <Unit>
Conditions
Actions
General -If (Conditions) then do (Actions) else do (Actions)
If
(Target Mode State) == On
Then
Catalog -Set value of Actors (Unit type of unit) SoundArray[4] for player (Triggering player) to ""
Else
Catalog -Set value of Actors (Unit type of unit) SoundArray[4] for player (Triggering player) to (Value of Actors (Unit type of unit) SoundArray[4] for player Any Player)

SC2







