initial commit
This commit is contained in:
101
scripts/vscripts/abilities/abilitynue.lua
Executable file
101
scripts/vscripts/abilities/abilitynue.lua
Executable file
@@ -0,0 +1,101 @@
|
||||
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
|
||||
Reference in New Issue
Block a user