local unit u=GetSpellAbilityUnit() => local unit u=GetTriggerUnit() //я бы так юзал local integer d=R2I(GetRandomReal(GetHeroStr(u,true)-5,GetHeroStr(u,true)+5)) => local integer d= GetRandomInt(GetHeroStr(u,true)-5, GetHeroStr(u,true)+5)
call DestroyGroup(DamageGroup) - ты уничтожаешь группу, только если там кто-то есть, но по идее под нее тоже должен выделяться участок памяти, так что я бы перенес это действие вне ифа
А в целом неплохо