Особенности:
Атака по существам дает временную ловкость за удар (стак) 0.1/0.2/0.5/1.0 (меняется в файле npc_abilities_custom - creep_agi_gain)
Временная ловкость от атаки по существам исчезает с героя (секунды) 60/90/120/150 (меняется в файле npc_abilities_custom - duration_creep)
Постоянный бонус к ловкости от убийства существ (не героев) 1/2/3/4 (меняется в файле npc_abilities_custom - buffalltime_creep)
Атака по героям дает временную ловкость за удар (стак) 3.0/9.0/15.0/21.0 (меняется в файле npc_abilities_custom - agi_gain)
Временная ловкость от атаки по героям исчезает с героя (секунды) 120/160/200/240 (меняется в файле npc_abilities_custom - duration)
Постоянный бонус к ловкости от убийства героев (не существ) 1/3/5/7 (меняется в файле npc_abilities_custom - buffalltime)
Дебафф крадущий атрибуты на героях за удар (стак) 1.0/3.0/5.0/7.0 (меняется в файле npc_abilities_custom - stat_loss)
Все временные сбрасываются при смерти или по окончанию таймера, постоянные остаются всегда.
Атака по существам дает временную ловкость за удар (стак) 0.1/0.2/0.5/1.0 (меняется в файле npc_abilities_custom - creep_agi_gain)
Временная ловкость от атаки по существам исчезает с героя (секунды) 60/90/120/150 (меняется в файле npc_abilities_custom - duration_creep)
Постоянный бонус к ловкости от убийства существ (не героев) 1/2/3/4 (меняется в файле npc_abilities_custom - buffalltime_creep)
Атака по героям дает временную ловкость за удар (стак) 3.0/9.0/15.0/21.0 (меняется в файле npc_abilities_custom - agi_gain)
Временная ловкость от атаки по героям исчезает с героя (секунды) 120/160/200/240 (меняется в файле npc_abilities_custom - duration)
Постоянный бонус к ловкости от убийства героев (не существ) 1/3/5/7 (меняется в файле npc_abilities_custom - buffalltime)
Дебафф крадущий атрибуты на героях за удар (стак) 1.0/3.0/5.0/7.0 (меняется в файле npc_abilities_custom - stat_loss)
Все временные сбрасываются при смерти или по окончанию таймера, постоянные остаются всегда.
Lua:
LinkLuaModifier('modifier_slark_essence_shift_lua', 'heroes/slarkich/slark_essence_shift_lua', LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier('modifier_slark_essence_shift_buff_custom', 'heroes/slarkich/modifier_slark_essence_shift_buff_custom', LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier('modifier_slark_essence_shift_debuff_custom', 'heroes/slarkich/modifier_slark_essence_shift_debuff_custom', LUA_MODIFIER_MOTION_NONE)
slark_essence_shift_lua = class({})
function slark_essence_shift_lua:GetIntrinsicModifierName()
return 'modifier_slark_essence_shift_lua'
end
modifier_slark_essence_shift_lua = class({})
function modifier_slark_essence_shift_lua:IsHidden()
return self:GetStackCount() == 0
end
function modifier_slark_essence_shift_lua:IsDebuff() return false end
function modifier_slark_essence_shift_lua:IsPurgable() return false end
function modifier_slark_essence_shift_lua:DeclareFunctions()
if self:GetParent():IsIllusion() then return end
local funcs = {
MODIFIER_PROPERTY_PROCATTACK_FEEDBACK,
MODIFIER_EVENT_ON_DEATH,
MODIFIER_PROPERTY_STATS_AGILITY_BONUS
}
return funcs
end
function modifier_slark_essence_shift_lua:OnRefresh(keys)
self.parent = self:GetParent()
self.ability = self:GetAbility()
self.creep_agi_gain = self.ability:GetSpecialValueFor('creep_agi_gain')
end
-- Удаляем временный бафф с атаки по крипам/героям если мы сдохли
function modifier_slark_essence_shift_lua:OnDestroy()
if self.hero_modifier and not self.hero_modifier:IsNull() then self.hero_modifier:Destroy() end
end
function modifier_slark_essence_shift_lua:OnDeath(keys)
local unit = keys.unit
if unit == self.parent then
self:SetStackCount(0)
return
end
if unit:IsIllusion() then return end
local modifier = unit:FindModifierByName("modifier_slark_essence_shift_debuff_custom")
if modifier and modifier:GetCaster() == self.parent and (self.parent == keys.attacker or unit:GetRangeToUnit(self.parent) <= 300) then
local permanent_buff
local buffalltime = self.ability:GetSpecialValueFor("buffalltime")
local buffalltime_creep = self.ability:GetSpecialValueFor("buffalltime_creep")
if unit:IsRealHero() then
permanent_buff = self.parent:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_permanent_buff", nil)
if permanent_buff then
permanent_buff:SetStackCount(permanent_buff:GetStackCount() + buffalltime)
end
else
permanent_buff = self.parent:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_permanent_buff", nil)
if permanent_buff then
permanent_buff:SetStackCount(permanent_buff:GetStackCount() + buffalltime_creep)
end
end
unit:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_permanent_debuff", nil):IncrementStackCount()
end
end
-- Атака по сушествам / героям
function modifier_slark_essence_shift_lua:GetModifierProcAttack_Feedback(keys)
if self.parent:IsIllusion() or self.parent:PassivesDisabled() then return end
if keys.target:GetTeam() == self.parent:GetTeam() or keys.target:IsOther() or keys.target:IsIllusion() then return end
local duration = self:GetAbility():GetSpecialValueFor("duration")
if keys.target:IsCreep() or keys.target:IsCreature() then
duration = self:GetAbility():GetSpecialValueFor("duration_creep")
self.parent:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_lua", { duration = duration })
self:IncrementStackCount()
else
self.parent:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_buff_custom", { duration = duration })
keys.target:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_debuff_custom", { duration = duration })
keys.target:AddNewModifier(self.parent, self.ability, "modifier_slark_essence_shift_permanent_debuff", nil)
end
-- Партикл
local particle_cast = ParticleManager:GetParticleReplacement('/particles/units/heroes/hero_slark/slark_essence_shift.vpcf', self.parent)
local effect_cast = ParticleManager:CreateParticle(particle_cast, PATTACH_ABSORIGIN_FOLLOW, keys.target)
ParticleManager:SetParticleControl(effect_cast, 0, keys.target:GetAbsOrigin() + Vector(0, 0, 64))
ParticleManager:SetParticleControl(effect_cast, 1, self.parent:GetAbsOrigin() + Vector(0, 0, 64))
ParticleManager:ReleaseParticleIndex(effect_cast)
end
-- Ловкость
function modifier_slark_essence_shift_lua:GetModifierBonusStats_Agility()
return self:GetStackCount() * (self.creep_agi_gain or 0)
end
Lua:
modifier_slark_essence_shift_buff_custom = class({})
function modifier_slark_essence_shift_buff_custom:IsPurgable() return false end
function modifier_slark_essence_shift_buff_custom:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_STATS_AGILITY_BONUS
}
return funcs
end
function modifier_slark_essence_shift_buff_custom:GetModifierBonusStats_Agility()
return self:GetStackCount() * (self.agi_gain or 0)
end
function modifier_slark_essence_shift_buff_custom:OnCreated(kv)
self.agi_gain = self:GetAbility():GetSpecialValueFor("agi_gain")
if IsClient() then return end
self:IncrementStackCount()
Timers:CreateTimer(self:GetDuration(), function()
if self:IsNull() then return end
self:DecrementStackCount()
self:GetParent():CalculateStatBonus(true)
end)
end
function modifier_slark_essence_shift_buff_custom:OnRefresh(kv)
self:OnCreated(kv)
end
Lua:
modifier_slark_essence_shift_debuff_custom = class({})
function modifier_slark_essence_shift_debuff_custom:IsPurgable() return false end
function modifier_slark_essence_shift_debuff_custom:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
MODIFIER_PROPERTY_TOOLTIP,
}
return funcs
end
function modifier_slark_essence_shift_debuff_custom:GetModifierBonusStats_Agility()
return -self:GetStackCount() * (self.stat_loss or 0)
end
function modifier_slark_essence_shift_debuff_custom:GetModifierBonusStats_Strength()
return -self:GetStackCount() * (self.stat_loss or 0)
end
function modifier_slark_essence_shift_debuff_custom:GetModifierBonusStats_Intellect()
return -self:GetStackCount() * (self.stat_loss or 0)
end
function modifier_slark_essence_shift_debuff_custom:OnTooltip()
return self:GetStackCount()
end
function modifier_slark_essence_shift_debuff_custom:OnCreated(kv)
self.stat_loss = self:GetAbility():GetSpecialValueFor("stat_loss")
if IsClient() then return end
self:IncrementStackCount()
Timers:CreateTimer(self:GetDuration(), function()
if self:IsNull() then return end
self:DecrementStackCount()
end)
end
function modifier_slark_essence_shift_debuff_custom:OnRefresh(kv)
self:OnCreated(kv)
end
Код:
"slark_essence_shift_lua"
{
//-------------------------------------------------------------------------------------------------------------
"BaseClass" "ability_lua"
"ScriptFile" "heroes/slarkich/slark_essence_shift_lua.lua"
"AbilityTextureName" "slark_essence_shift_boost"
"AbilityType" "DOTA_ABILITY_TYPE_BASIC"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES"
"SpellDispellableType" "SPELL_DISPELLABLE_NO"
// Precache
//-------------------------------------------------------------------------------------------------------------
"precache"
{
"particle" "particles/units/heroes/hero_slark/slark_essence_shift.vpcf"
}
// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"agi_gain" "3.0 9.0 15.0 21.0"
}
"02"
{
"var_type" "FIELD_FLOAT"
"creep_agi_gain" "0.1 0.2 0.5 1.0"
}
"03"
{
"var_type" "FIELD_FLOAT"
"stat_loss" "1.0 3.0 5.0 7.0"
}
"04"
{
"var_type" "FIELD_FLOAT"
"duration" "120 160 200 240"
}
"05"
{
"var_type" "FIELD_FLOAT"
"duration_creep" "60 90 120 150"
}
"06"
{
"var_type" "FIELD_INTEGER"
"buffalltime" "1 3 5 7"
}
"07"
{
"var_type" "FIELD_INTEGER"
"buffalltime_creep" "1 2 3 4"
}
}
}
Код:
"dota_tooltip_ability_slark_essence_shift_lua" "Essence Shift"
"dota_tooltip_ability_slark_essence_shift_lua_Description" "Герой истощает врагов, воруя их атрибуты которые превращаются в бонусную ловкость для обладателя способности. Если герой убьет врага, он навсегда украдет ловкость. <font color='#3ed038'>Так же герой ворует ловкость у существ.</font>"
"dota_tooltip_ability_slark_essence_shift_lua_Lore" "С каждым ударом, герой все лучше и лучше изучает слабые места врага"
"dota_tooltip_ability_slark_essence_shift_lua_agi_gain" "БОНУС К ЛОВКОСТИ ОТ УДАРА ПО ГЕРОЮ:"
"dota_tooltip_ability_slark_essence_shift_lua_creep_agi_gain" "<font color='#3ed038'>БОНУС К ЛОВКОСТИ ОТ УДАРА ПО СУЩЕСТВАМ:</font>"
"dota_tooltip_ability_slark_essence_shift_lua_stat_loss" "ГЕРОЙ ПОЛУЧИВШИЙ УРОН ТЕРЯЕТ АТРИБУТОВ:"
"dota_tooltip_ability_slark_essence_shift_lua_buffalltime" "ПОСТОЯННЫЙ БОНУС ОТ ГЕРОЕВ:"
"dota_tooltip_ability_slark_essence_shift_lua_buffalltime_creep" "ПОСТОЯННЫЙ БОНУС ОТ СУЩЕСТВ:"
"dota_tooltip_ability_slark_essence_shift_lua_duration" "ДЛИТЕЛЬНОСТЬ ВРЕМЕННОЙ ЛОВКОСТИ ОТ ГЕРОЕВ:"
"dota_tooltip_ability_slark_essence_shift_lua_duration_creep" "ДЛИТЕЛЬНОСТЬ ВРЕМЕННОЙ ЛОВКОСТИ ОТ СУЩЕСТВ:"
"dota_tooltip_modifier_slark_essence_shift_lua" "Essence Shift (СУЩЕСТВА)"
"dota_tooltip_modifier_slark_essence_shift_lua_Description" "Временно похищено %dMODIFIER_PROPERTY_STATS_AGILITY_BONUS% ед. ловкости существ."
"dota_tooltip_modifier_slark_essence_shift_permanent_buff" "Постоянный бонус"
"dota_tooltip_modifier_slark_essence_shift_permanent_buff_Description" "Получает %dMODIFIER_PROPERTY_STATS_AGILITY_BONUS% ед. ловкости от убийства героев и существ."
"dota_tooltip_modifier_slark_essence_shift_buff_custom" "Essence Shift"
"dota_tooltip_modifier_slark_essence_shift_buff_custom_Description" "Временно похищено %dMODIFIER_PROPERTY_STATS_AGILITY_BONUS% ед. ловкости героев."
"dota_tooltip_modifier_slark_essence_shift_debuff_custom" "Essence Shift"
"dota_tooltip_modifier_slark_essence_shift_debuff_custom_Description" "Ваш герой временно теряет %dMODIFIER_PROPERTY_TOOLTIP% ед. каждого атрибута."
У вас уже должна быть база (какой то начальный проект)
Установка в 3х пунктах:
Установка в 3х пунктах:
Берем из спойлера - LUA
2.1] Идем по пути: :\steam\steamapps\common\dota 2 beta\game\dota_addons\\scripts\vscripts\ ( - диск, ** - ваша карта) p.s. По желанию можно разделить папками ваши абилки
Пример из сборника пассивок: :\steam\steamapps\common\dota 2 beta\game\dota_addons\***\scripts\vscripts\hero\Passive (Добавилась 1 папка и подпапка)
2.2] Создаем файл с расширением *.lua и вставляем в него код
2.3] Если у вас другие папки/подпапки или вовсе вы создали *.lua в корне vscripts то редактируем путь в коде:
Находим строчку: LinkLuaModifier("modifier_legion_Armor", "heroes/Passive/legion_Armor", LUA_MODIFIER_MOTION_NONE)
Меняем в кавычках путь: "heroes/Passive/legion_Armor" => "Ваш путь к LUA, без расширения *.lua"
P.S. Если вы оставили скрипт в корне VSCRIPTS => Путь будет: "Ваше название скрипта, без расширения *.lua"
P.s. содержание строки зависит от пассивки/модификатора, главное это путь к скрипту!
2.1] Идем по пути: :\steam\steamapps\common\dota 2 beta\game\dota_addons\\scripts\vscripts\ ( - диск, ** - ваша карта) p.s. По желанию можно разделить папками ваши абилки
Пример из сборника пассивок: :\steam\steamapps\common\dota 2 beta\game\dota_addons\***\scripts\vscripts\hero\Passive (Добавилась 1 папка и подпапка)
2.2] Создаем файл с расширением *.lua и вставляем в него код
2.3] Если у вас другие папки/подпапки или вовсе вы создали *.lua в корне vscripts то редактируем путь в коде:
Находим строчку: LinkLuaModifier("modifier_legion_Armor", "heroes/Passive/legion_Armor", LUA_MODIFIER_MOTION_NONE)
Меняем в кавычках путь: "heroes/Passive/legion_Armor" => "Ваш путь к LUA, без расширения *.lua"
P.S. Если вы оставили скрипт в корне VSCRIPTS => Путь будет: "Ваше название скрипта, без расширения *.lua"
P.s. содержание строки зависит от пассивки/модификатора, главное это путь к скрипту!
Берем из спойлера - Абилку
1.1] Идем по пути: :\steam\steamapps\common\dota 2 beta\game\dota_addons\***\npc\ в файлик: npc_abilities_custom.txt
1.2] Вставляем абилку между фигурных скобок
"DOTAAbilities"
{
}
1.3] Строки:
"ScriptFile" "heroes/passive/legion_Armor" - ПУТЬ К LUA файлу (P.S. Если вы оставили скрипт в корне VSCRIPTS => Путь будет: "Ваше название скрипта, без расширения *.lua")
"AbilityTextureName" "specal/armor" - ПУТЬ К Иконке 128х128 .png (Полный путь: :\steam\steamapps\common\dota 2 beta\game\dota_addons\**\resource\flash3\images\spellicons\specal\)
1.1] Идем по пути: :\steam\steamapps\common\dota 2 beta\game\dota_addons\***\npc\ в файлик: npc_abilities_custom.txt
1.2] Вставляем абилку между фигурных скобок
"DOTAAbilities"
{
}
1.3] Строки:
"ScriptFile" "heroes/passive/legion_Armor" - ПУТЬ К LUA файлу (P.S. Если вы оставили скрипт в корне VSCRIPTS => Путь будет: "Ваше название скрипта, без расширения *.lua")
"AbilityTextureName" "specal/armor" - ПУТЬ К Иконке 128х128 .png (Полный путь: :\steam\steamapps\common\dota 2 beta\game\dota_addons\**\resource\flash3\images\spellicons\specal\)
Берем из спойлера - Ру локаль, от абилки
3.1]Идем по пути: :\steam\steamapps\common\dota 2 beta\game\dota_addons\\resource\ ( - диск, ** - ваша карта)
3.2] Открываем / создаем файлик: addon_russian.txt
3.3] Вставляем строки между:
"lang"
{
"Language" "russian"
"Tokens"
{
"addon_game_name" "Название вашей карты на ру"
Вот сюда уже строки
}
}
3.1]Идем по пути: :\steam\steamapps\common\dota 2 beta\game\dota_addons\\resource\ ( - диск, ** - ваша карта)
3.2] Открываем / создаем файлик: addon_russian.txt
3.3] Вставляем строки между:
"lang"
{
"Language" "russian"
"Tokens"
{
"addon_game_name" "Название вашей карты на ру"
Вот сюда уже строки
}
}
Все просто закидываем в папку с проектом
\steam\steamapps\common\dota 2 beta\game\dota_addons\scripts\vscripts\ сюда файл из архива
открываем ваш: addon_game_mode.lua
прописываем строчку
require('timers')
\steam\steamapps\common\dota 2 beta\game\dota_addons\scripts\vscripts\ сюда файл из архива
открываем ваш: addon_game_mode.lua
прописываем строчку
require('timers')
Вложения
Последнее редактирование:
