mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-13 21:34:43 +01:00
137 lines
5.9 KiB
Python
137 lines
5.9 KiB
Python
from game_server.game.enum.data_type import DataType
|
|
|
|
class SaveData:
|
|
def __init__(self, mongo, session, data_type:DataType, ids: list):
|
|
self.mongo = mongo
|
|
self.session = session
|
|
self.data_type = data_type
|
|
self.ids = ids
|
|
|
|
def save(self):
|
|
data_type_handlers = {
|
|
DataType.MATERIAL: self._save_material,
|
|
DataType.WEAPON: self._save_weapon,
|
|
DataType.STIGMATA: self._save_stigmata,
|
|
DataType.AVATAR: self._save_avatar,
|
|
DataType.PLAYER: self._save_player
|
|
}
|
|
handler = data_type_handlers.get(self.data_type)
|
|
if handler:
|
|
handler()
|
|
else:
|
|
raise ValueError(f"Unsupported data type: {self.data_type}")
|
|
|
|
def _save_material(self):
|
|
for id in self.ids:
|
|
get_item = self.session.player.inventory.material_items.get(id)
|
|
if get_item:
|
|
filter = {"ItemID": get_item.item_id}
|
|
update = {"$set": {"Num": get_item.num}}
|
|
self.mongo.update_document("items",filter,update)
|
|
|
|
def _save_weapon(self):
|
|
for unique_id in self.ids:
|
|
if id == 0:
|
|
continue
|
|
get_item = self.session.player.inventory.weapon_items.get(unique_id)
|
|
if get_item:
|
|
filter = {"UniqueID": unique_id}
|
|
update = {
|
|
"$set":
|
|
{
|
|
"Level": get_item.level,
|
|
"Exp": get_item.exp,
|
|
"IsLocked" : get_item.is_locked,
|
|
"IsExtracted" : get_item.is_extracted,
|
|
"EquipAvatarID" : get_item.equip_avatar_id
|
|
}
|
|
}
|
|
self.mongo.update_document("items",filter,update)
|
|
def _save_stigmata(self):
|
|
for unique_id in self.ids:
|
|
if id == 0:
|
|
continue
|
|
get_item = self.session.player.inventory.stigmata_items.get(unique_id)
|
|
if get_item:
|
|
filter = {"UniqueID": unique_id}
|
|
update = {
|
|
"$set":
|
|
{
|
|
"Level": get_item.level,
|
|
"Exp": get_item.exp,
|
|
"SlotNum": get_item.slot_num,
|
|
"IsLocked" : get_item.is_locked,
|
|
"RuneLists": [
|
|
{
|
|
"RuneId":rune.rune_id,
|
|
"strengthPercent":rune.strength_percent
|
|
}
|
|
for rune in get_item.rune_list
|
|
],
|
|
"EquipAvatarID" : get_item.equip_avatar_id
|
|
}
|
|
}
|
|
self.mongo.update_document("items",filter,update)
|
|
|
|
|
|
def _save_avatar(self):
|
|
for id in self.ids:
|
|
avatar = self.session.player.avatars.get(id)
|
|
if avatar:
|
|
filter = {"AvatarID": id}
|
|
update = {
|
|
"$set":
|
|
{
|
|
"Star": avatar.star,
|
|
"Fragment": avatar.fragment,
|
|
"TouchGoodFeel" : avatar.touch_good_feel,
|
|
"TodayHasAddGoodFeel" : avatar.today_has_add_good_feel,
|
|
"DressID" : avatar.dress_id,
|
|
"SkillLists" : {
|
|
f"{skill_id}":{
|
|
"SkillId":skill.skill_id,
|
|
"SubSkillLists":{
|
|
f"{sub_skill.sub_skill_id}":{
|
|
"subSkillId":sub_skill.sub_skill_id,
|
|
"level":sub_skill.level
|
|
}
|
|
for sub_id, sub_skill in skill.sub_skill_lists.items()
|
|
}
|
|
}
|
|
for skill_id,skill in avatar.skill_lists.items()
|
|
},
|
|
}
|
|
}
|
|
self.mongo.update_document("avatars",filter,update)
|
|
|
|
def _save_player(self):
|
|
filter = {"UID": self.session.player.uid}
|
|
update = {
|
|
"$set":
|
|
{
|
|
"Name": self.session.player.name,
|
|
"HCoin": self.session.player.hcoin,
|
|
"Sign": self.session.player.signature,
|
|
"HeadPhoto": self.session.player.head_photo,
|
|
"HeadFrame": self.session.player.head_frame,
|
|
"WarshipId": self.session.player.warship_id,
|
|
"AssistantAvatarId": self.session.player.assistant_avatar_id,
|
|
"WarshipAvatar":{
|
|
"WarshipFirstAvatarId": self.session.player.warship_avatar.warship_first_avatar_id,
|
|
"WarshipSecondAvatarId": self.session.player.warship_avatar.warship_second_avatar_id
|
|
},
|
|
"BirthDate":self.session.player.birth_date,
|
|
"CustomAvatarTeamList":{
|
|
f"{team_id}":{
|
|
"TeamId":team_id,
|
|
"Name": team.name,
|
|
"astraMateId":team.astral_mate_id,
|
|
"isUsingAstraMate":team.is_using_astra_mate,
|
|
"elfIdList":team.elf_id_list,
|
|
"AvatarIdLists":team.avatar_id_list
|
|
}
|
|
for team_id,team in self.session.player.custom_avatar_team_list.items()
|
|
}
|
|
}
|
|
}
|
|
self.mongo.update_document("players",filter,update) |