Bläddra i källkod

【优化】解决多次登录会创建多个角色数据问题

johnclot69 1 år sedan
förälder
incheckning
267fdd1109

+ 1 - 1
DotNet/Hotfix/Helper/PlayerHelper.cs

@@ -16,7 +16,7 @@ namespace ET.Server
         {
             return new PlayerBasic()
             {
-                id = playerInfo.Id.ToString(),
+                id = playerInfo.PlayerId.ToString(),
                 uid = playerInfo.UserId.ToString(),
                 name = playerInfo.Name,
                 level = playerInfo.Level,

+ 2 - 6
DotNet/Hotfix/Scenes/Game/Handler/C2G_BindPlayerHandler.cs

@@ -24,7 +24,7 @@ namespace ET.Server
             // 预先创建数据
             long _id = IdGenerater.Instance.GenerateUnitId(scene.DomainZone());
             PlayerInfo playerInfo = new PlayerInfo();
-            playerInfo.Id = _id;
+            playerInfo.PlayerId = _id;
             playerInfo.UserId = session.GetComponent<SessionPlayerComponent>().UserId;
             playerInfo.Name = "玩家-" + _id;
             playerInfo.Sex = 0;
@@ -40,11 +40,7 @@ namespace ET.Server
 
                 if (playerList is { Count: > 0 })
                 {
-                    foreach (PlayerInfo info in playerList.Where(info => info != null))
-                    {
-                        playerInfo = info;
-                        break;
-                    }
+                    playerInfo = playerList[0];
                 }
                 else
                 {

+ 3 - 3
DotNet/Hotfix/Scenes/Game/Handler/C2G_CreatePlayerHandler.cs

@@ -77,7 +77,7 @@ namespace ET.Server
             using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.CreatePlayer, _id.ToString().Trim().GetHashCode()))
             {
                 playerInfo = new PlayerInfo();
-                playerInfo.Id = _id;
+                playerInfo.PlayerId = _id;
                 playerInfo.UserId = session.GetComponent<SessionPlayerComponent>().UserId;
                 playerInfo.Name = request.Name;
                 playerInfo.Sex = request.Sex;
@@ -90,12 +90,12 @@ namespace ET.Server
 
             // 创建玩家实体, 初始化各模块数据
             WNPlayer player = scene.GetComponent<GamePlayerComponent>()
-                    .AddChildWithId<WNPlayer, Session, PlayerInfo>(playerInfo.Id, session, playerInfo);
+                    .AddChildWithId<WNPlayer, Session, PlayerInfo>(playerInfo.PlayerId, session, playerInfo);
 
             // 添加绑定session角色
             session.GetComponent<SessionPlayerComponent>().Add(playerInfo);
 
-            Log.Info($"创建角色, playerId={playerInfo.Id}, name={playerInfo.Name}, userId={playerInfo.UserId}");
+            Log.Info($"创建角色, playerId={playerInfo.PlayerId}, name={playerInfo.Name}, userId={playerInfo.UserId}");
 
             response.Player = PlayerHelper.PlayerInfoToProto(player);
 

+ 1 - 0
DotNet/Hotfix/Scenes/Game/Player/PlayerDataComponentSystem.cs

@@ -35,6 +35,7 @@ namespace ET.Server
         {
             if (self.Data != null)
             {
+                self.Data.PlayerId = self.Player.GetId();
                 await DBManagerComponent.Instance.GetZoneDB(self.DomainZone()).Save(self.Data);
             }
         }

+ 3 - 1
DotNet/Hotfix/Scenes/Game/Player/PlayerSystem.cs

@@ -28,6 +28,8 @@ namespace ET.Server
                 self.AddComponent<PlayerDataComponent, PlayerInfo, WNPlayer>(playerInfo, self);
                 // 玩家临时数据组件
                 self.AddComponent<PlayerTempDataComponent, WNPlayer>(self);
+                // 玩家技能组件
+                // self.AddComponent<PlayerSkillComponent, WNPlayer>(self);
                 // 玩家货币组件
                 self.AddComponent<PlayerMoneyComponent, WNPlayer>(self);
             }
@@ -52,7 +54,7 @@ namespace ET.Server
         /// <returns></returns>
         public static long GetId(this WNPlayer self)
         {
-            return self.GetComponent<PlayerDataComponent>().Data.Id;
+            return self.GetComponent<PlayerDataComponent>().Data.PlayerId;
         }
 
         /// <summary>

+ 2 - 1
DotNet/Hotfix/Scenes/Game/Player/PlayerTempDataComponentSystem.cs

@@ -35,7 +35,7 @@ namespace ET.Server
         public static async ETTask InitFromDB(this PlayerTempDataComponent self)
         {
             List<PlayerMapInfo> list = await DBManagerComponent.Instance.GetZoneDB(self.DomainZone())
-                    .Query<PlayerMapInfo>(p => p.Id == self.Player.GetId());
+                    .Query<PlayerMapInfo>(p => p.PlayerId == self.Player.GetId());
             if (list is { Count: > 0 })
             {
                 self.MapData = list[0];
@@ -52,6 +52,7 @@ namespace ET.Server
         {
             if (self.MapData != null)
             {
+                self.MapData.PlayerId = self.Player.GetId();
                 await DBManagerComponent.Instance.GetZoneDB(self.DomainZone()).Save(self.MapData);
             }
         }

+ 2 - 0
DotNet/Model/Scenes/Game/DBEntity/PlayerInfo.cs

@@ -5,6 +5,8 @@ namespace ET.Server
     /// </summary>
     public class PlayerInfo: Entity, IAwake
     {
+        /** 玩家id **/
+        public long PlayerId { get; set; }
         /** 账号id **/
         public long UserId { get; set; }
         /** 服务器id **/

+ 1 - 0
DotNet/Model/Scenes/Game/DBEntity/PlayerMapInfo.cs

@@ -5,6 +5,7 @@ namespace ET.Server
     /// </summary>
     public class PlayerMapInfo: Entity, IAwake
     {
+        public long PlayerId { get; set; }
         public bool ready { get; set; }
         public bool leave { get; set; }
         public bool alive { get; set; }