function push takes unit target,real area,real duration returns nothing
local destructable array d
local real dir
local group g = CreateGroup()
local unit u
local real x = GetUnitX(target)
local real y = GetUnitY(target)
local integer a = 0
local integer b = 360
local real x2
local real y2
call GroupEnumUnitsInRange(g,x,y,area,Filter(null))
loop
set u = FirstOfGroup(g)
exitwhen u == null
if GetWidgetLife(u) > 0 and ((u == target) == false) and not IsUnitType(u,UNIT_TYPE_STRUCTURE)) then
set x2 = GetUnitX(u)
set y2 = GetUnitY(u)
if x2 == x then
set x2 = x2+1
endif
if y2 == y then
set y2 = y2+1
endif
call SetUnitPosition(u,Cos(Atan((y2-y)/(x2-x)))*(area+50),Sin(Atan((y2-y)/(x2-x)))*(area+50))
endif
call GroupRemoveUnit(g,u)
endloop
loop
exitwhen a == b
set d[a] = CreateDestructable('YTFC',Cos(a)*area,Sin(a)*area,0,1,1)
set a = a+1
endloop
call TriggerSleepAction(duration)
loop
exitwhen a == b
call RemoveDestructable(d[a])
set a = a+1
endloop
endfunction