Exemplo n.º 1
0
        //通知进入场景
        public void NotifyEnterScene(CharacterSceneInfo info, int changeType, SceneParam sp)
        {
            PlayerLog.WriteLog(888, "NotifyEnterScene characterId={0},SceneId={1},newScene={2}", info.CharacterId,
                               info.SceneInfo.SceneId, info.SceneInfo.SceneGuid);
            mLogger.Info("Enter Game {0} - NotifyEnterScene - 1 - {1}", info.CharacterId,
                         TimeManager.Timer.ElapsedMilliseconds);
            mLogger.Info("NotifyEnterScene {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint);

            var content =
                new __RPC_Scene_SSEnterScene_ARG_uint64_characterId_uint64_guid_uint64_applyGuid_int32_changeType_SceneParam_sceneParam__
                    ();

            content.CharacterId = info.CharacterId;
            content.Guid        = info.SceneInfo.SceneGuid;
            content.ChangeType  = changeType;
            content.SceneParam  = sp;
            var message = new ServiceDesc();

            message.FuncId      = 3055;
            message.ServiceType = (int)ServiceType.Scene;
            message.PacketId    = mBroker.GetUniquePacketId();
            message.Data        = ProtocolExtension.Serialize(content);
            message.Type        = (int)MessageType.SS;
            message.CharacterId = info.CharacterId;


            info.SceneInfo.Server.SendMessage(message);
        }
Exemplo n.º 2
0
    public void SetScenePosition(SceneBorder.BorderPosition borderPos)
    {
        GameObject SceneObject     = SceneManager.GetActiveScene().GetRootGameObjects()[0];
        GameObject PrevSceneObject = PrevActive.GetRootGameObjects()[0];
        SceneParam SceneParm       = SceneObject.GetComponent <SceneParam>();
        SceneParam PrevSceneParm   = PrevSceneObject.GetComponent <SceneParam>();

        switch (borderPos)
        {
        case SceneBorder.BorderPosition.top:
            SceneObject.transform.position = new Vector3(0, (-SceneParm.BottomBorder.transform.position.y + PrevSceneParm.TopBorder.transform.position.y), 0);
            break;

        case SceneBorder.BorderPosition.bottom:
            SceneObject.transform.position = new Vector3(0, -(SceneParm.TopBorder.transform.position.y - PrevSceneParm.BottomBorder.transform.position.y), 0);
            break;

        case SceneBorder.BorderPosition.right:
            SceneObject.transform.position = new Vector3((-SceneParm.LeftBorder.transform.position.x + PrevSceneParm.RightBorder.transform.position.x), 0, 0);
            break;

        case SceneBorder.BorderPosition.left:
            SceneObject.transform.position = new Vector3(-(SceneParm.RightBorder.transform.position.x - PrevSceneParm.LeftBorder.transform.position.x), 0, 0);
            break;
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// フェードシーンをロード
    /// </summary>
    public static void ChangeScene(Action cb = null)
    {
        var param = new SceneParam();

        param.cb = cb;

        AppSceneManager.Instance.LoadScene("MainMenuScene", false);
    }
Exemplo n.º 4
0
 public bool Init(LeaverScene _this, SceneParam param)
 {
     //Obstacle.Load();
     _this.Active         = false;
     _this.TableSceneData = Table.GetScene(_this.TypeId);
     //Param = param;
     return(true);
 }
Exemplo n.º 5
0
            public static SceneParam Create(string name, Action <int> callback = null)
            {
                SceneParam param = new SceneParam();

                param.SceneName    = name;
                param.LoadCallback = callback;
                return(param);
            }
Exemplo n.º 6
0
    public void LoadScene(string sceneName)
    {
        var param = new SceneParam();

        param.PutParam("loading_scene", sceneName);
        SceneFlowManager.PushCurrentScene();
        SceneFlowManager.LoadScene("Loading", sceneParam: param);
    }
Exemplo n.º 7
0
        public Scene CreateScene(SceneManager _this,
                                 int serverId,
                                 int sceneId,
                                 ulong regionId        = 0,
                                 SceneParam sceneParam = null)
        {
            Dictionary <int, Dictionary <ulong, Scene> > servers = null;

            if (!_this.ScenesDic.ContainsKey(serverId))
            {
                servers = new Dictionary <int, Dictionary <ulong, Scene> >();
                _this.ScenesDic.Add(serverId, servers);
            }
            else
            {
                servers = _this.ScenesDic[serverId];
            }

            Dictionary <ulong, Scene> scenes = null;

            if (!servers.ContainsKey(sceneId))
            {
                scenes = new Dictionary <ulong, Scene>();
                servers.Add(sceneId, scenes);
            }
            else
            {
                scenes = servers[sceneId];
            }

            //var scene = new Scene {TypeId = sceneId, ServerId = serverId, Guid = regionId};
            Scene scene;

            if (sceneId == 0)
            {
                scene = new LeaverScene();
                scene.Init(sceneParam);
            }
            else
            {
                scene = SceneRegister.CreateScene(sceneId, serverId, regionId);
                scene.Init(sceneParam);
            }


            scenes.Add(regionId, scene);
            _this.Scenes.Add(regionId, scene);
            try
            {
                scene.OnCreate();
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }

            return(scene);
        }
Exemplo n.º 8
0
        //desc.FuncId == 3002   此场景已经不存在
        public void NoHaveScene(ServerClient client, ServiceDesc desc)
        {
            var msg =
                ProtocolExtension.Deserialize <__RPC_Scene_NotifySceneNotExist_ARG_uint64_sceneId_uint64_characterId__>(
                    desc.Data);
            var characterId = msg.CharacterId;

            mLogger.Info("Enter Game {0} - NotifySceneNotExist - 1 - {1}", characterId,
                         TimeManager.Timer.ElapsedMilliseconds);

            var info = mBroker.GetCharacter(characterId);

            if (info == null)
            {
                return;
            }
            var serverId = info.SceneInfo.ServerId;
            var sceneId  = info.SceneInfo.SceneId;

            mLogger.Info("Enter Game {0} - NotifySceneNotExist - 2 - {1}", characterId,
                         TimeManager.Timer.ElapsedMilliseconds);
            RemoveScene(msg.SceneId);
            mLogger.Info("Enter Game {0} - NotifySceneNotExist - 3 - {1}", characterId,
                         TimeManager.Timer.ElapsedMilliseconds);

            var newScene = SelectServerForScene(serverId, sceneId, msg.CharacterId);

            if (newScene == null)
            {
                mLogger.Info("Enter Game {0} - NotifySceneNotExist - 4 - {1}", characterId,
                             TimeManager.Timer.ElapsedMilliseconds);
                newScene = CreateNewSceneInfo(serverId, sceneId, 0);
                newScene.PushCharacter(msg.CharacterId);
                //DebugCounter[1]++;
                var param = new SceneParam();
                param.ObjId = desc.CharacterId;

                CreateNewScene(newScene, param);
            }

            if (newScene.Status == SceneStatus.ReadyToEnter)
            {
                mBroker.ChangeScene(msg.CharacterId, newScene);
                mLogger.Info("Enter Game {0} - NotifySceneNotExist - 5 - {1}", characterId,
                             TimeManager.Timer.ElapsedMilliseconds);
            }
            else
            {
                newScene.WaitingActions.Add(() =>
                {
                    mLogger.Info("Enter Game {0} - NotifySceneNotExist - 6 - {1}", characterId,
                                 TimeManager.Timer.ElapsedMilliseconds);
                    mBroker.ChangeScene(msg.CharacterId, newScene);
                });
            }
        }
Exemplo n.º 9
0
    /// <summary>
    /// シーン作成
    /// </summary>
    /// <typeparam name="Type"></typeparam>
    /// <returns></returns>
    public Type CreateScene <Type>(SceneParam param) where Type : SceneBase
    {
        Type newScene = gameObject.AddComponent <Type>();

        newScene.SceneParam       = param;
        newScene.GameManager      = this;
        newScene.GridGameObject   = grid;
        newScene.CanvasGameObject = canvas;
        newScene.FadeManager      = fadeManager;
        return(newScene);
    }
Exemplo n.º 10
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)));
        }
