242 lines
8.0 KiB
Lua
Executable File
242 lines
8.0 KiB
Lua
Executable File
function OnTenshi01SpellStart(keys)
|
||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||
local target = keys.target
|
||
|
||
caster:EmitSound("Sound_THTD.thtd_tenshi_01")
|
||
|
||
local targets = THTD_FindUnitsInRadius(caster,target:GetOrigin(),keys.range)
|
||
|
||
local powerBonus = #targets * keys.bonus_attack_power
|
||
if powerBonus > 0 then
|
||
caster:THTD_AddBasePower(powerBonus)
|
||
caster:THTD_AddBaseAttack(powerBonus)
|
||
caster:SetContextThink(DoUniqueString("dota_timer"),
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.1 end
|
||
caster:THTD_AddBasePower(-powerBonus)
|
||
caster:THTD_AddBaseAttack(-powerBonus)
|
||
return nil
|
||
end,
|
||
keys.duration_time)
|
||
end
|
||
|
||
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
|
||
for k,v in pairs(targets) do
|
||
local DamageTable_aoe = {
|
||
ability = keys.ability,
|
||
victim = v,
|
||
attacker = caster,
|
||
damage = damage,
|
||
damage_type = keys.ability:GetAbilityDamageType(),
|
||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||
}
|
||
UnitDamageTarget(DamageTable_aoe)
|
||
end
|
||
|
||
local effectIndex = ParticleManager:CreateParticle("particles/econ/items/earthshaker/egteam_set/hero_earthshaker_egset/earthshaker_echoslam_start_fallback_low_egset.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||
ParticleManager:SetParticleControl(effectIndex, 0, target:GetOrigin())
|
||
ParticleManager:SetParticleControl(effectIndex, 1, target:GetOrigin())
|
||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||
end
|
||
|
||
function OnTenshi02AttackLanded(keys)
|
||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||
local target = keys.target
|
||
|
||
local targets = THTD_FindUnitsInRadius(caster,target:GetOrigin(),keys.range)
|
||
local damage = caster:THTD_GetAttack()
|
||
for k,v in pairs(targets) do
|
||
local DamageTable_aoe = {
|
||
ability = keys.ability,
|
||
victim = v,
|
||
attacker = caster,
|
||
damage = damage,
|
||
damage_type = keys.ability:GetAbilityDamageType(),
|
||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||
}
|
||
UnitDamageTarget(DamageTable_aoe)
|
||
end
|
||
|
||
if caster.thtd_attack_time == nil then
|
||
caster.thtd_attack_time = GameRules:GetGameTime() - 10
|
||
end
|
||
if caster.thtd_attack_time < GameRules:GetGameTime() - 1 then
|
||
caster.thtd_attack_time = GameRules:GetGameTime()
|
||
local effectIndex = ParticleManager:CreateParticle("particles/econ/items/earthshaker/egteam_set/hero_earthshaker_egset/earthshaker_echoslam_start_fallback_low_egset.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||
ParticleManager:SetParticleControl(effectIndex, 0, target:GetOrigin())
|
||
ParticleManager:SetParticleControl(effectIndex, 1, target:GetOrigin())
|
||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||
end
|
||
end
|
||
|
||
-- 被动modifier会在所有自定变量前生效,造成不起作用,不要用Passive
|
||
function OnThinkTenshi02Buff(keys)
|
||
local caster = keys.caster
|
||
|
||
local powerChance = 0
|
||
local pv = caster:GetAbilityPowerValue("thtd_tenshi_02")
|
||
if pv ~= nil then
|
||
powerChance = pv[1]
|
||
end
|
||
local bonus = keys.chance + powerChance
|
||
local add = bonus - (caster.thtd_tenshi_02_crit_chance or 0)
|
||
if add ~= 0 then
|
||
caster:THTD_AddCritChance(add)
|
||
caster.thtd_tenshi_02_crit_chance = bonus
|
||
end
|
||
|
||
local bonus = keys.crit
|
||
if caster:IsPower999() then
|
||
bonus = bonus * 2
|
||
end
|
||
local add = bonus - (caster.thtd_tenshi_02_crit_damage or 0)
|
||
if add ~= 0 then
|
||
caster:THTD_AddCritDamage(add)
|
||
caster.thtd_tenshi_02_crit_damage = bonus
|
||
end
|
||
end
|
||
|
||
function OnDestroyTenshi02Buff(keys)
|
||
local caster = keys.caster
|
||
|
||
if caster.thtd_tenshi_02_crit_chance ~= nil then
|
||
caster:THTD_AddCritChance(-caster.thtd_tenshi_02_crit_chance)
|
||
caster.thtd_tenshi_02_crit_chance = nil
|
||
end
|
||
if caster.thtd_tenshi_02_crit_damage ~= nil then
|
||
caster:THTD_AddCritDamage(-caster.thtd_tenshi_02_crit_damage)
|
||
caster.thtd_tenshi_02_crit_damage = nil
|
||
end
|
||
end
|
||
|
||
function OnTenshi03AttackLanded(keys)
|
||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||
local target = keys.target
|
||
|
||
if keys.ability:GetLevel() < 1 then return end
|
||
|
||
if caster.thtd_tenshi_03_attack_count == nil then
|
||
caster.thtd_tenshi_03_attack_count = 0
|
||
end
|
||
|
||
caster.thtd_tenshi_03_attack_count = caster.thtd_tenshi_03_attack_count + 1
|
||
|
||
if caster.thtd_tenshi_03_attack_count >= keys.max_count then
|
||
caster.thtd_tenshi_03_attack_count = 0
|
||
|
||
local powerDamage = 0
|
||
local pv = caster:GetAbilityPowerValue("thtd_tenshi_03")
|
||
if pv ~= nil then
|
||
powerDamage = pv[1]
|
||
end
|
||
caster.thtd_tenshi_03_damage = caster:THTD_GetAbilityPowerDamage(keys.ability) + powerDamage * caster:THTD_GetStarDamage()
|
||
|
||
caster:EmitSound("Hero_Magnataur.ShockWave.Particle")
|
||
|
||
local info =
|
||
{
|
||
Ability = keys.ability,
|
||
EffectName = "particles/heroes/tenshi/ability_tenshi_03.vpcf",
|
||
vSpawnOrigin = caster:GetAbsOrigin(),
|
||
fDistance = 1500,
|
||
fStartRadius = 380,
|
||
fEndRadius = 380,
|
||
Source = caster,
|
||
bHasFrontalCone = false,
|
||
bReplaceExisting = false,
|
||
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
|
||
iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_NONE,
|
||
iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
||
fExpireTime = GameRules:GetGameTime() + 10.0,
|
||
bDeleteOnHit = false,
|
||
vVelocity = caster:GetForwardVector() * 1800,
|
||
bProvidesVision = true,
|
||
iVisionRadius = 1000,
|
||
iVisionTeamNumber = caster:GetTeamNumber()
|
||
}
|
||
local projectile = ProjectileManager:CreateLinearProjectile(info)
|
||
ParticleManager:DestroyLinearProjectileSystem(projectile,false)
|
||
end
|
||
|
||
if caster:IsPower666() then
|
||
if caster.thtd_tenshi_power666_cast ~= true then
|
||
caster.thtd_tenshi_power666_cast = true
|
||
local time = 1.5
|
||
local forward = caster:GetForwardVector()
|
||
local effectIndex = ParticleManager:CreateParticle("particles/units/heroes/hero_elder_titan/elder_titan_earth_splitter.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
|
||
ParticleManager:SetParticleControl(effectIndex, 1, forward * 900) --方向
|
||
ParticleManager:SetParticleControl(effectIndex, 3, Vector(0, time, 0)) --时间
|
||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||
|
||
caster:SetContextThink(DoUniqueString("thtd_suwako_03_unit_up"),
|
||
function()
|
||
caster:EmitSound("Hero_ElderTitan.EarthSplitter.Cast")
|
||
local targets = FindUnitsInLine(
|
||
caster:GetTeamNumber(),
|
||
caster:GetOrigin(),
|
||
caster:GetOrigin() + forward * 1000,
|
||
nil,
|
||
300,
|
||
keys.ability:GetAbilityTargetTeam(),
|
||
keys.ability:GetAbilityTargetType(),
|
||
keys.ability:GetAbilityTargetFlags()
|
||
)
|
||
local damage = 666 * caster:THTD_GetStarDamage()
|
||
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
|
||
|
||
caster.thtd_tenshi_power666_cast = false
|
||
return nil
|
||
end,
|
||
time)
|
||
end
|
||
end
|
||
end
|
||
|
||
function OnTenshiProjectileHit(keys)
|
||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||
local target = keys.target
|
||
|
||
local DamageTable = {
|
||
ability = keys.ability,
|
||
victim = target,
|
||
attacker = caster,
|
||
damage = caster.thtd_tenshi_03_damage,
|
||
damage_type = keys.ability:GetAbilityDamageType(),
|
||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||
}
|
||
UnitDamageTarget(DamageTable)
|
||
end
|
||
|
||
function OnThinkTenshi03Buff(keys)
|
||
local target = keys.target
|
||
|
||
local targets = THTD_FindFriendlyUnitsInRadius(target,target:GetAbsOrigin(),keys.radius)
|
||
for k,v in pairs(targets) do
|
||
local modifier = v:FindModifierByName("modifier_tenshi_03_attack_speed_buff")
|
||
-- 持续时间比think大一点
|
||
if modifier == nil then
|
||
keys.ability:ApplyDataDrivenModifier(target, v, "modifier_tenshi_03_attack_speed_buff", {Duration = 0.3})
|
||
else
|
||
modifier:SetDuration(0.3, false)
|
||
end
|
||
end
|
||
end
|
||
|
||
function OnCreatedTenshi03Buff(keys)
|
||
keys.target:THTD_AddAttackSpeed(keys.attack_speed, "thtd_tenshi_03_bonus")
|
||
end
|
||
|
||
function OnDestroyTenshi03Buff(keys)
|
||
keys.target:THTD_AddAttackSpeed("thtd_tenshi_03_bonus")
|
||
end |