init
This commit is contained in:
142
database/avatar/avatar_data.py
Normal file
142
database/avatar/avatar_data.py
Normal file
@@ -0,0 +1,142 @@
|
||||
from database.mongodb import get_collection
|
||||
from typing import Optional
|
||||
from database.base_database_data import BaseDatabaseData
|
||||
from game_server.resource import ResourceManager
|
||||
from game_server.resource.configdb.avatar_config import AvatarConfig
|
||||
from typing import List
|
||||
from rail_proto.lib import (
|
||||
Avatar,
|
||||
AvatarSkillTree,
|
||||
BattleAvatar,
|
||||
AvatarType,
|
||||
SpBarInfo,
|
||||
AvatarSkillTree,
|
||||
BattleEquipment,
|
||||
EquipRelic
|
||||
)
|
||||
|
||||
avatars_collection = get_collection("avatars")
|
||||
|
||||
class AvatarData(BaseDatabaseData):
|
||||
avatar_id: int
|
||||
level: int = 80
|
||||
exp: int = 0
|
||||
promotion: int = 6
|
||||
rank: int = 6
|
||||
lightcone_id: int = 0
|
||||
relic_ids: dict[str,int] = {}
|
||||
skills: dict[str,int] = {}
|
||||
current_hp: int = 10000
|
||||
current_sp: int = 0
|
||||
|
||||
def add_avatar(self) -> "AvatarData":
|
||||
get_avatar = avatars_collection.find_one({"uid": self.uid, "avatar_id":self.avatar_id})
|
||||
if get_avatar:
|
||||
return False
|
||||
|
||||
avatar = ResourceManager.instance().find_by_index(AvatarConfig, self.avatar_id)
|
||||
if not avatar:
|
||||
return False
|
||||
|
||||
self.avatar_id=avatar.AvatarID
|
||||
|
||||
for skill_id,skill_level in avatar.AvatarSkills.items():
|
||||
self.skills[str(skill_id)] = skill_level
|
||||
|
||||
avatar_data = self.model_dump()
|
||||
avatars_collection.insert_one(avatar_data)
|
||||
return self
|
||||
|
||||
def ToProto(self) -> Avatar:
|
||||
return Avatar(
|
||||
base_avatar_id=self.avatar_id,
|
||||
level=self.level,
|
||||
exp=self.exp,
|
||||
promotion=self.promotion,
|
||||
rank=self.rank,
|
||||
skilltree_list=[
|
||||
AvatarSkillTree(
|
||||
point_id=int(skill_id),
|
||||
level=skill_level
|
||||
)
|
||||
for skill_id,skill_level in self.skills.items()
|
||||
],
|
||||
equipment_unique_id=self.lightcone_id,
|
||||
equip_relic_list=[
|
||||
EquipRelic(
|
||||
relic_unique_id=relic_id,
|
||||
type=int(type)
|
||||
)
|
||||
for type,relic_id in self.relic_ids.items()
|
||||
],
|
||||
has_taken_promotion_reward_list=[1,2,3,4,5,6],
|
||||
)
|
||||
|
||||
def ToBattleProto(self,index,session):
|
||||
get_equipment = None
|
||||
if self.lightcone_id > 0:
|
||||
get_equipment = session.player.inventory_manager.get(self.lightcone_id)
|
||||
|
||||
return BattleAvatar(
|
||||
id=self.avatar_id,
|
||||
index=index,
|
||||
level=self.level,
|
||||
promotion=self.promotion,
|
||||
rank=self.rank,
|
||||
hp=self.current_hp,
|
||||
avatar_type=AvatarType.AVATAR_FORMAL_TYPE.value,
|
||||
sp_bar=SpBarInfo(
|
||||
cur_sp=5000,
|
||||
max_sp=10000
|
||||
),
|
||||
skilltree_list=[
|
||||
AvatarSkillTree(
|
||||
point_id=int(skill_id),
|
||||
level=level
|
||||
)
|
||||
for skill_id,level in self.skills.items()
|
||||
],
|
||||
equipment_list=[
|
||||
BattleEquipment(
|
||||
id=get_equipment.item_id if get_equipment else 0,
|
||||
level=get_equipment.level if get_equipment else 0,
|
||||
promotion=get_equipment.promotion if get_equipment else 0,
|
||||
rank=get_equipment.rank if get_equipment else 0
|
||||
)
|
||||
],
|
||||
relic_list = [
|
||||
session.player.inventory_manager.get(relic_id).RelicBattleProto()
|
||||
for type, relic_id in self.relic_ids.items()
|
||||
if relic_id > 0
|
||||
]
|
||||
)
|
||||
|
||||
def save_avatar(self):
|
||||
avatar_data = self.model_dump()
|
||||
avatar_data["uid"] = self.uid
|
||||
query = {"uid": self.uid, "avatar_id": self.avatar_id}
|
||||
avatars_collection.update_one(query, {"$set": avatar_data})
|
||||
|
||||
|
||||
def find_avatar_by_avatar_id(uid: int, avatar_id: int) -> Optional[AvatarData]:
|
||||
avatar_data = avatars_collection.find_one({"uid": uid, "avatar_id":avatar_id})
|
||||
if avatar_data:
|
||||
del avatar_data["_id"]
|
||||
return AvatarData(**avatar_data)
|
||||
return None
|
||||
|
||||
def get_all_avatars_by_uid(uid: int) -> List[AvatarData]:
|
||||
avatars_data = avatars_collection.find({"uid": uid})
|
||||
result = []
|
||||
for avatar in avatars_data:
|
||||
del avatar["_id"]
|
||||
result.append(AvatarData(**avatar))
|
||||
return result
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user