Exemplo n.º 11
0
    public void LoadPreviousScene()
    {
        var preScene = SceneFlowManager.PopPreviousScene();

        if (preScene == string.Empty)
        {
            Debug.Log("No previous scene");
            return;
        }

        var param = new SceneParam();

        param.PutParam("loading_scene", preScene);

        SceneFlowManager.LoadScene("Loading", sceneParam: param);
    }
Exemplo n.º 12
0
        public IEnumerator EnterFight(Coroutine coroutine, ulong characterId, int allianceId)
        {
            // 进入副本
            var stage = UnionBattleManager.mDBData.Stage;

            if (stage < 0 || stage >= UnionBattleManager.BreakoutFightTime.Count)
            {
                yield break;
            }

            var fighTime = UnionBattleManager.BreakoutFightTime[stage];

            var param = new SceneParam();

            param.Param.Add(fighTime.Hour);
            param.Param.Add(fighTime.Minute);
            var msg = TeamServer.Instance.SceneAgent.AskEnterDungeon(characterId, -1, 2200, 123123, param);

            yield return(msg.SendAndWaitUntilDone(coroutine));
        }
Exemplo n.º 13
0
        //创造新场景
        public void CreateNewScene(SceneInfo sceneInfo, SceneParam param = null)
        {
            var content =
                new __RPC_Scene_BSCreateScene_ARG_int32_serverId_int32_sceneId_uint64_guid_SceneParam_sceneParam__();

            content.ServerId   = sceneInfo.ServerId;
            content.SceneId    = sceneInfo.SceneId;
            content.Guid       = sceneInfo.SceneGuid;
            content.SceneParam = param ?? new SceneParam();

            var message = new ServiceDesc();

            message.FuncId      = 3010;
            message.ServiceType = (int)ServiceType.Scene;
            message.PacketId    = mBroker.GetUniquePacketId();
            message.Data        = ProtocolExtension.Serialize(content);
            message.Type        = (int)MessageType.BS;

            mLogger.Info("Notify Scene server CreateNewScene {0}, {1}, {2}", sceneInfo.ServerId, sceneInfo.SceneId,
                         sceneInfo.SceneGuid);

            ConcurrentDictionary <ulong, SceneInfo> infos;
            var serverSceneId = CalcServerSceneId(sceneInfo.ServerId, sceneInfo.SceneId);

            if (mFromServerIdAndSceneId2Guid.TryGetValue(serverSceneId, out infos))
            {
                infos.TryAdd(sceneInfo.SceneGuid, sceneInfo);
            }
            else
            {
                var temp = new ConcurrentDictionary <ulong, SceneInfo>();
                temp.TryAdd(sceneInfo.SceneGuid, sceneInfo);
                mFromServerIdAndSceneId2Guid.TryAdd(serverSceneId, temp);
            }

            mBroker.DebugCounter[17]++;
            mFromSceneGuid2Server.TryAdd(sceneInfo.SceneGuid, sceneInfo);

            SceneServerManager.CreateScene(sceneInfo.Server, 1);
            var act = new Action <bool, ServiceDesc>((b, item) =>
            {
                if (b)
                {
                    if (item.Error == 0)
                    {
                        mLogger.Info("Scene server CreateNewScene replied {0}, {1}, {2}", sceneInfo.ServerId,
                                     sceneInfo.SceneId, sceneInfo.SceneGuid);

                        sceneInfo.Status = SceneStatus.ReadyToEnter;

                        foreach (var action in sceneInfo.WaitingActions)
                        {
                            try
                            {
                                action();
                            }
                            catch (Exception ex)
                            {
                                mLogger.Error(ex, "Create new scene callback error.");
                            }
                        }

                        sceneInfo.WaitingActions.Clear();
                    }
                    else
                    {
                        mLogger.Error("CreateNewScene failed {0}....", item.Error);
                    }
                }
                else
                {
                    mLogger.Error("CreateNewScene timeout....");
                }
            });

            mBroker.RegisterCallback(message.PacketId, act);

            sceneInfo.Server.SendMessage(message);
        }
