Bläddra i källkod

【BUG】解决进入主场景的一系列问题

johnclot69 2 år sedan
förälder
incheckning
e62c752080

+ 7 - 2
DotNet/Hotfix/Helper/MapHelper.cs

@@ -58,7 +58,7 @@ namespace ET.Server
 
             if (map != null)
             {
-                if (map.InstanceId == areaData.instanceId)
+                if (map.Id == areaData.instanceId)
                 {
                     Log.Info($"changeArea1已在场景:{map.Prop.Name}, playerId={player.GetId()}, playerName={player.GetName()}");
                     return map;
@@ -102,8 +102,8 @@ namespace ET.Server
         {
             // 初始化角色出生坐标数据
             player.InitBornData();
-            // 获取Player对象并且初始化设置
 
+            map.AddPlayer(player);
         }
 
         public static Map PlayerEnterAreaServer(WNPlayer player, long instanceId)
@@ -163,6 +163,11 @@ namespace ET.Server
             jsonObject.Add("areaId", playerMapInfo.mapId);
             map = CreateMap(player, jsonObject, false);
 
+            if (map != null)
+            {
+                ChangeArea(player, new Struct.AreaData(10098, map.Id), false);
+            }
+
             return map;
         }
 

+ 2 - 2
DotNet/Hotfix/Helper/SceneFactory.cs

@@ -32,11 +32,11 @@ namespace ET.Server
                     ConstGame.GameServerUUID = System.Guid.NewGuid().ToString();
 
                     scene.AddComponent<NetServerComponent, IPEndPoint>(startSceneConfig.InnerIPOutPort);
-                    //战斗服的Ice会话组件
-                    scene.AddComponent<BattleIceAgentComponent>();
                     scene.AddComponent<GameTokenInfoComponent>();
                     scene.AddComponent<GamePlayerComponent>();
                     scene.AddComponent<GameMapComponent>();
+                    //战斗服的Ice会话组件
+                    scene.AddComponent<BattleIceAgentComponent>();
                     break;
                 case SceneType.Location:
                     scene.AddComponent<LocationComponent>();

+ 1 - 1
DotNet/Hotfix/Module/FastStream/FastStreamComponentSystem.cs

@@ -68,7 +68,7 @@ namespace ET.Server
             //Log.Debug($"receive fast stream data, uid({usrid}), msglen:{data.Length}");
 
             //找到此unit对应的Player(id相同)
-            WNPlayer player = Root.Instance.Scene.GetComponent<GamePlayerComponent>().Get(usrid);
+            WNPlayer player = FastStreamComponent.Instance.DomainScene().GetComponent<GamePlayerComponent>().Get(usrid);
             if (player != null )
             {
                 MessageHelper.SendToClient(player, new BattleEventPush() { key = (ushort)BattlePushCnst.FastStreamPush, data = data});

+ 1 - 1
DotNet/Hotfix/Module/IceBattle/BattleIceAgentComponentSystem.cs

@@ -93,7 +93,7 @@ namespace ET.Server
                 }
 
                 //连接战斗服FastStream组件
-                Root.Instance.Scene.AddComponent<FastStreamComponent>();
+                BattleIceAgentComponent.Instance.DomainScene().AddComponent<FastStreamComponent>();
 
                 IceApp.communicator().waitForShutdown();
                 Log.Info("ice thread end");

+ 1 - 4
DotNet/Hotfix/Scenes/Game/GameMapComponentSystem.cs

@@ -31,10 +31,7 @@ namespace ET.Server
     {
         public static void Add(this GameMapComponent self, Map map)
         {
-            if (!self.allMaps.ContainsKey(map.Id))
-            {
-                self.allMaps.Add(map.Id, map);
-            }
+            self.allMaps.TryAdd(map.Id, map);
         }
 
         public static Map Get(this GameMapComponent self, long instanceId)

+ 2 - 5
DotNet/Hotfix/Scenes/Game/GamePlayerComponentSystem.cs

@@ -27,12 +27,9 @@ namespace ET.Server
     [FriendOf(typeof (GamePlayerComponent))]
     public static class GamePlayerComponentSystem
     {
-        public static void Add(this GamePlayerComponent self, WNPlayer player)
+        public static void Add(this GamePlayerComponent self, long playerId, WNPlayer player)
         {
-            if (!self.idPlayers.ContainsKey(player.Id))
-            {
-                self.idPlayers.Add(player.Id, player);
-            }
+            self.idPlayers[playerId] = player;
         }
 
         public static WNPlayer Get(this GamePlayerComponent self, long id)

+ 5 - 4
DotNet/Hotfix/Scenes/Game/Handler/C2G_BindPlayerHandler.cs

@@ -24,6 +24,7 @@ namespace ET.Server
             if (request.PlayerId <= 0)
             {
                 long _id = IdGenerater.Instance.GenerateUnitId(scene.DomainZone());
+
                 // 简易版登录,直接创建一个player
                 using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.CreatePlayer, _id.ToString().Trim().GetHashCode()))
                 {
@@ -32,7 +33,7 @@ namespace ET.Server
                     playerInfo.UserId = request.UserId;
                     playerInfo.Name = "玩家-" + _id;
                     playerInfo.Sex = 0;
-                    playerInfo.Pro = 0;
+                    playerInfo.Pro = (int)PlayerProType.CANG_LANG;
                     playerInfo.Level = 1;
                     playerInfo.Exp = 0;
 
@@ -84,13 +85,13 @@ namespace ET.Server
             }
 
             player ??= scene.GetComponent<GamePlayerComponent>()
-                    .AddChildWithId<WNPlayer, Session, PlayerInfo>(playerInfo.Id, session, playerInfo);
+                    .AddChild<WNPlayer, Session, PlayerInfo>(session, playerInfo);
 
             await player.GetComponent<PlayerTempDataComponent>().InitFromDB(player);
 
             session.AddComponent<MailBoxComponent, MailboxType>(MailboxType.GateSession);
 
-            session.GetComponent<SessionPlayerComponent>().PlayerId = request.PlayerId;
+            session.GetComponent<SessionPlayerComponent>().PlayerId = request.PlayerId > 0 ? request.PlayerId : player.GetId();
 
             // todo 分配场景
             Map map = MapHelper.BindPlayerDispatch(player);
@@ -102,7 +103,7 @@ namespace ET.Server
 
             response.Player = PlayerHelper.PlayerInfoToProto(player);
             response.Player.areaId = mapConfig.TemplateID;
-            response.Player.instanceId = map.InstanceId;
+            response.Player.instanceId = map.Id;
             response.Player.mapId = map.MapId;
 
             reply();

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

@@ -19,14 +19,14 @@ namespace ET.Server
                 return;
             }
 
-            Log.Info($"玩家请求进入场景: {player.GetId()}, {request.InstanceId}");
+            Log.Info($"玩家请求进入场景: playerId={player.GetId()}, instanceId={request.InstanceId}");
 
             Map map = player.Map;
 
             // 当客户端所要进入的场景不为空且不等于当前场景,忽略掉本次请求
-            if (request.InstanceId > 0 && map.InstanceId != request.InstanceId)
+            if (request.InstanceId > 0 && map.Id != request.InstanceId)
             {
-                Log.Debug($"连续切图吗? playerId={player.GetId()}, name={player.GetName()}, mapId={map.MapId}, map.InstanceId={map.InstanceId}, request.InstanceId={request.InstanceId}");
+                Log.Debug($"连续切图吗? playerId={player.GetId()}, name={player.GetName()}, mapId={map.MapId}, map.InstanceId={map.Id}, request.InstanceId={request.InstanceId}");
                 response.Error = ErrorCode.ERR_OperationToFast;
                 reply();
                 return;
@@ -44,7 +44,7 @@ namespace ET.Server
             map.OnPlayerEntered(player);
             player.OnEndEnterScene();
 
-            response.MapInstanceId = player.Map.InstanceId;
+            response.MapInstanceId = player.Map.Id;
             reply();
             await ETTask.CompletedTask;
         }

+ 2 - 3
DotNet/Hotfix/Scenes/Game/Map/MapSystem.cs

@@ -97,13 +97,12 @@ namespace ET.Server
         {
             try
             {
-                self.GetZoneManager().playerEnterRequest(player.GetId().ToString().Trim(), self.InstanceId.ToString().Trim(),
-                    player.toJSON4EnterScene(self));
+                self.GetZoneManager().playerEnterRequest(player.GetId().ToString().Trim(), self.Id.ToString().Trim(), player.toJSON4EnterScene(self));
             }
             catch (Exception e)
             {
                 Log.Warning(
-                    $"playerEnterRequest: playerName={player.GetName()}, instanceId={self.InstanceId}, mapName={self.Prop.Name}, serverID={self.BattleServerId}, e={e}");
+                    $"playerEnterRequest: playerName={player.GetName()}, instanceId={self.Id}, mapName={self.Prop.Name}, serverID={self.BattleServerId}, e={e}");
             }
         }
 

