Код:
"sleight_of_fist_no_target"
{
// General
//-------------------------------------------------------------------------------------------------------------
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
"AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES"
"MaxLevel" "8"
"RequiredLevel" "3"
"FightRecapLevel" "3"
"AbilityCastRange" "200 250 300 350 400 450 500 550 600 600"
"AbilityCastPoint" "0"
"AbilityTextureName" "tabusha"
"AOERadius" "200 250 300 350 400 450 500 550 600 600"
// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "15.0 15.0 15.0 14.0 12.0 10.0 8.0 5.0 4.0 3.5"
// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "50 120 150 150 150 200 200 300 350 400 "
// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"radius" "200 300 400 450 500 550 600 650 700 800"
}
"02"
{
"var_type" "FIELD_INTEGER"
"bonus_hero_damage" "200"
}
"03"
{
"var_type" "FIELD_FLOAT"
"attack_interval" "0.1"
}
"04"
{
"var_type" "FIELD_INTEGER"
"creep_damage_penalty" "120 140 160 180 200 220 240 260 280 300"
}
}
// Data driven
//-------------------------------------------------------------------------------------------------------------
"precache"
{
"soundfile" "soundevents/game_sounds_heroes/game_sounds_ember_spirit.vsndevts"
"particle" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleight_of_fist_cast.vpcf"
"particle" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleight_of_fist_caster.vpcf" // for dummy
"particle" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleight_of_fist_targetted_marker.vpcf"
"particle" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleightoffist_tgt.vpcf"
"particle" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleightoffist_trail.vpcf"
}
"OnSpellStart"
{
"FireSound"
{
"Target" "CASTER"
"EffectName" "Hero_EmberSpirit.SleightOfFist.Cast"
}
"ApplyModifier"
{
"Target" "CASTER"
"ModifierName" "modifier_sleight_of_fist_caster_datadriven"
}
"RunScript"
{
"ScriptFile" "scripts/npc_abilities/sleight_of_fist_no_target.lua"
"Function" "sleight_of_fist_init"
"Target" "POINT"
}
}
"Modifiers"
{
"modifier_sleight_of_fist_caster_datadriven"
{
"IsPurgable" "0"
"States"
{
"MODIFIER_STATE_INVULNERABLE" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_NO_HEALTH_BAR" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_UNSELECTABLE" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_NO_UNIT_COLLISION" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_ROOTED" "MODIFIER_STATE_VALUE_ENABLED"
}
}
"modifier_sleight_of_fist_dummy_datadriven"
{
"IsPurgable" "0"
"IsHidden" "1"
"OnCreated"
{
"AttachEffect"
{
"Target" "TARGET"
"EffectName" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleight_of_fist_caster.vpcf"
"EffectAttachType" "start_at_customorigin"
"ControlPointEntities"
{
"TARGET" "attach_hitloc"
}
}
}
"States"
{
"MODIFIER_STATE_INVULNERABLE" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_NO_HEALTH_BAR" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_NO_UNIT_COLLISION" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_NOT_ON_MINIMAP" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_UNSELECTABLE" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_COMMAND_RESTRICTED" "MODIFIER_STATE_VALUE_ENABLED"
"MODIFIER_STATE_DISARMED" "MODIFIER_STATE_VALUE_ENABLED"
}
}
"modifier_sleight_of_fist_target_datadriven"
{
"IsPurgable" "0"
"EffectName" "particles/units/heroes/hero_ember_spirit/ember_spirit_sleight_of_fist_targetted_marker.vpcf"
"EffectAttachType" "follow_overhead"
}
"modifier_sleight_of_fist_target_hero_datadriven"
{
"IsPurgable" "0"
"IsHidden" "1"
"Properties"
{
"MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE" "%bonus_hero_damage"
}
}
"modifier_sleight_if_fist_target_creep_datadriven"
{
"IsPurgable" "0"
"IsHidden" "1"
"Properties"
{
"MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE" "%creep_damage_penalty"
}
}
}
}
Lua:
--[[
Author: kritth
Date: 13.01.2015.
Mark targets, jump to attack, ignore if invisible
]]
function sleight_of_fist_init( keys )
-- Cannot cast multiple stacks
if keys.caster.sleight_of_fist_active ~= nil and keys.caster.sleight_of_fist_action == true then
keys.ability:RefundManaCost()
return nil
end
-- Inheritted variables
local caster = keys.caster
local targetPoint = caster:GetAbsOrigin()
local ability = keys.ability
local radius = ability:GetLevelSpecialValueFor( "radius", ability:GetLevel() - 1 )
local attack_interval = ability:GetLevelSpecialValueFor( "attack_interval", ability:GetLevel() - 1 )
local modifierTargetName = "modifier_sleight_of_fist_target_datadriven"
local modifierHeroName = "modifier_sleight_of_fist_target_hero_datadriven"
local modifierCreepName = "modifier_sleight_if_fist_target_creep_datadriven"
local casterModifierName = "modifier_sleight_of_fist_caster_datadriven"
local dummyModifierName = "modifier_sleight_of_fist_dummy_datadriven"
local particleSlashName = "particles/units/heroes/hero_ember_spirit/ember_spirit_sleightoffist_tgt.vpcf"
local particleTrailName = "particles/units/heroes/hero_ember_spirit/ember_spirit_sleightoffist_trail.vpcf"
local particleCastName = "particles/units/heroes/hero_ember_spirit/ember_spirit_sleight_of_fist_cast.vpcf"
local slashSound = "Hero_EmberSpirit.SleightOfFist.Damage"
-- Targeting variables
local targetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY
local targetType = DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO
local targetFlag = DOTA_UNIT_TARGET_FLAG_NO_INVIS
local unitOrder = FIND_ANY_ORDER
-- Necessary varaibles
local counter = 0
caster.sleight_of_fist_active = true
-- local dummy = CreateUnitByName( caster:GetName(), caster:GetAbsOrigin(), false, caster, nil, caster:GetTeamNumber() )
-- ability:ApplyDataDrivenModifier( caster, dummy, dummyModifierName, {} )
-- Casting particles
local castFxIndex = ParticleManager:CreateParticle( particleCastName, PATTACH_CUSTOMORIGIN, caster )
ParticleManager:SetParticleControl( castFxIndex, 0, targetPoint )
ParticleManager:SetParticleControl( castFxIndex, 1, Vector( radius, 0, 0 ) )
Timers:CreateTimer( 0.1, function()
ParticleManager:DestroyParticle( castFxIndex, false )
ParticleManager:ReleaseParticleIndex( castFxIndex )
end
)
-- Start function
local castFxIndex = ParticleManager:CreateParticle( particleCastName, PATTACH_CUSTOMORIGIN, caster )
local units = FindUnitsInRadius(
caster:GetTeamNumber(), targetPoint, caster, radius, targetTeam,
targetType, targetFlag, unitOrder, false
)
for _, target in pairs( units ) do
counter = counter + 1
ability:ApplyDataDrivenModifier( caster, target, modifierTargetName, {} )
Timers:CreateTimer( counter * attack_interval, function()
-- Only jump to it if it's alive
if target:IsAlive() then
-- Create trail particles
local trailFxIndex = ParticleManager:CreateParticle( particleTrailName, PATTACH_CUSTOMORIGIN, target )
ParticleManager:SetParticleControl( trailFxIndex, 0, target:GetAbsOrigin() )
ParticleManager:SetParticleControl( trailFxIndex, 1, caster:GetAbsOrigin() )
Timers:CreateTimer( 0.1, function()
ParticleManager:DestroyParticle( trailFxIndex, false )
ParticleManager:ReleaseParticleIndex( trailFxIndex )
return nil
end
)
-- Move hero there
FindClearSpaceForUnit( caster, target:GetAbsOrigin(), false )
if target:IsHero() then
ability:ApplyDataDrivenModifier( caster, caster, modifierHeroName, {} )
else
ability:ApplyDataDrivenModifier( caster, caster, modifierCreepName, {} )
end
caster:PerformAttack(target, true, true, true, false, false, false, false) -- FIXED
-- Slash particles
local slashFxIndex = ParticleManager:CreateParticle( particleSlashName, PATTACH_ABSORIGIN_FOLLOW, target )
StartSoundEvent( slashSound, caster )
Timers:CreateTimer( 0.1, function()
ParticleManager:DestroyParticle( slashFxIndex, false )
ParticleManager:ReleaseParticleIndex( slashFxIndex )
StopSoundEvent( slashSound, caster )
return nil
end
)
-- Clean up modifier
caster:RemoveModifierByName( modifierHeroName )
caster:RemoveModifierByName( modifierCreepName )
target:RemoveModifierByName( modifierTargetName )
end
return nil
end
)
end
-- Return caster to origin position
Timers:CreateTimer( ( counter + 1 ) * attack_interval, function()
-- FindClearSpaceForUnit( caster, dummy:GetAbsOrigin(), false )
-- dummy:RemoveSelf()
caster:RemoveModifierByName( casterModifierName )
caster.sleight_of_fist_active = false
return nil
end
)
end
function fengyuewubian ( keys )
local caster = keys.caster
local target = keys.target
local zhili=caster:GetIntellect()
local mingjie=caster:GetAgility()
local liliang=caster:GetStrength()
local damenum=zhili+mingjie+liliang
local damageTable = {victim=target,
attacker=caster,
damage=damenum*6,
damage_type=DAMAGE_TYPE_MAGICAL}
ApplyDamage(damageTable)
end
юзаю а он стоит