restructure

This commit is contained in:
2021-11-10 08:48:00 -05:00
parent d3eac6b70e
commit aaa089715d
12018 changed files with 6424 additions and 135034 deletions

View File

@@ -0,0 +1,271 @@
thtd_sanae_01 = class({})
LinkLuaModifier("modifier_sanae_01", "abilities/abilitySanae", LUA_MODIFIER_MOTION_NONE)
function thtd_sanae_01:OnSpellStart()
local caster = self:GetCaster()
local target = self:GetCursorTarget()
-- AI需要改动的地方
caster.thtd_last_cast_unit = target
local ExtraData = {
count=0
}
self:Sanae01PassToNextUnit(caster,caster:GetOrigin(),target,ExtraData)
end
function thtd_sanae_01:Sanae01PassToNextUnit(source,loction,target,data)
local caster = self:GetCaster()
local info =
{
Target = target,
Source = source,
Ability = self,
EffectName = "particles/heroes/sanae/ability_sanae_01.vpcf",
iMoveSpeed = 1400,
vSourceLoc= loction, -- 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,
iVisionRadius = 400,
iVisionTeamNumber = caster:GetTeamNumber(),
ExtraData = {
count = data.count + 1
}
}
projectile = ProjectileManager:CreateTrackingProjectile(info)
end
function thtd_sanae_01:OnProjectileHit_ExtraData(hTarget, vLocation, data)
local caster = self:GetCaster()
local target = hTarget
if target:THTD_IsTower() and target.thtd_sanae_01_power_bonus == nil then
local duration_time = self:GetSpecialValueFor("duration_time")
target.thtd_sanae_01_power_bonus = math.max(1, math.floor(self:GetSpecialValueFor("power_bonus") * (1 - self:GetSpecialValueFor("down_percent")/100)^(data.count - 1)))
target:AddNewModifier(caster, self, "modifier_sanae_01", {duration = duration_time})
local effectIndex = ParticleManager:CreateParticle("particles/heroes/sanae/ability_sanae_01_effect.vpcf", PATTACH_CUSTOMORIGIN, target)
ParticleManager:SetParticleControlEnt(effectIndex , 0, target, 5, "follow_origin", Vector(0,0,0), true)
ParticleManager:DestroyParticleSystemTime(effectIndex, duration_time)
end
if data.count < self:GetSpecialValueFor("max_count") then
local targets =
FindUnitsInRadius(
caster:GetTeamNumber(),
caster:GetOrigin(),
nil,
self:GetSpecialValueFor("range"),
self:GetAbilityTargetTeam(),
self:GetAbilityTargetType(),
self:GetAbilityTargetFlags(),
FIND_ANY_ORDER,
false
)
for k,v in pairs(targets) do
if v~=nil and v~=target and v:THTD_IsTower() and v:HasModifier("modifier_sanae_01") == false then
self:Sanae01PassToNextUnit(target,vLocation,v,data)
break
end
end
end
return true
end
--------------------------------------------------------------------------------
modifier_sanae_01 = class({})
function modifier_sanae_01:OnCreated( kv )
if IsServer() then
local target = self:GetParent()
target:THTD_AddBasePower(target.thtd_sanae_01_power_bonus)
end
end
function modifier_sanae_01:OnDestroy()
if IsServer() then
local target = self:GetParent()
target:THTD_AddBasePower(-target.thtd_sanae_01_power_bonus)
target.thtd_sanae_01_power_bonus = nil
end
end
--------------------------------------------------------------------------------
function OnSanae02SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local targetPoint = keys.target_points[1]
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_sanae/ability_sanae_02.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
ParticleManager:DestroyParticleSystemTime(effectIndex, keys.duration_time)
effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_sanae/ability_sanae_02_p.vpcf", PATTACH_CUSTOMORIGIN, nil)
ParticleManager:SetParticleControl(effectIndex, 0, targetPoint)
ParticleManager:DestroyParticleSystemTime(effectIndex, keys.duration_time)
local time = keys.duration_time
caster:SetContextThink(DoUniqueString("thtd_patchouli04_spell_start"),
function()
if GameRules:IsGamePaused() then return 0.03 end
if time <= 0 then return nil end
local targets = THTD_FindUnitsInRadius(caster, targetPoint, keys.range)
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * 0.2
for k,v in pairs(targets) do
local modifier = v:FindModifierByName("modifier_sanae_debuff")
if modifier == nil then
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_sanae_debuff", {duration=0.2})
else
modifier:SetDuration(0.2,false)
end
local DamageTable = {
ability = keys.ability,
victim = v,
attacker = caster,
damage = damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable)
end
time = time - 0.2
return 0.2
end,
0)
end
function OnSanae03SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local targetPoint = keys.target_points[1]
local time = keys.duration_time
local vec = targetPoint + RandomVector(keys.range)
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_sanae_03/ability_sanae_03.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, vec)
ParticleManager:SetParticleControl(effectIndex, 1, vec)
ParticleManager:SetParticleControl(effectIndex, 3, vec)
ParticleManager:SetParticleControl(effectIndex, 4, vec)
ParticleManager:SetParticleControl(effectIndex, 5, vec)
ParticleManager:SetParticleControl(effectIndex, 6, vec)
ParticleManager:DestroyParticleSystem(effectIndex,false)
caster:SetContextThink(DoUniqueString("thtd_patchouli04_spell_start"),
function()
if GameRules:IsGamePaused() then return 0.03 end
if time <= 0 then return nil end
local targets = THTD_FindUnitsInRadius(caster,vec,keys.range)
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * (1 + caster:THTD_GetFaith() * keys.damage_up/100)
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)
UnitStunTarget(caster,v, keys.stun_time * (1 + caster:THTD_GetFaith() * keys.stun_up/100))
end
vec = targetPoint + RandomVector(keys.range)
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_sanae_03/ability_sanae_03.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, vec)
ParticleManager:SetParticleControl(effectIndex, 1, vec)
ParticleManager:SetParticleControl(effectIndex, 3, vec)
ParticleManager:SetParticleControl(effectIndex, 4, vec)
ParticleManager:SetParticleControl(effectIndex, 5, vec)
ParticleManager:SetParticleControl(effectIndex, 6, vec)
ParticleManager:DestroyParticleSystem(effectIndex,false)
time = time - 0.2
return 0.2
end,
0)
end
function OnSanae04SpellStart(keys)
local caster = keys.caster
local effectIndex = ParticleManager:CreateParticle("particles/heroes/sanae/ability_sanea_04_effect_b.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
ParticleManager:DestroyParticleSystemTime(effectIndex, keys.duration_time)
if keys.ability:GetLevel() < 2 then return end
local hero = GameRules.HeroList[caster:GetPlayerOwnerID()]
if hero == nil then return end
for k,v in pairs(hero.thtd_hero_tower_list) do
local unitName = v:GetUnitName()
if unitName == "sanae" or unitName == "kanako" or unitName == "suwako" then
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_sanae_04_buff", nil)
end
end
end
function OnCreatedSanae04Buff(keys)
keys.target:THTD_AddBasePower(keys.power_bonus * keys.target:THTD_GetFaith()/3, "thtd_sanae_04_buff")
end
function OnDestroySanae04Buff(keys)
keys.target:THTD_AddBasePower("thtd_sanae_04_buff")
end
function OnSanae04Created(keys)
-- local caster = EntIndexToHScript(keys.caster_entindex) 与下面一样
local caster = keys.caster
local target = keys.target
local unitName = target:GetUnitName()
if unitName == "sanae" or unitName == "kanako" or unitName == "suwako" then
if not target:HasModifier("modifier_sanae_04_combo_buff") then
local modifier = keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_sanae_04_combo_buff", nil)
local hero = GameRules.HeroList[caster:GetPlayerOwnerID()]
if hero ~= nil and hero.thtd_ss_faith ~= nil and hero.thtd_ss_faith > 0 then
modifier:SetStackCount(hero.thtd_ss_faith)
end
end
end
end
function OnSanae04Destroy(keys)
local caster = keys.caster
local target = keys.target
local unitName = target:GetUnitName()
if unitName == "sanae" or unitName == "kanako" or unitName == "suwako" then
if target:HasModifier("modifier_sanae_04_combo_buff") then
target:RemoveModifierByName("modifier_sanae_04_combo_buff")
end
if target:HasModifier("modifier_sanae_04_buff") then
target:RemoveModifierByName("modifier_sanae_04_buff")
end
end
end
function OnCreatedSanae04ComboBuff(keys)
keys.target:THTD_AddBasePower(math.floor(keys.target:THTD_GetFaith()/3), "thtd_sanae_04_combo_buff", "thtd_sanae_04_combo_buff")
end
function OnDestroySanae04ComboBuff(keys)
keys.target:THTD_AddBasePower("thtd_sanae_04_combo_buff")
end
function OnSanaeKill(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
caster:THTD_AddFaith()
end