Files
2HUCardTDGame/scripts/vscripts/abilities/abilitytenshi.lua
2021-10-24 15:36:18 -04:00

242 lines
8.0 KiB
Lua
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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