def get_default_sentences(self, caller, npc): """ """ if not caller: return if not npc: return sentences = [] # get npc's default dialogues for dlg_key in npc.dialogues: npc_dlg = self.get_dialogue(dlg_key) if not npc_dlg: continue if not script_handler.match_condition(caller, npc_dlg["condition"]): continue match = True for dep in npc_dlg["dependences"]: if not QUEST_DEP_HANDLER.match_dependence(caller, dep["quest"], dep["type"]): match = False break; if not match: continue if npc_dlg["sentences"]: # if has sentence, use it sentences.append(npc_dlg["sentences"][0]) return sentences
def get_default_sentences(self, caller, npc): """ """ if not caller: return if not npc: return sentences = [] # get npc's default dialogues for dlg_key in npc.dialogues: npc_dlg = self.get_dialogue(dlg_key) if not npc_dlg: continue if not script_handler.match_condition(caller, npc_dlg["condition"]): continue match = True for dep in npc_dlg["dependences"]: if not QUEST_DEP_HANDLER.match_dependence( caller, dep["quest"], dep["type"]): match = False break if not match: continue if npc_dlg["sentences"]: # if has sentence, use it sentences.append(npc_dlg["sentences"][0]) return sentences
def dialogue_have_quest(self, caller, npc, dialogue, achieved_quests): """ find quests by recursion """ provide_quest = False finish_quest = False # check if the dialogue is available npc_dlg = self.get_dialogue(dialogue) if not npc_dlg: return (provide_quest, finish_quest) if not script_handler.match_condition(caller, npc_dlg["condition"]): return (provide_quest, finish_quest) match = True for dep in npc_dlg["dependences"]: if not QUEST_DEP_HANDLER.match_dependence(caller, dep["quest"], dep["type"]): match = False break if not match: return (provide_quest, finish_quest) # find quests in its sentences for sen in npc_dlg["sentences"]: if sen["finish_quest"] in achieved_quests: finish_quest = True return (provide_quest, finish_quest) if not provide_quest and sen["provide_quest"]: quest_key = sen["provide_quest"] if not caller.quest.is_finished(quest_key) and\ not caller.quest.is_in_progress(quest_key) and\ caller.quest.match_dependences(quest_key): provide_quest = True if not achieved_quests: return (provide_quest, finish_quest) for dlg_key in npc_dlg["nexts"]: # get next dialogue provide, finish = self.dialogue_have_quest(caller, npc, dlg_key, achieved_quests) provide_quest = (provide_quest or provide) finish_quest = (finish_quest or finish) if finish_quest: break if not achieved_quests: if provide_quest: break return (provide_quest, finish_quest)
def dialogue_have_quest(self, caller, npc, dialogue, achieved_quests): """ find quests by recursion """ provide_quest = False finish_quest = False # check if the dialogue is available npc_dlg = self.get_dialogue(dialogue) if not npc_dlg: return (provide_quest, finish_quest) if not script_handler.match_condition(caller, npc_dlg["condition"]): return (provide_quest, finish_quest) match = True for dep in npc_dlg["dependences"]: if not QUEST_DEP_HANDLER.match_dependence(caller, dep["quest"], dep["type"]): match = False break; if not match: return (provide_quest, finish_quest) # find quests in its sentences for sen in npc_dlg["sentences"]: if sen["finish_quest"] in achieved_quests: finish_quest = True return (provide_quest, finish_quest) if not provide_quest and sen["provide_quest"]: quest_key = sen["provide_quest"] if not caller.quest.is_finished(quest_key) and\ not caller.quest.is_in_progress(quest_key) and\ caller.quest.match_dependences(quest_key): provide_quest = True if not achieved_quests: return (provide_quest, finish_quest) for dlg_key in npc_dlg["nexts"]: # get next dialogue provide, finish = self.dialogue_have_quest(caller, npc, dlg_key, achieved_quests) provide_quest = (provide_quest or provide) finish_quest = (finish_quest or finish) if finish_quest: break if not achieved_quests: if provide_quest: break return (provide_quest, finish_quest)
def get_next_sentences(self, caller, npc, current_dialogue, current_sentence): """ """ if not caller: return if not npc: return # get current dialogue dlg = self.get_dialogue(current_dialogue) if not dlg: return sentences = [] try: # if has next sentence, use next sentence sentences.append(dlg["sentences"][current_sentence + 1]) except Exception, e: # get next dialogues for dlg_key in dlg["nexts"]: # get next dialogue next_dlg = self.get_dialogue(dlg_key) if not next_dlg: continue if not next_dlg["sentences"]: continue if not script_handler.match_condition(caller, next_dlg["condition"]): continue for dep in next_dlg["dependences"]: if not QUEST_DEP_HANDLER.match_dependence( caller, dep["quest"], dep["type"]): continue sentences.append(next_dlg["sentences"][0])
def get_next_sentences(self, caller, npc, current_dialogue, current_sentence): """ """ if not caller: return if not npc: return # get current dialogue dlg = self.get_dialogue(current_dialogue) if not dlg: return sentences = [] try: # if has next sentence, use next sentence sentences.append(dlg["sentences"][current_sentence + 1]) except Exception, e: # get next dialogues for dlg_key in dlg["nexts"]: # get next dialogue next_dlg = self.get_dialogue(dlg_key) if not next_dlg: continue if not next_dlg["sentences"]: continue if not script_handler.match_condition(caller, next_dlg["condition"]): continue for dep in next_dlg["dependences"]: if not QUEST_DEP_HANDLER.match_dependence(caller, dep["quest"], dep["type"]): continue sentences.append(next_dlg["sentences"][0])