initial commit
This commit is contained in:
207
scripts/vscripts/abilities/abilitysuwako.lua
Executable file
207
scripts/vscripts/abilities/abilitysuwako.lua
Executable file
@@ -0,0 +1,207 @@
|
||||
function OnSuwako01SpellHit(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
local damage_table = {
|
||||
ability = keys.ability,
|
||||
victim = target,
|
||||
attacker = caster,
|
||||
damage = caster:THTD_GetAbilityPowerDamage(keys.ability),
|
||||
damage_type = keys.ability:GetAbilityDamageType(),
|
||||
damage_flags = 0
|
||||
}
|
||||
UnitDamageTarget(damage_table)
|
||||
end
|
||||
|
||||
function OnSuwako01AttackLanded(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
local info =
|
||||
{
|
||||
Ability = keys.ability,
|
||||
EffectName = "particles/heroes/thtd_suwako/ability_suwako_01_ring.vpcf",
|
||||
vSpawnOrigin = caster:GetOrigin() + Vector(0,0,128),
|
||||
fDistance = caster:Script_GetAttackRange(),
|
||||
fStartRadius = 200,
|
||||
fEndRadius = 200,
|
||||
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 = caster:GetForwardVector() * 1500,
|
||||
bProvidesVision = true,
|
||||
iVisionRadius = 1000,
|
||||
iVisionTeamNumber = caster:GetTeamNumber()
|
||||
}
|
||||
projectile = ProjectileManager:CreateLinearProjectile(info)
|
||||
ParticleManager:DestroyLinearProjectileSystem(projectile,false)
|
||||
end
|
||||
|
||||
|
||||
function OnSuwako02SpellStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local targetPoint = keys.target_points[1]
|
||||
|
||||
if caster.thtd_suwako_02_rect == nil then
|
||||
caster.thtd_suwako_02_rect = {}
|
||||
end
|
||||
|
||||
caster.thtd_suwako_02_rect["point"] = targetPoint
|
||||
if caster.thtd_suwako_02_rect["effectIndex"] == nil then
|
||||
caster.thtd_suwako_02_rect["effectIndex"] = ParticleManager:CreateParticle("particles/heroes/thtd_suwako/ability_suwako_02.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(caster.thtd_suwako_02_rect["effectIndex"], 0, targetPoint)
|
||||
ParticleManager:SetParticleControl(caster.thtd_suwako_02_rect["effectIndex"], 1, Vector(keys.range,1,1))
|
||||
else
|
||||
ParticleManager:DestroyParticleSystem(caster.thtd_suwako_02_rect["effectIndex"],true)
|
||||
caster.thtd_suwako_02_rect["effectIndex"] = ParticleManager:CreateParticle("particles/heroes/thtd_suwako/ability_suwako_02.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(caster.thtd_suwako_02_rect["effectIndex"], 0, targetPoint)
|
||||
ParticleManager:SetParticleControl(caster.thtd_suwako_02_rect["effectIndex"], 1, Vector(keys.range,1,1))
|
||||
end
|
||||
end
|
||||
|
||||
function OnSuwako02Think(keys)
|
||||
if GameRules:IsGamePaused() then return end
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
if caster.thtd_suwako_02_rect == nil then
|
||||
caster.thtd_suwako_02_rect = {}
|
||||
end
|
||||
if keys.ability:GetLevel() < 1 or caster:THTD_IsHidden() then
|
||||
if caster.thtd_suwako_02_rect["effectIndex"]~=nil then
|
||||
ParticleManager:DestroyParticleSystem(caster.thtd_suwako_02_rect["effectIndex"],true)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if caster.thtd_suwako_02_rect["effectIndex"] ~= nil then
|
||||
local point = caster.thtd_suwako_02_rect["point"]
|
||||
local targets = THTD_FindUnitsInRadius(caster,point,keys.range)
|
||||
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * 0.2 * (1 + caster:THTD_GetFaith()*keys.up_percent/100)
|
||||
for k,v in pairs(targets) do
|
||||
if v.thtd_suwako_02_count == nil then
|
||||
v.thtd_suwako_02_count = 0
|
||||
end
|
||||
if v.thtd_suwako_02_lock == nil then
|
||||
v.thtd_suwako_02_lock = false
|
||||
end
|
||||
v.thtd_suwako_02_count = v.thtd_suwako_02_count + 1
|
||||
if v.thtd_suwako_02_count > keys.stay_time/0.2 and v.thtd_suwako_02_lock == false then
|
||||
keys.ability:ApplyDataDrivenModifier(caster,v,"modifier_suwako_rooted",{Duration = keys.root_time})
|
||||
v.thtd_suwako_02_lock = true
|
||||
|
||||
v:SetContextThink(DoUniqueString("thtd_suwako_02_leave_rect"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
if GetDistanceBetweenTwoVec2D(point,v:GetOrigin()) > keys.range then
|
||||
v.thtd_suwako_02_count = 0
|
||||
v.thtd_suwako_02_lock = false
|
||||
return nil
|
||||
else
|
||||
local damage_table = {
|
||||
ability = keys.ability,
|
||||
victim = v,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = keys.ability:GetAbilityDamageType(),
|
||||
damage_flags = 0
|
||||
}
|
||||
UnitDamageTarget(damage_table)
|
||||
end
|
||||
return 0.2
|
||||
end,
|
||||
0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function OnSuwako03SpellStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local inners = THTD_FindUnitsInner(caster)
|
||||
|
||||
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * (1 + caster:THTD_GetFaith()*keys.up_percent/100)
|
||||
for k,v in pairs(inners) do
|
||||
if v:HasModifier("modifier_suwako_03_rooted") == false then
|
||||
local g = -10
|
||||
local vh = 120
|
||||
local t = math.abs(2*vh/g)
|
||||
local targetPoint = v:GetOrigin() -- + RandomVector(200)
|
||||
local rad = GetRadBetweenTwoVec2D(v:GetOrigin(),targetPoint)
|
||||
local dis = GetDistanceBetweenTwoVec2D(v:GetOrigin(),targetPoint)
|
||||
local speed = dis/t
|
||||
local curOrigin = v:GetOrigin()
|
||||
local originz = curOrigin.z
|
||||
|
||||
keys.ability:ApplyDataDrivenModifier(caster,v,"modifier_suwako_03_rooted",{})
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/econ/items/kunkka/kunkka_torrent_base/kunkka_spell_torrent_splash_econ.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex, 0, v:GetOrigin())
|
||||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||||
|
||||
v:SetContextThink(DoUniqueString("thtd_suwako_03_unit_up"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
vh = vh + g
|
||||
curOrigin = Vector(curOrigin.x + math.cos(rad) * speed,curOrigin.y + math.sin(rad) * speed,curOrigin.z + vh)
|
||||
v:SetAbsOrigin(curOrigin)
|
||||
|
||||
if curOrigin.z >= originz then
|
||||
return 0.03
|
||||
else
|
||||
-- FindClearSpaceForUnit(v, v:GetOrigin(), false)
|
||||
v:SetAbsOrigin(targetPoint)
|
||||
|
||||
local damage_table = {
|
||||
ability = keys.ability,
|
||||
victim = v,
|
||||
attacker = caster,
|
||||
damage = damage,
|
||||
damage_type = keys.ability:GetAbilityDamageType(),
|
||||
damage_flags = 0
|
||||
}
|
||||
UnitDamageTarget(damage_table)
|
||||
v:RemoveModifierByName("modifier_suwako_03_rooted")
|
||||
return nil
|
||||
end
|
||||
end,
|
||||
0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function OnSuwakoKill(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
caster:THTD_AddFaith()
|
||||
end
|
||||
|
||||
function OnSuwako04SpellStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
caster:EmitSound("Sound_THTD.thtd_suwako_04")
|
||||
caster.thtd_last_cast_unit = target
|
||||
|
||||
local modifier = target:FindModifierByName("modifier_suwako_04_buff")
|
||||
if modifier == nil then
|
||||
keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_suwako_04_buff", {duration = keys.duration_time})
|
||||
else
|
||||
modifier:SetDuration(keys.duration_time, false)
|
||||
end
|
||||
end
|
||||
|
||||
function OnCreatedSuwako04Buff(keys)
|
||||
local unitName = keys.target:GetUnitName()
|
||||
if unitName == "suwako" or unitName == "kanako" or unitName == "sanae" then
|
||||
keys.target:THTD_AddCritDamage(keys.self_crit, "thtd_suwako_04_bonus")
|
||||
else
|
||||
keys.target:THTD_AddCritDamage(keys.crit, "thtd_suwako_04_bonus")
|
||||
end
|
||||
end
|
||||
|
||||
function OnDestroySuwako04Buff(keys)
|
||||
keys.target:THTD_AddCritDamage("thtd_suwako_04_bonus")
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user