Files
KianaBH3/game_server/game/player/__init__.py
2024-11-18 13:06:18 +08:00

138 lines
5.4 KiB
Python

import dataclasses
from database import mongo
from game_server.game.avatar.avatar_manager import AvatarManager,Skill,AvatarSubSkill,AvatarTeamManager
from game_server.game.inventory.inventory_manager import InventoryManager,Material,Weapon,Stigmata,RuneList,RuneGroup
from game_server.game.elf.elf_manager import ElfManager,ElfSkill
from game_server.game.enum.item_type import MainType
@dataclasses.dataclass
class WarshipAvatar:
warship_first_avatar_id: int
warship_second_avatar_id: int
@dataclasses.dataclass
class Player:
uid: int
name: str
level: int
exp: int
hcoin: int
stamina: int
signature: str
head_photo: int
head_frame: int
warship_id: int
assistant_avatar_id: int
birth_date: int
warship_avatar: WarshipAvatar
# Player managers
avatars: dict[int, AvatarManager] = dataclasses.field(default_factory=dict)
inventory: InventoryManager = dataclasses.field(default_factory=InventoryManager)
elfs: dict[int,ElfManager] = dataclasses.field(default_factory=dict)
custom_avatar_team_list: dict[int,AvatarTeamManager] = dataclasses.field(default_factory=dict)
def init_default(self):
self.add_all_avatar()
self.add_all_items()
self.add_all_elfs()
def add_all_avatar(self):
avatars = mongo.find_documents("avatars")
for avatar in avatars:
data = AvatarManager(
avatar_id=avatar['AvatarID'],
star=avatar['Star'],
level=avatar['Level'],
exp=avatar['Exp'],
fragment=avatar['Fragment'],
touch_good_feel=avatar['TouchGoodFeel'],
today_has_add_good_feel=avatar['TodayHasAddGoodFeel'],
dress_id=avatar['DressID'],
dress_lists=avatar['DressLists'],
sub_star=avatar['SubStar'],
skill_lists={
skill['SkillId']:
Skill(
skill_id=skill['SkillId'],
sub_skill_lists={
sub_skill['subSkillId']:
AvatarSubSkill(
sub_skill_id=sub_skill['subSkillId'],
level=sub_skill['level']
)
for sub_id,sub_skill in skill['SubSkillLists'].items()
}
)
for id,skill in avatar['SkillLists'].items()
}
)
weapon = list(mongo.find_documents_by_key_values("items", {"EquipAvatarID": avatar['AvatarID'], "MainType":MainType.WEAPON.value}))
stigmata = list(mongo.find_documents_by_key_values("items", {"EquipAvatarID": avatar['AvatarID'], "MainType":MainType.STIGMATA.value}))
if any(weapon):
data.weapon_id = weapon[0]['UniqueID']
if any(stigmata):
for stigma in stigmata:
data.stigmata_ids[stigma['SlotNum']] = stigma['UniqueID']
self.avatars[avatar['AvatarID']] = data
def add_all_items(self):
get_items = mongo.find_documents("items")
for item in get_items:
if item['MainType'] == MainType.MATERIAL.value:
normal_item = Material(
item_id=item['ItemID'],
num=item['ItemNum']
)
self.inventory.material_items[item['ItemID']] = normal_item
if item['MainType'] == MainType.WEAPON.value:
weapon = Weapon(
item_id=item['ItemID'],
level=item['Level'],
exp=item['Exp'],
is_locked=item['IsLocked'],
is_extracted=item['IsExtracted'],
equip_avatar_id=item['EquipAvatarID']
)
self.inventory.weapon_items[item['UniqueID']] = weapon
if item['MainType'] == MainType.STIGMATA.value:
stigmata = Stigmata(
item_id=item['ItemID'],
level=item['Level'],
exp=item['Exp'],
slot_num=item['SlotNum'],
refine_value=item['RefineValue'],
promote_times=item['PromoteTimes'],
is_locked=item['IsLocked'],
equip_avatar_id=item['EquipAvatarID'],
rune_list=[
RuneList(
rune_id=rune['RuneId'],
strength_percent=rune['strengthPercent']
)
for rune in item['RuneLists']
]
)
self.inventory.stigmata_items[item['UniqueID']] = stigmata
def add_all_elfs(self):
get_elfs = mongo.find_documents("elfs")
for elf in get_elfs:
data = ElfManager(
elf_id=elf['ElfId'],
level=elf['Level'],
star=elf['Star'],
exp=elf['Exp'],
skill_list={
skill['SkillId']:
ElfSkill(
skill_id=skill['SkillId'],
level=skill['Level']
)
for id,skill in elf['SkillLists'].items()
}
)
self.elfs[elf['ElfId']] = data