mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-15 06:14:35 +01:00
Initial commit
This commit is contained in:
130
database/save_data.py
Normal file
130
database/save_data.py
Normal file
@@ -0,0 +1,130 @@
|
||||
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,
|
||||
"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)
|
||||
Reference in New Issue
Block a user