Exemplo n.º 14
0
        public IEnumerator PlayerEnter(Coroutine co,
                                       AllianceWar _this,
                                       ulong characterId,
                                       int allianceId,
                                       AsyncReturnValue <ErrorCodes> err)
        {
            err.Value = ErrorCodes.OK;
            if (!_this.AllianceIds.Contains(allianceId))
            {
                Logger.Error("In CheckPlayerEnter().!AllianceIds.Contains(allianceId), characterId = {0}", characterId);
                err.Value = ErrorCodes.Error_AllianceWarQualification;
                yield break;
            }
            if (_this.GetStatus() < (int)eAllianceWarState.WaitStart)
            {
                err.Value = ErrorCodes.Error_FubenNotInOpenTime;
                yield break;
            }

            //锁,避免多进入,且在等待进入的人数不足50时,不锁
            var count = _this.AlliancePlayers[allianceId].Count;

            while (count + _this.EnterPlayerCount[allianceId] >= Constants.AllianceMaxPlayer)
            {
                if (count >= Constants.AllianceMaxPlayer)
                {
                    err.Value = ErrorCodes.Error_AllianceWarFull;
                    yield break;
                }
                yield return(TeamServer.Instance.ServerControl.Wait(co, TimeSpan.FromMilliseconds(50)));

                count = _this.AlliancePlayers[allianceId].Count;
            }

            ++_this.EnterPlayerCount[allianceId];

            var sceneId    = -1;
            var sceneParam = new SceneParam();

            if (_this.BattleFieldGuid == 0)
            {
                _this.BattleFieldGuid = ulong.MaxValue;
                sceneId = Constants.AllianceWarSceneId;
                sceneParam.Param.Add(_this.StartHour);
                sceneParam.Param.Add(_this.StartMin);
                sceneParam.Param.AddRange(_this.AllianceIds);
                while (sceneParam.Param.Count < 5)
                {
                    sceneParam.Param.Add(-1);
                }
            }
            else if (_this.BattleFieldGuid == ulong.MaxValue)
            {
                do
                {
                    yield return(TeamServer.Instance.ServerControl.Wait(co, TimeSpan.FromMilliseconds(50)));
                } while (_this.BattleFieldGuid == ulong.MaxValue);
            }

            //帮战根据合服ID进行
            var serverLogicId = SceneExtension.GetServerLogicId(_this.ServerId);
            var msg           = TeamServer.Instance.SceneAgent.SBChangeScene(characterId, characterId, serverLogicId, sceneId,
                                                                             _this.BattleFieldGuid, (int)eScnenChangeType.EnterDungeon, sceneParam);

            yield return(msg.SendAndWaitUntilDone(co));

            if (msg.State != MessageState.Reply)
            {
                Logger.Error("In PlayerEnterCoroutine().SBChangeScene not replied!");
                err.Value = ErrorCodes.Unknow;
                yield break;
            }
            if (msg.ErrorCode != (int)ErrorCodes.OK)
            {
                Logger.Error("In PlayerEnterCoroutine().SBChangeScene error = {0}", msg.ErrorCode);
                err.Value = (ErrorCodes)msg.ErrorCode;
                yield break;
            }
            if (_this.BattleFieldGuid == ulong.MaxValue)
            {
                _this.BattleFieldGuid = msg.Response;
            }

            PlayerLog.WriteLog((ulong)LogType.AllianceWar,
                               "In PlayerEnter() player entered, characterId = {0}, allianceId = {1}", characterId, allianceId);
            err.Value = ErrorCodes.OK;
        }
