public Cutscene(string name, Creature leader, params Creature[] viewers)
{
if (string.IsNullOrWhiteSpace(name))
throw new ArgumentNullException("name");
if (leader == null)
throw new ArgumentNullException("leader");
if ((this.Data = AuraData.CutscenesDb.Find(name)) == null)
throw new ArgumentException("Unknown cutscene '" + name + "'.");
this.Name = name;
this.Leader = leader;
this.Actors = new Dictionary<string, Creature>();
// Create list of viewers, with the leader being the first one
// (index 0), followed by the leader's party members and then
// the other viewers.
// Using List and Distinct to maintain the order, while getting
// each viewer only once. This is never gonna be a performance
// problem for us, but if it were we'd need a custom type.
var viewersList = new List<Creature>();
viewersList.Add(leader);
viewersList.AddRange(leader.Party.GetSortedMembers(a => a.Region == leader.Region));
if (viewers != null)
viewersList.AddRange(viewers);
_viewers = viewersList.Distinct().ToArray();
}