diff --git a/Common/Database/Avatar.cs b/Common/Database/Avatar.cs index 8bac92d..3ef9c33 100644 --- a/Common/Database/Avatar.cs +++ b/Common/Database/Avatar.cs @@ -1,6 +1,5 @@ using Common.Resources.Proto; using Common.Utils.ExcelReader; -using Newtonsoft.Json; using MongoDB.Bson; using MongoDB.Driver; @@ -62,6 +61,18 @@ namespace Common.Database return avatar; } + + public static void SaveBulk(IEnumerable avatars) + { + List> ops = new(); + + foreach (AvatarScheme avatar in avatars) + { + ops.Add(avatar.SaveOp()); + } + + collection.BulkWrite(ops); + } } public class AvatarScheme : Resources.Proto.Avatar @@ -75,12 +86,16 @@ namespace Common.Database public uint OwnerUid { get; set; } public new List SkillLists { get; set; } = new(); - public void Save() { Avatar.collection.ReplaceOne(Builders.Filter.Eq(avatar => avatar.Id, Id), this); } + public WriteModel SaveOp() + { + return new ReplaceOneModel(Builders.Filter.Eq(avatar => avatar.Id, Id), this); + } + public PlayerLevelData.LevelData AddExp(uint exp) { PlayerLevelData.LevelData levelData = AvatarLevelData.GetInstance().CalculateLevel((int)Level, (int)(exp + Exp)); diff --git a/Common/Database/OpenWorld.cs b/Common/Database/OpenWorld.cs index 82e5131..d87decd 100644 --- a/Common/Database/OpenWorld.cs +++ b/Common/Database/OpenWorld.cs @@ -33,6 +33,18 @@ namespace Common.Database InitData(uid); return collection.AsQueryable().Where(x => x.OwnerUid == uid && ShowMapList.Contains(x.MapId)).ToList(); ; } + + public static void SaveBulk(IEnumerable openWorlds) + { + List> ops = new(); + + foreach (OpenWorldScheme ow in openWorlds) + { + ops.Add(ow.SaveOp()); + } + + collection.BulkWrite(ops); + } } #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. @@ -50,5 +62,10 @@ namespace Common.Database { OpenWorld.collection.ReplaceOne(Builders.Filter.Eq(x => x.Id, Id), this); } + + public WriteModel SaveOp() + { + return new ReplaceOneModel(Builders.Filter.Eq(x => x.Id, Id), this); + } } } diff --git a/GameServer/Game/Player.cs b/GameServer/Game/Player.cs index 27965a6..0aacd6c 100644 --- a/GameServer/Game/Player.cs +++ b/GameServer/Game/Player.cs @@ -23,15 +23,8 @@ namespace PemukulPaku.GameServer.Game { User.Save(); Equipment.Save(); - - foreach (AvatarScheme Avatar in AvatarList) - { - Avatar.Save(); - } - foreach (OpenWorldScheme OpenWorld in OpenWorlds) - { - OpenWorld.Save(); - } + Common.Database.Avatar.SaveBulk(AvatarList); + OpenWorld.SaveBulk(OpenWorlds); } public void ResetAvatarsTodayGoodfeel()