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

101 lines
4.6 KiB
Lua
Executable File

function GetNueExtraDamage(caster)
local ability = caster:FindAbilityByName("thtd_nue_01")
local basedamage = caster:THTD_GetAbilityPowerDamage(ability)
local extradamage = caster:GetModifierStackCount("modifier_nue_01_extradamage", caster) or 0
return math.max(1, extradamage) * basedamage
end
function OnNue01SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local cooldown = keys.ability:GetCooldownTime()
caster.thtd_nue_01_duration = cooldown
keys.ability:StartCooldown(cooldown)
keys.ability:ApplyDataDrivenModifier(caster, caster, "modifier_nue_01_extradamage", {Duration = cooldown})
caster.modifier_extradamage_count = math.min(caster:GetModifierStackCount("modifier_nue_01_extradamage", caster) + 1, keys.max_count)
caster:SetModifierStackCount("modifier_nue_01_extradamage", caster, caster.modifier_extradamage_count)
local effectIndex = ParticleManager:CreateParticle("particles/heroes/nue/ability_nue_01_ball.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControlEnt(effectIndex , 0, caster, 5, "attach_ball", Vector(0,0,0), true)
ParticleManager:SetParticleControlEnt(effectIndex , 1, caster, 5, "attach_ball", Vector(0,0,0), true)
ParticleManager:DestroyParticleSystemTime(effectIndex,cooldown)
end
function OnNue01AttackLanded(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
if target.thtd_damage_lock == true then return end
local effectIndex = ParticleManager:CreateParticle("particles/units/heroes/hero_templar_assassin/templar_assassin_meld_hit.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControlEnt(effectIndex , 0, target, 5, "attach_hitloc", Vector(0,0,0), true)
ParticleManager:SetParticleControlEnt(effectIndex , 3, target, 5, "attach_hitloc", Vector(0,0,0), true)
local DamageTable = {
victim = target,
attacker = caster,
ability = keys.ability,
damage = GetNueExtraDamage(caster) * keys.attack_bonus,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = keys.ability:GetAbilityTargetFlags()
}
if target:HasModifier("modifier_minamitsu_01_slow_buff") then
DamageTable.damage = DamageTable.damage * (1 + keys.damage_up/100)
end
UnitDamageTarget(DamageTable)
if caster:HasModifier("modifier_byakuren_03_buff") and THTD_IsValid(target) and target.thtd_damage_lock ~= true then
if target:GetHealthPercent() < caster.thtd_byakuren_buff_nue and target:HasModifier("modifier_nue_killed") == false then
keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_nue_killed", {Duration = 30.0})
caster:AbilityKill(target, keys.ability)
end
end
end
-- buff时间到减1/3层
function OnNue01Destroy(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
caster.modifier_extradamage_count = math.floor(caster.modifier_extradamage_count * 2/3)
if caster.modifier_extradamage_count > 0 then
keys.ability:ApplyDataDrivenModifier(caster, caster, "modifier_nue_01_extradamage", {Duration = caster.thtd_nue_01_duration})
caster:SetModifierStackCount("modifier_nue_01_extradamage", caster, caster.modifier_extradamage_count)
end
end
function OnNue02SpellHit(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
if target.thtd_damage_lock == true then return end
local damage_table = {
ability = keys.ability,
victim = target,
attacker = caster,
damage = caster:THTD_GetAbilityPowerDamage(keys.ability) + GetNueExtraDamage(caster) * caster:GetAbilityValue("thtd_nue_01", "spell_bonus"),
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = keys.ability:GetAbilityTargetFlags()
}
if target:HasModifier("modifier_minamitsu_01_slow_buff") then
damage_table.damage = damage_table.damage * (1 + caster:GetAbilityValue("thtd_nue_01", "damage_up", true))
end
UnitDamageTarget(damage_table)
if caster:HasModifier("modifier_byakuren_03_buff") and THTD_IsValid(target) and target.thtd_damage_lock ~= true then
if target:GetHealthPercent() < caster.thtd_byakuren_buff_nue and target:HasModifier("modifier_nue_killed") == false then
keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_nue_killed", {Duration = 30.0})
caster:AbilityKill(target, keys.ability)
end
end
end
function OnNue03Kill(keys)
local caster = keys.attacker
local target = keys.unit
local ability = nil
local level = keys.ability:GetLevel()
if level >= 1 then
ability = caster:FindAbilityByName("thtd_nue_01")
if ability~=nil then
ability:EndCooldown()
end
ability = caster:FindAbilityByName("thtd_nue_02")
if ability~=nil then
ability:EndCooldown()
end
end
end