def setup_quest_for_hero(hero, knowledge_base_data): # do nothing if hero has already had quest if not hero.actions.current_action.searching_quest: return knowledge_base = KnowledgeBase.deserialize(knowledge_base_data, fact_classes=facts.FACTS) states_to_percents = analysers.percents_collector(knowledge_base) quest = QuestPrototype(hero=hero, knowledge_base=knowledge_base, states_to_percents=states_to_percents) if quest.machine.can_do_step(): quest.machine.step() # do first step to setup pointer hero.actions.current_action.setup_quest(quest)