function OnSpellStartClownpiece01(keys) local caster = EntIndexToHScript(keys.caster_entindex) local targetPoint = keys.target_points[1] if caster.thtd_clown_ball == nil then local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_hecatia/ability_hecatia_01_moon.vpcf", PATTACH_CUSTOMORIGIN, caster) ParticleManager:SetParticleControl(effectIndex, 0, targetPoint + Vector(0,0,128)) ParticleManager:SetParticleControl(effectIndex, 1, Vector(0.3,0,0)) ParticleManager:SetParticleControl(effectIndex, 2, Vector(150,0,0)) caster.thtd_clown_ball = { ["Vector"] = targetPoint + Vector(0,0,128), ["EffectIndex"] = effectIndex } else caster.thtd_clown_ball["Vector"] = targetPoint + Vector(0,0,128) ParticleManager:SetParticleControl(effectIndex, 0, caster.thtd_clown_ball["Vector"]) end local powerDamage = 0 local pv = caster:GetAbilityPowerValue(keys.ability:GetAbilityName()) if pv ~= nil then powerDamage = pv[1]/100 end local range = keys.range local count = 1 caster:SetContextThink(DoUniqueString("thtd_clownpiece_01_cast"), function() if GameRules:IsGamePaused() then return 0.03 end count = count - 1 if count < 0 then ClownpieceRemoveAllBall(keys) return nil end for i=1,12 do local forward1 = Vector(math.cos(i*math.pi/6),math.sin(i*math.pi/6),0) local forward2 = Vector(math.cos(i*math.pi/6+math.pi/2),math.sin(i*math.pi/6+math.pi/2),0) local startPoint = caster.thtd_clown_ball["Vector"] local endPoint = caster.thtd_clown_ball["Vector"] + forward1 * range + Vector(0,0,128) local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_hecatia/ability_hecatia_moon_reflex.vpcf", PATTACH_CUSTOMORIGIN, caster) ParticleManager:SetParticleControl(effectIndex , 0, startPoint) ParticleManager:SetParticleControl(effectIndex , 1, endPoint) ParticleManager:SetParticleControl(effectIndex , 9, startPoint) ParticleManager:DestroyParticleSystem(effectIndex,false) end local targets = THTD_FindUnitsInRadius(caster,caster.thtd_clown_ball["Vector"],range) local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * (1 + powerDamage) 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 return 0.5 end, 0.3) end function ClownpieceRemoveAllBall(keys) local caster = EntIndexToHScript(keys.caster_entindex) if caster.thtd_clown_ball ~= nil then local effectIndex = caster.thtd_clown_ball["EffectIndex"] ParticleManager:DestroyParticleSystem(effectIndex,true) caster.thtd_clown_ball = nil end end function OnSpellStartClownpiece02(keys) local caster = keys.caster local targetPoint = keys.target_points[1] local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_junko/ability_junko_03.vpcf", PATTACH_CUSTOMORIGIN, nil) ParticleManager:SetParticleControl(effectIndex, 0, targetPoint) ParticleManager:DestroyParticleSystem(effectIndex,false) local powerRange = 0 local powerDuration = 0 local pv = caster:GetAbilityPowerValue(keys.ability:GetAbilityName()) if pv ~= nil then powerRange = pv[1] powerDuration = pv[2] end local radius = keys.radius + powerRange local duration_time = keys.duration_time + powerDuration local damage_up_other = keys.damage_up_other local targets = THTD_FindUnitsInRadius(caster,targetPoint,radius) local count = #targets for k,v in pairs(targets) do local modifier = v:FindModifierByName("modifier_clownpiece_debuff") if modifier==nil then keys.ability:ApplyDataDrivenModifier(caster,v,"modifier_clownpiece_debuff", {Duration = duration_time}) else modifier:SetDuration(duration_time,false) end end if count > 0 then local powerDamageUp = 0 local pv = caster:GetAbilityPowerValue("thtd_clownpiece_02") if pv ~= nil then powerDamageUp = pv[3] end local factor = powerDamageUp + keys.damage_up_self caster.thtd_clownpiece_02_buff_bonus = count * keys.damage_up_other caster.thtd_clownpiece_02_self_bonus = caster.thtd_clownpiece_02_buff_bonus * factor local hero = caster:GetOwner() for k,v in pairs(hero.thtd_hero_tower_list) do local unitName = v:GetUnitName() if unitName == "clownpiece" or unitName == "lily" or unitName == "luna" or unitName == "star" or unitName == "sunny" or unitName == "cirno" or unitName == "daiyousei" or unitName == "mugiyousei" or unitName == "hanadayousei" or unitName == "maidyousei" then v:RemoveModifierByName("modifier_clownpiece_buff") keys.ability:ApplyDataDrivenModifier(caster,v,"modifier_clownpiece_buff", {Duration = duration_time}):SetStackCount(count) end end end end function OnCreatedClownpiece02Buff(keys) if keys.target:GetUnitName() == "clownpiece" then keys.target:AddDamageOutgoingAll(keys.caster.thtd_clownpiece_02_self_bonus or 0, "thtd_clownpiece_02_bonus") else keys.target:AddDamageOutgoingAll(keys.caster.thtd_clownpiece_02_buff_bonus or 0, "thtd_clownpiece_02_bonus") end end function OnDestroyClownpiece02Buff(keys) keys.target:AddDamageOutgoingAll("thtd_clownpiece_02_bonus") end function OnSpellStartClownpiece03(keys) local caster = keys.caster local targetPoint = keys.target_points[1] local casterPoint = caster:GetAbsOrigin() local forward = (targetPoint - casterPoint):Normalized() local powerDuration = 0 local pv = caster:GetAbilityPowerValue(keys.ability:GetAbilityName()) if pv ~= nil then powerDuration = pv[2] end if caster:IsPower666() then for i=1,6 do local forward1 = Vector(math.cos(i*math.pi/3),math.sin(i*math.pi/3),0) local effectIndex = ParticleManager:CreateParticle("particles/econ/items/jakiro/jakiro_ti8_immortal_head/jakiro_ti8_dual_breath_fire.vpcf", PATTACH_CUSTOMORIGIN, caster) ParticleManager:SetParticleControl(effectIndex, 0, casterPoint) ParticleManager:SetParticleControl(effectIndex, 1, forward1 * keys.distance) ParticleManager:DestroyParticleSystem(effectIndex,false) end local targets = THTD_FindUnitsInRadius(caster,casterPoint,keys.distance + 100) for k,v in pairs(targets) do keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_clownpiece_03_debuff", {Duration = keys.duration_time + powerDuration}) end else local effectIndex = ParticleManager:CreateParticle("particles/econ/items/jakiro/jakiro_ti8_immortal_head/jakiro_ti8_dual_breath_fire.vpcf", PATTACH_CUSTOMORIGIN, caster) ParticleManager:SetParticleControl(effectIndex, 0, casterPoint) ParticleManager:SetParticleControl(effectIndex, 1, forward * keys.distance) ParticleManager:DestroyParticleSystem(effectIndex,false) -- local effectIndex2 = ParticleManager:CreateParticle("particles/econ/items/jakiro/jakiro_ti8_immortal_head/jakiro_ti8_dual_breath_ice.vpcf", PATTACH_CUSTOMORIGIN, caster) -- ParticleManager:SetParticleControl(effectIndex2, 0, casterPoint) -- ParticleManager:SetParticleControl(effectIndex2, 1, (targetPoint - casterPoint):Normalized() * 1000) -- ParticleManager:DestroyParticleSystem(effectIndex2,false) local targets = FindUnitsInLine( caster:GetTeamNumber(), casterPoint, casterPoint + forward * (keys.distance + 100), nil, 300, keys.ability:GetAbilityTargetTeam(), keys.ability:GetAbilityTargetType(), keys.ability:GetAbilityTargetFlags() ) for k,v in pairs(targets) do keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_clownpiece_03_debuff", {Duration = keys.duration_time + powerDuration}) end end end function OnThinkClownpiece03(keys) local caster = keys.caster local target = keys.target local powerDamage = 0 local pv = caster:GetAbilityPowerValue(keys.ability:GetAbilityName()) if pv ~= nil then powerDamage = pv[1] end if caster:IsPower666() then powerDamage = powerDamage + 30 end local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) + powerDamage * caster:THTD_GetStarDamage() if caster:IsPower999() then damage = damage * 3 end damage = damage * keys.tick local DamageTable = { ability = keys.ability, victim = target, attacker = caster, damage = damage, damage_type = keys.ability:GetAbilityDamageType(), damage_flags = DOTA_DAMAGE_FLAG_NONE } UnitDamageTarget(DamageTable) end