local ____lualib = require("lualib_bundle") local __TS__Class = ____lualib.__TS__Class local __TS__ClassExtends = ____lualib.__TS__ClassExtends local __TS__Decorate = ____lualib.__TS__Decorate local ____exports = {} local ____dota_ts_adapter = require("lib.dota_ts_adapter") local BaseItem = ____dota_ts_adapter.BaseItem local registerAbility = ____dota_ts_adapter.registerAbility local registerModifier = ____dota_ts_adapter.registerModifier local BaseModifier = ____dota_ts_adapter.BaseModifier local PARTICLE_BLADEMAIL = "particles/econ/items/spectre/spectre_arcana/spectre_arcana_blademail.vpcf" ____exports.item_blademail_2 = __TS__Class() local item_blademail_2 = ____exports.item_blademail_2 item_blademail_2.name = "item_blademail_2" item_blademail_2.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua" __TS__ClassExtends(item_blademail_2, BaseItem) function item_blademail_2.prototype.Precache(self, context) PrecacheResource("particle", PARTICLE_BLADEMAIL, context) end function item_blademail_2.prototype.GetIntrinsicModifierName(self) return "modifier_item_blademail_2" end function item_blademail_2.prototype.GetAOERadius(self) return self:GetSpecialValueFor("radius") end function item_blademail_2.prototype.OnSpellStart(self) if not IsServer() then return end local caster = self:GetCaster() if not caster then return end local duration = self:GetSpecialValueFor("active_duration") caster:AddNewModifier(caster, self, ____exports.modifier_item_blademail_2_active.name, {duration = duration}) EmitSoundOn("DOTA_Item.BladeMail.Activate", caster) end item_blademail_2 = __TS__Decorate( item_blademail_2, item_blademail_2, {registerAbility(nil)}, {kind = "class", name = "item_blademail_2"} ) ____exports.item_blademail_2 = item_blademail_2 --- Носитель: отражение части входящего урона; аура на союзников и врагов в радиусе. ____exports.modifier_item_blademail_2 = __TS__Class() local modifier_item_blademail_2 = ____exports.modifier_item_blademail_2 modifier_item_blademail_2.name = "modifier_item_blademail_2" modifier_item_blademail_2.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua" __TS__ClassExtends(modifier_item_blademail_2, BaseModifier) function modifier_item_blademail_2.prototype.RemoveOnDeath(self) return false end function modifier_item_blademail_2.prototype.IsHidden(self) return true end function modifier_item_blademail_2.prototype.IsPurgable(self) return false end function modifier_item_blademail_2.prototype.IsAura(self) return true end function modifier_item_blademail_2.prototype.GetModifierAura(self) return "modifier_item_blademail_2_aura" end function modifier_item_blademail_2.prototype.GetAuraRadius(self) return self:GetAbility():GetSpecialValueFor("radius") end function modifier_item_blademail_2.prototype.GetAuraDuration(self) return 0.5 end function modifier_item_blademail_2.prototype.GetAuraSearchTeam(self) return DOTA_UNIT_TARGET_TEAM_BOTH end function modifier_item_blademail_2.prototype.GetAuraSearchType(self) return DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC end function modifier_item_blademail_2.prototype.GetAuraSearchFlags(self) return DOTA_UNIT_TARGET_FLAG_NONE end function modifier_item_blademail_2.prototype.DeclareFunctions(self) return {MODIFIER_EVENT_ON_TAKEDAMAGE, MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT} end function modifier_item_blademail_2.prototype.GetModifierPhysicalArmorBonus(self) return self:GetAbility():GetSpecialValueFor("bonus_armor") end function modifier_item_blademail_2.prototype.GetModifierAttackSpeedBonus_Constant(self) return self:GetAbility():GetSpecialValueFor("attack_speed") end function modifier_item_blademail_2.prototype.OnTakeDamage(self, event) if not IsServer() then return end local parent = self:GetParent() local ability = self:GetAbility() if not ability or event.unit ~= parent then return end if event.damage <= 0 then return end if bit.band(event.damage_flags, DOTA_DAMAGE_FLAG_HPLOSS) == DOTA_DAMAGE_FLAG_HPLOSS then return end if bit.band(event.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION) == DOTA_DAMAGE_FLAG_REFLECTION then return end local attacker = event.attacker if not attacker or attacker:IsNull() or not attacker:IsAlive() then return end if attacker == parent then return end if attacker:GetTeamNumber() == parent:GetTeamNumber() then return end if attacker:IsBuilding() or attacker:IsOther() then return end local isActive = parent:HasModifier(____exports.modifier_item_blademail_2_active.name) local reflectPct = ability:GetSpecialValueFor("reflect_pct") * 0.01 if isActive then reflectPct = ability:GetSpecialValueFor("active_reflect_pct") * 0.01 parent:HealWithParams( event.damage, ability, false, false, parent, false ) SendOverheadEventMessage( nil, OVERHEAD_ALERT_HEAL, parent, event.damage, nil ) end if reflectPct <= 0 then return end local reflectDamage = event.damage * reflectPct if reflectDamage <= 0 then return end ApplyDamage({ victim = attacker, attacker = parent, damage = reflectDamage, damage_type = event.damage_type, ability = ability, damage_flags = DOTA_DAMAGE_FLAG_REFLECTION + DOTA_DAMAGE_FLAG_NO_SPELL_AMPLIFICATION }) end modifier_item_blademail_2 = __TS__Decorate( modifier_item_blademail_2, modifier_item_blademail_2, {registerModifier(nil)}, {kind = "class", name = "modifier_item_blademail_2"} ) ____exports.modifier_item_blademail_2 = modifier_item_blademail_2 --- Актив: ванильный визуал и 100% отражения из KV. ____exports.modifier_item_blademail_2_active = __TS__Class() local modifier_item_blademail_2_active = ____exports.modifier_item_blademail_2_active modifier_item_blademail_2_active.name = "modifier_item_blademail_2_active" modifier_item_blademail_2_active.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua" __TS__ClassExtends(modifier_item_blademail_2_active, BaseModifier) function modifier_item_blademail_2_active.prototype.RemoveOnDeath(self) return true end function modifier_item_blademail_2_active.prototype.IsHidden(self) return false end function modifier_item_blademail_2_active.prototype.IsDebuff(self) return false end function modifier_item_blademail_2_active.prototype.IsPurgable(self) return true end function modifier_item_blademail_2_active.prototype.GetEffectName(self) return PARTICLE_BLADEMAIL end function modifier_item_blademail_2_active.prototype.GetEffectAttachType(self) return PATTACH_ABSORIGIN_FOLLOW end function modifier_item_blademail_2_active.prototype.DeclareFunctions(self) return {MODIFIER_PROPERTY_MIN_HEALTH} end function modifier_item_blademail_2_active.prototype.GetMinHealth(self) return 1 end function modifier_item_blademail_2_active.prototype.GetTexture(self) return "../items/default_items/blademail_2" end modifier_item_blademail_2_active = __TS__Decorate( modifier_item_blademail_2_active, modifier_item_blademail_2_active, {registerModifier(nil)}, {kind = "class", name = "modifier_item_blademail_2_active"} ) ____exports.modifier_item_blademail_2_active = modifier_item_blademail_2_active --- Аура: союзникам +броня и +скорость атаки, врагам столько же со знаком минус. ____exports.modifier_item_blademail_2_aura = __TS__Class() local modifier_item_blademail_2_aura = ____exports.modifier_item_blademail_2_aura modifier_item_blademail_2_aura.name = "modifier_item_blademail_2_aura" modifier_item_blademail_2_aura.____file_path = "scripts/vscripts/items/default_items/item_blademail_2.lua" __TS__ClassExtends(modifier_item_blademail_2_aura, BaseModifier) function modifier_item_blademail_2_aura.prototype.RemoveOnDeath(self) return true end function modifier_item_blademail_2_aura.prototype.IsHidden(self) return false end function modifier_item_blademail_2_aura.prototype.IsPurgable(self) return false end function modifier_item_blademail_2_aura.prototype.IsDebuff(self) local caster = self:GetCaster() if not caster then return true end return self:GetParent():GetTeamNumber() ~= caster:GetTeamNumber() end function modifier_item_blademail_2_aura.prototype.IsBuff(self) return not self:IsDebuff() end function modifier_item_blademail_2_aura.prototype.DeclareFunctions(self) return {MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT} end function modifier_item_blademail_2_aura.prototype.GetModifierPhysicalArmorBonus(self) local ability = self:GetAbility() local caster = self:GetCaster() if not ability or not caster then return 0 end local v = ability:GetSpecialValueFor("aura_armor") return self:GetParent():GetTeamNumber() == caster:GetTeamNumber() and v or -v end function modifier_item_blademail_2_aura.prototype.GetModifierAttackSpeedBonus_Constant(self) local ability = self:GetAbility() local caster = self:GetCaster() if not ability or not caster then return 0 end local v = ability:GetSpecialValueFor("aura_attack_speed") return self:GetParent():GetTeamNumber() == caster:GetTeamNumber() and v or -v end function modifier_item_blademail_2_aura.prototype.GetTexture(self) return "../items/default_items/blademail_2" end modifier_item_blademail_2_aura = __TS__Decorate( modifier_item_blademail_2_aura, modifier_item_blademail_2_aura, {registerModifier(nil)}, {kind = "class", name = "modifier_item_blademail_2_aura"} ) ____exports.modifier_item_blademail_2_aura = modifier_item_blademail_2_aura return ____exports