LinkLuaModifier("modifier_chaos_knight_taunt", "heroes/hero_tangin/iron_curtain", LUA_MODIFIER_MOTION_NONE)
chaos_knight_taunt = class({})
function chaos_knight_taunt:OnSpellStart()
local caster = self:GetCaster()
local duration = self:GetSpecialValueFor("duration")
EmitSoundOn("chaos_knight_taunt", caster)
caster:AddNewModifier(caster, self, "modifier_chaos_knight_taunt", {duration = duration})
caster:StartGestureWithPlaybackRate(ACT_DOTA_TAUNT, 1)
end
modifier_chaos_knight_taunt = class({
IsHidden = function(self) return false end,
IsPurgable = function(self) return false end,
IsDebuff = function(self) return false end,
IsBuff = function(self) return true end,
RemoveOnDeath = function(self) return false end,
DeclareFunctions = function(self) return
{
MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS,
} end,
})
function modifier_chaos_knight_taunt:GetActivityTranslationModifiers()
return "ck_gesture"
end
Спасибо большое, а подскажи, пожалуйста, где это писать? Мне показалось, или нужно сначала скил написать, который будет работать от этого луа?Насмешка в доте это анимация + допольнитый модифаер активити.
Вот примец для Chaos Knight
Код:LinkLuaModifier("modifier_chaos_knight_taunt", "heroes/hero_tangin/iron_curtain", LUA_MODIFIER_MOTION_NONE) chaos_knight_taunt = class({}) function chaos_knight_taunt:OnSpellStart() local caster = self:GetCaster() local duration = self:GetSpecialValueFor("duration") EmitSoundOn("chaos_knight_taunt", caster) caster:AddNewModifier(caster, self, "modifier_chaos_knight_taunt", {duration = duration}) caster:StartGestureWithPlaybackRate(ACT_DOTA_TAUNT, 1) end modifier_chaos_knight_taunt = class({ IsHidden = function(self) return false end, IsPurgable = function(self) return false end, IsDebuff = function(self) return false end, IsBuff = function(self) return true end, RemoveOnDeath = function(self) return false end, DeclareFunctions = function(self) return { MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS, } end, }) function modifier_chaos_knight_taunt:GetActivityTranslationModifiers() return "ck_gesture" end
Если не сложно, напиши, пожалуйста, один любой готовый пример, я сам смогу его разобрать. Просто сейчас пытался сам это написать, ничего не работает. Очень тебя прошу помочьСделай сначала как скил, нажимаешь и он проигрывается.
Когда поймешь принцип работы, то можешь оформить в виде чистого модифаера просто накидывая его
Чтобы использовать эту насмешку в кастомной игре, вы должны добавить этот код в файл с описанием героя Tinker в вашем проекте Dota 2. Имеется ввиду npc_heroes файл?Делаешь модификатор скрытый даешь его герою которому надо дать насмешку
В модификаторе у тебя главное это анимация ACT_DOTA_TAUNT и EmitSoundOn звук насмешки
Он также определяет функцию "GetActivityTranslationModifiers", которая возвращает строку "ck_gesture". Это позволяет использовать насмешки на героях Chaos Knight.
Конечно! Вот пример кода для добавления насмешки для героя Tinker:
LinkLuaModifier("modifier_tinker_taunt", "heroes/hero_tangin/iron_curtain", LUA_MODIFIER_MOTION_NONE)
tinker_taunt = class({})
function tinker_taunt:OnSpellStart()
local caster = self:GetCaster()
local duration = self:GetSpecialValueFor("duration")
EmitSoundOn("tinker_taunt", caster)
caster:AddNewModifier(caster, self, "modifier_tinker_taunt", {duration = duration})
caster:StartGestureWithPlaybackRate(ACT_DOTA_TAUNT, 1)
end
modifier_tinker_taunt = class({
IsHidden = function(self) return false end,
IsPurgable = function(self) return false end,
IsDebuff = function(self) return false end,
IsBuff = function(self) return true end,
RemoveOnDeath = function(self) return false end,
DeclareFunctions = function(self) return
{
MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS,
} end,
})
function modifier_tinker_taunt:GetActivityTranslationModifiers()
return "tinker_gesture"
end
В этом коде мы создаем новый класс "tinker_taunt" для нашей насмешки Tinker. Он имеет те же функции, что и класс "chaos_knight_taunt", но с звуком "tinker_taunt" и строкой "tinker_gesture" для насмешки Tinker.
Чтобы использовать эту насмешку в кастомной игре, вы должны добавить этот код в файл с описанием героя Tinker в вашем проекте Dota 2. Затем вы можете использовать эту насмешку, активируя способность "tinker_taunt" для героя Tinker.
Человек, как ты выдаешь способности блять героям - насмешка это скрытая способность-модификатор зачем у меня спрашивать - как выдать способностьЧтобы использовать эту насмешку в кастомной игре, вы должны добавить этот код в файл с описанием героя Tinker в вашем проекте Dota 2. Имеется ввиду npc_heroes файл?
Мне 2 способ тоже больше нравится. Если не сложно, подскажи, пожалуйста, как это сделатьЧеловек, как ты выдаешь способности блять героям - насмешка это скрытая способность-модификатор зачем у меня спрашивать - как выдать способность
2 пути
1) через txt
2) через lua при спавне определенного героя
2 - более эффективный и не затратный по времени
-- Привязываем функцию к событию появления героя
ListenToGameEvent("npc_spawned", OnHeroSpawned, nil)
function OnHeroSpawned(keys)
local hero = EntIndexToHScript(keys.entindex)
print("Сущность заспавнилась в мире")
-- Проверяем, является ли герой Bloodseeker
if hero:GetUnitName() == "npc_dota_hero_bloodseeker" then
print(hero:GetUnitName() .. " заспавнился в мире")
-- Ищем + подключаем без npc_abilities_custom.txt - lua модификатор
LinkLuaModifier("modifier_bloodseeker_taunt", "heroes/hero_bloodseeker/bloodseeker_taunt", LUA_MODIFIER_MOTION_NONE)
print("Нашли модификатор его насмешки")
-- Выдаем скрытый модификатор герою
hero:AddNewModifier(hero, nil, "modifier_bloodseeker_taunt", {})
print("Выдали модификатор его насмешки")
end
end
LinkLuaModifier("modifier_bloodseeker_taunt", "heroes/hero_bloodseeker/bloodseeker_taunt", LUA_MODIFIER_MOTION_NONE)
bloodseeker_taunt = class({})
function bloodseeker_taunt:OnSpellStart()
local caster = self:GetCaster()
local duration = self:GetSpecialValueFor("duration")
EmitSoundOn("bloodseeker_taunt", caster)
caster:AddNewModifier(caster, self, "modifier_bloodseeker_taunt", {duration = duration})
caster:StartGestureWithPlaybackRate(ACT_DOTA_TAUNT, 1)
end
modifier_bloodseeker_taunt = class({
IsHidden = function(self) return true end,
IsPurgable = function(self) return false end,
IsDebuff = function(self) return false end,
IsBuff = function(self) return true end,
RemoveOnDeath = function(self) return false end,
DeclareFunctions = function(self) return
{
MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS,
} end,
})
function modifier_bloodseeker_taunt:GetActivityTranslationModifiers()
return "bloodseeker_gesture"
end
function OnHeroSpawned(keys)
local hero = EntIndexToHScript(keys.entindex)
print("Сущность заспавнилась в мире")
local taunts = require("taunts")(hero)
end
return function(hero)
-- Проверка героя
if hero:GetUnitName() == "npc_dota_hero_bloodseeker" then
print(hero:GetUnitName() .. " заспавнился в мире")
-- Ищем + подключаем без txt - lua модификатор
LinkLuaModifier("modifier_bloodseeker_taunt", "heroes/hero_bloodseeker/bloodseeker_taunt", LUA_MODIFIER_MOTION_NONE)
print("Нашли модификатор его насмешки")
-- Выдаем скрытый модификатор герою
hero:AddNewModifier(hero, nil, "modifier_bloodseeker_taunt", {})
print("Выдали модификатор его насмешки")
end
-- Сюда другие if
end

В общем я хотел, чтобы насмешка проигрывалась сама, при убийстве героя и сделал вот так простоХуй знает в общем я не нашел инфы которая отслеживает нажатие ебучей насмешки в доте - именно кнопка указанная в настройках Посмотреть вложение 1962
Отдельным спелом - работает ибо вызывается OnSpellStart(), а как её линкануть к кнопке насмешки уж соре моего опыта и способностей недостаточно
Ибо даже через отлов приказов https://customgames.ru/forum/threads/Гайд-barebones-Отлов-приказов.178/
DOTA_UNIT_ORDER_TAUNT = 22, я не могу увидеть действие - что при нажатии - как у меня выставлена 0, что-то происходило в консоли
вот и, что оно не работает по моей задумкиПотому-что надо накладывать модификатор при спавне, а OnSpellStart() в модификаторе воспроизводить при убийствеВ общем я хотел, чтобы насмешка проигрывалась сама, при убийстве героя и сделал вот так просто Посмотреть вложение 1963 вот и, что оно не работает по моей задумки
А как в OnSpellStart() воспроизводить модификатор?Потому-что надо накладывать модификатор при спавне, а OnSpellStart() в модификаторе воспроизводить при убийстве
LinkLuaModifier("modifier_chaos_knight_taunt", "heroes/hero_chaos_knight/chaos_knight_taunt", LUA_MODIFIER_MOTION_NONE)
chaos_knight_taunt = class({})
modifier_chaos_knight_taunt = class({
IsHidden = function(self) return true end,
IsPurgable = function(self) return false end,
IsDebuff = function(self) return false end,
IsBuff = function(self) return true end,
RemoveOnDeath = function(self) return false end,
DeclareFunctions = function(self) return
{
MODIFIER_PROPERTY_TRANSLATE_ACTIVITY_MODIFIERS,
} end,
})
function modifier_chaos_knight_taunt:GetActivityTranslationModifiers()
return "ck_gesture"
end
function OnHeroSpawned(keys)
local hero = EntIndexToHScript(keys.entindex)
print("Сущность заспавнилась в мире")
local taunts = require("taunts")(hero)
end
return function(hero)
if hero:GetUnitName() == "npc_dota_hero_chaos_knight" then
print(hero:GetUnitName() .. " заспавнился в мире")
-- Ищем + подключаем без txt - lua модификатор
LinkLuaModifier("modifier_chaos_knight_taunt", "heroes/hero_chaos_knight/chaos_knight_taunt", LUA_MODIFIER_MOTION_NONE)
print("Нашли модификатор его насмешки")
-- Выдаем скрытый модификатор герою
hero:AddNewModifier(hero, nil, "modifier_chaos_knight_taunt", {})
print("Выдали модификатор его насмешки")
end
end
-- Обработчик события убийств
function OnEntityKilled(event)
local killedUnit = EntIndexToHScript(event.entindex_killed)
local killerEntity = nil
if event.entindex_attacker then
killerEntity = EntIndexToHScript(event.entindex_attacker)
end
if killedUnit:IsRealHero() and (killedUnit:IsOwnedByAnyPlayer() or not killedUnit:IsOwnedByAnyPlayer()) then
-- Герой был убит
local killers_taunts = require("killers_taunts")(killerEntity)
end
end
return function(killerEntity)
if killerEntity:GetUnitName() == "npc_dota_hero_chaos_knight" then
EmitSoundOn("chaos_knight_taunt", killerEntity)
killerEntity:StartGestureWithPlaybackRate(ACT_DOTA_TAUNT, 1)
end
end