86 lines
3.1 KiB
Python
86 lines
3.1 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,
|
|
img,
|
|
group_concat(partIds) as parts
|
|
FROM (
|
|
SELECT
|
|
qs.questSceneMstId,
|
|
qs.name,
|
|
qs.summaryText,
|
|
qs.img,
|
|
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, img, parts in res:
|
|
scenes[str(scene_id)] = {}
|
|
scenes[str(scene_id)]["Name"] = name
|
|
scenes[str(scene_id)]["SummaryText"] = summary
|
|
if img:
|
|
scenes[str(scene_id)]["Image"] = img
|
|
scenes[str(scene_id)]["Parts"] = parts.split(",")
|
|
return scenes
|