Example #1
0
        /// <summary>
        /// Tries to remove this session's user from it's current room instance.
        /// </summary>
        public void leaveRoom(bool cleanupReactors)
        {
            this.abortTrade();

            if (this.waitingFlat > 0)
            {
                if (Engine.Game.Rooms.roomInstanceRunning(this.waitingFlat))
                {
                    Engine.Game.Rooms.getRoomInstance(this.waitingFlat).unRegisterSession(this.ID);
                }
            }
            else
            {
                if (this.inRoom)
                {
                    this.roomInstance.unRegisterSession(this.ID);
                }
            }

            if (cleanupReactors) // Cleanup!
            {
                gameConnection.reactorHandler.unRegister(new flatReactor().GetType());
                gameConnection.reactorHandler.unRegister(new roomReactor().GetType());
            }

            this.roomInstance = null;
            this.roomID       = 0;
            if (this.authenticatedTeleporter == 0)
            {
                this.authenticatedFlat = 0;
            }
            this.waitingFlat = 0;
        }
Example #2
0
        /// <summary>
        /// Tries to add this user to the room instance with a given ID.
        /// </summary>
        /// <param name="roomID">The database ID of the room to try to enter.</param>
        private void goToRoom(int roomID)
        {
            try
            {
                roomInstance Instance = Engine.Game.Rooms.getRoomInstance(roomID);
                if (Instance.Information == null || !Instance.userRoleHasAccess(Session.User.Role)) // Instance not OK for user
                {
                    return;
                }

                if (Instance.isFull)                                                                                            // Room is full
                {
                    if (!Session.User.hasFuseRight("fuse_enter_full_rooms") && Session.User.ID != Instance.Information.ownerID) // User has no FUSE right to enter full rooms and user is not the room owner
                    {
                        Response.Initialize(224);                                                                               // "C`"
                        Response.appendWired(1);                                                                                // 'User flat full'
                        sendResponse();
                        return;
                    }
                }

                Instance.registerSession(this.Session.ID);
                Session.roomInstance = Instance;

                Response.Initialize(166); // "Bf"
                Response.Append("interstitial advertisement goes here");
                sendResponse();

                Response.Initialize(69); // "AE"
                Response.Append(Instance.Information.modelType);
                Response.Append(" ");
                Response.Append(Instance.roomID);
                sendResponse();

                if (Instance.Information.isUserFlat)
                {
                    Response.Initialize(46); // "@n"
                    Response.Append("wallpaper/");
                    Response.Append(Instance.Information.Wallpaper);
                    sendResponse();

                    Response.Initialize(46); // "@n"
                    Response.Append("floor/");
                    Response.Append(Instance.Information.Floor);
                    sendResponse();

                    Session.gameConnection.reactorHandler.Register(new flatReactor());
                }
                else
                {
                    Session.gameConnection.reactorHandler.Register(new roomReactor());
                }
            }
            catch { }
        }
Example #3
0
        /// <summary>
        /// 54 - "@v"
        /// </summary>
        public void GOVIADOOR()
        {
            string[] Data   = Request.Content.Split('/');
            int      roomID = int.Parse(Data[0]);
            int      itemID = int.Parse(Data[1]);

            if (Session.authenticatedFlat == roomID && Session.authenticatedTeleporter == itemID) // Authenticated for flat and teleporter item
            {
                roomInstance pInstance = Engine.Game.Rooms.getRoomInstance(roomID);
                if (pInstance != null)
                {
                    pInstance.registerSession(Session.ID);
                    Response.Initialize(19); // "@S"
                    sendResponse();
                }
            }
        }
Example #4
0
        /// <summary>
        /// 2 - "@B"
        /// </summary>
        public void ROOM_DIRECTORY()
        {
            if (Session.inRoom)
            {
                Session.leaveRoom(true);
            }

            bool publicSpace = (Request.Content[0] == 'A'); // Base64 A = 1, @ = 0
            int  roomID      = wireEncoding.Decode(Request.Content.Substring(1));

            Response.Initialize(19); // "@S"
            sendResponse();

            if (publicSpace)// No flat checks
            {
                roomInstance pInstance = ObjectTree.Game.Rooms.getRoomInstance(roomID);
                if (pInstance != null && !pInstance.Information.isUserFlat)
                {
                    goToRoom(roomID);
                }
            }
        }
Example #5
0
        /// <summary>
        /// 57 - "@y"
        /// </summary>
        public void TRYFLAT()
        {
            int    roomID        = 0;
            string givenPassword = null;

            if (Request.Content.Contains("/"))
            {
                string[] Details = Request.Content.Split('/');
                roomID        = int.Parse(Details[0]);
                givenPassword = Details[1];
            }
            else
            {
                roomID = int.Parse(Request.Content);
            }

            roomInformation Room = Engine.Game.Rooms.getRoomInformation(roomID);

            if (Room == null)
            {
                return;
            }

            if (Session.authenticatedTeleporter > 0)
            {
                if (roomID != Session.authenticatedFlat)
                {
                    return; // Attempting to enter different flat via authenticated teleporter
                }
            }
            else
            {
                if (Room.accessType != roomAccessType.open && Room.ownerID != Session.User.ID && !Session.User.hasFuseRight("fuse_enter_locked_rooms")) // Can't override checks
                {
                    if (Room.accessType == roomAccessType.password)                                                                                     // Passworded room
                    {
                        if (givenPassword != Room.Password)                                                                                             // Incorrect password given
                        {
                            Session.gameConnection.sendLocalizedError("Incorrect flat password");
                            return;
                        }
                    }
                    else // Doorbell
                    {
                        int messageID = 131; // "BC" (no answer)
                        if (Engine.Game.Rooms.roomInstanceRunning(roomID))
                        {
                            roomInstance Instance = Engine.Game.Rooms.getRoomInstance(roomID);
                            if (Instance.castDoorbellUser(Session.User.Username))
                            {
                                messageID = 91; // "A["
                                Instance.registerSession(Session.ID);
                                Session.waitingFlat = roomID;
                            }
                        }

                        Response.Initialize(messageID);
                        sendResponse();
                        return; // Wait for the eventual response
                    }
                }
                Session.authenticatedFlat = roomID;
            }

            Response.Initialize(41); // "@i"
            sendResponse();
        }