sao: backport changes from diana

This commit is contained in:
2024-06-25 14:02:53 -04:00
parent 6ae11f96a2
commit e91f84fecc
167 changed files with 100587 additions and 28291 deletions

View File

@ -1,24 +1,16 @@
from typing import Optional, Dict, List
from os import walk, path
import urllib
import csv
from os import path
from typing import Optional, Dict, List
from read import BaseReader
from core.config import CoreConfig
from titles.sao.database import SaoData
from titles.sao.const import SaoConstants
from read import BaseReader
from .database import SaoData
from .const import SaoConstants
class SaoReader(BaseReader):
def __init__(
self,
config: CoreConfig,
version: int,
bin_arg: Optional[str],
opt_arg: Optional[str],
extra: Optional[str],
) -> None:
super().__init__(config, version, bin_arg, opt_arg, extra)
def __init__(self, config: CoreConfig, version: int, bin_dir: Optional[str], opt_dir: Optional[str], extra: Optional[str]) -> None:
super().__init__(config, version, bin_dir, opt_dir, extra)
self.data = SaoData(config)
try:
@ -28,225 +20,207 @@ class SaoReader(BaseReader):
except IndexError:
self.logger.error(f"Invalid project SAO version {version}")
exit(1)
async def read(self) -> None:
if path.exists(self.bin_dir):
await self.read_csv(f"{self.bin_dir}")
else:
self.logger.warn("Directory not found, nothing to import")
def load_csv_file(self, file: str) -> List[Dict]:
ret = []
try:
fullPath = self.bin_dir + "/" if not self.bin_dir.endswith("/") else ""
fullPath += file
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
tmp = {}
fkey = list(row.keys())[0]
new_fkey = fkey.replace("// ", "")
fval = row[fkey]
row.pop(fkey)
row[new_fkey] = fval
for k,v in row.items():
if v == "-1":
row[k] = None
elif v.isdigit():
row[k] = int(v)
elif v.isdecimal():
row[k] = float(v)
elif v == "True":
row[k] = True
elif v == "False":
row[k] = False
ret.append(row)
except Exception as e:
self.logger.warning(f"Couldn't read csv file {fullPath}, skipping - {e}")
return ret
async def read_csv(self, bin_dir: str) -> None:
self.logger.info(f"Read csv from {bin_dir}")
self.logger.info("Now reading QuestScene.csv")
try:
fullPath = bin_dir + "/QuestScene.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
questSceneId = row["QuestSceneId"]
sortNo = row["SortNo"]
name = row["Name"]
enabled = True
reader = self.load_csv_file("QuestScene.csv")
if reader:
for row in reader:
self.logger.info(f"Adding quest {row['QuestSceneId']}")
await self.data.static.put_quest(row)
self.logger.info(f"Added quest {questSceneId} | Name: {name}")
try:
await self.data.static.put_quest(
questSceneId,
0,
sortNo,
name,
enabled
)
except Exception as err:
self.logger.error(err)
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info("Now reading HeroLog.csv")
try:
fullPath = bin_dir + "/HeroLog.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
heroLogId = row["HeroLogId"]
name = row["Name"]
nickname = row["Nickname"]
rarity = row["Rarity"]
skillTableSubId = row["SkillTableSubId"]
awakeningExp = row["AwakeningExp"]
flavorText = row["FlavorText"]
enabled = True
self.logger.info("Now reading Property.csv")
reader = self.load_csv_file("Property.csv")
if reader:
for row in reader:
self.logger.info(f"Adding property {row['PropertyId']}")
await self.data.static.put_property(row)
self.logger.info(f"Added hero {heroLogId} | Name: {name}")
try:
await self.data.static.put_hero(
0,
heroLogId,
name,
nickname,
rarity,
skillTableSubId,
awakeningExp,
flavorText,
enabled
)
except Exception as err:
self.logger.error(err)
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info("Now reading Equipment.csv")
try:
fullPath = bin_dir + "/Equipment.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
equipmentId = row["EquipmentId"]
equipmentType = row["EquipmentType"]
weaponTypeId = row["WeaponTypeId"]
name = row["Name"]
rarity = row["Rarity"]
flavorText = row["FlavorText"]
enabled = True
reader = self.load_csv_file("Equipment.csv")
if reader:
for row in reader:
self.logger.info(f"Adding equipment {row['EquipmentId']}")
await self.data.static.put_equipment(row)
self.logger.info(f"Added equipment {equipmentId} | Name: {name}")
try:
await self.data.static.put_equipment(
0,
equipmentId,
name,
equipmentType,
weaponTypeId,
rarity,
flavorText,
enabled
)
except Exception as err:
self.logger.error(err)
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info("Now reading Skill.csv")
reader = self.load_csv_file("Skill.csv")
if reader:
for row in reader:
self.logger.info(f"Adding skill {row['SkillId']}")
await self.data.static.put_skill(row)
self.logger.info("Now reading SkillTable.csv")
reader = self.load_csv_file("SkillTable.csv")
if reader:
for row in reader:
self.logger.info(f"Adding skill table {row['SkillId']} | SubId: {row['SkillTableSubId']}")
await self.data.static.put_skill_table(row['SkillId'], row['SkillTableSubId'], row['Level'], row['AwakeningId'], row['SkillTableId'])
self.logger.info("Now reading HeroLog.csv")
reader = self.load_csv_file("HeroLog.csv")
if reader:
for row in reader:
self.logger.info(f"Adding hero {row['HeroLogId']}")
await self.data.static.put_hero(row)
self.logger.info("Now reading Item.csv")
try:
fullPath = bin_dir + "/Item.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
itemId = row["ItemId"]
itemTypeId = row["ItemTypeId"]
name = row["Name"]
rarity = row["Rarity"]
flavorText = row["FlavorText"]
enabled = True
reader = self.load_csv_file("Item.csv")
if reader:
for row in reader:
self.logger.info(f"Adding item {row['ItemId']}")
await self.data.static.put_item(row)
self.logger.info(f"Added item {itemId} | Name: {name}")
try:
await self.data.static.put_item(
0,
itemId,
name,
itemTypeId,
rarity,
flavorText,
enabled
)
except Exception as err:
self.logger.error(err)
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info("Now reading SupportLog.csv")
try:
fullPath = bin_dir + "/SupportLog.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
supportLogId = row["SupportLogId"]
charaId = row["CharaId"]
name = row["Name"]
rarity = row["Rarity"]
salePrice = row["SalePrice"]
skillName = row["SkillName"]
enabled = True
reader = self.load_csv_file("SupportLog.csv")
if reader:
for row in reader:
supportLogId = row["SupportLogId"]
charaId = row["CharaId"]
name = row["Name"]
rarity = row["Rarity"]
salePrice = row["SalePrice"]
skillName = row["SkillName"]
enabled = True
self.logger.info(f"Adding support log {supportLogId}")
await self.data.static.put_support_log(
0,
supportLogId,
charaId,
name,
rarity,
salePrice,
skillName,
enabled
)
self.logger.info(f"Added support log {supportLogId} | Name: {name}")
try:
await self.data.static.put_support_log(
0,
supportLogId,
charaId,
name,
rarity,
salePrice,
skillName,
enabled
)
except Exception as err:
self.logger.error(err)
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info("Now reading Title.csv")
try:
fullPath = bin_dir + "/Title.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
titleId = row["TitleId"]
displayName = row["DisplayName"]
requirement = row["Requirement"]
rank = row["Rank"]
imageFilePath = row["ImageFilePath"]
enabled = True
reader = self.load_csv_file("Title.csv")
if reader:
for row in reader:
titleId = row["TitleId"]
displayName = row["DisplayName"]
requirement = row["Requirement"]
rank = row["Rank"]
imageFilePath = row["ImageFilePath"]
enabled = True
self.logger.info(f"Added title {titleId} | Name: {displayName}")
if len(titleId) > 5:
try:
await self.data.static.put_title(
0,
titleId,
displayName,
requirement,
rank,
imageFilePath,
enabled
)
except Exception as err:
self.logger.error(err)
elif len(titleId) < 6: # current server code cannot have multiple lengths for the id
continue
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info(f"Adding title {titleId}")
await self.data.static.put_title(
0,
titleId,
displayName,
requirement,
rank,
imageFilePath,
enabled
)
self.logger.info("Now reading RareDropTable.csv")
try:
fullPath = bin_dir + "/RareDropTable.csv"
with open(fullPath, encoding="UTF-8") as fp:
reader = csv.DictReader(fp)
for row in reader:
questRareDropId = row["QuestRareDropId"]
commonRewardId = row["CommonRewardId"]
enabled = True
self.logger.info("Now reading QuestRareDrop.csv")
reader = self.load_csv_file("QuestRareDrop.csv")
if reader:
for row in reader:
questRareDropId = row["QuestRareDropId"]
commonRewardId = row["CommonRewardId"]
enabled = True
self.logger.info(f"Added rare drop {questRareDropId} | Reward: {commonRewardId}")
try:
await self.data.static.put_rare_drop(
0,
questRareDropId,
commonRewardId,
enabled
)
except Exception as err:
self.logger.error(err)
except Exception:
self.logger.warning(f"Couldn't read csv file in {self.bin_dir}, skipping")
self.logger.info(f"Adding rare drop {questRareDropId} | Reward: {commonRewardId}")
await self.data.static.put_rare_drop(
0,
questRareDropId,
commonRewardId,
enabled
)
self.logger.info("Now reading RewardTable.csv")
reader = self.load_csv_file("RewardTable.csv")
if reader:
for row in reader:
self.logger.info(f"Adding reward table {row['RewardTableId']} | Sub-ID: {row['RewardTableSubId']} | Reward {row['CommonRewardId']}")
await self.data.static.put_reward_table(row)
self.logger.info("Now reading ExBonusTable.csv")
reader = self.load_csv_file("ExBonusTable.csv")
if reader:
for row in reader:
self.logger.info(f"Adding ex bonus {row['ExBonusTableId']} | Sub-ID: {row['ExBonusTableSubId']} | Reward {row['CommonRewardId']}")
await self.data.static.put_ex_bonus(row)
self.logger.info("Now reading PlayerTraceTable.csv")
reader = self.load_csv_file("PlayerTraceTable.csv")
if reader:
for row in reader:
self.logger.info(f"Adding trace table {row['PlayerTraceTableId']} | Sub-ID: {row['PlayerTraceTableSubId']} | Reward {row['CommonRewardId']}")
await self.data.static.put_player_trace(row)
self.logger.info("Now reading Episode.csv")
reader = self.load_csv_file("Episode.csv")
if reader:
for row in reader:
self.logger.info(f"Adding episode {row['EpisodeId']}")
await self.data.static.put_episode(row)
self.logger.info("Now reading TrialTower.csv")
reader = self.load_csv_file("TrialTower.csv")
if reader:
for row in reader:
self.logger.info(f"Adding tower {row['TrialTowerId']}")
await self.data.static.put_tower(row)
self.logger.info("Now reading ExTowerQuests.csv")
reader = self.load_csv_file("ExTowerQuests.csv")
if reader:
for row in reader:
self.logger.info(f"Adding ex tower {row['ExTowerQuestId']}")
await self.data.static.put_ex_tower(row)
self.logger.info("Now reading SideQuest.csv")
reader = self.load_csv_file("SideQuest.csv")
if reader:
for row in reader:
self.logger.info(f"Adding side quest {row['SideQuestId']}")
await self.data.static.put_side_quest(row)