157 lines
5.1 KiB
Lua
Executable File
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 |