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