//开始创建副本 public IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co, ObjPlayer Character, int scneneId, int x, int y, AsyncReturnValue <ErrorCodes> error) { //GM命令切换场景,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(Character.ServerId); var sceneInfo = new ChangeSceneInfo { SceneId = scneneId, ServerId = serverLogicId, SceneGuid = 0, Type = (int)eScnenChangeType.Position }; sceneInfo.Guids.Add(Character.ObjId); sceneInfo.Pos = new SceneParam(); sceneInfo.Pos.Param.Add(x); sceneInfo.Pos.Param.Add(y); Character.BeginChangeScene(); var msgChgScene = SceneServer.Instance.SceneAgent.SBChangeSceneByTeam(Character.ObjId, sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30))); }
//开始创建副本 public IEnumerator AskEnterDungeonByTeamCoroutine(Coroutine co, List <ulong> characters, int serverId, FubenRecord tbFuben, ulong sceneGuid) { PlayerLog.WriteLog((int)LogType.QueueMessage, "NotifyCreateChangeSceneCoroutine Team={0}", characters.GetDataString()); //先把进入副本应扣除的材料,扣除掉 var co1 = CoroutineFactory.NewSubroutine(DeleteDungeonMaterialCoroutine, co, characters, tbFuben); if (co1.MoveNext()) { yield return(co1); } //组队进入副本时,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(serverId); var sceneInfo = new ChangeSceneInfo { SceneId = tbFuben.SceneId, ServerId = serverLogicId, SceneGuid = sceneGuid, Type = (int)eScnenChangeType.EnterDungeon }; sceneInfo.Guids.AddRange(characters); if (sceneInfo.Pos == null) { var param = new SceneParam(); sceneInfo.Pos = param; if (tbFuben.OpenTime[0] != -1) { int hour; int min; if (Utils.GetDungeonOpenTime(tbFuben, out hour, out min)) { param.Param.Add(hour); param.Param.Add(min); } else { Logger.Warn("NotifyCreateChangeSceneCoroutine can't enter scene {0}", tbFuben.SceneId); yield break; } } } var msgChgScene = TeamServer.Instance.SceneAgent.SBChangeSceneByTeam(characters[0], sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30))); }
//开始创建副本 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); } } }