Support SRTools web
This commit is contained in:
@@ -10,7 +10,7 @@ from rail_proto.lib import (
|
||||
PlayerSyncScNotify,
|
||||
AvatarSync
|
||||
)
|
||||
from pymongo import UpdateOne
|
||||
from pymongo import UpdateOne, DeleteMany
|
||||
from utils.logger import Error
|
||||
|
||||
|
||||
@@ -82,12 +82,14 @@ class PlayerManager(BaseModel):
|
||||
return None
|
||||
|
||||
def add_lineup(self,avatar_ids: list[int],index=0,name=""):
|
||||
LineupData(
|
||||
lineup = LineupData(
|
||||
uid=self.data.uid,
|
||||
index=index,
|
||||
name=name,
|
||||
avatar_list=avatar_ids
|
||||
).add_lineup()
|
||||
if lineup:
|
||||
self.lineup_manager[lineup.index] = lineup
|
||||
|
||||
def add_lightcone(self,lightcone_id: int, rank=1) -> Optional[InventoryData]:
|
||||
item = InventoryData(
|
||||
@@ -110,6 +112,25 @@ class PlayerManager(BaseModel):
|
||||
return item
|
||||
return None
|
||||
|
||||
async def unequip_items(self,avatar_id):
|
||||
avatar_data = self.avatar_manager.get(avatar_id)
|
||||
if not avatar_data:return
|
||||
item_data = self.inventory_manager.get(avatar_data.lightcone_id)
|
||||
if not item_data:return
|
||||
item_data.equip_avatar = 0
|
||||
|
||||
match item_data.main_type:
|
||||
case 1:
|
||||
avatar_data.lightcone_id = 0
|
||||
case 2:
|
||||
avatar_data.relic_ids[str(item_data.sub_type)] = 0
|
||||
return
|
||||
|
||||
async def remove_items(self,count,unique_id):
|
||||
item_data = self.inventory_manager.get(unique_id)
|
||||
if not item_data:return
|
||||
if count == 0: self.inventory_manager.pop(unique_id)
|
||||
return
|
||||
|
||||
def PlayerSyncProto(self) -> PlayerSyncScNotify:
|
||||
avatars = []
|
||||
@@ -135,6 +156,33 @@ class PlayerManager(BaseModel):
|
||||
basic_info=self.data.ToProto()
|
||||
)
|
||||
|
||||
def SrToolAvatarSync(self):
|
||||
avatars = []
|
||||
for avatar_id, avatar in self.avatar_manager.items():
|
||||
avatars.append(avatar.ToProto())
|
||||
|
||||
return PlayerSyncScNotify(
|
||||
avatar_sync=
|
||||
AvatarSync(
|
||||
avatar_list=avatars
|
||||
)
|
||||
)
|
||||
|
||||
def SrToolItemsSync(self):
|
||||
equipment = []
|
||||
for unique_id, item in self.inventory_manager.items():
|
||||
if item.main_type == 1:
|
||||
equipment.append(item.ToProto())
|
||||
|
||||
relics = []
|
||||
for unique_id, item in self.inventory_manager.items():
|
||||
if item.main_type == 2:
|
||||
relics.append(item.ToProto())
|
||||
return PlayerSyncScNotify(
|
||||
equipment_list=equipment,
|
||||
relic_list=relics
|
||||
)
|
||||
|
||||
def save_player_data_bulk(self):
|
||||
try:
|
||||
player_data = self.data.model_dump()
|
||||
@@ -168,11 +216,20 @@ class PlayerManager(BaseModel):
|
||||
|
||||
def save_all_items_bulk(self):
|
||||
operations = []
|
||||
current_unique_ids = set()
|
||||
|
||||
for item in self.inventory_manager.values():
|
||||
item_data = item.model_dump()
|
||||
item_data["uid"] = item.uid
|
||||
query = {"uid": item.uid, "unique_id": item.unique_id}
|
||||
operations.append(UpdateOne(query, {"$set": item_data}, upsert=True))
|
||||
current_unique_ids.add(item.unique_id)
|
||||
|
||||
delete_query = {
|
||||
"unique_id": {"$nin": list(current_unique_ids)},
|
||||
"uid": self.data.uid
|
||||
}
|
||||
operations.append(DeleteMany(delete_query))
|
||||
|
||||
if operations:
|
||||
items_collection.bulk_write(operations)
|
||||
Reference in New Issue
Block a user