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