Files
neonsr/database/player/player_data.py
Naruse ec8972d5d6 init
2025-04-15 19:36:05 +08:00

104 lines
2.8 KiB
Python

from database.mongodb import get_collection
from typing import Optional
from pydantic import BaseModel
from database.base_database_data import BaseDatabaseData
from rail_proto.lib import (
Gender,
PlayerBasicInfo,
PlayerDetailInfo,
PlatformType,
PlayerRecordInfo
)
players_collection = get_collection("players")
class PositionModel(BaseModel):
x: int
y: int
z: int
class RotationModel(BaseModel):
x: int
y: int
z: int
class PlayerData(BaseDatabaseData):
name: str = ""
signature: str = ""
birthday: int = 0
cur_basic_type: int = 8001
head_icon: int = 208001
phone_theme: int = 221000
chat_bubble: int = 220000
current_bgm: int = 210007
current_gender: Gender = Gender.GenderMan
level: int = 70
exp: int = 0
world_level: int = 0
scoin: int = 0 # Credits
hcoin: int = 0 # Jade
mcoin: int = 0 # Crystals
plane_id: int = 10000
floor_id: int = 10000000
entry_id: int = 100000104
cur_lineup: int = 0
pos: Optional[PositionModel] = PositionModel(x=0,y=0,z=0)
rot: Optional[RotationModel] = RotationModel(x=0,y=0,z=0)
def ToProto(self) -> PlayerBasicInfo:
return PlayerBasicInfo(
nickname=self.name,
level=self.level,
exp=self.exp,
world_level=self.world_level,
scoin=self.scoin,
hcoin=self.hcoin,
mcoin=self.mcoin,
stamina=240
)
def ToDetailProto(self) -> PlayerDetailInfo:
return PlayerDetailInfo(
nickname=self.Name,
level=self.Level,
signature=self.Signature,
is_banned=False,
head_icon=self.HeadIcon,
platform=PlatformType.PC,
uid=self.uid,
world_level=self.WorldLevel,
record_info=PlayerRecordInfo()
)
def create_player_data(self,name : str):
try:
self.name = name
player_data = self.model_dump()
players_collection.insert_one(player_data)
return PlayerData(**player_data)
except Exception as e:
print(f"Error creating player data: {e}")
return None
def save_player_data(self):
try:
player_data = self.model_dump()
player_data["uid"] = self.uid
query = {"uid": self.uid}
players_collection.update_one(query, {"$set": player_data})
return True
except Exception as e:
print(f"Error menyimpan data pemain: {e}")
return False
def find_player_by_uid(uid: int) -> Optional[PlayerData]:
player_data = players_collection.find_one({"uid": uid})
if player_data:
del player_data["_id"]
return PlayerData(**player_data)
return None