divatool/db/quest.py
2020-05-16 15:38:56 +02:00

82 lines
2.9 KiB
Python

from .base import BaseDB
def get_dbs_by_lang(language=None):
databases = {
"QuestMst": "Quest",
"QuestSceneMst": "QuestScene",
"QuestPartMst": "QuestPart",
"ResourceEntry": "ResourceEntry",
}
for key in list(databases):
if not language:
databases[key + ".db"] = databases.pop(key)
else:
databases[key + "_" + language + ".db"] = databases.pop(key)
return databases
class QuestDB(BaseDB):
def __init__(self, path, language=None):
super().__init__(path, get_dbs_by_lang(language))
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