Files
2HUCardTDGame/game/scripts/vscripts/abilities/abilitymeirin.lua
2021-11-10 08:48:00 -05:00

316 lines
12 KiB
Lua
Executable File

local thtd_meirin_01_activity =
{
[1] =
{
["action"] = ACT_DOTA_ATTACK,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*800
--caster:EmitSoundParams("Hero_KeeperOfTheLight.Illuminate.Discharge",1,0.1,2)
local targets =
FindUnitsInLine(
caster:GetTeamNumber(),
caster:GetOrigin(),
caster:GetOrigin() + caster:GetForwardVector()*800,
nil,
300,
keys.ability:GetAbilityTargetTeam(),
keys.ability:GetAbilityTargetType(),
keys.ability:GetAbilityTargetFlags()
)
for k,v in pairs(targets) do
local DamageTable_aoe = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable_aoe)
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01_step_1.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, vecCaster+Vector(0,0,32))
ParticleManager:SetParticleControl(effectIndex, 1, targetPoint+Vector(0,0,32))
ParticleManager:SetParticleControl(effectIndex, 9, vecCaster+Vector(0,0,32))
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
[2] =
{
["action"] = ACT_DOTA_ATTACK2,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*800
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
damage = damage * (1 + keys.damage_up)^1
--caster:EmitSoundParams("Hero_Tusk.WalrusPunch.Target",1,0.3,2)
local targets = THTD_FindUnitsInRadius(caster,caster:GetOrigin(),800)
for k,v in pairs(targets) do
local vVec = v:GetOrigin()
local vecRad = GetRadBetweenTwoVec2D(targetPoint,vecCaster)
if(IsPointInCircularSector(vVec.x,vVec.y,math.cos(vecRad),math.sin(vecRad),800,math.pi*2/3,vecCaster.x,vecCaster.y))then
local damage_table = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(damage_table)
end
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
ParticleManager:SetParticleControl(effectIndex, 1, caster:GetOrigin())
ParticleManager:SetParticleControlForward(effectIndex, 1 , caster:GetForwardVector())
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
[3] =
{
["action"] = ACT_DOTA_CAST_ABILITY_4,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*400
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
damage = damage * (1 + keys.damage_up)^2
-- caster:EmitSoundParams("Hero_EarthShaker.EchoSlamSmall",1,0.5,2)
caster:EmitSound("Hero_EarthShaker.EchoSlamSmall")
local targets = THTD_FindUnitsInRadius(caster,targetPoint,400)
for k,v in pairs(targets) do
local damage_table = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(damage_table)
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_meirin_01_slow_buff", {})
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01_step_2.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
ParticleManager:SetParticleControl(effectIndex, 1, Vector(800,0,0))
ParticleManager:SetParticleControl(effectIndex, 2, Vector(255,140,0))
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
[4] =
{
["action"] = ACT_DOTA_CAST_ABILITY_5,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*800
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
damage = damage * (1 + keys.damage_up)^3
--caster:EmitSoundParams("Hero_Tusk.WalrusPunch.Target",1,0.35,2)
local targets = THTD_FindUnitsInRadius(caster,caster:GetOrigin(),800)
for k,v in pairs(targets) do
local vVec = v:GetOrigin()
local vecRad = GetRadBetweenTwoVec2D(targetPoint,vecCaster)
if(IsPointInCircularSector(vVec.x,vVec.y,math.cos(vecRad),math.sin(vecRad),800,math.pi*2/3,vecCaster.x,vecCaster.y))then
local damage_table = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(damage_table)
end
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
ParticleManager:SetParticleControl(effectIndex, 1, caster:GetOrigin())
ParticleManager:SetParticleControlForward(effectIndex, 1 , caster:GetForwardVector())
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
[5] =
{
["action"] = ACT_DOTA_CAST_ABILITY_4,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*400
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
damage = damage * (1 + keys.damage_up)^4
--caster:EmitSoundParams("Hero_Tusk.WalrusPunch.Damage",1,0.4,2)
local targets = THTD_FindUnitsInRadius(caster,targetPoint,400)
local stun_time = caster:GetAbilityValue("thtd_meirin_02", "level5_stun_time")
for k,v in pairs(targets) do
local damage_table = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(damage_table)
UnitStunTarget(caster,v,stun_time)
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01_step_3.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
ParticleManager:SetParticleControl(effectIndex, 1, Vector(800,0,0))
ParticleManager:SetParticleControl(effectIndex, 2, Vector(255,140,0))
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
[6] =
{
["action"] = ACT_DOTA_CAST_ABILITY_6,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*800
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
damage = damage * (1 + keys.damage_up)^5
--caster:EmitSoundParams("Hero_KeeperOfTheLight.Illuminate.Discharge",1,0.25,2)
local targets =
FindUnitsInLine(
caster:GetTeamNumber(),
caster:GetOrigin(),
caster:GetOrigin() + caster:GetForwardVector()*800,
nil,
300,
keys.ability:GetAbilityTargetTeam(),
keys.ability:GetAbilityTargetType(),
keys.ability:GetAbilityTargetFlags()
)
for k,v in pairs(targets) do
local DamageTable_aoe = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable_aoe)
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01_step_1.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, vecCaster+Vector(0,0,32))
ParticleManager:SetParticleControl(effectIndex, 1, targetPoint+Vector(0,0,32))
ParticleManager:SetParticleControl(effectIndex, 9, vecCaster+Vector(0,0,32))
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
[7] =
{
["action"] = ACT_DOTA_CAST_ABILITY_4,
["duration"] = 0.55,
func = function(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local vecCaster = caster:GetOrigin()
local targetPoint = caster:GetOrigin() + caster:GetForwardVector()*400
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
damage = damage * (1 + keys.damage_up)^6
-- damage = damage * 3
-- caster:EmitSoundParams("Hero_ElderTitan.EchoStomp",1,0.45,2)
caster:EmitSound("Hero_ElderTitan.EchoStomp")
local targets = THTD_FindUnitsInRadius(caster,targetPoint,400)
local stun_time = caster:GetAbilityValue("thtd_meirin_02", "level7_stun_time")
for k,v in pairs(targets) do
local damage_table = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(damage_table)
UnitStunTarget(caster,v,stun_time)
end
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_meirin/ability_meirin_01_step_4.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
ParticleManager:SetParticleControl(effectIndex, 1, Vector(800,0,0))
ParticleManager:SetParticleControl(effectIndex, 2, Vector(221,160,221))
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
},
}
function OnMeirin01AttackThink(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
if keys.ability:GetLevel() < 1 or caster:THTD_IsHidden() then return end
if caster.thtd_meirin_01_attack_step == nil then
caster.thtd_meirin_01_attack_step = 1
end
if caster:HasModifier("modifier_meirin_01_pause") == false then
local targets = THTD_FindUnitsInRadius(caster,caster:GetOrigin(),500)
if #targets > 0 and targets[1]~=nil and targets[1]:IsNull()==false and targets[1]:IsAlive() then
keys.target = targets[1]
local ability2 = caster:FindAbilityByName("thtd_meirin_02")
local chance = 100
local stun_time = 0
local level = 3
if ability2:IsActivated() then
level = 7
if caster.thtd_meirin_01_attack_step == 4 then
chance = ability2:GetSpecialValueFor("level4_chance")
elseif caster.thtd_meirin_01_attack_step == 6 then
chance = ability2:GetSpecialValueFor("level6_chance")
end
end
if caster.thtd_meirin_01_attack_step <= level and RollPercentage(chance) then
caster:StartGestureWithPlaybackRate(thtd_meirin_01_activity[caster.thtd_meirin_01_attack_step]["action"],1)
local func = thtd_meirin_01_activity[caster.thtd_meirin_01_attack_step].func
caster:EmitSound("Hero_Axe.PreAttack")
caster:SetContextThink(DoUniqueString("modifier_meirin_01_attack"),
function()
if GameRules:IsGamePaused() then return 0.03 end
if func then
func(keys)
end
return nil
end,
thtd_meirin_01_activity[caster.thtd_meirin_01_attack_step]["duration"])
keys.ability:ApplyDataDrivenModifier(caster, caster, "modifier_meirin_01_pause", {duration=thtd_meirin_01_activity[caster.thtd_meirin_01_attack_step]["duration"]})
caster.thtd_meirin_01_attack_step = caster.thtd_meirin_01_attack_step + 1
else
caster.thtd_meirin_01_attack_step = 1
end
end
end
end