initial commit

This commit is contained in:
2021-10-24 15:36:18 -04:00
commit b9a5a8fe23
11982 changed files with 220468 additions and 0 deletions

View File

@@ -0,0 +1,239 @@
function OnSakuya01SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local targetPoint = keys.target_points[1]
local powerDamage = 0
local pv = caster:GetAbilityPowerValue("thtd_sakuya_01")
if pv ~= nil then
powerDamage = pv[1]
end
caster.power_damage = caster:THTD_GetAbilityPowerDamage(keys.ability) + powerDamage * caster:THTD_GetStarDamage()
if caster:IsPower666() then
caster.power_damage = caster.power_damage * 4
end
if caster:IsPower999() then
caster.power_damage = caster.power_damage * 12
end
if caster.thtd_sakuya_03_casted == true then
caster.power_damage = caster.power_damage * (1 - caster:GetAbilityValue("thtd_sakuya_03", "damage_down")/100)
end
local rad = GetRadBetweenTwoVec2D(caster:GetOrigin(),targetPoint)
local forward = Vector(math.cos(rad),math.sin(rad),caster:GetForwardVector().z)
local info =
{
Ability = keys.ability,
EffectName = "particles/thd2/heroes/sakuya/ability_sakuya_01.vpcf",
vSpawnOrigin = caster:GetOrigin() + Vector(0,0,128),
fDistance = 1000,
fStartRadius = 150,
fEndRadius = 150,
Source = caster,
bHasFrontalCone = false,
bReplaceExisting = false,
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_NONE,
iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
fExpireTime = GameRules:GetGameTime() + 10.0,
bDeleteOnHit = false,
vVelocity = forward * 2000,
bProvidesVision = true,
iVisionRadius = 1000,
iVisionTeamNumber = caster:GetTeamNumber()
}
local projectile = ProjectileManager:CreateLinearProjectile(info)
ParticleManager:DestroyLinearProjectileSystem(projectile,false)
local count = keys.max_count
for i=1,count do
local iVec = Vector( math.cos(rad + math.pi/36*(i+0.5)) * 2000 , math.sin(rad + math.pi/36*(i+0.5)) * 2000 , caster:GetForwardVector().z )
info.vVelocity = iVec
projectile = ProjectileManager:CreateLinearProjectile(info)
ParticleManager:DestroyLinearProjectileSystem(projectile,false)
iVec = Vector( math.cos(rad - math.pi/36*(i+0.5)) * 2000 , math.sin(rad - math.pi/36*(i+0.5)) * 2000 , caster:GetForwardVector().z )
info.vVelocity = iVec
projectile = ProjectileManager:CreateLinearProjectile(info)
ParticleManager:DestroyLinearProjectileSystem(projectile,false)
end
end
function OnSakuya01ProjectileHit(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local DamageTable = {
ability = keys.ability,
victim = target,
attacker = caster,
damage = caster.power_damage,
damage_type = keys.ability:GetAbilityDamageType(),
damage_flags = DOTA_DAMAGE_FLAG_NONE
}
UnitDamageTarget(DamageTable)
end
local sakuya_02_black_list =
{
"thtd_lily_01",
"thtd_daiyousei_01",
"thtd_koishi_04",
"thtd_sakuya_02",
"thtd_sakuya_03",
"thtd_yuuka_04",
"thtd_yukari_03",
"thtd_yukari_04",
"thtd_flandre_01",
"thtd_mokou_03",
"thtd_eirin_03",
"thtd_patchouli_04",
"thtd_hatate_02",
"thtd_sanae_03",
"thtd_minamitsu_02",
"thtd_minamitsu_03",
"thtd_toramaru_01",
"thtd_toramaru_02",
"thtd_toramaru_03",
"thtd_kanako_04",
"thtd_sanae_04",
"thtd_miko_04",
"thtd_keine_01",
"thtd_keine_03",
"thtd_suika_04",
"thtd_yuugi_03",
"thtd_alice_03",
"shinki_dragon_01",
"thtd_kagerou_03",
"death_prophet_exorcism",
"thtd_letty_01",
"thtd_suwako_04",
"thtd_komachi_04",
"thtd_junko_03",
"thtd_junko_04",
"thtd_clownpiece_03",
"thtd_kyouko_02",
"thtd_shikieiki_04",
"thtd_shinki_03",
}
function IsInSakuya02BlackList(ability)
for k,v in pairs(sakuya_02_black_list) do
if ability:GetAbilityName() == v then
return true
end
end
return false
end
function OnSakuya02SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local target = keys.target
local targetPoint = keys.target:GetOrigin()
-- local cooldown = keys.ability:GetCooldown(keys.ability:GetLevel() - 1) --获取当前等级的冷却时间
local cooldown = keys.ability:GetCooldownTimeRemaining() -- 或者 keys.ability:GetCooldownTime() 技能当前实际冷却时间
if keys.ability:GetLevel() >= 2 then
local unitName = target:GetUnitName()
if unitName == "remilia" or unitName == "flandre" or unitName == "patchouli" or unitName == "sakuya" or unitName == "koakuma" or unitName == "meirin" then
cooldown = cooldown * 0.5
keys.ability:EndCooldown()
keys.ability:StartCooldown(cooldown)
end
end
if target:THTD_IsTower() and target:HasModifier("modifier_sakuya_02_buff") == false then
caster.thtd_last_cast_unit = target
keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_sakuya_02_buff", {duration=cooldown})
local effectIndex = ParticleManager:CreateParticle("particles/thd2/items/item_pocket_watch.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, target:GetOrigin())
ParticleManager:DestroyParticleSystem(effectIndex,false)
for i=2,5 do
local ability = target:GetAbilityByIndex(i)
if ability~=nil and IsInSakuya02BlackList(ability) == false then
ability:EndCooldown()
target:GiveMana(target:GetRealManaCost(ability))
end
end
if caster == target then
target:THTD_AddManaRegenPercentage(keys.mana_reg)
caster:SetContextThink(DoUniqueString("ability_reimu_03"),
function()
if target~=nil and target:IsNull()==false and target:IsAlive() then
target:THTD_AddManaRegenPercentage(-keys.mana_reg)
end
return nil
end,
cooldown-0.2)
end
end
end
function OnSakuya03SpellStart(keys)
local caster = EntIndexToHScript(keys.caster_entindex)
local powerCd = 0
local pv = caster:GetAbilityPowerValue("thtd_sakuya_03")
if pv ~= nil then
powerCd = pv[1]
end
if powerCd > 0 then
caster:ReCooldown(keys.ability, powerCd)
end
local duration = math.floor(100 * keys.duration_time + 0.5) / 100
local range = keys.range
local pauseUnit = {}
local effectIndex = ParticleManager:CreateParticle("particles/heroes/muyue/ability_muyue_014_aeons.vpcf", PATTACH_CUSTOMORIGIN, caster)
ParticleManager:SetParticleControl(effectIndex, 0, caster:GetOrigin())
ParticleManager:SetParticleControl(effectIndex, 1, Vector(range,range,range))
caster.thtd_sakuya_03_casted = true
caster:SetContextThink(DoUniqueString("ability_reimu_03"),
function()
if GameRules:IsGamePaused() then return 0.1 end
if duration < 0 or THTD_IsValid(caster) == false then
for k,v in pairs(pauseUnit) do
if v~=nil and v:IsNull()==false and v:IsAlive() then
v:RemoveModifierByName("modifier_sakuya_03_time_pause_debuff")
end
end
ParticleManager:DestroyParticleSystem(effectIndex,true)
pauseUnit = {}
caster.thtd_sakuya_03_casted = nil
return nil
end
local targets = THTD_FindUnitsInRadius(caster,caster:GetOrigin(),range)
for k,v in pairs(targets) do
if v:HasModifier("modifier_sakuya_03_time_pause_debuff") == false then
keys.ability:ApplyDataDrivenModifier(caster, v, "modifier_sakuya_03_time_pause_debuff", nil)
pauseUnit[v:GetEntityIndex()] = v
end
end
if caster:GetMana() < caster:GetMaxMana() then
caster:SetMana(caster:GetMaxMana())
end
local ability = caster:FindAbilityByName("thtd_sakuya_01")
local unit = targets[1]
if unit ~= nil and unit:IsNull() == false and ability:IsFullyCastable() then
caster:CastAbilityOnPosition(unit:GetOrigin(), ability, caster:GetPlayerOwnerID())
end
duration = duration - 0.1
return 0.1
end,
0)
end