function OnJunko01SpellStart(keys) local caster = EntIndexToHScript(keys.caster_entindex) local target = keys.target -- if caster == target then return end if not target:THTD_IsTower() then return end if target:HasModifier("modifier_junko_01") then return end if target:GetPlayerOwnerID() ~= caster:GetPlayerOwnerID() then return end keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_junko_01", nil) local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_junko/ability_junko_01_buff.vpcf", PATTACH_CUSTOMORIGIN, caster) ParticleManager:SetParticleControlEnt(effectIndex , 0, target, 5, "follow_origin", Vector(0,0,0), true) local hasCombo = caster:HasModifier("modifier_thtd_junko_01_combo_buff") if hasCombo then if THTD_IsValid(caster.ability_junko_01_target1) == false then caster.ability_junko_01_target1 = target elseif THTD_IsValid(caster.ability_junko_01_target2) == false then caster.ability_junko_01_target2 = target else caster.ability_junko_01_target1 = caster.ability_junko_01_target2 caster.ability_junko_01_target2 = target end else caster.ability_junko_01_target1 = target end target:SetContextThink(DoUniqueString("modifier_junko_01"), function() if GameRules:IsGamePaused() then return 0.03 end if target == nil or target:IsNull() or target:IsAlive() == false then ParticleManager:DestroyParticleSystem(effectIndex,true) if caster ~= nil and caster:IsNull() == false then if caster.ability_junko_01_target1 == target then caster.ability_junko_01_target1 = nil elseif caster.ability_junko_01_target2 == target then caster.ability_junko_01_target2 = nil end if caster.ability_junko_01_target1 == nil and caster.ability_junko_01_target2 == nil then ParticleManager:DestroyParticleSystem(caster.ability_junko_01_effectIndex,true) caster.ability_junko_01_effectIndex = nil end end return nil end local isCancel = false if THTD_IsValid(caster) == false then isCancel = true if caster ~= nil and caster:IsNull() == false then caster.ability_junko_01_target1 = nil caster.ability_junko_01_target2 = nil end else if caster:HasModifier("modifier_thtd_junko_01_combo_buff") == false then if caster.ability_junko_01_target2 ~= nil then caster.ability_junko_01_target1 = caster.ability_junko_01_target2 caster.ability_junko_01_target2 = nil end end isCancel = (caster.ability_junko_01_target1 ~= target and caster.ability_junko_01_target2 ~= target) end if isCancel then if target:HasModifier("modifier_junko_01") then target:RemoveModifierByName("modifier_junko_01") end ParticleManager:DestroyParticleSystem(effectIndex,true) if caster ~= nil and caster:IsNull() == false then if caster.ability_junko_01_target1 == target then caster.ability_junko_01_target1 = nil elseif caster.ability_junko_01_target2 == target then caster.ability_junko_01_target2 = nil end end if caster.ability_junko_01_target1 == nil and caster.ability_junko_01_target2 == nil then ParticleManager:DestroyParticleSystem(caster.ability_junko_01_effectIndex,true) caster.ability_junko_01_effectIndex = nil end return nil end return 0.2 end, 0.2) end function OnCreatedJunko01Buff(keys) local target = keys.target local bonus = 0 if target:GetUnitName() == "hecatia" then bonus = keys.hecatia_up else bonus = keys.damage_up end target:AddDamageOutgoingPure(bonus, "thtd_junko_01_damage_up") end function OnUpgradeJunko01Buff(keys) local caster = keys.caster local targets = {} if caster.ability_junko_01_target1 ~= nil then table.insert(targets, caster.ability_junko_01_target1) end if caster.ability_junko_01_target2 ~= nil then table.insert(targets, caster.ability_junko_01_target2) end for _,target in pairs(targets) do local bonus = 0 if target:GetUnitName() == "hecatia" then bonus = keys.hecatia_up else bonus = keys.damage_up end target:AddDamageOutgoingPure(bonus, "thtd_junko_01_damage_up") end targets = {} end function OnDestroyJunko01Buff(keys) keys.target:AddDamageOutgoingPure("thtd_junko_01_damage_up") end function OnJunko02SpellStart(keys) local caster = EntIndexToHScript(keys.caster_entindex) local casterForward = caster:GetForwardVector() local casterPoint = caster:GetOrigin() local point = THTDSystem:FindRadiusOnePointPerfectAOE(caster, caster:Script_GetAttackRange(), 390 * 2) if point ~= nil then casterForward = (Vector(point.x, point.y,casterPoint.z) - casterPoint):Normalized() end local duration_time = math.floor(keys.duration_time * 100 + 0.5) / 100 local tick = math.floor(keys.tick * 100 + 0.5) / 100 local time = duration_time caster:SetContextThink("modifier_junko_02_think", function() if GameRules:IsGamePaused() then return 0.03 end if not THTD_IsValid(caster) then return nil end if time <= 0 then return nil end local forwardCos = casterForward.x local forwardSin = casterForward.y local angle = (39 - 6.5 * RandomInt(0,12)) / 180 * math.pi local forward = Vector( math.cos(angle)*forwardCos - math.sin(angle)*forwardSin, forwardSin*math.cos(angle) + forwardCos*math.sin(angle),0) local info = { Ability = keys.ability, EffectName = "particles/heroes/thtd_junko/ability_junko_02.vpcf", vSpawnOrigin = casterPoint + forward * 500 - casterForward * 500 + Vector(0,0,128), fDistance = 1200, fStartRadius = 150, fEndRadius = 150, Source = caster, bHasFrontalCone = false, bReplaceExisting = false, iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY, iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_NONE, iUnitTargetType = DOTA_UNIT_TARGET_HERO, -- 解决撞击后消失 fExpireTime = GameRules:GetGameTime() + 10.0, bDeleteOnHit = false, vVelocity = casterForward * 1800, bProvidesVision = true, iVisionRadius = 1000, iVisionTeamNumber = caster:GetTeamNumber() } local projectile = ProjectileManager:CreateLinearProjectile(info) ParticleManager:DestroyLinearProjectileSystem(projectile,false) local targets = FindUnitsInLine( caster:GetTeamNumber(), casterPoint, casterPoint + casterForward * 1500, nil, 390, keys.ability:GetAbilityTargetTeam(), keys.ability:GetAbilityTargetType(), keys.ability:GetAbilityTargetFlags() ) local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) 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, tick) end function OnJunko03SpellStart(keys) local caster = EntIndexToHScript(keys.caster_entindex) local friends = THTD_FindFriendlyUnitsAll(caster) local duration_time = math.floor(keys.duration_time * 100 + 0.5) / 100 local damage_up = keys.damage_up local power_suck = keys.power_suck local modifier = caster:FindModifierByName("modifier_junko_03_buff") if modifier == nil then keys.ability:ApplyDataDrivenModifier(caster, caster, "modifier_junko_03_buff", nil) else modifier:SetDuration(duration_time, false) end local total = 0 for k,v in pairs(friends) do if v ~= caster then local power = v:THTD_GetBasePower() local bonus_power = math.min(power, power_suck) if bonus_power > 0 then total = total + bonus_power v:THTD_AddBasePower(-bonus_power) v:SetContextThink(DoUniqueString("dota_timer"), function() if GameRules:IsGamePaused() then return 0.1 end v:THTD_AddBasePower(bonus_power) return nil end, duration_time) end end end if total > 0 then caster:THTD_AddBasePower(total) caster:SetContextThink(DoUniqueString("dota_timer"), function() if GameRules:IsGamePaused() then return 0.1 end caster:THTD_AddBasePower(-total) return nil end, duration_time) end local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_junko/ability_junko_03.vpcf", PATTACH_CUSTOMORIGIN, nil) ParticleManager:SetParticleControl(effectIndex, 0, caster:GetAbsOrigin()) ParticleManager:DestroyParticleSystem(effectIndex,false) end function OnCreatedJunko03Buff(keys) keys.target:AddDamageOutgoingAll(keys.damage_up, "thtd_junko_03_damage_up") end function OnDestroyJunko03Buff(keys) keys.target:AddDamageOutgoingAll("thtd_junko_03_damage_up") end function OnJunko04SpellStart(keys) local caster = EntIndexToHScript(keys.caster_entindex) local targetPoint = keys.target_points[1] local damage = caster:THTD_GetAbilityPowerDamage(keys.ability, 1) local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.range) 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) if THTD_IsValid(v) and v:HasModifier("modifier_junko_04_debuff") == false then keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_junko_04_debuff", nil) end end local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_junko/ability_junko_04.vpcf", PATTACH_CUSTOMORIGIN, nil) ParticleManager:SetParticleControl(effectIndex, 0, targetPoint+Vector(0,0,64)) ParticleManager:SetParticleControl(effectIndex, 1, Vector(1,0,0)) ParticleManager:SetParticleControl(effectIndex, 2, Vector(255,255,255)) ParticleManager:SetParticleControl(effectIndex, 3, targetPoint) ParticleManager:DestroyParticleSystem(effectIndex,false) end function OnThinkJunko04Debuff(keys) local caster = keys.caster local target = keys.target local damage = caster:THTD_GetAbilityPowerDamage(keys.ability, 2) 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