private void ScheduleBehavior(BehaviorExecutionContext context) { DebugIf("behaviorSchedule", "ScheduleBehavior '" + context.ToString() + "'"); try { scheduler.WaitOne(); foreach (BehaviorNode node in context.Nodes) { if (node is BehaviorNodes.Required) { if ((node as BehaviorNodes.Required).IsValid()) { foreach (BehaviorNodes.Action a in (node as BehaviorNodes.Required).Actions) { a.RequiredAction = true; a.ParentNode = node; ScheduleAction(a, context); } } } else { (node as BehaviorNodes.Action).RequiredAction = false; ScheduleAction((node as BehaviorNodes.Action), context); } } scheduler.ReleaseMutex(); RunningBehaviors.Add(context); }catch(Exception e){ DebugIf("error", "Failed to schedule behavior '" + context.Behavior.Id + "' on character '" + context.Character.Name + "': " + e.Message); } }