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

157 lines
5.1 KiB
Lua
Executable File

local ran_03_black_list =
{
"lily",
"daiyousei",
}
function IsInRan03BlackList(unit)
for k,v in pairs(ran_03_black_list) do
if unit:GetUnitName() == v then
return true
end
end
return false
end
local ran_03_ability_black_list =
{
"thtd_ran_01",
}
function IsInRan03AbilityBlackList(ability)
for k,v in pairs(ran_03_ability_black_list) do
if ability:GetAbilityName() == v then
return true
end
end
return false
end
function Ran01_OnSpellStart(keys)
local caster = keys.caster
local target = keys.target
local effectIndex = ParticleManager:CreateParticle("particles/heroes/ran/ability_ran_03_laser.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControlEnt(effectIndex , 0, caster, 5, "attach_hitloc", Vector(0,0,0), true)
ParticleManager:SetParticleControlEnt(effectIndex , 1, target, 5, "attach_hitloc", Vector(0,0,0), true)
ParticleManager:SetParticleControlEnt(effectIndex , 9, caster, 5, "attach_hitloc", Vector(0,0,0), true)
local target_point = target:GetOrigin()
local damage_table={
victim = target,
attacker = caster,
ability = keys.ability,
damage = caster:THTD_GetAbilityPowerDamage(keys.ability),
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(damage_table)
local target_unit = target
local jump_count = 1
local jumpAmount = keys.JumpCount
if target_unit ~= nil and target_unit:IsNull() == false and target_unit:IsAlive() and jumpAmount > 1 then
caster:SetContextThink("ran01_lazer_jumping",
function ()
if GameRules:IsGamePaused() then return 0.03 end
local enemies = THTD_FindUnitsInRadius(caster,target_point,keys.JumpRadius)
local next_target=nil
for _,v in pairs(enemies) do
if v~=nil and v:IsNull()==false and v:IsAlive() then
if v~=target_unit then
next_target=v
break
end
end
end
if next_target then
-- target_unit:EmitSound("Hero_Tinker.Laser")
effectIndex = ParticleManager:CreateParticle("particles/heroes/ran/ability_ran_03_laser.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControlEnt(effectIndex , 0, target_unit, 5, "attach_hitloc", Vector(0,0,0), true)
ParticleManager:SetParticleControlEnt(effectIndex , 1, next_target, 5, "attach_hitloc", Vector(0,0,0), true)
ParticleManager:SetParticleControlEnt(effectIndex , 9, target_unit, 5, "attach_hitloc", Vector(0,0,0), true)
target_unit = next_target
target_point = next_target:GetOrigin()
local DamageTable={
victim = target_unit,
attacker = caster,
ability = keys.ability,
damage = caster:THTD_GetAbilityPowerDamage(keys.ability),
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable)
-- next_target:EmitSoundParams("Hero_Tinker.LaserImpact",1.0,0.4,2.0)
end
jump_count=jump_count+1
if jump_count >= jumpAmount or next_target == nil or next_target:IsNull() or next_target:IsAlive() == false then
return nil
end
return keys.JumpInterval
end,
keys.JumpInterval)
end
end
function OnRan03SpellStart(keys)
local buffCaster = EntIndexToHScript(keys.caster_entindex) --本buff来源者
if keys.ability:GetLevel() < 1 then --本buff来源技能
return
end
local caster = keys.unit --本次触发的技能施放者
local ability = keys.event_ability --本次触发的施放的技能
local manaCost = caster:GetRealManaCost(ability)
if manaCost <= 0 then
return
end
if IsInRan03BlackList(keys.unit) or IsInRan03AbilityBlackList(keys.event_ability) then
return
end
if keys.mana_regen > 0 then
caster:GiveMana(manaCost * keys.mana_regen/100)
end
local ability01 = buffCaster:FindAbilityByName("thtd_ran_01")
ability01:EndCooldown()
buffCaster:GiveMana(buffCaster:GetRealManaCost(ability01))
local enemies = THTD_FindUnitsInRadius(buffCaster,buffCaster:GetOrigin(),buffCaster:GetAbilityValue("thtd_ran_01", "range"))
if #enemies > 0 then
local unit = nil
for _,v in pairs(enemies) do
if v~=nil and v:IsNull()==false and v:IsAlive() then
unit = v
break
end
end
if unit ~= nil then
buffCaster:CastAbilityOnTarget(unit,ability01,buffCaster:GetPlayerOwnerID())
end
end
-- local effectIndex = ParticleManager:CreateParticle("particles/heroes/ran/ability_ran_04_buff.vpcf", PATTACH_CUSTOMORIGIN, caster)
-- ParticleManager:SetParticleControlEnt(effectIndex , 0, keys.unit, 5, "follow_origin", Vector(0,0,0), true)
-- ParticleManager:DestroyParticleSystemTimeFalse(effectIndex,2.0)
-- 太吵,改为只有蓝显示
if buffCaster.thtd_ran_03_effect ~= true then
buffCaster.thtd_ran_03_effect = true
local effectIndex = ParticleManager:CreateParticle("particles/heroes/ran/ability_ran_04_buff.vpcf", PATTACH_CUSTOMORIGIN, buffCaster)
ParticleManager:SetParticleControlEnt(effectIndex , 0, buffCaster, 5, "follow_origin", Vector(0,0,0), true)
ParticleManager:DestroyParticleSystemTimeFalse(effectIndex,2.0)
buffCaster:SetContextThink(DoUniqueString("thtd_ran_03"),
function()
buffCaster.thtd_ran_03_effect = nil
return nil
end,
2.0)
end
end