initial commit
This commit is contained in:
140
scripts/vscripts/abilities/abilitymomiji.lua
Executable file
140
scripts/vscripts/abilities/abilitymomiji.lua
Executable file
@@ -0,0 +1,140 @@
|
||||
function OnMomiji01Spawn(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
if caster.ability_momiji01_Spawn_unit == nil then
|
||||
caster.ability_momiji01_Spawn_unit = {}
|
||||
end
|
||||
|
||||
count = keys.max_count
|
||||
|
||||
for i=1,count do
|
||||
local unit = CreateUnitByName(
|
||||
"momiji_wolf"
|
||||
,caster:GetOrigin() + ( caster:GetForwardVector() + Vector(math.cos((i-1.5)*math.pi/3),math.sin((i-1.5)*math.pi/3),0) ) * 100
|
||||
,false
|
||||
,caster:GetOwner()
|
||||
,caster:GetOwner()
|
||||
,caster:GetTeam()
|
||||
)
|
||||
|
||||
if unit == nil then return end
|
||||
|
||||
unit:SetControllableByPlayer(caster:GetPlayerOwnerID(), false)
|
||||
unit:SetBaseDamageMax(caster:THTD_GetStarDamage() * keys.wolf_attack)
|
||||
unit:SetBaseDamageMin(caster:THTD_GetStarDamage() * keys.wolf_attack)
|
||||
unit.thtd_spawn_unit_owner = caster
|
||||
|
||||
keys.ability:ApplyDataDrivenModifier(caster, unit, "modifier_momiji_01_buff", nil)
|
||||
|
||||
local hero = caster:GetOwner()
|
||||
if GameRules.player_bb_buff[hero.thtd_player_id]["item_3016"] > 0 then
|
||||
unit.bb_buff_3016 = GameRules.player_bb_buff[hero.thtd_player_id]["item_3016"]
|
||||
unit:AddNewModifier(unit, nil, "modifier_bb_buff_3016_effect", nil):SetStackCount(GameRules.player_bb_buff[hero.thtd_player_id]["item_3016"])
|
||||
end
|
||||
|
||||
local oldSwpanUnit = caster.ability_momiji01_Spawn_unit[i]
|
||||
if oldSwpanUnit ~=nil and oldSwpanUnit:IsNull() == false then
|
||||
oldSwpanUnit:ForceKill(false)
|
||||
end
|
||||
caster.ability_momiji01_Spawn_unit[i] = unit
|
||||
|
||||
local duration = keys.ability:GetCooldownTime()
|
||||
unit:SetContextThink(DoUniqueString("thtd_momiji_01"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
if GetDistanceBetweenTwoVec2D(caster:GetOrigin(), unit:GetOrigin()) > keys.range then
|
||||
local forward = (unit:GetAbsOrigin() - caster:GetAbsOrigin()):Normalized()
|
||||
unit:MoveToPosition(caster:GetOrigin() + forward * keys.range)
|
||||
end
|
||||
if duration > 0 then
|
||||
duration = duration - 0.5
|
||||
else
|
||||
unit:AddNoDraw()
|
||||
unit:ForceKill(false)
|
||||
return nil
|
||||
end
|
||||
if not THTD_IsValid(caster) then
|
||||
unit:AddNoDraw()
|
||||
unit:ForceKill(false)
|
||||
return nil
|
||||
end
|
||||
return 0.5
|
||||
end,
|
||||
0.5)
|
||||
end
|
||||
end
|
||||
|
||||
function OnMomiji02SpellStart(keys)
|
||||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||||
local target = keys.target
|
||||
|
||||
if target:GetPlayerOwnerID() ~= caster:GetPlayerOwnerID() then return end
|
||||
|
||||
if caster.ability_momiji_02_target == target then return end
|
||||
if caster == target then return end
|
||||
|
||||
keys.ability:ApplyDataDrivenModifier(caster, target, "modifier_momiji_02", nil)
|
||||
local effectIndex = ParticleManager:CreateParticle("particles/heroes/thtd_momiji/ability_momiji_02.vpcf", PATTACH_CUSTOMORIGIN, caster)
|
||||
ParticleManager:SetParticleControlEnt(effectIndex , 0, target, 5, "follow_origin", Vector(0,0,0), true)
|
||||
caster.ability_momiji_02_target = target
|
||||
|
||||
local count = 0
|
||||
caster:SetContextThink(DoUniqueString("modifier_momiji_02"),
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
if caster.ability_momiji_02_target ~= target then
|
||||
if target~=nil and target:IsNull()==false and target:HasModifier("modifier_momiji_02") then
|
||||
target:RemoveModifierByName("modifier_momiji_02")
|
||||
end
|
||||
ParticleManager:DestroyParticleSystem(effectIndex,true)
|
||||
return nil
|
||||
end
|
||||
return 0.1
|
||||
end,
|
||||
0.1)
|
||||
|
||||
caster:SetContextThink("modifier_momiji_02_remove",
|
||||
function()
|
||||
if GameRules:IsGamePaused() then return 0.03 end
|
||||
if caster:THTD_IsHidden() or keys.ability:GetLevel()<1 then
|
||||
caster.ability_momiji_02_target = nil
|
||||
return nil
|
||||
end
|
||||
return 0.1
|
||||
end,
|
||||
0.1)
|
||||
end
|
||||
|
||||
function OnCreatedMomiji02Buff(keys)
|
||||
local target = keys.target
|
||||
local bonus = 0
|
||||
if target:GetUnitName() == "aya" then
|
||||
bonus = keys.aya_damage_up
|
||||
else
|
||||
bonus = keys.damage_up
|
||||
end
|
||||
target:AddDamageOutgoingPhysical(bonus, "thtd_momiji_02_damage_up")
|
||||
end
|
||||
|
||||
function OnUpgradeMomiji02Buff(keys)
|
||||
local caster = keys.caster
|
||||
local targets = {}
|
||||
if caster.ability_momiji_02_target ~= nil then
|
||||
table.insert(targets, caster.ability_momiji_02_target)
|
||||
end
|
||||
|
||||
for _,target in pairs(targets) do
|
||||
local bonus = 0
|
||||
if target:GetUnitName() == "aya" then
|
||||
bonus = keys.aya_damage_up
|
||||
else
|
||||
bonus = keys.damage_up
|
||||
end
|
||||
target:AddDamageOutgoingPhysical(bonus, "thtd_momiji_02_damage_up")
|
||||
end
|
||||
|
||||
targets = {}
|
||||
end
|
||||
|
||||
function OnDestroyMomiji02Buff(keys)
|
||||
keys.target:AddDamageOutgoingPhysical("thtd_momiji_02_damage_up")
|
||||
end
|
||||
Reference in New Issue
Block a user