Scriptname _00E_SoulTrapController extends Quest
;Bottleneck controller to ensure actors only make one soul trap attempt at a time.
;Since we may be removing soul gems momentarily from their inventory, we must make
;sure those gems are returned before the next TrapSoul() attempt is processed.

;main tracking array & index:
Actor[] SoulTrappingActors
int TrappingActorIndex = 0


Event OnInit()
  SoulTrappingActors = new Actor[128]
EndEvent


Bool Function SecurePermission(Actor requestingActor)
  if SoulTrappingActors.find(requestingActor) >= 0
    if requestingActor != None
      return False ;actor is in the middle of another soul trap right now
    else
      return True ;bypass lock if requestingActor is NONE for some reason
    endif

  else ;add actor to array until this soul trap completes:
    SoulTrappingActors[TrappingActorIndex] = requestingActor
    TrappingActorIndex += 1
    return True
  endif
EndFunction



Function ReleasePermission(Actor releasingActor)
  int releaseIndex = SoulTrappingActors.find(releasingActor)
  if releaseIndex >= 0
    SoulTrappingActors[releaseIndex] = None
    TrappingActorIndex -= 1
    SoulTrappingActors[releaseIndex] = SoulTrappingActors[TrappingActorIndex]
	SoulTrappingActors[TrappingActorIndex] = None
  endif
EndFunction