Exemplo n.º 15
0
 public override bool Init(SceneParam param)
 {
     return(mImpl.Init(this, param));
 }
Exemplo n.º 16
0
    // Use this for initialization
    void Start()
    {
        var argument = AppSceneManager.Instance.GetArgument();

        _sceneParam = argument as SceneParam;
    }
Exemplo n.º 17
0
        //desc.FuncId == 3069  一堆人同时进一个场景
        private void ChangeSceneByTeam(ServerClient client, ServiceDesc desc)
        {
            var msg =
                ProtocolExtension.Deserialize <__RPC_Scene_SBChangeSceneByTeam_ARG_ChangeSceneInfo_changeSceneData__>(
                    desc.Data);

            var sceneInfo = mSceneManager.SelectOldScene(msg.ChangeSceneData.SceneGuid, msg.ChangeSceneData.ServerId,
                                                         msg.ChangeSceneData.SceneId, 0, msg.ChangeSceneData.CheckFull);

            PlayerLog.WriteLog(888, "ChangeSceneByTeam characterId={0},ServerId={1},SceneId={2},SceneGuid={3}",
                               msg.ChangeSceneData.Guids.GetDataString(), msg.ChangeSceneData.ServerId, msg.ChangeSceneData.SceneId,
                               msg.ChangeSceneData.SceneGuid);
            // 如果场景不存在,不用造新的
            if (sceneInfo == null && msg.ChangeSceneData.SceneId == -1)
            {
                PlayerLog.WriteLog(888, "ChangeSceneByTeam not find and not new,guids={0}",
                                   msg.ChangeSceneData.Guids.GetDataString());
                desc.Data = ProtocolExtension.Serialize(new __RPC_Scene_SBChangeSceneByTeam_RET_uint64__
                {
                    ReturnValue = 0
                });
                client.SendMessage(desc);
                return;
            }

            var param = msg.ChangeSceneData.Pos;

            if (param == null)
            {
                param = new SceneParam();
            }

            param.ObjId = desc.CharacterId;

            if (sceneInfo == null)
            {
                sceneInfo = mSceneManager.CreateNewSceneInfo(msg.ChangeSceneData.ServerId, msg.ChangeSceneData.SceneId,
                                                             msg.ChangeSceneData.SceneGuid);
                mSceneManager.CreateNewScene(sceneInfo, param);
                //sceneInfo.PushCharacter(desc.CharacterId);
            }

            desc.Data =
                ProtocolExtension.Serialize(new __RPC_Scene_SBChangeSceneByTeam_RET_uint64__
            {
                ReturnValue = sceneInfo.SceneGuid
            });
            client.SendMessage(desc);

            var changeSceneInfos = new List <ChangeSceneInfo>();

            foreach (var characterId in msg.ChangeSceneData.Guids)
            {
                sceneInfo.CharacterIds.Add(characterId);
                var info = GetCharacter(characterId);
                if (info == null)
                {
                    continue;
                }
                var oldSceneInfo = info.SceneInfo;
                if (oldSceneInfo != sceneInfo)
                {
                    oldSceneInfo.CharacterIds.Remove(characterId);
                    info.SceneInfo = sceneInfo;
                }

                changeSceneInfos.Add(new ChangeSceneInfo
                {
                    Info         = info,
                    OldSceneInfo = oldSceneInfo,
                    NewSceneInfo = sceneInfo
                });
            }

            var type = msg.ChangeSceneData.Type;

            var act = new Action(() =>
            {
                PlayerLog.WriteLog(888, "ChangeSceneByTeam not find! new scene over guids={0}",
                                   msg.ChangeSceneData.Guids.GetDataString());
                foreach (var changeSceneInfo in changeSceneInfos)
                {
                    Logger.Info("Enter Game {0} {1} {2} - ChangeSceneByTeam - 2 - {3}", changeSceneInfo.Info.CharacterId,
                                changeSceneInfo.OldSceneInfo.SceneGuid, changeSceneInfo.NewSceneInfo.SceneGuid,
                                TimeManager.Timer.ElapsedMilliseconds);
                    ChangeSceneOver(changeSceneInfo.Info, changeSceneInfo.OldSceneInfo, changeSceneInfo.NewSceneInfo,
                                    b => { mSceneManager.NotifyEnterScene(changeSceneInfo.Info, type, param); });
                }
            });

            if (sceneInfo.Status == SceneStatus.ReadyToEnter)
            {
                act();
            }
            else
            {
                sceneInfo.WaitingActions.Add(act);
            }
        }
Exemplo n.º 18
0
 public Scene CreateScene(int serverId, int sceneId, ulong regionId = 0, SceneParam sceneParam = null)
 {
     return(mImpl.CreateScene(this, serverId, sceneId, regionId, sceneParam));
 }