104 lines
2.8 KiB
Python
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 = 6
|
|
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
|
|
|
|
|
|
|