Scriptname aaAlliriaMaterialQuestScript extends Quest  

;;;Keyword Property ActorTypeNPC Auto
Perk Property aaAlliriaRCRwaPlayerPerk auto
Spell Property aaARCRWeapArmMatSpecBase auto
Spell Property aaARCRabilityWeapArmMatSpecDrag auto
Spell Property aaARCRabilityDraugr auto
Spell Property aaARCRabilityDragon auto

Actor[] ClosestActors

Event OnInit()
   Utility.Wait(3.0) 
   ClosestActors = new Actor[120] ; назначаем массив на 120 ячеек
   While IsRunning() ; работает, пока квест активный
       int iIndex = 30 ; количество попыток поиска актёров
       While(iIndex > 0) ; поиск актёров около ГГ
           iIndex -= 1
           Actor randomActor = Game.FindRandomActorFromRef(Game.GetPlayer(), 20000.0) ; радиус поиска ~4096*5
           if !randomActor.HasPerk(aaAlliriaRCRwaPlayerPerk) ; если у НПС нет перка
               randomActor.AddPerk(aaAlliriaRCRwaPlayerPerk) ; добавляем перк
           endIf
           int iEmpty = ClosestActors.Find(none) ; поиск свободного слота в массиве
           if iEmpty > -1
               ClosestActors[iEmpty] = randomActor  ; записываем актёра в массив
           endif
           int iIndexActor = 120
           While iIndexActor > 0 ; проверка массива
               iIndexActor -= 1
               if ClosestActors[iIndexActor] ; если есть актёр под этим номером
                   if (ClosestActors[iIndexActor].GetDistance(Game.GetPlayer())> 20000) || ClosestActors[iIndexActor].IsDead() ; если актёр далеко или актёр мёртв
                       ClosestActors[iIndexActor].RemovePerk(aaAlliriaRCRwaPlayerPerk) ; удаляем перк
                       ClosestActors[iIndexActor].RemoveSpell(aaARCRWeapArmMatSpecBase)
                       ClosestActors[iIndexActor].RemoveSpell(aaARCRabilityWeapArmMatSpecDrag)
                       ClosestActors[iIndexActor].RemoveSpell(aaARCRabilityDraugr)
                       ClosestActors[iIndexActor].RemoveSpell(aaARCRabilityDragon)
                       ClosestActors[iIndexActor].DispelAllSpells()
                       ClosestActors[iIndexActor] = none ; очищаем слот в массиве
                   endif
               endif
           endWhile
       endWhile
       Utility.Wait(3.0) ; через 3 сек. новый поиск актёров
   endWhile
   int iIndexClear = 120
   While iIndexClear > 0 ; очистка массива
    iIndexClear -= 1
    if ClosestActors[iIndexClear] ; если есть актёр под этим номером
        ClosestActors[iIndexClear].RemovePerk(aaAlliriaRCRwaPlayerPerk) ; удаляем перк
        ClosestActors[iIndexClear].RemoveSpell(aaARCRWeapArmMatSpecBase)
        ClosestActors[iIndexClear].RemoveSpell(aaARCRabilityWeapArmMatSpecDrag)
        ClosestActors[iIndexClear].RemoveSpell(aaARCRabilityDraugr)
        ClosestActors[iIndexClear].RemoveSpell(aaARCRabilityDragon)
        ClosestActors[iIndexClear].DispelAllSpells()
        ClosestActors[iIndexClear] = none ; очищаем слот в массиве
    endif
  endWhile
Debug.Notification("Quest and script has finished functioning") ; сообщение для теста
endEvent