98 lines
2.5 KiB
Lua
Executable File
98 lines
2.5 KiB
Lua
Executable File
function Spawn( entityKeyValues )
|
|
if not IsServer() then
|
|
return
|
|
end
|
|
|
|
if thisEntity == nil then
|
|
return
|
|
end
|
|
|
|
thisEntity.bAcqRangeModified = false
|
|
|
|
thisEntity.hEntityKilledGameEvent = ListenToGameEvent( "entity_killed", Dynamic_Wrap( thisEntity:GetPrivateScriptScope(), 'OnEntityKilled' ), nil )
|
|
|
|
thisEntity:SetContextThink( "ShroomGiantThink", ShroomGiantThink, 1 )
|
|
end
|
|
|
|
function UpdateOnRemove()
|
|
StopListeningToGameEvent( thisEntity.hEntityKilledGameEvent )
|
|
end
|
|
|
|
function ShroomGiantThink()
|
|
if ( not thisEntity:IsAlive() ) then
|
|
return -1
|
|
end
|
|
|
|
if GameRules:IsGamePaused() == true then
|
|
return 1
|
|
end
|
|
|
|
-- Increase acquisition range after the initial aggro
|
|
if ( not thisEntity.bAcqRangeModified ) and thisEntity:GetAggroTarget() then
|
|
thisEntity:SetAcquisitionRange( 850 )
|
|
thisEntity.bAcqRangeModified = true
|
|
end
|
|
|
|
return 0.5
|
|
end
|
|
|
|
function OnEntityKilled( event )
|
|
|
|
local hVictim = nil
|
|
if event.entindex_killed ~= nil then
|
|
hVictim = EntIndexToHScript( event.entindex_killed )
|
|
end
|
|
|
|
if hVictim ~= thisEntity then
|
|
return
|
|
end
|
|
|
|
-- Check all of the other giants, and see if any others are aggroed.
|
|
-- If not, then we'll force aggro on the closest one
|
|
if thisEntity.Encounter == nil then
|
|
print( 'ai_shroom_giant - OnEntityKilled: Encounter is nil!')
|
|
return
|
|
end
|
|
|
|
local flNearDist = 60000
|
|
local hGiant = nil
|
|
local hGiants = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_shroom_giant" )
|
|
for i=1,#hGiants do
|
|
if hGiants[i] ~= thisEntity then
|
|
|
|
if hGiants[i].bAcqRangeModified then
|
|
hGiant = nil
|
|
break
|
|
end
|
|
|
|
local flDist = ( hGiants[i]:GetAbsOrigin() - hVictim:GetAbsOrigin() ):Length2D()
|
|
if flDist < flNearDist then
|
|
flNearDist = flDist
|
|
hGiant = hGiants[i]
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
if hGiant == nil then
|
|
return
|
|
end
|
|
|
|
hGiant:SetDayTimeVisionRange( 5000 )
|
|
hGiant:SetNightTimeVisionRange( 5000 )
|
|
hGiant:SetAcquisitionRange( 5000 )
|
|
hGiant.bAcqRangeModified = true
|
|
|
|
-- Order nearby shamans idle unonwned to start attacking also
|
|
local hShamans = thisEntity.Encounter:GetSpawnedUnitsOfType( "npc_dota_creature_shadow_shaman" )
|
|
print( 'Shroom Giant Death - Searching for Shadow Shamans... found ' .. #hShamans )
|
|
for i=1,#hShamans do
|
|
local hShaman = hShamans[i]
|
|
if hShaman:GetOwnerEntity() == nil and hShaman:GetAggroTarget() == nil and ( hGiant:GetAbsOrigin() - hShaman:GetAbsOrigin() ):Length2D() < 800 then
|
|
hShaman:SetDayTimeVisionRange( 5000 )
|
|
hShaman:SetNightTimeVisionRange( 5000 )
|
|
hShaman:SetAcquisitionRange( 5000 )
|
|
end
|
|
end
|
|
end
|