Exemplo n.º 1
0
 private void SyncUserObjectToOtherUsers(User user)
 {
     if (null != user)
     {
         EntityInfo          userInfo    = user.Info;
         Msg_RC_CreateNpc    bder        = DataSyncUtility.BuildCreateNpcMessage(userInfo);
         Msg_RC_SyncProperty msg         = DataSyncUtility.BuildSyncPropertyMessage(userInfo);
         RoomUserManager     roomUserMgr = GetRoomUserManager();
         if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene)
         {
             for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next)
             {
                 EntityInfo npc = linkNode.Value;
                 if (null != npc && npc != userInfo)
                 {
                     User other = npc.CustomData as User;
                     if (null != other)
                     {
                         other.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder);
                         other.SendMessage(RoomMessageDefine.Msg_RC_SyncProperty, msg);
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
        public static void Execute(object msg, User user)
        {
            Msg_CR_Enter enter_msg = msg as Msg_CR_Enter;

            if (enter_msg == null)
            {
                return;
            }
            LogSys.Log(LOG_TYPE.DEBUG, "user {0}({1},{2},{3}) enter.", user.RoleId, user.GetKey(), user.Guid, user.Name);
            user.UserControlState = (int)UserControlState.User;
            user.IsEntered        = true;

            RoomUserManager roomUserMgr = user.OwnRoomUserManager;

            if (null != roomUserMgr)
            {
                Scene scene = roomUserMgr.ActiveScene;
                if (null != scene)
                {
                    EntityInfo userInfo = user.Info;
                    if (null != userInfo)
                    {
                        if (scene.SceneState == SceneState.Running)
                        {
                            scene.SyncForNewUser(user);
                            scene.StorySystem.SendMessage("user_enter_scene", userInfo.GetId(), userInfo.GetUnitId(), userInfo.GetCampId(), userInfo.GetMovementStateInfo().PositionX, userInfo.GetMovementStateInfo().PositionZ);
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        private void TickPreloading()
        {
            long curTime = TimeUtility.GetLocalMilliseconds();

            if (m_LastPreloadingTickTime + c_PreloadingTickInterval < curTime)
            {
                m_LastPreloadingTickTime = curTime;

                bool haveUser = false;
                bool canStart = true;
                foreach (User us in m_RoomInfo.RoomUsers)
                {
                    if (us.IsEntered)
                    {
                        haveUser = true;
                    }
                }
                if (!haveUser)
                {
                    canStart = false;
                }

                if (canStart)
                {
                    LoadObjects();
                    RoomUserManager roomUserMgr = GetRoomUserManager();
                    if (null != roomUserMgr)
                    {
                        foreach (User us in m_RoomInfo.RoomUsers)
                        {
                            EnterScene(us);
                        }
                    }
                    //先让各客户端创建自己与场景相关信息
                    foreach (User us in m_RoomInfo.RoomUsers)
                    {
                        if (us.IsEntered)
                        {
                            //发玩家阵营给玩家
                            Msg_RC_CampChanged msg = new Msg_RC_CampChanged();
                            msg.obj_id  = 0;
                            msg.camp_id = us.LobbyUserData.Camp;
                            us.SendMessage(RoomMessageDefine.Msg_RC_CampChanged, msg);
                            //将场景里的对象发给玩家
                            SyncSceneObjectsToUser(us);
                        }
                    }
                    //给观察者发初始玩家与场景对象信息
                    foreach (Observer observer in m_RoomInfo.RoomObservers)
                    {
                        if (null != observer && !observer.IsIdle && observer.IsEntered)
                        {
                            SyncForNewObserver(observer);
                        }
                    }
                    m_SceneState = SceneState.Running;
                }
            }
        }
Exemplo n.º 4
0
        public Room()
        {
            m_Dispatcher         = new Dispatcher();
            m_DisconnectedUsers  = new List <User>();
            m_RequestDeleteUsers = new List <User>();
            m_CanCloseTime       = 0;

            m_RoomUserMgr = new RoomUserManager();
        }
Exemplo n.º 5
0
 public void SyncForNewUser(User user)
 {
     if (null != user)
     {
         EntityInfo      userInfo    = user.Info;
         RoomUserManager roomUserMgr = GetRoomUserManager();
         if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene)
         {
             //发阵营给自己
             Msg_RC_CampChanged msg = new Msg_RC_CampChanged();
             msg.obj_id  = 0;
             msg.camp_id = user.LobbyUserData.Camp;
             user.SendMessage(RoomMessageDefine.Msg_RC_CampChanged, msg);
             //同步场景数据给自己
             SyncSceneObjectsToUser(user);
             SyncUserObjectToOtherUsers(user);
         }
     }
 }
Exemplo n.º 6
0
 public void SyncForNewObserver(Observer observer)
 {
     if (null != observer)
     {
         RoomUserManager roomUserMgr = GetRoomUserManager();
         if (null != roomUserMgr && null != roomUserMgr.ActiveScene)
         {
             //同步场景数据给观察者
             for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstValue; null != linkNode; linkNode = linkNode.Next)
             {
                 EntityInfo npc = linkNode.Value;
                 if (null != npc)
                 {
                     Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc);
                     observer.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder);
                 }
             }
         }
     }
 }
Exemplo n.º 7
0
        private void SyncSceneObjectsToUser(User user)
        {
            if (null != user)
            {
                EntityInfo      userInfo    = user.Info;
                RoomUserManager roomUserMgr = GetRoomUserManager();
                if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene)
                {
                    for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next)
                    {
                        EntityInfo npc = linkNode.Value;
                        if (null != npc)
                        {
                            Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc);
                            user.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder);

                            Msg_RC_SyncProperty msg = DataSyncUtility.BuildSyncPropertyMessage(npc);
                            user.SendMessage(RoomMessageDefine.Msg_RC_SyncProperty, msg);
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
 public void SetRoomUserManager(RoomUserManager roomUserMgr)
 {
     m_RoomInfo = roomUserMgr;
 }