//某个场景要结束了 private void CleanScene(FightQueueScene scene) { foreach (var i in scene.team1) { QueueSceneManager.characters.Remove(i.Key); QueueTeamManager.LeaveScene(i.Key); #if DEBUG PlayerLog.WriteLog((int)LogType.BattleLog, "SSCharacterLeaveBattle CleanScene c={0},s={1}", i.Key, scene.mSceneGuid); #endif } foreach (var i in scene.team2) { QueueSceneManager.characters.Remove(i.Key); QueueTeamManager.LeaveScene(i.Key); #if DEBUG PlayerLog.WriteLog((int)LogType.BattleLog, "SSCharacterLeaveBattle CleanScene c={0},s={1}", i.Key, scene.mSceneGuid); #endif } foreach (var character in scene.FollowCharacters) { foreach (var data in character.mDatas) { TeamServer.Instance.ServerControl.TeamServerMessage(data.Id, (int)eLeaveMatchingType.SceneOver, string.Empty); } character.mLogic.PushFront(character); } scene.FollowCharacters.Clear(); #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "CleanScene(). scene.FollowCharacters.Clear(). scene={0}", scene.mSceneGuid); #endif switch (scene.State) { case SceneState.Init: { } break; case SceneState.Full: { } break; case SceneState.NoFull: { } break; } }
//开始创建副本 private static IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co, FightQueueScene _this, List <ulong> characters, int serverId) { //排队创建场景时,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(serverId); PlayerLog.WriteLog((int)LogType.QueueMessage, "NotifyCreateChangeSceneCoroutine Team={0}", characters.GetDataString()); var sceneInfo = new ChangeSceneInfo { SceneId = -1, ServerId = serverLogicId, SceneGuid = _this.mSceneGuid, Type = (int)eScnenChangeType.EnterDungeon }; sceneInfo.Guids.AddRange(characters); var msgChgScene = TeamServer.Instance.SceneAgent.SBChangeSceneByTeam(characters[0], sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co)); if (msgChgScene.State != MessageState.Reply) { yield break; } if (msgChgScene.Response == 0) { foreach (var characterGuid in characters) { PlayerLog.WriteLog((int)LogType.BattleLog, "SSCharacterEnterBattle Faild c={0},s={1}", characterGuid, _this.mSceneGuid); QueueTeamManager.LeaveScene(characterGuid); QueueSceneManager.LeaveScene(characterGuid, _this.mSceneGuid); } } }