游戏版本 | 0.8 |
---|---|
技能 | 点目标 |
影响 | 敌方单位 |
伤害类型 | 魔法 |
无视技能免疫 | 否 |
能否驱散 | 无 |
技能描述 | 战士乌尔萨召唤熊怪部落的先祖向正前方的敌人发起咆哮,每位先祖将对敌人造成一次伤害并打断持续施法。咆哮后,熊战士将获得攻速加成和移速加成,持续一段时间。 |
阿哈利姆神杖升级 | 无 |
汪汪神杖升级 | 升级后每位先祖将对敌人额外造成一次普通攻击。 |
冷却时间 | 13/12/11/10 |
魔法消耗 | 75/75/125/125 |
技能效果词条 | 伤害:80/125/170/215 眩晕时间:0.1 召唤的先祖数量:1/1/2/2 移动速度加成:17%/22%/27%/32% 攻击速度加成:25/40/55/70 加成效果持续时间:2.5 |
其他词条 | 额外普通攻击触发攻击特效。 先祖移动速度:1200 先祖移动距离:1100 先祖伤害范围:180 |
npc_abilities_custom.txt |
---|
//==================== // 熊战士 宝物技能 先祖咆哮 //==================== "ursa_alt_ancestor_roar" { // General //---------- //"AbilityType" "DOTA_ABILITY_TYPE_ULTIMATE" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT" "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY" "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL" "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" "FightRecapLevel" "1" "BaseClass" "ability_lua" "AbilityTextureName" "custom/abilities/alt/ursa/ursa_alt_ancestor_roar" "ScriptFile" "abilities/custom/alt/ursa_alt_ancestor_roar" //"MaxLevel" "3" "AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1" "IsOnCastBar" "1" // Casting //---------- "AbilityCastRange" "1100" "AbilityCastPoint" "0.4" // started at 0.25 // Time //---------- "AbilityCooldown" "13 12 11 10" // Cost //---------- "AbilityManaCost" "75 75 125 125" // Special //---------- "AbilitySpecial" { "01" { "var_type" "FIELD_INTEGER" "num_soul" "1 1 2 2" } "02" { "var_type" "FIELD_FLOAT" "stun_duration" "0.1" } "03" { "var_type" "FIELD_INTEGER" "damage" "80 125 170 215" } "04" { "var_type" "FIELD_INTEGER" "movement_speed_pct" "17 22 27 32" } "05" { "var_type" "FIELD_INTEGER" "attack_speed" "25 40 55 70" } "06" { "var_type" "FIELD_FLOAT" "buff_duration" "2.5" } "07" { "var_type" "FIELD_INTEGER" "projectile_speed" "1200" } "08" { "var_type" "FIELD_INTEGER" "projectile_distance" "1100" } "09" { "var_type" "FIELD_INTEGER" "projectile_width" "180" } } } |
vscripts/abilities/custom/alt/ursa_alt_ancestor_roar.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 ursa_alt_ancestor_roar = class({}) LinkLuaModifier( "ursa_alt_ancestor_roar_modifier", "abilities/custom/alt/ursa_alt_ancestor_roar_modifier", LUA_MODIFIER_MOTION_NONE ) -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:ProcsMagicStick() return true end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:GetCastAnimation() return ACT_DOTA_CAST_ABILITY_1 end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:OnAbilityPhaseStart() --[[if IsServer() then self.nPreviewFX = ParticleManager:CreateParticle( "particles/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true ) ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( 150, 150, 150 ) ) ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 176, 224, 230 ) ) end]]-- return true end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:OnAbilityPhaseInterrupted() --[[if IsServer() then ParticleManager:DestroyParticle( self.nPreviewFX, false ) end]]-- end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:GetPlaybackRateOverride() return 1 end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:OnSpellStart() if IsServer() then self.num_soul = self:GetSpecialValueFor( "num_soul" ) self.stun_duration = self:GetSpecialValueFor( "stun_duration" ) self.damage = self:GetSpecialValueFor( "damage" ) self.buff_duration = self:GetSpecialValueFor( "buff_duration" ) self.projectile_distance = self:GetSpecialValueFor( "projectile_distance" ) self.projectile_speed = self:GetSpecialValueFor( "projectile_speed" ) self.projectile_width = self:GetSpecialValueFor( "projectile_width" ) local vPos = nil if self:GetCursorTarget() then vPos = self:GetCursorTarget():GetOrigin() else vPos = self:GetCursorPosition() end local vDirection = vPos - self:GetCaster():GetOrigin() vDirection.z = 0.0 vDirection = vDirection:Normalized() local nAttachmentID = self:GetCaster():ScriptLookupAttachment( "attach_attack1" ) projectile_info = { --EffectName = "particles/test_particle/test_model_cluster_linear_projectile.vpcf", EffectName = "particles/new_custom/ursa_ancestor_roar/base.vpcf", Ability = self, vSpawnOrigin = self:GetCaster():GetAttachmentOrigin( nAttachmentID ), fStartRadius = self.projectile_width, fEndRadius = self.projectile_width, vVelocity = vDirection * self.projectile_speed, fDistance = self.projectile_distance, Source = self:GetCaster(), iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, bDodgeable = false, bProvidesVision = true, bDeleteOnHit = false, iVisionRadius = 250, iVisionTeamNumber = self:GetCaster():GetTeamNumber(), } EmitSoundOn( "ursa_ursa_attack_14", self:GetCaster() ) self:GetCaster():AddNewModifier( self:GetCaster(), self, "ursa_alt_ancestor_roar_modifier", { duration = self.buff_duration } ) for i = 1, self.num_soul do Timers:CreateTimer(0.3*(i-1),function() ProjectileManager:CreateLinearProjectile(projectile_info) end) end EmitSoundOn( "Hero_Ursa.Earthshock", hEnemy ); end end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar:OnProjectileHit( hTarget, vLocation ) if hTarget == nil or hTarget == self:GetCaster() then return 0 end local hEnemies = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), hTarget:GetOrigin(), self:GetCaster(), self.projectile_width, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) for _, hEnemy in pairs( hEnemies ) do if hEnemy ~= nil and hEnemy:IsInvulnerable() == false and hEnemy:IsMagicImmune() == false then local damage = { victim = hEnemy, attacker = self:GetCaster(), damage = self.damage, damage_type = DAMAGE_TYPE_MAGICAL, ability = self } if not hEnemy:FindModifierByName( "ursa_alt_ancestor_roar_modifier" ) then ApplyDamage( damage ) hEnemy:AddNewModifier( self:GetCaster(), self, "ursa_alt_ancestor_roar_modifier", { duration = 0.18 } ) EmitSoundOn( "Hero_Ursa.Attack", hEnemy ); hEnemy:AddNewModifier( self:GetCaster(), self, "modifier_stunned", { duration = self.stun_duration } ) if self:GetCaster():HasModifier("modifier_item_plus_scepter") or self:GetCaster():HasModifier("modifier_item_plus_scepter_icon") then self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_phantom_assassin_stiflingdagger_caster", {} ) self:GetCaster():PerformAttack( hEnemy, false, true, true, true, false, false, true ) self:GetCaster():RemoveModifierByName( "modifier_phantom_assassin_stiflingdagger_caster" ) end end end end end |
vscripts/abilities/custom/alt/ursa_alt_ancestor_roar_modifier.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 --Max Level Abilitiy MODIFIER --Version 1 ursa_alt_ancestor_roar_modifier = class({}) ----------------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:IsHidden() return false end ----------------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:IsPurgable() return false end ----------------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:IsDebuff() if self:GetCaster() == self:GetParent() then return false else return true end end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:GetPriority() return MODIFIER_PRIORITY_ULTRA end ------------------------------------------------------------------------------ function ursa_alt_ancestor_roar_modifier:GetEffectName() if self:GetCaster() == self:GetParent() then return "particles/units/heroes/hero_ursa/ursa_earthshock_energy.vpcf" end end ----------------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:OnCreated( kv ) self.movement_speed_pct = self:GetAbility():GetSpecialValueFor( "movement_speed_pct" ) self.attack_speed = self:GetAbility():GetSpecialValueFor( "attack_speed" ) end ----------------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:DeclareFunctions() local funcs = { MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, } return funcs end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:GetModifierMoveSpeedBonus_Percentage( params ) if self:GetCaster() == self:GetParent() then return self.movement_speed_pct end end -------------------------------------------------------------------------------- function ursa_alt_ancestor_roar_modifier:GetModifierAttackSpeedBonus_Constant( params ) if self:GetCaster() == self:GetParent() then return self.attack_speed end end |