286 lines
11 KiB
Lua
Executable File
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 |