- 25 Апр 2024
- 11
- 2
- Проект
- anton_box
Прикрепляю уже существующий гайд как добавить звук в код доты
В доте существует несколько вариантов вызова звука при каких либо условиях, в том числе при использовании абилки, я расскажу про главные
1. Самый первый и самый надежный вызов звука через слушатели
С помощью этого способа можно вызвать звук при использовании абилки, смерти юнита, героя, тавера и при любых других условиях для которых создан слушатель
Полный список событий, которые могут использоваться в слушателях тут
Познакомиться с основными слушателями и их функциями тут
1) Нужно создать слушателей для своих собственных целей, как пример я буду использовать слушатели для использования абилки и для смерти юнита (второе чуть чуть посложнее)
Открываем addon_game_mode и в функцию InitGameMode вставляем слушатель
(1 слушатель для абилок, 2 слушатель для смерти юнита)
2) Далее в этом же файле(для более продвинутых можно и в отдельном) пишем функцию которая будет вызывать наши "заданные функции"
Вторая и третья строчки помогут вам определить работает ваш слушатель или нет: вторая напишет вам в консоль всю информацию о кастованной абилке, а третья вынесет само название абилки
Четвертая - условие, в котором проверяется равенство вынесенного названия абилки и название абилки к которой вы хотите добавить звук. При положительном результате проверки указанный вами звук вызывается глобально(если хотите установить не глобальный вызов звука то пошарьтесь в Valve Api по этой ссылке)
А теперь код звука для убитого юнита
Вторая строчка помогает определить корректно ли работает слушатель, третья преобразовывает индекс убитого в название юнита, а четвертая его выводит в консоль, дабы вы смогли сверить. После чего условие при котором как и в прошлом примере вызывается ваш звук
ПРИМЕЧАНИЕ: Да, кому то это может показаться костылем, каждый раз писать условие для вызова звука, НО хочу отметить, что во многих старых исходниках от стандартных вольве скиллов не работают функции связанные с EmitSound
2. В исходном Lua коде для абилки можно указать ее звук
Не знаю по какой, но по какой то причине данная вариация кода не всегда работает для вольво или даже кастомных скиллов
3. Через (о нет) datadriven
Хоть datadriven и является вымирающим способом для создания кастомных скиллов по причине своей громоздкости и неудобности, но вызов звуков через него наиудобнейший: надежность и малое количество кода, да и не надо даже открывать Lua файлы
4. Собственно для чего и создавался данный гайд(OnAbilityPhaseStart), я обрыскал много гайдов и исходников в поисках этой функции и ничего не нашел, на Valve API особых надежд не было по причине большого количества устаревшего функционала там, что потом оказалось было зря. Вызов звука в начале подготовки каста абилки("AbilityCastPoint") как это реализовано в реквиеме сфа, эпицентре сенд кинга и в подобных им скиллах
1) Открываем исходный код Lua вашей абилки
2) Кодим функцию которая будет вызывать наш звук
Как ни странно с этой функцией вызов звука в Lua коде работает исправно, но буквально в этом же скиле в функции OnSpellStart у меня не получилось вызвать звук))) Именно поэтому считаю, что вызов звука через слушателя всегда будет надёжнее
В доте существует несколько вариантов вызова звука при каких либо условиях, в том числе при использовании абилки, я расскажу про главные
1. Самый первый и самый надежный вызов звука через слушатели
С помощью этого способа можно вызвать звук при использовании абилки, смерти юнита, героя, тавера и при любых других условиях для которых создан слушатель
Полный список событий, которые могут использоваться в слушателях тут
Познакомиться с основными слушателями и их функциями тут
1) Нужно создать слушателей для своих собственных целей, как пример я буду использовать слушатели для использования абилки и для смерти юнита (второе чуть чуть посложнее)
Открываем addon_game_mode и в функцию InitGameMode вставляем слушатель
Lua:
function AddonGameMode:InitGameMode()
ListenToGameEvent("dota_player_used_ability", Dynamic_Wrap(self, "abilka"), self)
ListenToGameEvent("entity_killed", Dynamic_Wrap(self, "kill"), self)
end
Lua:
function AddonGameMode:abilka(data)
DeepPrintTable(data)
print(data.abilityname)
if data.abilityname == "НАЗВАНИЕ ВАШЕЙ АБИЛКИ" then
EmitGlobalSound("НАЗВАНИЕ ВАШЕГО ЗВУКА")
end
end
Четвертая - условие, в котором проверяется равенство вынесенного названия абилки и название абилки к которой вы хотите добавить звук. При положительном результате проверки указанный вами звук вызывается глобально(если хотите установить не глобальный вызов звука то пошарьтесь в Valve Api по этой ссылке)
А теперь код звука для убитого юнита
Lua:
function AddonGameMode:kill(data1)
DeepPrintTable(data1)
local entity = EntIndexToHScript(data1.entindex_killed):GetUnitName()
print(entity)
if entity == "НАЗВАНИЕ ВАШЕГО ЮНИТА" then
EmitGlobalSound("НАВЗАНИЕ ВАШЕГО ЗВУКА")
end
end
2. В исходном Lua коде для абилки можно указать ее звук
Lua:
AbilityName = class({})
function AbilityName:OnSpellStart()
EmitGlobalSound("SoundName")
end
Код:
"OnSpellStart"
{
"FireSound"
{
"EffectName" "SoundName"
"Target" "CASTER"
}
}
1) Открываем исходный код Lua вашей абилки
2) Кодим функцию которая будет вызывать наш звук
Lua:
AbilityName = class({})
function AbilityName:OnAbilityPhaseStart()
EmitGlobalSound("SoundName")
end
Последнее редактирование: