74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
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[str(quest_id)] = {}
|
|
quests[str(quest_id)]["Name"] = name
|
|
quests[str(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[str(scene_id)] = {}
|
|
scenes[str(scene_id)]["Name"] = name
|
|
scenes[str(scene_id)]["SummaryText"] = summary
|
|
scenes[str(scene_id)]["Parts"] = parts.split(",")
|
|
return scenes
|