101 lines
4.6 KiB
Lua
Executable File
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 |