mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 13:54:43 +01:00
Initial commit
This commit is contained in:
33
game_server/game/avatar/avatar_manager.py
Normal file
33
game_server/game/avatar/avatar_manager.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import dataclasses
|
||||
from typing import List
|
||||
from lib.proto import AvatarSubSkill
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Skill:
|
||||
skill_id : int
|
||||
sub_skill_lists : dict[int, AvatarSubSkill] = dataclasses.field(default_factory=dict)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class AvatarManager:
|
||||
avatar_id: int
|
||||
star: int
|
||||
level: int
|
||||
exp: int
|
||||
fragment: List
|
||||
touch_good_feel: List
|
||||
today_has_add_good_feel: int
|
||||
dress_id: int
|
||||
dress_lists: List
|
||||
sub_star: int
|
||||
skill_lists: dict[int, Skill]
|
||||
weapon_id: int = 0
|
||||
stigmata_ids: dict = dataclasses.field(default_factory=dict)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class AvatarTeamManager:
|
||||
team_id: int
|
||||
name: str
|
||||
astral_mate_id: int
|
||||
is_using_astra_mate: bool
|
||||
elf_id_list: List
|
||||
avatar_id_list: List
|
||||
16
game_server/game/elf/elf_manager.py
Normal file
16
game_server/game/elf/elf_manager.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import dataclasses
|
||||
from typing import List
|
||||
|
||||
@dataclasses.dataclass
|
||||
class ElfSkill:
|
||||
skill_id: int
|
||||
level: int
|
||||
|
||||
@dataclasses.dataclass
|
||||
class ElfManager:
|
||||
elf_id: int
|
||||
level: int
|
||||
star: int
|
||||
exp: 0
|
||||
skill_list: dict[int,ElfSkill] = dataclasses.field(default_factory=dict)
|
||||
|
||||
8
game_server/game/enum/data_type.py
Normal file
8
game_server/game/enum/data_type.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from enum import Enum
|
||||
|
||||
class DataType(Enum):
|
||||
MATERIAL = 1
|
||||
WEAPON = 2
|
||||
STIGMATA = 3
|
||||
AVATAR = 4
|
||||
PLAYER = 5
|
||||
6
game_server/game/enum/item_type.py
Normal file
6
game_server/game/enum/item_type.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from enum import Enum
|
||||
|
||||
class MainType(Enum):
|
||||
MATERIAL = 1
|
||||
WEAPON = 2
|
||||
STIGMATA = 3
|
||||
32
game_server/game/inventory/inventory_manager.py
Normal file
32
game_server/game/inventory/inventory_manager.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import dataclasses
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Material:
|
||||
item_id : int
|
||||
num : int
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Weapon:
|
||||
item_id : int
|
||||
level : int
|
||||
exp : int
|
||||
is_locked : bool
|
||||
is_extracted : bool
|
||||
equip_avatar_id: int
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Stigmata:
|
||||
item_id : int
|
||||
level : int
|
||||
exp : int
|
||||
slot_num : int
|
||||
refine_value : int
|
||||
promote_times : int
|
||||
is_locked : bool
|
||||
equip_avatar_id : int
|
||||
|
||||
@dataclasses.dataclass
|
||||
class InventoryManager:
|
||||
material_items : dict[int,Material] = dataclasses.field(default_factory=dict)
|
||||
weapon_items : dict[int,Weapon] = dataclasses.field(default_factory=dict)
|
||||
stigmata_items : dict[int,Stigmata] = dataclasses.field(default_factory=dict)
|
||||
131
game_server/game/player/__init__.py
Normal file
131
game_server/game/player/__init__.py
Normal file
@@ -0,0 +1,131 @@
|
||||
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
|
||||
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']
|
||||
)
|
||||
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
|
||||
Reference in New Issue
Block a user