Exemple #1
0
        //开始创建副本
        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)));
        }
Exemple #2
0
        //开始创建副本
        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);
                }
            }
        }