Как известно, у единиц есть разные виды голосов:
  • Когда единица выделяется игроком (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)
`
ОЖИДАНИЕ РЕКЛАМЫ...