66 lines
1.8 KiB
Lua
Executable File
66 lines
1.8 KiB
Lua
Executable File
function Spawn( entityKeyValues )
|
|
if not IsServer() then
|
|
return
|
|
end
|
|
|
|
if thisEntity == nil then
|
|
return
|
|
end
|
|
thisEntity.TetherAbility = thisEntity:FindAbilityByName( "aghsfort_wisp_tether" )
|
|
|
|
thisEntity:SetContextThink( "ElementalIoThink", ElementalIoThink, 0.5 )
|
|
end
|
|
|
|
function ElementalIoThink()
|
|
if ( not thisEntity:IsAlive() ) then
|
|
|
|
return -1
|
|
end
|
|
if GameRules:IsGamePaused() == true then
|
|
return 1
|
|
end
|
|
|
|
if thisEntity:GetOwner() == nil or thisEntity:GetOwner():IsAlive() ~= true then
|
|
-- We lost our owner Tiny. Let's find a new one.
|
|
local entities = FindUnitsInRadius( thisEntity:GetTeamNumber(), thisEntity:GetOrigin(), thisEntity, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_NO_INVIS, FIND_CLOSEST, false )
|
|
local hPossibleOwner = nil
|
|
for _, hAlly in pairs( entities ) do
|
|
|
|
if hAlly ~= nil and not hAlly:IsNull() and hAlly:IsAlive() == true and hAlly:GetUnitName() == "npc_dota_creature_elemental_tiny" then
|
|
printf("Found a valid tiny")
|
|
hPossibleOwner = hAlly
|
|
break
|
|
end
|
|
end
|
|
|
|
if hPossibleOwner ~= nil then
|
|
thisEntity:SetOwner( hPossibleOwner )
|
|
else
|
|
--No new owners found. Not even worth thinking anymore
|
|
|
|
return -1
|
|
end
|
|
end
|
|
|
|
if thisEntity.TetherAbility ~= nil and thisEntity.TetherAbility:IsFullyCastable() then
|
|
if (thisEntity:GetAbsOrigin() - thisEntity:GetOwner():GetAbsOrigin() ):Length2D() > 350 then
|
|
return CastTether(thisEntity:GetOwner())
|
|
end
|
|
end
|
|
|
|
return 0.5
|
|
end
|
|
|
|
function CastTether( hTarget )
|
|
|
|
ExecuteOrderFromTable({
|
|
UnitIndex = thisEntity:entindex(),
|
|
OrderType = DOTA_UNIT_ORDER_CAST_TARGET,
|
|
AbilityIndex = thisEntity.TetherAbility:entindex(),
|
|
TargetIndex = hTarget:entindex(),
|
|
Queue = false,
|
|
})
|
|
|
|
return 0.5
|
|
end
|