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

286 lines
11 KiB
Lua
Executable File

THTD_KEINE_02_HUMEN = 1
THTD_KEINE_02_SHIRASAWA = 2
function OnKeine01SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
if caster.thtd_keine_change == nil then
caster.thtd_keine_change = THTD_KEINE_02_HUMEN
end
if caster.thtd_keine_change == THTD_KEINE_02_HUMEN then
if target:THTD_IsTower() then
caster.thtd_last_cast_unit = target
if target:HasModifier("modifier_keine_01_buff") then
target:FindModifierByName("modifier_keine_01_buff"):SetDuration(keys.bonus_time, false)
else
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_keine/ability_keine_01_buff.vpcf", PATTACH_CUSTOMORIGIN, target)
ParticleManager:SetParticleControlEnt(effectIndex , 0, target, 5, "follow_origin", Vector(0,0,0), true)
keys.ability:ApplyDataDrivenModifier(caster,target, "modifier_keine_01_buff", {duration = keys.bonus_time})
end
end
end
end
function OnCreatedKeine01Buff(keys)
keys.target:THTD_AddBaseAttack(keys.attack_bonus, "thtd_keine_01_bonus")
end
function OnDestroyKeine01Buff(keys)
keys.target:THTD_AddBaseAttack("thtd_keine_01_bonus")
end
function OnKeine01AttackLanded(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local targetPoint = target:GetOrigin()
if caster.thtd_keine_change == THTD_KEINE_02_SHIRASAWA then
if RollPercentage(keys.chance) then
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_keine/ability_keine_01_stun.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
ParticleManager:SetParticleControl(effectIndex, 1, Vector(keys.range,keys.range,keys.range))
ParticleManager:DestroyParticleSystem(effectIndex,false)
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.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)
if not v:HasModifier("modifier_keine_01_lock") then
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_keine_01_lock", {Duration = keys.lock_time})
UnitStunTarget(caster,v,keys.stun_time)
end
end
end
end
end
function OnKeine02SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
if caster.thtd_keine_change == nil then
caster.thtd_keine_change = THTD_KEINE_02_HUMEN
end
if caster.thtd_keine_change == THTD_KEINE_02_HUMEN then
caster.thtd_keine_change = THTD_KEINE_02_SHIRASAWA
caster:SetModel("models/thd_hero/keine/keine2/keine2.vmdl")
caster:SetOriginalModel("models/thd_hero/keine/keine2/keine2.vmdl")
if caster.thtd_close_ai == true then
CustomGameEventManager:Send_ServerToPlayer( caster:GetPlayerOwner() , "show_message", {msg="change_to_keine_shirasawa", duration=5, params={}, color="#0ff"} )
end
elseif caster.thtd_keine_change == THTD_KEINE_02_SHIRASAWA then
caster.thtd_keine_change = THTD_KEINE_02_HUMEN
caster:SetModel("models/thd_hero/keine/keine.vmdl")
caster:SetOriginalModel("models/thd_hero/keine/keine.vmdl")
if caster.thtd_close_ai == true then
CustomGameEventManager:Send_ServerToPlayer( caster:GetPlayerOwner() , "show_message", {msg="change_to_keine_humen", duration=5, params={}, color="#0ff"} )
end
end
end
function OnKeine03SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local targetPoint = keys.target_points[1]
local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.range1)
if caster.thtd_keine_change == nil then
caster.thtd_keine_change = THTD_KEINE_02_HUMEN
end
if caster.thtd_keine_change == THTD_KEINE_02_HUMEN then
for k,v in pairs(targets) do
Keine03MarkUnit(v)
local modifier = v:FindModifierByName("thtd_keine_03_debuff")
if modifier==nil and v.thtd_keine_mark_count < keys.max_count then
keys.ability:ApplyDataDrivenModifier(caster, v, "thtd_keine_03_debuff", nil)
end
end
elseif caster.thtd_keine_change == THTD_KEINE_02_SHIRASAWA then
for k,v in pairs(targets) do
if v:HasModifier("thtd_keine_03_debuff") then
v.thtd_keine_mark_count = v.thtd_keine_mark_count + 1
v:RemoveModifierByName("thtd_keine_03_debuff")
end
end
end
end
function Keine03MarkUnit(unit)
unit.thtd_keine_mark_count = 0
unit.thtd_keine_03_origin = unit:GetOrigin()
unit.thtd_keine_03_mark_health = unit:GetHealth()
unit.thtd_keine_03_next_move_point = unit.next_move_point
unit.thtd_keine_03_next_move_forward = unit.next_move_forward
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_keine/ability_keine_03.vpcf", PATTACH_CUSTOMORIGIN, unit)
ParticleManager:SetParticleControl(effectIndex, 0, unit:GetOrigin())
ParticleManager:SetParticleControl(effectIndex, 1, unit:GetOrigin())
ParticleManager:SetParticleControl(effectIndex, 2, unit:GetOrigin())
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
function OnKeine03AttackLanded(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
if RollPercentage(keys.chance) then
local targetPoint = target:GetOrigin()
local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.range2)
if caster.thtd_keine_change == THTD_KEINE_02_HUMEN then
for k,v in pairs(targets) do
Keine03MarkUnit(v)
local modifier = v:FindModifierByName("thtd_keine_03_debuff")
if modifier==nil and v.thtd_keine_mark_count < keys.max_count then
keys.ability:ApplyDataDrivenModifier(caster, v, "thtd_keine_03_debuff", nil)
end
end
else
for k,v in pairs(targets) do
if v:HasModifier("thtd_keine_03_debuff") then
v.thtd_keine_mark_count = v.thtd_keine_mark_count + 1
v:RemoveModifierByName("thtd_keine_03_debuff")
end
end
end
end
end
function OnKeine03Destroy(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
if target~=nil and target:IsNull()==false and target:IsAlive() and target.thtd_keine_03_origin ~= nil then
local distance = GetDistanceBetweenTwoVec2D(target:GetOrigin(), target.thtd_keine_03_origin)
local effectIndex = ParticleManager:CreateParticle("particles/bosses/thtd_keine/ability_bosses_keine.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, target:GetOrigin())
FindClearSpaceForUnit(target,target.thtd_keine_03_origin,false)
ParticleManager:SetParticleControl(effectIndex, 2, target:GetOrigin())
ParticleManager:DestroyParticleSystem(effectIndex,false)
target.next_move_point = target.thtd_keine_03_next_move_point
target.next_move_forward = target.thtd_keine_03_next_move_forward
target.thtd_keine_03_origin = nil
local currentHealth = target:GetHealth()
local decrease_health = target.thtd_keine_03_mark_health - currentHealth
target:SetHealth(target.thtd_keine_03_mark_health)
local ability = caster:FindAbilityByName("thtd_keine_04")
if ability:GetLevel() >= 1 then
if caster.thtd_keine_04_change == THTD_KEINE_04_SWORD then
OnKeine04Sword(keys)
elseif caster.thtd_keine_04_change == THTD_KEINE_04_JADE then
OnKeine04Jade(keys,distance)
elseif caster.thtd_keine_04_change == THTD_KEINE_04_MIRROR then
OnKeine04Mirror(keys,decrease_health,currentHealth)
end
end
end
end
function OnKeine04Sword(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local info =
{
Target = keys.target,
Source = caster,
Ability = keys.ability,
EffectName = "particles/heroes/thtd_keine/ability_keine_04_sword.vpcf",
iMoveSpeed = 1400,
vSourceLoc= caster:GetAbsOrigin(), -- Optional (HOW)
bDrawsOnMinimap = false, -- Optional
bDodgeable = true, -- Optional
bIsAttack = false, -- Optional
bVisibleToEnemies = true, -- Optional
bReplaceExisting = false, -- Optional
flExpireTime = GameRules:GetGameTime() + 10, -- Optional but recommended
bProvidesVision = true, -- Optional
iVisionRadius = 400, -- Optional
iVisionTeamNumber = caster:GetTeamNumber(), -- Optional
}
local projectile = ProjectileManager:CreateTrackingProjectile(info)
ParticleManager:DestroyLinearProjectileSystem(projectile,false)
end
function OnKeine04SwordHit(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local ability = caster:FindAbilityByName("thtd_keine_04")
local damage = caster:THTD_GetAbilityPowerDamage(ability)
local DamageTable = {
ability = ability,
victim = target,
attacker = caster,
damage = damage,
damage_type = ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable)
end
function OnKeine04Jade(keys,distance)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local damage = caster:THTD_GetStarDamage() * (distance/100) * caster:GetAbilityValue("thtd_keine_04", "distance_damage")
local DamageTable = {
ability = caster:FindAbilityByName("thtd_keine_04"),
victim = target,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable)
end
function OnKeine04Mirror(keys,decrease_health,currentHealth)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
target:SetHealth(currentHealth + decrease_health * math.max(0, (1 - caster:GetAbilityValue("thtd_keine_04", "hp_percent"))))
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_keine/ability_keine_04_mirror.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, target:GetOrigin())
ParticleManager:DestroyParticleSystem(effectIndex,false)
end
THTD_KEINE_04_SWORD = 1
THTD_KEINE_04_JADE = 2
THTD_KEINE_04_MIRROR = 3
function OnKeine04SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
if caster.thtd_keine_04_change == nil then
caster.thtd_keine_04_change = THTD_KEINE_04_SWORD
end
if caster.thtd_keine_04_change == THTD_KEINE_04_SWORD then
CustomGameEventManager:Send_ServerToPlayer( caster:GetPlayerOwner() , "show_message", {msg="change_to_keine_04_jade", duration=5, params={count=1}, color="#0ff"} )
caster.thtd_keine_04_change = THTD_KEINE_04_JADE
elseif caster.thtd_keine_04_change == THTD_KEINE_04_JADE then
CustomGameEventManager:Send_ServerToPlayer( caster:GetPlayerOwner() , "show_message", {msg="change_to_keine_04_mirror", duration=5, params={count=1}, color="#0ff"} )
caster.thtd_keine_04_change = THTD_KEINE_04_MIRROR
elseif caster.thtd_keine_04_change == THTD_KEINE_04_MIRROR then
CustomGameEventManager:Send_ServerToPlayer( caster:GetPlayerOwner() , "show_message", {msg="change_to_keine_04_sword", duration=5, params={count=1}, color="#0ff"} )
caster.thtd_keine_04_change = THTD_KEINE_04_SWORD
end
end