This commit is contained in:
louis 2019-11-12 15:03:42 -05:00
parent d75fcf3507
commit c87c517217
5 changed files with 140 additions and 213 deletions

View file

@ -1,76 +1,74 @@
from sqlalchemy import Column, Integer, BigInteger, String, ForeignKey
from sqlalchemy.orm import relationship
from .base import BaseDB
from .base import Base
DATABASES = {
"QuestMst.db": "Quest",
"QuestSceneMst.db": "QuestScene",
"QuestPartMst.db": "QuestPart",
"ResourceEntry.db": "ResourceEntry",
}
class Quest(Base):
__tablename__ = "QuestMstRecord"
__table_args__ = {"schema": "Quest"}
class QuestDB(BaseDB):
def __init__(self, path):
super().__init__(path, DATABASES)
questMstId = Column(Integer, primary_key=True)
questType = Column(Integer)
sortNum = Column(Integer)
name = Column(String)
prevQuestMstId = Column(Integer)
eventItemMstIds = Column(Integer)
valid = Column(Integer)
baseQuestMstId = Column(Integer)
updatedTime = Column(BigInteger)
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
scenes = relationship("QuestScene")
def __repr__(self):
return "<Quest(questMstId={}, name={})>".format(self.questMstId, self.name)
class QuestScene(Base):
__tablename__ = "QuestSceneMstRecord"
__table_args__ = {"schema": "QuestScene"}
questSceneMstId = Column(Integer, primary_key=True)
questMstId = Column(Integer, ForeignKey("Quest.QuestMstRecord.questMstId"))
_type = Column("type", Integer)
sortNum = Column(Integer)
name = Column(String)
_filter = Column("filter", Integer)
prevQuestSceneMstId = Column(
Integer, ForeignKey("QuestScene.QuestSceneMstRecord.questSceneMstId")
)
releaseSerial = Column(Integer)
releaseEvolutionLevel = Column(Integer)
summaryText = Column(String)
presentType = Column(String)
objectId = Column(Integer)
num = Column(Integer)
appearanceType = Column(Integer)
isPrologue = Column(Integer)
isEpilogue = Column(Integer)
viewType = Column(Integer)
updatedTime = Column(BigInteger)
previous = relationship("QuestScene", remote_side=[questSceneMstId])
parts = relationship("QuestPart")
class QuestPart(Base):
__tablename__ = "QuestPartMstRecord"
__table_args__ = {"schema": "QuestPart"}
questSceneMstId = Column(
Integer,
ForeignKey("QuestScene.QuestSceneMstRecord.questSceneMstId"),
primary_key=True,
) # now this is pod racing
partNum = Column(Integer, primary_key=True)
waveNum = Column(Integer)
stamina = Column(Integer)
exp = Column(Integer)
expertPoint = Column(Integer)
recommendLevel = Column(Integer)
beforeTalkName = Column(String)
afterTalkName = Column(String)
battleBackgroundImg = Column(String)
musicMstId = Column(Integer)
isFixedDeck = Column(Integer)
updatedTime = Column(BigInteger)
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