Parcourir la source

【优化】客户端没ready,但战斗服已经ready了

johnclot69 il y a 1 an
Parent
commit
33cb230793

+ 11 - 2
DotNet/Hotfix/Module/IceBattle/BattleEventHandler.cs

@@ -7,9 +7,9 @@
         {
             //Log.Debug("to transfer client battle msg");
 
-            var player = session.GetComponent<SessionPlayerComponent>();
+            SessionPlayerComponent component = session.GetComponent<SessionPlayerComponent>();
             //message.data
-            FastStreamComponent.Instance.SendData(player.PlayerId.ToString(), message.data);
+            FastStreamComponent.Instance.SendData(component.PlayerId.ToString(), message.data);
 
             await ETTask.CompletedTask;
         }
@@ -23,6 +23,15 @@
             Scene scene = session.DomainScene();
             scene.GetComponent<ObjectWait>().Notify(new Wait_PlayerReady());
 
+            WNPlayer player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
+            if (player != null)
+            {
+                player.OnReady();
+            }
+            if (player.Map != null)
+            {
+                player.Map.OnReady(player);
+            }
             await ETTask.CompletedTask;
         }
     }

+ 1 - 1
DotNet/Hotfix/Scenes/Game/Handler/C2G_EnterMapHandler.cs

@@ -61,7 +61,7 @@ namespace ET.Server
             //等待client ready消息
             // await session.DomainScene().GetComponent<ObjectWait>().Wait<Wait_PlayerReady>();
 
-            player.OnEndEnterScene();
+            // player.OnEndEnterScene();
 
             await ETTask.CompletedTask;
         }

+ 10 - 0
DotNet/Hotfix/Scenes/Game/Handler/C2G_EnterSceneReady.cs

@@ -11,6 +11,16 @@ namespace ET.Server
             Scene scene = session.DomainScene();
             scene.GetComponent<ObjectWait>().Notify(new Wait_PlayerReady());
 
+            WNPlayer player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
+            if (player != null)
+            {
+                player.OnReady();
+            }
+            if (player.Map != null)
+            {
+                player.Map.OnReady(player);
+            }
+
             reply();
             await ETTask.CompletedTask;
         }

+ 13 - 0
DotNet/Hotfix/Scenes/Game/Map/MapSystem.cs

@@ -95,6 +95,13 @@ namespace ET.Server
         /** 玩家进入场景请求 **/
         public static void PlayerEnterRequest(this Map self, WNPlayer player)
         {
+            bool ready = player.GetComponent<PlayerTempDataComponent>().MapData.ready;
+            if (ready)
+            {
+                Log.Info($"PlayerEnterRequest: playerId={player.GetId()}, ready={ready}");
+                return;
+            }
+
             try
             {
                 self.GetZoneManager().playerEnterRequest(player.GetId().ToString().Trim(), self.Id.ToString().Trim(), player.toJSON4EnterScene(self));
@@ -121,6 +128,12 @@ namespace ET.Server
             Log.Debug($"playerLeaveRequest--------------------{player.GetName()} - {self.InstanceId} - {self.Prop.Name}");
         }
 
+        /** 玩家进场景后推的消息 **/
+        public static void OnReady(this Map self, WNPlayer player)
+        {
+
+        }
+
         /** 玩家登录事件 **/
         public static void OnPlayerLogin(this Map self, WNPlayer player)
         {

+ 22 - 2
DotNet/Hotfix/Scenes/Game/Player/PlayerSystem.cs

@@ -169,22 +169,42 @@ namespace ET.Server
             }
         }
 
+        /** 客户端资源加载完成通知 给客户端推送的数据要在这里 **/
+        public static void OnReady(this WNPlayer self)
+        {
+            self.OnEndEnterScene();
+
+            // 登录第一次进场景处理,此次登陆登出期间只处理一次
+            if (self.readyFirst)
+            {
+                self.readyFirst = false;
+            }
+        }
+
         /** 玩家登录事件 **/
         public static void OnLogin(this WNPlayer self)
         {
+            self.readyFirst = true;
             self.DomainScene().GetComponent<GamePlayerComponent>().Add(self.GetId(), self);
         }
 
         /** 向客户端推送角色相关数据 **/
         public static void OnEndEnterScene(this WNPlayer self)
         {
+            bool ready = self.GetComponent<PlayerTempDataComponent>().MapData.ready;
+            if (ready)
+            {
+                Log.Warning($"$OnEndEnterScene跳过 : playerId={self.GetId()}, 玩家场景:{self.Map.MapId}, 进入场景:" + (self.Map?.MapId ?? -1));
+                return;
+            }
+
+            self.GetComponent<PlayerTempDataComponent>().MapData.ready = true;
+
             self.GetXmdsManager().playerReady(self.GetId().ToString().Trim());
             //PKMode设置为All
             self.GetXmdsManager().refreshPlayerPKMode(self.GetId().ToString().Trim(), false, (int)PkModel.All);
             //设置为自动战斗
             self.GetXmdsManager().autoBattle(self.Map.Id.ToString().Trim(), self.GetId().ToString().Trim(), true);
-
-            // MessageHelper.SendToClient(self, new G2C_EnterSceneReady() { MapId = self.Map.MapId, MapInstanceId = self.Map.Id });
         }
 
         /** 场景中角色需求数据 **/

+ 1 - 1
DotNet/Hotfix/Scenes/Realm/Handler/C2R_LoginHandler.cs

@@ -57,7 +57,7 @@ namespace ET.Server
                 List<UserInfo> list = await DBManagerComponent.Instance.GetZoneDB(session.DomainZone())
                         .Query<UserInfo>(d => d.Account.Equals(request.Account.Trim()));
 
-                if (list != null && list.Count > 0)
+                if (list is { Count: > 0 })
                 {
                     userInfo = list[0];
                 }

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

@@ -5,6 +5,9 @@ namespace ET.Server
     /// </summary>
     public class PlayerMapInfo: Entity, IAwake
     {
+        public bool ready { get; set; }
+        public bool leave { get; set; }
+        public bool alive { get; set; }
         public int historyMapId { get; set; }
         public long historyMapInstanceId { get; set; }
         public float historyX { get; set; }

+ 3 - 0
DotNet/Model/Scenes/Game/Player/WNPlayer.cs

@@ -20,5 +20,8 @@ namespace ET.Server
         /** 出生类型 **/
         public int BornType { get; set; }
         public int EnterState { get; set; }
+
+        /** 登录首次进入场景,用于onready,进行一次消息推送(只在登陆时候首次进场景推送)*/
+        public bool readyFirst { get; set; }
     }
 }

+ 7 - 0
Unity/Assets/Res/Config/GenFromExcel/MonsterCategory.bytes.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ee066fd7d87f22841976e661a5293082
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 11 - 0
Unity/Assets/Scripts/Codes/Model/Client/Generate/Config/Monster.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 92b0ebd750366684ab45ecfa914c3229
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: