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,314 @@
function OnKaguya01SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local count = keys.max_count
caster:SetContextThink(DoUniqueString("thtd_kaguya01_spell_think"),
function()
if GameRules:IsGamePaused() then return 0.03 end
if count <= 0 then
return nil
end
OnKaguya01SpellThink(keys,count)
count = count - 1
return 0.7
end,
0)
end
function OnKaguya01SpellThink(keys,count)
local caster = EntIndexToHScript(keys.caster_entindex)
local targetPoint = keys.target_points[1]
for i=1,count*5 do
local forwardVector = caster:GetForwardVector()
local rollRad = i*math.pi*2/(count*5)
local forwardCos = forwardVector.x
local forwardSin = forwardVector.y
local damageVector = Vector(math.cos(rollRad)*forwardCos - math.sin(rollRad)*forwardSin,
forwardSin*math.cos(rollRad) + forwardCos*math.sin(rollRad),
0) * count*100 + targetPoint
local effectIndex
if((i*count*5)%3==0)then
effectIndex = ParticleManager:CreateParticle("particles/thd2/heroes/kaguya/ability_kaguya01_light.vpcf", PATTACH_CUSTOMORIGIN, nil)
elseif((i*count*5)%3==1)then
effectIndex = ParticleManager:CreateParticle("particles/thd2/heroes/kaguya/ability_kaguya01_light_green.vpcf", PATTACH_CUSTOMORIGIN, nil)
elseif((i*count*5)%3==2)then
effectIndex = ParticleManager:CreateParticle("particles/thd2/heroes/kaguya/ability_kaguya01_light_red.vpcf", PATTACH_CUSTOMORIGIN, nil)
end
ParticleManager:SetParticleControl(effectIndex, 0, damageVector)
ParticleManager:SetParticleControl(effectIndex, 1, damageVector)
ParticleManager:DestroyParticleSystem(effectIndex,false)
local targets = THTD_FindUnitsInRadius(caster,damageVector,keys.range)
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
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)
end
end
end
function OnKaguya02SpellThink(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
if keys.ability:GetLevel() < 1 then return end
if caster.thtd_kaguya_02_count == nil then
caster.thtd_kaguya_02_count = 0
end
if caster.thtd_kaguya_02_count == 0 then
local effectName = "particles/econ/items/windrunner/wr_ti8_immortal_shoulder/wr_ti8_shackleshot_pair_rope_target_glow.vpcf"
local effectIndex = ParticleManager:CreateParticle(effectName, PATTACH_ABSORIGIN_FOLLOW, caster)
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin() + Vector(0, 0, 100))
ParticleManager:ReleaseParticleIndex(effectIndex)
end
caster.thtd_kaguya_02_count = caster.thtd_kaguya_02_count + 1
if caster.thtd_kaguya_02_count >= 20 then
caster.thtd_kaguya_02_count = 0
end
local targets = THTD_FindFriendlyUnitsInRadius(caster,caster:GetAbsOrigin(),1000)
for k,v in pairs(targets) do
local modifier = v:FindModifierByName("modifier_kaguya_02_buff")
-- 持续时间比think大一点
if modifier == nil then
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_kaguya_02_buff", {Duration = 0.3})
else
modifier:SetDuration(0.3, false)
end
end
end
function OnCreatedKaguya02_buff(keys)
local target = keys.target
local factor = 0.5
if target:GetUnitName() == "kaguya" then
factor = 1
end
target:THTD_AddCritChance(keys.bonus_chance * factor, "thtd_kaguya_02_bonus")
target:THTD_AddCritDamage(keys.bonus_crit * factor, "thtd_kaguya_02_bonus")
end
function OnRemoveKaguya02_buff(keys)
local target = keys.target
target:THTD_AddCritChance("thtd_kaguya_02_bonus")
target:THTD_AddCritDamage("thtd_kaguya_02_bonus")
end
function OnKaguya03SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
if caster.thtd_kaguya_03_roll == false then
caster.thtd_kaguya_03_roll = true
else
caster.thtd_kaguya_03_roll = false
end
end
function OnUpgradeKaguya03(keys)
local caster = keys.caster
local friends = THTD_FindFriendlyUnitsAll(caster)
local enemies = THTD_FindUnitsAll(caster)
for i=1,4 do
local buff = "modifier_kaguya_03_"..i.."_buff"
local debuff = "modifier_kaguya_03_"..i.."_debuff"
for k,v in pairs(friends) do
if v:FindModifierByNameAndCaster(buff,caster)~=nil then
v:RemoveModifierByName(buff)
end
end
for k,v in pairs(enemies) do
if v:FindModifierByNameAndCaster(debuff,caster)~=nil then
v:RemoveModifierByName(debuff)
end
end
end
end
function OnKaguya03SpellThink(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
if keys.ability:GetLevel() < 1 then return end
if GameRules:IsGamePaused() then return end
if caster:THTD_IsHidden() then
OnKaguya03ReleaseBall(caster)
return
end
if caster.thtd_kaguya_03_treasure_table == nil then
caster.thtd_kaguya_03_treasure_table = {}
end
if caster.thtd_kaguya_03_think_count == nil then
caster.thtd_kaguya_03_think_count = 0
end
if caster.thtd_kaguya_03_roll ~= false then
if caster.thtd_kaguya_03_think_count < 360 then
caster.thtd_kaguya_03_think_count = caster.thtd_kaguya_03_think_count + 1
else
caster.thtd_kaguya_03_think_count = 0
end
end
if caster.thtd_effect_count == nil then
caster.thtd_effect_count = 1
end
-- 旋转宝具
for i=1,4 do
if caster.thtd_kaguya_03_treasure_table[i] == nil then
caster.thtd_kaguya_03_treasure_table[i] = {}
end
if caster.thtd_kaguya_03_treasure_table[i]["effectIndex"] == nil then
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_kaguya/thtd_kaguya_03_"..i..".vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 1, Vector(1/12,0,0))
ParticleManager:SetParticleControl(effectIndex, 2, Vector(500/12,0,0))
caster.thtd_kaguya_03_treasure_table[i]["effectIndex"] = effectIndex
end
if caster.thtd_kaguya_03_roll ~= false then
caster.thtd_kaguya_03_treasure_table[i]["origin"] = caster:GetOrigin() +
Vector(
math.cos(i*2*math.pi/4 + caster.thtd_kaguya_03_think_count * math.pi/180)*400,
math.sin(i*2*math.pi/4 + caster.thtd_kaguya_03_think_count * math.pi/180)*400,
150)
end
end
local friends = {}
local enemies = {}
if caster.thtd_effect_count >= 10 then
friends = THTD_FindFriendlyUnitsAll(caster)
enemies = THTD_FindUnitsAll(caster)
end
for i=1,4 do
if caster.thtd_kaguya_03_treasure_table[i]["effectIndex"] ~= nil then
ParticleManager:SetParticleControl(caster.thtd_kaguya_03_treasure_table[i]["effectIndex"], 0, caster.thtd_kaguya_03_treasure_table[i]["origin"] )
end
if caster.thtd_effect_count >= 10 then
local buff = "modifier_kaguya_03_"..i.."_buff"
local debuff = "modifier_kaguya_03_"..i.."_debuff"
for k,v in pairs(friends) do
if GetDistanceBetweenTwoVec2D(caster.thtd_kaguya_03_treasure_table[i]["origin"], v:GetOrigin()) > keys.range then
if v:FindModifierByNameAndCaster(buff,caster)~=nil then
v:RemoveModifierByName(buff)
end
else
if v:HasModifier(buff) == false then
keys.ability:ApplyDataDrivenModifier(caster, v, buff, {})
end
end
end
for k,v in pairs(enemies) do
if GetDistanceBetweenTwoVec2D(caster.thtd_kaguya_03_treasure_table[i]["origin"], v:GetOrigin()) > keys.range then
if v:FindModifierByNameAndCaster(debuff,caster)~=nil then
v:RemoveModifierByName(debuff)
end
else
if i ~= 2 and v:HasModifier(debuff) == false then
keys.ability:ApplyDataDrivenModifier(caster, v, debuff, {})
end
local damage = caster:THTD_GetAbilityPowerDamage(keys.ability) * 0.2
if i == 2 then
damage = damage * (1 + keys.damage_up/100)
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
end
if i == 4 then caster.thtd_effect_count = 1 end
else
if i == 4 then caster.thtd_effect_count = caster.thtd_effect_count + 1 end
end
end
end
function OnKaguya03ReleaseBall(caster)
if caster.thtd_kaguya_03_treasure_table ~= nil and caster.thtd_kaguya_03_treasure_table[1] ~= nil and caster.thtd_kaguya_03_treasure_table[1]["effectIndex"] ~= nil then
local friends = THTD_FindFriendlyUnitsAll(caster)
local enemies = THTD_FindUnitsAll(caster)
for i=1,4 do
local buff = "modifier_kaguya_03_"..i.."_buff"
local debuff = "modifier_kaguya_03_"..i.."_debuff"
for k,v in pairs(friends) do
if v:FindModifierByNameAndCaster(buff,caster)~=nil then
v:RemoveModifierByName(buff)
end
end
for k,v in pairs(enemies) do
if v:FindModifierByNameAndCaster(debuff,caster)~=nil then
v:RemoveModifierByName(debuff)
end
end
if caster.thtd_kaguya_03_treasure_table[i]["effectIndex"] ~= nil then
ParticleManager:DestroyParticleSystem(caster.thtd_kaguya_03_treasure_table[i]["effectIndex"],true)
caster.thtd_kaguya_03_treasure_table[i]["effectIndex"] = nil
end
end
end
end
function OnCreatedKaguya03_2_buff(keys)
keys.target:THTD_AddAttackPercentage(keys.attack_percent, "thtd_kaguya_03_2_buff_bonus")
end
function OnDestroyKaguya03_2_buff(keys)
keys.target:THTD_AddAttackPercentage("thtd_kaguya_03_2_buff_bonus")
end
function OnCreatedKaguya03_3_debuff(keys)
keys.target:AddDamageIncomingAll(keys.incoming_percent, "thtd_kaguya_03_3_debuff_damage_up")
end
function OnRemoveKaguya03_3_debuff(keys)
keys.target:AddDamageIncomingAll("thtd_kaguya_03_3_debuff_damage_up")
end
function OnCreatedKaguya03_3_buff(keys)
keys.target:AddDamageOutgoingAll(keys.outgoing_percent, "thtd_kaguya_03_3_damage_up")
end
function OnDestroyKaguya03_3_buff(keys)
keys.target:AddDamageOutgoingAll("thtd_kaguya_03_3_damage_up")
end
function OnCreatedKaguya03_4_debuff(keys)
local target = keys.target
target:AddPhysicalArmor(-keys.armor)
end
function OnDestroyKaguya03_4_debuff(keys)
local target = keys.target
target:AddPhysicalArmor(keys.armor)
end
function OnCreatedKaguya03_4_buff(keys)
keys.target:AddDamageOutgoingPhysical(keys.penetration, "thtd_kaguya_03_4_damage_up")
end
function OnDestroyKaguya03_4_buff(keys)
keys.target:AddDamageOutgoingPhysical("thtd_kaguya_03_4_damage_up")
end