游戏版本 | 0.8 |
---|---|
技能 | 目标单位 |
影响 | 友方英雄 |
伤害类型 | 无 |
无视技能免疫 | 是 |
能否驱散 | 不可驱散 |
技能描述 | 使目标友军英雄陷入战斗狂怒状态。在其影响下,获得移速和攻速加成且所有造成的伤害都带有吸血效果。 |
阿哈利姆神杖升级 | 无 |
汪汪神杖升级 | 升级后将额外对目标队友350范围内最近的1个其他友军英雄陷入战斗狂怒状态。 |
冷却时间 | 14 |
魔法消耗 | 100/135/170/205 |
技能效果词条 | 持续时间:8.0/10.0/12.0/14.0 吸血:6%/9%/12%/15% 额外的攻击速度:15/30/45/60 移动速度加成:7% |
npc_abilities_custom.txt |
---|
//============== // Axe Battle Rage 战斗狂怒 //================ "axe_battle_hunger_sb2019" { // General //-------------------------------------- "BaseClass" "ability_lua" "AbilityType" "DOTA_ABILITY_TYPE_BASIC" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET" "ScriptFile" "abilities/custom/axe/axe_battle_hunger_sb2019" "AbilityTextureName" "custom/abilities/axe/axe_battle_hunger_sb2019" "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES" "SpellDispellableType" "SPELL_DISPELLABLE_NO" "FightRecapLevel" "1" "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO" "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY" "AbilityCastAnimation" "ACT_DOTA_OVERRIDE_ABILITY_2" "AbilityCastGestureSlot" "DEFAULT" // Casting //--------------------------------------------------------------------- "AbilityCastRange" "450" "AbilityCastPoint" "0.42" // Time //-------------------------------------------------------------------- "AbilityCooldown" "14" // Cost //------------------------------------------------------------ "AbilityManaCost" "100 135 170 205" // Special //-------------------------------------------------------------------------- "AbilitySpecial" { "01" { "var_type" "FIELD_FLOAT" "duration" "8.0 10.0 12.0 14.0" } "02" { "var_type" "FIELD_INTEGER" "lifesteal_pct" "6 9 12 15" } "03" { "var_type" "FIELD_INTEGER" "bonus_attack_speed" "15 30 45 60" } "04" { "var_type" "FIELD_INTEGER" "bonus_move_speed_pct" "7" } "05" { "var_type" "FIELD_INTEGER" "plus_scepter_range" "350" } "06" { "var_type" "FIELD_INTEGER" "plus_scepter_targets" "1" } } } |
vscripts/abilities/custom/axe/axe_battle_hunger_sb2019.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 axe_battle_hunger_sb2019 = class({}) LinkLuaModifier( "axe_battle_hunger_sb2019_modifier", "abilities/custom/axe/axe_battle_hunger_sb2019_modifier", LUA_MODIFIER_MOTION_NONE ) -------------------------------------------------------------------------------- --function axe_battle_hunger_sb2019:GetCastAnimation() -- return ACT_DOTA_CAST_ABILITY_1 --end -------------------------------------------------------------------------------- function axe_battle_hunger_sb2019:OnSpellStart() if IsServer() then local target = self:GetCursorTarget() if target == nil then return 0 end self.hHitEntities = {} EmitSoundOn( "Hero_Axe.Battle_Hunger", self:GetCaster() ) self.duration = self:GetSpecialValueFor( "duration" ) self.plus_scepter_range = self:GetSpecialValueFor( "plus_scepter_range" ) self.plus_scepter_targets = self:GetSpecialValueFor( "plus_scepter_targets" ) ParticleManager:CreateParticle( "particles/units/heroes/hero_axe/axe_battle_hunger_cast.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() ) --ParticleManager:CreateParticle( "particles/econ/items/axe/axe_cinder/axe_cinder_battle_hunger.vpcf", PATTACH_OVERHEAD_FOLLOW, target ) target:AddNewModifier(self:GetCaster(),self,"axe_battle_hunger_sb2019_modifier", {duration = self.duration}) table.insert( self.hHitEntities, target ) if self:GetCaster():HasModifier("modifier_item_plus_scepter") or self:GetCaster():HasModifier("modifier_item_plus_scepter_icon") then local units = FindUnitsInRadius( DOTA_TEAM_GOODGUYS, target:GetOrigin(), nil, self.plus_scepter_range, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_CLOSEST, false ) local numcasted = 0 if units ~= nil and #units > 0 then for _, unit in pairs ( units ) do if unit ~= nil and unit:IsInvulnerable() == false and numcasted < self.plus_scepter_targets and not TableContainsValue( self.hHitEntities, unit ) then --ParticleManager:CreateParticle( "particles/econ/items/axe/axe_cinder/axe_cinder_battle_hunger.vpcf", PATTACH_OVERHEAD_FOLLOW, unit ) unit:AddNewModifier(self:GetCaster(),self,"axe_battle_hunger_sb2019_modifier", {duration = self.duration}) numcasted = numcasted + 1 table.insert( self.hHitEntities, unit ) end end end end end end |
vscripts/abilities/custom/axe/axe_battle_hunger_sb2019_modifier.lua |
---|
-- Project Name: Siltbreaker Hard Mode -- Author: BroFrank -- SteamAccountID: 144490770 axe_battle_hunger_sb2019_modifier = class({}) ------------------------------------------------------------------------------ function axe_battle_hunger_sb2019_modifier:IsHidden() return false end -------------------------------------------------------------------------------- function axe_battle_hunger_sb2019_modifier:IsPurgable() return false end -------------------------------------------------------------------------------- function axe_battle_hunger_sb2019_modifier:IsDebuff() return false end -------------------------------------------------------------------------------- function axe_battle_hunger_sb2019_modifier:RemoveOnDeath() return true end ---------------------------------------- function axe_battle_hunger_sb2019_modifier:OnCreated( kv ) self.lifesteal_pct = self:GetAbility():GetSpecialValueFor( "lifesteal_pct" ) self.bonus_attack_speed = self:GetAbility():GetSpecialValueFor( "bonus_attack_speed" ) self.bonus_move_speed_pct = self:GetAbility():GetSpecialValueFor( "bonus_move_speed_pct" ) local nFXIndex1 = ParticleManager:CreateParticle( "particles/econ/items/axe/axe_cinder/axe_cinder_battle_hunger.vpcf", PATTACH_OVERHEAD_FOLLOW, self:GetParent() ) self:AddParticle( nFXIndex1, false, false, -1, false, true ) end ---------------------------------------- function axe_battle_hunger_sb2019_modifier:DeclareFunctions() local funcs = { MODIFIER_EVENT_ON_TAKEDAMAGE, MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT, } return funcs end ---------------------------------------- function axe_battle_hunger_sb2019_modifier:GetModifierAttackSpeedBonus_Constant( params ) return self.bonus_attack_speed end ---------------------------------------- function axe_battle_hunger_sb2019_modifier:GetModifierMoveSpeedBonus_Percentage( params ) return self.bonus_move_speed_pct end -------------------------------------------------------------------------------- function axe_battle_hunger_sb2019_modifier:OnTakeDamage( params ) if IsServer() then local Attacker = params.attacker local Target = params.unit local Ability = params.inflictor local flDamage = params.damage print("Attacker:"..Attacker:GetUnitName().." ".."Target:"..Target:GetUnitName()) if (Attacker ~= self:GetParent() and Attacker:GetOwnerEntity() ~= self:GetParent()) or Target == nil then return 0 end if Attacker:IsIllusion() ~= nil and Attacker:IsIllusion() == true then return 0 end if Attacker ~= nil and Target ~= nil and Attacker == Target then return 0 end if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_REFLECTION ) == DOTA_DAMAGE_FLAG_REFLECTION then return 0 end if bit.band( params.damage_flags, DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL ) == DOTA_DAMAGE_FLAG_NO_SPELL_LIFESTEAL then return 0 end local flLifesteal = flDamage * self.lifesteal_pct / 100 local nFXIndex if Attacker ~= self:GetParent() and (Attacker:GetOwnerEntity() ~= nil and Attacker:GetOwnerEntity() == self:GetParent()) then if Ability == nil then nFXIndex = ParticleManager:CreateParticle( "particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker:GetOwnerEntity() ) else nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker:GetOwnerEntity() ) end Attacker:GetOwnerEntity():Heal( flLifesteal, self:GetAbility() ) else if Ability == nil then nFXIndex = ParticleManager:CreateParticle( "particles/generic_gameplay/generic_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) else nFXIndex = ParticleManager:CreateParticle( "particles/items3_fx/octarine_core_lifesteal.vpcf", PATTACH_ABSORIGIN_FOLLOW, Attacker ) end Attacker:Heal( flLifesteal, self:GetAbility() ) end ParticleManager:ReleaseParticleIndex( nFXIndex ) end return 0 end |