def LoadSchedules( self, npc=None ): import traceback import Ai.Tasks, Ai.Schedules if not npc: print( "Loading Python Ai Tasks and Schedules..." ) # Resolve all our classes and modules up-front for simplicity if npc: task_class = npc._cust_tasks sched_class = npc._cust_sched cond_class = npc._cust_cond else: task_class = Ai.Tasks.Task sched_class = Ai.Schedules.Sched cond_class = Ai.Schedules.Cond # Load tasks registered in Ai.Tasks.Task or the passed NPC items = task_class.__dict__.items() if task_class else [] for name, task in items: try: if issubclass( task.__class__, Ai.Tasks.BaseTask ): GEUtil.DevMsg( "Registering Task: %s\n" % name ) task.Register( name ) except: GEUtil.Warning( "Failed to register task: %s\n" % name ) print( traceback.print_exc( file=sys.stderr ) ) # Load in conditions defined in Ai.Schedules.Cond or the passed NPC items = cond_class.__dict__.items() if cond_class else [] for name, cond in items: try: if issubclass( cond.__class__, Ai.Schedules.BaseCondition ): GEUtil.DevMsg( "Registering Condition: %s\n" % name ) cond.Register( name ) except: GEUtil.Warning( "Failed to register condition: %s\n" % name ) print( traceback.print_exc( file=sys.stderr ) ) # Load in schedules defined in Ai.Schedules.Sched or the passed NPC items = [] if sched_class: load_order = getattr( sched_class, "_order", None ) if load_order and type( load_order ) is list: for x in load_order: if hasattr( sched_class, x ): items.append( ( x, getattr( sched_class, x ) ) ) items.extend( sched_class.__dict__.items() ) for name, sched in items: try: if issubclass( sched.__class__, Ai.Schedules.BaseSchedule ): GEUtil.DevMsg( "Registering schedule: %s\n" % name ) sched.Register( name ) except: GEUtil.Warning( "Failed to register schedule: %s\n" % name ) print( traceback.print_exc( file=sys.stderr ) )