+ 4 - 4
DotNet/Hotfix/Scenes/Game/Player/PlayerSystem.cs

@@ -171,14 +171,14 @@ namespace ET.Server
         /** 玩家登录事件 **/
         public static void OnLogin(this WNPlayer self)
         {
-            self.DomainScene().GetComponent<GamePlayerComponent>().Add(self);
+            self.DomainScene().GetComponent<GamePlayerComponent>().Add(self.GetId(), self);
         }
 
         /** 向客户端推送角色相关数据 **/
         public static void OnEndEnterScene(this WNPlayer self)
         {
             self.GetXmdsManager().playerReady(self.GetId().ToString().Trim());
-            MessageHelper.SendToClient(self, new G2C_EnterSceneReady() { MapId = self.Map.MapId, MapInstanceId = self.Map.InstanceId });
+            MessageHelper.SendToClient(self, new G2C_EnterSceneReady() { MapId = self.Map.MapId, MapInstanceId = self.Map.Id });
         }
 
         /** 场景中角色需求数据 **/
@@ -205,12 +205,12 @@ namespace ET.Server
                     vip = 0,
                     upLevel = 1,
                     beReward = 0,
-                    // logicServerId = Global.GameServerId,
+                    logicServerId = ConstGame.GameServerId,
                     sex = self.GetSex(),
                     uuid = self.GetId().ToString(),
                     potionAddition = 0
                 },
-                // connectServerId = "bs-" + Global.GameServerId,
+                connectServerId = "bs-" + ConstGame.GameServerId,
                 uid = self.GetId().ToString(),
                 unitTemplateID = self.GetPro(),
                 robot = false,