95 lines
3.6 KiB
Lua
Executable File
95 lines
3.6 KiB
Lua
Executable File
function OnIku01AttackLanded(keys)
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local target = keys.target
|
|
local targetPoint = target:GetOrigin()
|
|
|
|
if caster.thtd_iku_01_attack_count == nil then
|
|
caster.thtd_iku_01_attack_count = 0
|
|
end
|
|
|
|
caster.thtd_iku_01_attack_count = caster.thtd_iku_01_attack_count + 1
|
|
|
|
if caster.thtd_iku_01_attack_count >= keys.max_count then
|
|
caster.thtd_iku_01_attack_count = 0
|
|
caster:EmitSound("Sound_THTD.thtd_iku_01")
|
|
|
|
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
|
|
local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.radius)
|
|
for k,v in pairs(targets) do
|
|
if v:HasModifier("modifier_iku_01_debuff_lock") == false then
|
|
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_iku_01_debuff", {Duration = keys.stun_time})
|
|
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_iku_01_debuff_lock", nil)
|
|
end
|
|
|
|
local DamageTable = {
|
|
ability = keys.ability,
|
|
victim = v,
|
|
attacker = caster,
|
|
damage = damage,
|
|
damage_type = keys.ability:GetAbilityDamageType(),
|
|
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
|
}
|
|
UnitDamageTarget(DamageTable)
|
|
end
|
|
|
|
local effectIndex = ParticleManager:CreateParticle("particles/heroes/iku/ability_iku_01_explosion.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
|
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
|
|
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
|
end
|
|
end
|
|
|
|
function OnIku02SpellStart(keys)
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local targetPoint = keys.target_points[1]
|
|
|
|
local time = keys.duration_time
|
|
local tick = keys.tick_time
|
|
|
|
Iku02CreateEffect(keys)
|
|
caster:EmitSound("Sound_THTD.thtd_iku_02")
|
|
|
|
caster:SetContextThink(DoUniqueString("thtd_iku02_lightning"),
|
|
function()
|
|
if GameRules:IsGamePaused() then return 0.03 end
|
|
if time <= 0 then return nil end
|
|
|
|
local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.radius)
|
|
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * tick
|
|
for k,v in pairs(targets) do
|
|
local DamageTable = {
|
|
ability = keys.ability,
|
|
victim = v,
|
|
attacker = caster,
|
|
damage = damage,
|
|
damage_type = keys.ability:GetAbilityDamageType(),
|
|
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
|
}
|
|
UnitDamageTarget(DamageTable)
|
|
end
|
|
time = time - tick
|
|
return tick
|
|
end,
|
|
0)
|
|
end
|
|
|
|
function Iku02CreateEffect(keys)
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local targetPoint = keys.target_points[1]
|
|
local vec = caster:GetOrigin() + 700*caster:GetForwardVector() + Vector(0,0,128)
|
|
|
|
local particle = ParticleManager:CreateParticle("particles/thd2/heroes/iku/ability_iku_04_light_b.vpcf",PATTACH_CUSTOMORIGIN,caster)
|
|
ParticleManager:SetParticleControl(particle,0,vec)
|
|
ParticleManager:SetParticleControlForward(particle,0,caster:GetForwardVector())
|
|
ParticleManager:SetParticleControl(particle,2,vec)
|
|
ParticleManager:SetParticleControl(particle,3,vec)
|
|
ParticleManager:SetParticleControl(particle,4,-caster:GetForwardVector())
|
|
ParticleManager:SetParticleControl(particle,5,-caster:GetForwardVector())
|
|
|
|
ParticleManager:DestroyParticleSystemTime(particle,keys.duration_time)
|
|
|
|
particle = ParticleManager:CreateParticle("particles/thd2/heroes/iku/ability_iku_04_model.vpcf",PATTACH_CUSTOMORIGIN,caster)
|
|
ParticleManager:SetParticleControl(particle,0,caster:GetOrigin()+caster:GetForwardVector()*350 + Vector(0,0,128))
|
|
ParticleManager:SetParticleControlForward(particle,0,caster:GetForwardVector())
|
|
|
|
ParticleManager:DestroyParticleSystemTime(particle,keys.duration_time)
|
|
end |