initial commit
This commit is contained in:
117
scripts/vscripts/abilities/abilitylily.lua
Executable file
117
scripts/vscripts/abilities/abilitylily.lua
Executable file
@@ -0,0 +1,117 @@
|
||||
function OnLily01SpellStart(keys)
|
||||
local caster = keys.caster
|
||||
local ability = keys.ability
|
||||
local targetPoint = keys.target_points[1]
|
||||
|
||||
if caster:GetMaxMana() ~= (caster.lily_max_mana or 100) then
|
||||
caster:SetMaxMana(caster.lily_max_mana or 100)
|
||||
end
|
||||
|
||||
if SpawnSystem.IsUnLimited == false and GameRules:GetCustomGameDifficulty() < FUNNY_MODE then
|
||||
local targets =
|
||||
FindUnitsInRadius(
|
||||
caster:GetTeamNumber(),
|
||||
targetPoint,
|
||||
nil,
|
||||
keys.radius,
|
||||
ability:GetAbilityTargetTeam(),
|
||||
ability:GetAbilityTargetType(),
|
||||
ability:GetAbilityTargetFlags(),
|
||||
FIND_CLOSEST,
|
||||
false
|
||||
)
|
||||
|
||||
local exp = caster:THTD_GetPower() * keys.power_factor
|
||||
|
||||
for k,v in pairs(targets) do
|
||||
if v ~= nil and v:IsNull() == false and v:THTD_IsTower() and v ~= caster and v:GetOwner() == caster:GetOwner() and v:THTD_GetLevel() < THTD_MAX_LEVEL then
|
||||
v:THTD_AddExp(exp)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local targets = THTD_FindUnitsInRadius(caster,targetPoint,keys.radius)
|
||||
local damage = caster:THTD_GetAbilityPowerDamage(ability)
|
||||
local maxDamage = caster:GetKillDamage()
|
||||
for k,v in pairs(targets) do
|
||||
local DamageTable = {
|
||||
ability = ability,
|
||||
victim = v,
|
||||
attacker = caster,
|
||||
damage = math.min(maxDamage, damage + v:GetHealth() * keys.hp_damage/100),
|
||||
damage_type = keys.ability:GetAbilityDamageType(),
|
||||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||||
}
|
||||
UnitDamageTarget(DamageTable)
|
||||
end
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/heroes/lily/ability_lily_01_a.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
|
||||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||||
end
|
||||
|
||||
function OnLily01EffectThink(keys)
|
||||
local caster = keys.caster
|
||||
local ability = keys.ability
|
||||
|
||||
if SpawnSystem.IsUnLimited and caster.is_unlimited_mana_buff ~= true then
|
||||
caster.is_unlimited_mana_buff = true
|
||||
caster:AddManaCostReducePercent(keys.mana_down, "thtd_lily_01_unlimited_mana_buff")
|
||||
caster.lily_max_mana = 100 - caster:GetManaCostReducePercent()
|
||||
end
|
||||
|
||||
if caster:GetMaxMana() ~= (caster.lily_max_mana or 100) then
|
||||
caster:SetMaxMana(caster.lily_max_mana or 100)
|
||||
end
|
||||
|
||||
if ability:IsFullyCastable() then
|
||||
if caster.thtd_lily_01_effectIndex == nil then
|
||||
caster.thtd_lily_01_effectIndex = ParticleManager:CreateParticle("particles/heroes/lily/ability_lily_01_ready.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControlEnt(caster.thtd_lily_01_effectIndex , 0, caster, 5, "follow_origin", Vector(0,0,0), true)
|
||||
end
|
||||
elseif caster.thtd_lily_01_effectIndex ~= nil then
|
||||
ParticleManager:DestroyParticleSystem(caster.thtd_lily_01_effectIndex,true)
|
||||
caster.thtd_lily_01_effectIndex = nil
|
||||
end
|
||||
end
|
||||
|
||||
function OnLily02SpellStart(keys)
|
||||
local caster = keys.caster
|
||||
|
||||
if caster:GetMaxMana() ~= (caster.lily_max_mana or 100) then
|
||||
caster:SetMaxMana(caster.lily_max_mana or 100)
|
||||
end
|
||||
|
||||
local powerRange = 0
|
||||
local pv = caster:GetAbilityPowerValue("thtd_lily_02")
|
||||
if pv ~= nil then
|
||||
powerRange = pv[1]
|
||||
end
|
||||
local range = powerRange + keys.radius
|
||||
|
||||
local targets = THTD_FindFriendlyUnitsInRadius(caster,caster:GetAbsOrigin(),range)
|
||||
for k,v in pairs(targets) do
|
||||
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_lily_02_buff", nil)
|
||||
end
|
||||
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/heroes/lily/ability_lily_02.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
|
||||
ParticleManager:SetParticleControl(effectIndex, 1, Vector(range, range, range))
|
||||
ParticleManager:DestroyParticleSystemTime(effectIndex,keys.duration)
|
||||
end
|
||||
|
||||
function OnCreatedLily02Buff(keys)
|
||||
local factor = 1
|
||||
if keys.target:GetUnitName() == "lily" then
|
||||
local date = string.sub(GameRules.GameData.server_time,6,10)
|
||||
if date >= "02-05" and date <= "05-05" then
|
||||
factor = keys.self_crit
|
||||
end
|
||||
end
|
||||
keys.target:AddDamageOutgoingAll(keys.damage_up * factor, "thtd_lily_02_damage_up")
|
||||
end
|
||||
|
||||
function OnDestroyLily02Buff(keys)
|
||||
keys.target:AddDamageOutgoingAll("thtd_lily_02_damage_up")
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user