游戏版本 | 0.8 |
---|---|
技能 | 无目标 |
影响 | 敌方单位 |
伤害类型 | 无 |
无视技能免疫 | 是 |
能否驱散 | 不可驱散 |
技能描述 | 斧王嘲讽附近的敌方单位,强迫他们攻击自己,同时获得额外护甲。狂战士之吼不会中断动作。 |
阿哈利姆神杖升级 | 无 |
汪汪神杖升级 | 无 |
冷却时间 | 16/14/12/10 |
魔法消耗 | 80/90/100/110 |
技能效果词条 | 作用范围:300 护甲提升:30 持续时间:2.0/2.4/2.8/3.2 |
npc_abilities_custom.txt |
---|
//============== // Axe Berserker's Call 斧王 狂战士之吼 //================ "axe_berserkers_call_sb2019" { // General //--------------------- "BaseClass" "ability_lua" "AbilityType" "DOTA_ABILITY_TYPE_BASIC" "ScriptFile" "abilities/custom/axe/axe_berserkers_call_sb2019" "AbilityTextureName" "custom/abilities/axe/axe_berserkers_call_sb2019" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT" "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" "SpellDispellableType" "SPELL_DISPELLABLE_NO" "FightRecapLevel" "1" // Casting //--------------------- "AbilityCastPoint" "0.4" "AbilityCastAnimation" "ACT_DOTA_OVERRIDE_ABILITY_1" "AbilityCastGestureSlot" "DEFAULT" // Time //--------------------- "AbilityCooldown" "16 14 12 10" // Damage. //------------------------------------ "AbilityDamage" "0 0 0 0" // Cost //----------------------------------------------- "AbilityManaCost" "80 90 100 110" // Special //---------------------------------------------- "AbilitySpecial" { "01" { "var_type" "FIELD_INTEGER" "radius" "300" } "02" { "var_type" "FIELD_INTEGER" "bonus_armor" "30" } "03" { "var_type" "FIELD_FLOAT" "duration" "2.0 2.4 2.8 3.2" } } } |
vscripts/abilities/custom/axe/axe_berserkers_call_sb2019.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 axe_berserkers_call_sb2019 = class({}) LinkLuaModifier( "axe_berserkers_call_sb2019_target_modifier", "abilities/custom/axe/axe_berserkers_call_sb2019_target_modifier", LUA_MODIFIER_MOTION_NONE ) LinkLuaModifier( "axe_berserkers_call_sb2019_caster_modifier", "abilities/custom/axe/axe_berserkers_call_sb2019_caster_modifier", LUA_MODIFIER_MOTION_NONE ) -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019:GetCastAnimation() return ACT_DOTA_CAST_ABILITY_1 end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019:GetCastRange() local radius = self:GetSpecialValueFor( "radius" ) if self.radius ~= nil then radius = self.radius end if IsServer() then self.radius = self:GetSpecialValueFor( "radius" ) if self:GetCaster():FindAbilityByName("special_bonus_unique_axe_2") ~= nil and self:GetCaster():FindAbilityByName("special_bonus_unique_axe_2"):GetLevel() > 0 then self.radius = self.radius+self:GetCaster():FindAbilityByName("special_bonus_unique_axe_2"):GetLevelSpecialValueFor("value",1) end end print(radius) return radius end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019:OnSpellStart() if IsServer() then self.radius = self:GetSpecialValueFor( "radius" ) if self:GetCaster():FindAbilityByName("special_bonus_unique_axe_2") ~= nil and self:GetCaster():FindAbilityByName("special_bonus_unique_axe_2"):GetLevel() > 0 then self.radius = self.radius+self:GetCaster():FindAbilityByName("special_bonus_unique_axe_2"):GetLevelSpecialValueFor("value",1) end self.duration = self:GetSpecialValueFor( "duration" ) EmitSoundOn( "Hero_Axe.Berserkers_Call", self:GetCaster() ) self.FX = ParticleManager:CreateParticle( "particles/econ/items/axe/axe_helm_shoutmask/axe_beserkers_call_owner_shoutmask.vpcf", PATTACH_POINT, self:GetCaster() ) ParticleManager:SetParticleControl(self.FX, 2, Vector(self.radius,1,1)) self:GetCaster():AddNewModifier(self:GetCaster(), self, "axe_berserkers_call_sb2019_caster_modifier", {duration = self.duration}) local targets = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), self:GetCaster(), self.radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false ) for _,target in pairs( targets ) do if target ~= nil then print("Target : "..target:GetUnitName()) target:AddNewModifier(self:GetCaster(), self, "axe_berserkers_call_sb2019_target_modifier", {duration = self.duration}) end end end end -------------------------------------------------------------------------------- |
vscripts/abilities/custom/axe/axe_berserkers_call_sb2019_caster_modifier.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 axe_berserkers_call_sb2019_caster_modifier = class({}) ------------------------------------------------------------------------------ function axe_berserkers_call_sb2019_caster_modifier:IsHidden() return false end ------------------------------------------------------------------------------ function axe_berserkers_call_sb2019_caster_modifier:GetEffectName() return "particles/status_fx/status_effect_beserkers_call.vpcf" end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_caster_modifier:IsPurgable() return false end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_caster_modifier:IsDebuff() return false end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_caster_modifier:RemoveOnDeath() return true end ---------------------------------------- function axe_berserkers_call_sb2019_caster_modifier:OnCreated( kv ) self.bonus_armor = self:GetAbility():GetSpecialValueFor( "bonus_armor" ) end ---------------------------------------- function axe_berserkers_call_sb2019_caster_modifier:DeclareFunctions() local funcs = { MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS, } return funcs end ---------------------------------------- function axe_berserkers_call_sb2019_caster_modifier:GetModifierPhysicalArmorBonus( params ) return self.bonus_armor end |
vscripts/abilities/custom/axe/axe_berserkers_call_sb2019_target_modifier.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 axe_berserkers_call_sb2019_target_modifier = class({}) ------------------------------------------------------------------------------ function axe_berserkers_call_sb2019_target_modifier:IsHidden() return false end ------------------------------------------------------------------------------ function axe_berserkers_call_sb2019_target_modifier:GetStatusEffectName() return "particles/status_fx/status_effect_beserkers_call.vpcf" end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_target_modifier:IsPurgable() return false end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_target_modifier:IsDebuff() return true end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_target_modifier:RemoveOnDeath() return true end ---------------------------------------- function axe_berserkers_call_sb2019_target_modifier:OnCreated( kv ) if IsServer() then if self:GetParent():GetForceAttackTarget() then self:Destroy() return end --self:GetParent():Interrupt() self:GetParent():SetIdleAcquire( true ) self.hDesiredTarget = self:GetCaster() self:GetParent():SetForceAttackTarget( self.hDesiredTarget ) self:StartIntervalThink( 0 ) end end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_target_modifier:OnIntervalThink() if IsServer() then if self:GetParent():GetForceAttackTarget() == nil then self:GetParent():SetForceAttackTarget( self.hDesiredTarget ) end if self.hDesiredTarget == nil or self.hDesiredTarget:IsAlive() == false then self:Destroy() return end end end -------------------------------------------------------------------------------- function axe_berserkers_call_sb2019_target_modifier:OnDestroy() if IsServer() then self:GetParent():SetForceAttackTarget( nil ) end end |