restructure
This commit is contained in:
210
game/scripts/vscripts/abilities/abilitykoishi.lua
Executable file
210
game/scripts/vscripts/abilities/abilitykoishi.lua
Executable file
@@ -0,0 +1,210 @@
|
||||
function OnKoishi01Attack(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
if caster.__koishi_lock ~= true then
|
||||
caster.__koishi_lock = true
|
||||
local targets = THTD_FindUnitsInRadius(caster,caster:GetOrigin(),keys.range)
|
||||
|
||||
for i=1,#targets do
|
||||
local unit = targets[i]
|
||||
if unit~=nil and unit:IsNull()==false and unit~=target and unit:IsAlive() then
|
||||
caster:PerformAttack(unit,true,false,true,false,true,false,true)
|
||||
if RollPercentage(keys.chance) then
|
||||
local DamageTable = {
|
||||
ability = keys.ability,
|
||||
victim = unit,
|
||||
attacker = caster,
|
||||
damage = caster:THTD_GetAbilityPowerDamage(keys.ability),
|
||||
damage_type = keys.ability:GetAbilityDamageType(),
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||||
}
|
||||
UnitDamageTarget(DamageTable)
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/units/heroes/hero_dark_willow/dark_willow_bramble.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControlEnt(effectIndex , 0, unit, 5, "follow_origin", Vector(0,0,0), true)
|
||||
ParticleManager:DestroyParticleSystemTimeFalse(effectIndex,1.0)
|
||||
end
|
||||
end
|
||||
end
|
||||
caster.__koishi_lock = false
|
||||
end
|
||||
end
|
||||
|
||||
function OnKoishi02AttackLanded(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
local modifer = caster:FindModifierByName("modifier_koishi_02_attack_speed") or keys.ability:ApplyDataDrivenModifier(caster, caster, "modifier_koishi_02_attack_speed", nil)
|
||||
|
||||
local max_count = keys.max_count
|
||||
if caster:HasModifier("passive_koishi_04_attack") then
|
||||
max_count = keys.count_bonus
|
||||
end
|
||||
|
||||
if modifer:GetStackCount() < max_count then
|
||||
modifer:IncrementStackCount()
|
||||
end
|
||||
modifer:SetDuration(keys.duration_time, false)
|
||||
end
|
||||
|
||||
function OnKoishi03SpellStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
if target:THTD_IsTower() and target:HasModifier("modifier_koishi_03_buff") == false then
|
||||
caster.thtd_last_cast_unit = target
|
||||
|
||||
local time = keys.duration_time
|
||||
if caster:FindAbilityByName("thtd_koishi_01"):GetLevel() > 1 then
|
||||
time = keys.combo_time
|
||||
end
|
||||
|
||||
local bonus = keys.power_bonus
|
||||
if target:GetUnitName() == "satori" then
|
||||
if target:IsPower999() then
|
||||
bonus = bonus * (keys.self_crit + 10)
|
||||
else
|
||||
bonus = bonus * keys.self_crit
|
||||
end
|
||||
elseif target:GetUnitName() == "koishi" then
|
||||
bonus = bonus * keys.self_crit
|
||||
end
|
||||
target.koishi_03_power_bonus = bonus
|
||||
|
||||
keys.ability:ApplyDataDrivenModifier(caster,target,"modifier_koishi_03_buff", {Duration = time})
|
||||
target:EmitSound("Hero_OgreMagi.Bloodlust.Target")
|
||||
else
|
||||
keys.ability:EndCooldown()
|
||||
end
|
||||
end
|
||||
|
||||
function OnCreatedKoishi03Buff(keys)
|
||||
local target = keys.target
|
||||
local bonus = target.koishi_03_power_bonus
|
||||
target:THTD_AddBasePower(bonus, "thtd_koishi_03_bonus")
|
||||
target:THTD_AddBaseAttack(bonus, "thtd_koishi_03_bonus")
|
||||
end
|
||||
|
||||
function OnDestroyKoishi03Buff(keys)
|
||||
local target = keys.target
|
||||
target:THTD_AddBasePower("thtd_koishi_03_bonus")
|
||||
target:THTD_AddBaseAttack("thtd_koishi_03_bonus")
|
||||
end
|
||||
|
||||
function OnKoishi04SpellStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
if caster:HasModifier("passive_koishi_04_attack") then
|
||||
keys.ability:EndCooldown()
|
||||
keys.ability:StartCooldown(1.0)
|
||||
caster:GiveMana(caster:GetRealManaCost(keys.ability))
|
||||
return
|
||||
end
|
||||
|
||||
local time = keys.duration_time
|
||||
|
||||
caster:StartGesture(ACT_DOTA_CAST_ABILITY_4)
|
||||
caster:SetAttackCapability(DOTA_UNIT_CAP_MELEE_ATTACK)
|
||||
|
||||
keys.ability:ApplyDataDrivenModifier(caster, caster, "passive_koishi_04_attack",nil)
|
||||
caster:EmitSound("Voice_Thdots_Koishi.AbilityKoishi041")
|
||||
caster:EmitSound("Hero_VengefulSpirit.WaveOfTerror")
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/econ/events/fall_major_2015/teleport_end_fallmjr_2015_lvl2_black.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
|
||||
ParticleManager:DestroyParticleSystemTimeFalse(effectIndex,0.8)
|
||||
|
||||
caster:SetContextThink(DoUniqueString("thtd_koishi04_buff_remove"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
caster:RemoveGesture(ACT_DOTA_CAST_ABILITY_4)
|
||||
|
||||
caster:SetContextThink(DoUniqueString("thtd_koishi04_buff_remove"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.1 end
|
||||
caster:StartGesture(ACT_DOTA_CAST_ABILITY_4_END)
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/econ/events/fall_major_2015/teleport_end_fallmjr_2015_lvl2_black.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
|
||||
ParticleManager:DestroyParticleSystemTimeFalse(effectIndex,0.25)
|
||||
caster:EmitSound("Voice_Thdots_Koishi.AbilityKoishi042")
|
||||
caster:EmitSound("Hero_VengefulSpirit.WaveOfTerror")
|
||||
|
||||
caster:SetContextThink(DoUniqueString("thtd_koishi04_buff_remove"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.1 end
|
||||
caster:RemoveGesture(ACT_DOTA_CAST_ABILITY_4_END)
|
||||
|
||||
caster:SetAttackCapability(DOTA_UNIT_CAP_RANGED_ATTACK)
|
||||
caster:RemoveModifierByName("passive_koishi_04_attack")
|
||||
return nil
|
||||
end,
|
||||
0.25)
|
||||
|
||||
return nil
|
||||
end,
|
||||
time)
|
||||
|
||||
return nil
|
||||
end,
|
||||
0.8)
|
||||
end
|
||||
|
||||
function OnKoishi04AttackStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
local count = 3
|
||||
caster:SetContextThink(DoUniqueString("thtd_koishi03_buff_remove"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
local num = RandomInt(1,6)
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_koishi/ability_koishi_04_attack_0"..num..".vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex , 0, caster:GetOrigin() - Vector(0,0,20))
|
||||
ParticleManager:SetParticleControlForward(effectIndex , 0, caster:GetForwardVector()+Vector(0,0,num/12))
|
||||
ParticleManager:SetParticleControlForward(effectIndex , 1, caster:GetForwardVector())
|
||||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_koishi/ability_koishi_04_attack_landed.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex , 0, target:GetOrigin() + Vector(0,0,-260))
|
||||
ParticleManager:SetParticleControl(effectIndex , 1, target:GetOrigin() + Vector(0,0,0))
|
||||
ParticleManager:SetParticleControl(effectIndex , 2, target:GetOrigin() + Vector(0,0,0))
|
||||
ParticleManager:SetParticleControl(effectIndex , 3, target:GetOrigin() + Vector(0,0,0))
|
||||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||||
|
||||
if count > 0 then
|
||||
count = count - 1
|
||||
return 0.1
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end,
|
||||
0.1)
|
||||
end
|
||||
|
||||
function OnKoishi04Kill(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.unit
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/heroes/moluo/ability_moluo03_explosion.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex , 0, target:GetOrigin())
|
||||
ParticleManager:SetParticleControl(effectIndex , 3, target:GetOrigin())
|
||||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||||
end
|
||||
|
||||
function OnCreatedKoishi04Buff(keys)
|
||||
local target = keys.target
|
||||
target:THTD_AddBasePower(keys.power_base, "thtd_koishi_04_bonus")
|
||||
target:THTD_AddBaseAttack(keys.power_base, "thtd_koishi_04_bonus")
|
||||
target:THTD_AddPowerPercentage(keys.power_up, "thtd_koishi_04_bonus")
|
||||
target:THTD_AddAttackPercentage(keys.power_up, "thtd_koishi_04_bonus")
|
||||
end
|
||||
|
||||
function OnDestroyKoishi04Buff(keys)
|
||||
local target = keys.target
|
||||
target:THTD_AddBasePower("thtd_koishi_04_bonus")
|
||||
target:THTD_AddBaseAttack("thtd_koishi_04_bonus")
|
||||
target:THTD_AddPowerPercentage("thtd_koishi_04_bonus")
|
||||
target:THTD_AddAttackPercentage("thtd_koishi_04_bonus")
|
||||
end
|
||||
Reference in New Issue
Block a user