111 lines
3.7 KiB
Lua
Executable File
111 lines
3.7 KiB
Lua
Executable File
function OnRin01SpellStart(keys)
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local targetPoint = keys.target:GetOrigin()
|
|
|
|
caster:EmitSound("Sound_THTD.thtd_rin_01")
|
|
|
|
local info =
|
|
{
|
|
Ability = keys.ability,
|
|
EffectName = "particles/heroes/rin/ability_rin_01.vpcf",
|
|
vSpawnOrigin = targetPoint,
|
|
fDistance = 1000,
|
|
fStartRadius = 400,
|
|
fEndRadius = 400,
|
|
Source = caster,
|
|
bHasFrontalCone = false,
|
|
bReplaceExisting = false,
|
|
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
|
|
iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_NONE,
|
|
iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
|
|
fExpireTime = GameRules:GetGameTime() + 10.0,
|
|
bDeleteOnHit = false,
|
|
vVelocity = -keys.target:GetForwardVector() * 1500,
|
|
bProvidesVision = true,
|
|
iVisionRadius = 1000,
|
|
iVisionTeamNumber = caster:GetTeamNumber()
|
|
}
|
|
projectile = ProjectileManager:CreateLinearProjectile(info)
|
|
|
|
Rin01Wheel(keys)
|
|
end
|
|
|
|
function Rin01Wheel(keys)
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local origin = keys.target:GetOrigin()
|
|
local forward = -keys.target:GetForwardVector()
|
|
|
|
local effectIndex = ParticleManager:CreateParticle("particles/heroes/rin/ability_rin_01_projectile.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
|
|
|
ParticleManager:SetParticleControl(effectIndex, 0, origin)
|
|
ParticleManager:SetParticleControlForward(effectIndex, 0 , forward)
|
|
|
|
local count = 0
|
|
caster:SetContextThink(DoUniqueString("ability_rin_01_wheel_move"),
|
|
function ()
|
|
if GameRules:IsGamePaused() then return 0.03 end
|
|
if count < 23 then
|
|
origin = origin + forward * 45
|
|
ParticleManager:SetParticleControl(effectIndex, 0, origin)
|
|
count = count + 1
|
|
else
|
|
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
|
return nil
|
|
end
|
|
return 0.03
|
|
end,
|
|
0.03)
|
|
end
|
|
|
|
function OnRin01ProjectileHit(keys)
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local target = keys.target
|
|
|
|
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
|
|
|
|
local DamageTable = {
|
|
ability = keys.ability,
|
|
victim = target,
|
|
attacker = caster,
|
|
damage = damage,
|
|
damage_type = keys.ability:GetAbilityDamageType(),
|
|
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
|
}
|
|
UnitDamageTarget(DamageTable)
|
|
|
|
if target~=nil and target:IsNull()== false and target:IsAlive() and target:HasModifier("modifier_rin_01_debuff")==false then
|
|
keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_rin_01_debuff", nil)
|
|
end
|
|
end
|
|
|
|
function OnRin01Death(keys)
|
|
if keys.caster_entindex==nil then return end
|
|
local caster = EntIndexToHScript(keys.caster_entindex)
|
|
local target = keys.unit
|
|
|
|
if caster:FindAbilityByName("thtd_rin_02"):GetLevel() < 1 then return end
|
|
|
|
target:EmitSound("Hero_Nevermore.Shadowraze")
|
|
|
|
local effectIndex = ParticleManager:CreateParticle("particles/heroes/moluo/abiilty_moluo_014.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
|
ParticleManager:SetParticleControl(effectIndex, 0, target:GetOrigin())
|
|
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
|
|
|
local hp_damage = caster:GetAbilityValue("thtd_rin_02", "hp_damage", true)
|
|
local power_damage = caster:GetAbilityValue("thtd_rin_02", "power_damage")
|
|
local range = caster:GetAbilityValue("thtd_rin_02", "range")
|
|
|
|
local damage = math.min(target:GetMaxHealth() * hp_damage, caster:THTD_GetStarDamage()*power_damage)
|
|
local targets = THTD_FindUnitsInRadius(caster,target:GetOrigin(),range)
|
|
for k,v in pairs(targets) do
|
|
local DamageTable = {
|
|
ability = keys.ability,
|
|
victim = v,
|
|
attacker = caster,
|
|
damage = damage,
|
|
damage_type = keys.ability:GetAbilityDamageType(),
|
|
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
|
}
|
|
UnitDamageTarget(DamageTable)
|
|
end
|
|
end |