from .base import BaseDB DATABASES = { "QuestMst.db": "Quest", "QuestSceneMst.db": "QuestScene", "QuestPartMst.db": "QuestPart", "ResourceEntry.db": "ResourceEntry", } class QuestDB(BaseDB): def __init__(self, path): super().__init__(path, DATABASES) def get_quests(self): self.cursor.execute( """ SELECT q.questMstId, q.name, group_concat(DISTINCT qp.questSceneMstId) AS scenes FROM Quest.QuestMstRecord q INNER JOIN QuestScene.QuestSceneMstRecord qs ON q.questMstId = qs.questMstId INNER JOIN QuestPart.QuestPartMstRecord qp ON qs.questSceneMstId = qp.questSceneMstId WHERE q.baseQuestMstId = 0 AND (qp.beforeTalkName != "" OR qp.afterTalkName != "") GROUP BY q.questMstId """ ) res = self.cursor.fetchall() quests = {} for quest_id, name, scenes in res: quests[quest_id] = {} quests[quest_id]["Name"] = name quests[quest_id]["Scenes"] = scenes.split(",") return quests def get_scenes(self): self.cursor.execute( """ SELECT questSceneMstId, name, summaryText, group_concat(partIds) as parts FROM ( SELECT qs.questSceneMstId, qs.name, qs.summaryText, CASE WHEN qp.afterTalkName == '' AND qp.beforeTalkName == '' THEN NULL WHEN qp.afterTalkName == '' AND qp.beforeTalkName != '' THEN qp.beforeTalkName WHEN qp.afterTalkName != '' AND qp.beforeTalkName == '' THEN qp.afterTalkName ELSE qp.beforeTalkName || ',' || qp.afterTalkName END AS partIds FROM QuestScene.QuestSceneMstRecord qs INNER JOIN QuestPart.QuestPartMstRecord qp ON qs.questSceneMstId = qp.questSceneMstId WHERE (qp.beforeTalkName != "" OR qp.afterTalkName != "") ) GROUP BY questSceneMstId """ ) res = self.cursor.fetchall() scenes = {} for scene_id, name, summary, parts in res: scenes[scene_id] = {} scenes[scene_id]["Name"] = name scenes[scene_id]["SummaryText"] = summary scenes[scene_id]["Parts"] = parts.split(",") return scenes