/// <summary>
/// Creates cutscene and fills actor list as specified in the data.
/// </summary>
/// <param name="name"></param>
/// <param name="creature"></param>
/// <returns></returns>
public static Cutscene FromData(string name, Creature creature)
{
var result = new Cutscene(name, creature);
var partyMembers = creature.Party.GetSortedMembers();
var dummy = new NPC();
foreach (var actorName in result.Data.Actors)
{
Creature actor = null;
// Retrieve actor
if (actorName.StartsWith("#"))
{
var actorData = AuraData.ActorDb.Find(actorName);
if (actorData == null)
Log.Warning("Unknown actor '{0}'.", actorName);
else
actor = new NPC(actorData);
}
else if (actorName == "me")
{
actor = creature;
}
else if (actorName == "leader")
{
actor = creature.Party.Leader;
}
else if (actorName.StartsWith("player"))
{
int idx;
if (!int.TryParse(actorName.Substring("player".Length), out idx))
Log.Warning("Cutscene.FromData: Invalid party member actor name '{0}'.", actorName);
else if (idx > partyMembers.Length - 1)
Log.Warning("Cutscene.FromData: Index out of party member range '{0}/{1}'.", idx, partyMembers.Length);
else
actor = partyMembers[idx];
}
else
Log.Warning("Cutscene.FromData: Unknown kind of actor ({0}).", actorName);
if (actor == null)
actor = dummy;
result.AddActor(actorName, actor);
}
return result;
}