Пример #1
0
        //158 - "SETBADGE": "B^"
        public void Listener158()
        {
            int    badgeLen = Base64Encoding.DecodeInt(mPacketBody.Substring(0, 2));
            string badge    = mPacketBody.Substring(2, badgeLen);

            if (ArgumentEncoding.decodeInt(mPacketBody.Substring(mPacketBody.Length - 1, 1)) == 1)
            {
                if (mUserInfo.Badges.Contains(badge))
                {
                    mUserInfo.sBadge = badge;
                }
            }
            else
            {
                if (mUserInfo.sBadge == badge)
                {
                    mUserInfo.sBadge = "";
                }
            }

            InstanceManager.Game.Users.SetBadge(mUserInfo.userId, mUserInfo.sBadge);

            mUserInfo = InstanceManager.Game.Users.GetUser(mUserInfo.userId);

            mMessage.Init(228); //Cd
            mMessage.appendArgumentInt(mRoomInstance.GetUser(mSessionID).RoomUserID);
            mMessage.appendString(mUserInfo.sBadge);
            mMessage.appendChar(2);
            mRoomInstance.RoomBroadcast(mMessage);
        }
Пример #2
0
        private string BuildSubCategoryList(RoomCategory category, int userRole)
        {
            List <RoomInfo> rooms = InstanceManager.Game.Rooms.GetRoomListByCategory(category.CategoryID);
            StringBuilder   sb    = new StringBuilder();

            if (category.IsVisible || (category.SystemCategory && InstanceManager.Game.Roles.HasRight(userRole, "fuse_see_system_categories")))

            {
                sb.Append(ArgumentEncoding.encodeInt(category.CategoryID));
                sb.Append(ArgumentEncoding.encodeInt(0));
                sb.Append(category.CategoryName);
                sb.Append(Convert.ToChar(2));

                int maxUsers     = 0;
                int currentUsers = 0;

                if (rooms.Count > 0)
                {
                    foreach (RoomInfo room in rooms)
                    {
                        maxUsers     += room.MaxUsers;
                        currentUsers += room.CurrentUsers;
                    }
                }
                sb.Append(ArgumentEncoding.encodeInt(currentUsers));
                sb.Append(ArgumentEncoding.encodeInt(maxUsers));
                sb.Append(ArgumentEncoding.encodeInt(category.ParentCategory));
            }
            return(sb.ToString());
        }
Пример #3
0
        public void RoomTalkBroadcast(int sourceX, int sourceY, string chat, int roomUser)
        {
            Logging.LogEvent("Chatting to room " + mRoomID.ToString() + ": " + chat, Logging.LogLevel.Debug);
            foreach (int sessionId in mMemberSessions.Keys)
            {
                if (mRoomUsers.ContainsKey(sessionId))
                {
                    string currentChat = chat;
                    int    xDistance   = Math.Abs(sourceX - mRoomUsers[sessionId].CurrentX);
                    int    yDistance   = Math.Abs(sourceY - mRoomUsers[sessionId].CurrentY);

                    if (xDistance >= 6 || yDistance >= 6) //Garble text
                    {
                        for (int i = 0; i < chat.Length; i++)
                        {
                            if (SpecialMath.RandomNumber(0, 10) > 5 && chat[i] != ' ')
                            {
                                currentChat = currentChat.Replace(chat[i], '.');
                            }
                        }
                    }

                    if (xDistance < 9 && yDistance < 9) // User can at least partially hear
                    {
                        mMessage.Init(24);              //@X
                        mMessage.appendString(ArgumentEncoding.encodeInt(roomUser));
                        mMessage.appendString(currentChat);
                        mMessage.appendChar(2);
                        InstanceManager.Sessions.GetSession(sessionId).SendMessage(mMessage.ToString(), false);
                    }
                }
            }
        }
Пример #4
0
        public string BuildPrivateCategoryResponse()
        {
            StringBuilder sb       = new StringBuilder();
            int           catCount = 0;

            List <RoomCategory> subcategories = InstanceManager.Game.Rooms.GetSubCategoryList(4);

            if (subcategories.Count > 0)
            {
                foreach (RoomCategory subcat in subcategories)
                {
                    if (subcat.PlayerCategory)
                    {
                        catCount++;
                        sb.Append(ArgumentEncoding.encodeInt(subcat.CategoryID));
                        sb.Append(subcat.CategoryName);
                        sb.Append(Convert.ToChar(2));
                    }
                }
            }

            StringBuilder result = new StringBuilder(ArgumentEncoding.encodeInt(catCount));

            result.Append(sb.ToString());
            return(result.ToString());
        }
        //37 - "MESSENGER_ACCEPTBUDDY": "@e"
        public void Listener37()
        {
            int userid = ArgumentEncoding.decodeInt(mPacketBody);

            InstanceManager.Game.Messenger.AcceptBuddy(mUserInfo.userId, userid);
            Listener15();
        }
        //198 - "CHANGECALLCATEGORY": "CF"
        public void Listener198()
        {
            string payload  = FuseMessage.getArgument(1, mPacketBody);
            int    callId   = ArgumentEncoding.decodeInt(payload);
            int    priority = ArgumentEncoding.decodeInt(mPacketBody.Substring(payload.Length + 2));

            InstanceManager.Game.Moderation.UpgradeCFH(callId, priority, mUserInfo);
        }
        //199 - "MESSAGETOCALLER": "CG"
        public void Listener199()
        {
            int    callId  = ArgumentEncoding.decodeInt(FuseMessage.getArgument(1, mPacketBody));
            string message = FuseMessage.getArgument(2, mPacketBody);

            message = SpecialFiltering.FilterChars("2,9", message);
            InstanceManager.Game.Moderation.ReplyCallForHelp(callId, message, mUserInfo);
        }
Пример #8
0
        //155 - "REMOVEALLRIGHTS": "B["
        public void Listener155()
        {
            int      roomId = ArgumentEncoding.decodeInt(mPacketBody);
            RoomInfo info   = InstanceManager.Game.Rooms.GetRoom(roomId);

            if (mUserInfo.userId == info.RoomOwner)
            {
                InstanceManager.Game.Rooms.DeleteAllRights(roomId);
            }
        }
Пример #9
0
 private void btnArgEncode_Click(object sender, EventArgs e)
 {
     try
     {
         txtArgOutput.Text = ArgumentEncoding.encodeInt(int.Parse(txtArgInput.Text)).ToString();
     }
     catch
     {
         MessageBox.Show("Invalid input.");
     }
 }
Пример #10
0
        //40 - "MESSENGER_REMOVEBUDDY": "@h"
        public void Listener40()
        {
            int userid = ArgumentEncoding.decodeInt(mPacketBody.Substring(1));

            InstanceManager.Game.Messenger.DeleteBuddy(mUserInfo.userId, userid);

            mMessage.Init(138); //BJ
            mMessage.appendArgumentInt(1);
            mMessage.appendArgumentInt(userid);
            SendMessage(mMessage);
        }
Пример #11
0
        //150 - NAVIGATE": "BV"
        public void Listener150()
        {
            int    hideFull = ArgumentEncoding.decodeInt(mPacketBody.Substring(0, 1));
            string navId    = mPacketBody.Substring(1);

            navId = navId.Substring(0, navId.Length - 1);
            int navCat = ArgumentEncoding.decodeInt(navId);

            mMessage.Init(220); //C\
            mMessage.appendString(InstanceManager.Game.Navigator.GetNavigatorResponse(navCat, hideFull, mUserInfo));
            SendMessage(mMessage);
        }
Пример #12
0
        private string BuildRoomResponse(RoomInfo room, UserInfo user, int hideFull)
        {
            int categoryType = InstanceManager.Game.Rooms.GetCategory(room.RoomCategory).RoomCategoryType;

            StringBuilder sb = new StringBuilder();

            if (hideFull == 1 && room.CurrentUsers >= room.MaxUsers)
            {
                return("");
            }

            if (categoryType == 2) // Guest
            {
                sb.Append(ArgumentEncoding.encodeInt(room.RoomID));
                sb.Append(room.RoomName);
                sb.Append(Convert.ToChar(2));
                if (room.ShowOwner == 1 || InstanceManager.Game.Roles.HasRight(user.iRole, "fuse_see_all_roomowners"))
                {
                    sb.Append(InstanceManager.Game.Users.GetUser(room.RoomOwner).sUsername);
                }
                else
                {
                    sb.Append("-");
                }
                sb.Append(Convert.ToChar(2));
                sb.Append(room.RoomStatus);
                sb.Append(Convert.ToChar(2));
                sb.Append(ArgumentEncoding.encodeInt(room.CurrentUsers));
                sb.Append(ArgumentEncoding.encodeInt(room.MaxUsers));
                sb.Append(room.RoomDescription);
                sb.Append(Convert.ToChar(2));
            }

            if (categoryType == 0) //Public
            {
                sb.Append(ArgumentEncoding.encodeInt(room.RoomID));
                sb.Append(ArgumentEncoding.encodeInt(1));
                sb.Append(room.RoomName);
                sb.Append(Convert.ToChar(2));
                sb.Append(ArgumentEncoding.encodeInt(room.CurrentUsers));
                sb.Append(ArgumentEncoding.encodeInt(room.MaxUsers));
                sb.Append(ArgumentEncoding.encodeInt(room.RoomCategory));
                sb.Append(room.RoomDescription);
                sb.Append(Convert.ToChar(2));
                sb.Append(ArgumentEncoding.encodeInt(room.RoomID));
                sb.Append(ArgumentEncoding.encodeInt(0));
                sb.Append(room.CCTs);
                sb.Append(Convert.ToChar(2));
                sb.Append(ArgumentEncoding.encodeInt(0));
                sb.Append(ArgumentEncoding.encodeInt(1));
            }
            return(sb.ToString());
        }
Пример #13
0
        //152 - "GETFLATCAT": "BX"
        public void Listener152()
        {
            int      roomId = ArgumentEncoding.decodeInt(mPacketBody);
            RoomInfo info   = InstanceManager.Game.Rooms.GetRoom(roomId);

            if (info != null)
            {
                mMessage.Init(222); //C^
                mMessage.appendString(ArgumentEncoding.encodeInt(info.RoomID));
                mMessage.appendString(ArgumentEncoding.encodeInt(info.RoomCategory));
                SendMessage(mMessage);
            }
        }
Пример #14
0
        //38 - "MESSENGER_DECLINEBUDDY": "@f"
        public void Listener38()
        {
            if (ArgumentEncoding.decodeInt(mPacketBody.Substring(1)) == 0)
            {
                InstanceManager.Game.Messenger.RejectAllBuddys(mUserInfo.userId);
            }
            else
            {
                int userid = ArgumentEncoding.decodeInt(mPacketBody.Substring(1));

                InstanceManager.Game.Messenger.RejectBuddy(mUserInfo.userId, userid);
            }
        }
Пример #15
0
        //154 - "GETSPACENODEUSERS": "BZ"
        public void Listener154()
        {
            int    roomId  = ArgumentEncoding.decodeInt(mPacketBody);
            string payload = "";

            if (InstanceManager.Game.Rooms.InstanceExists(roomId))
            {
                payload = InstanceManager.Game.Rooms.GetRoomInstance(roomId).UserList;
            }

            mMessage.Init(223); //C_
            mMessage.appendString(payload);
            SendMessage(mMessage);
        }
Пример #16
0
        //153 - "SETFLATCAT": "BY"
        public void Listener153()
        {
            int          roomId = ArgumentEncoding.decodeInt(mPacketBody);
            int          catId  = ArgumentEncoding.decodeInt(mPacketBody.Substring(ArgumentEncoding.getLength(roomId)) + 1);
            RoomInfo     info   = InstanceManager.Game.Rooms.GetRoom(roomId);
            RoomCategory cat    = InstanceManager.Game.Rooms.GetCategory(catId);

            if (info != null && cat != null)
            {
                if (cat.PlayerCategory)
                {
                    info.RoomCategory = catId;
                    InstanceManager.Game.Rooms.UpdateRoom(info);
                }
            }
        }
Пример #17
0
        public string BuildFloorFurniList()
        {
            int           furniCount = 0;
            StringBuilder sb         = new StringBuilder();

            foreach (FurniInfo info in mFloorFurni)
            {
                if (!info.PublicFurni && !info.Flags.InvisibleToClient)
                {
                    furniCount++;
                    sb.Append(ProcessFloorFurniDefinition(info));
                }
            }

            return(ArgumentEncoding.encodeInt(furniCount) + sb.ToString());
        }
Пример #18
0
        //18 - "ADD_FAVORITE_ROOM": "@S"
        public void Listener19()
        {
            int        roomId   = ArgumentEncoding.decodeInt(mPacketBody.Substring(1));
            List <int> favRooms = InstanceManager.Game.Users.GetFavouriteRooms(mUserInfo.userId);

            if (favRooms.Count < int.Parse(Users.UserSettings.MaxFavouriteRooms))
            {
                if (!favRooms.Contains(roomId))
                {
                    InstanceManager.Game.Users.AddFavouriteRoom(mUserInfo.userId, roomId);
                }
            }
            else
            {
                ReportError("nav_error_toomanyfavrooms", false);
            }
        }
Пример #19
0
        //55 - "SHOUT": "@w"
        public void Listener55()
        {
            string message = FuseMessage.getArgument(1, mPacketBody);

            InstanceManager.Game.Misc.ChatFilter.FilterText(ref message, mSessionID, mRoomInstance.RoomInfo.RoomID, false, "shout");

            if (message != null && !mRoomInstance.GetUser(mSessionID).SpecialStates.ContainsKey("mute"))
            {
                ApplyEmotes(message);
                mMessage.Init(26); //@Z
                mMessage.appendString(ArgumentEncoding.encodeInt(mRoomInstance.GetUser(mSessionID).RoomUserID));
                mMessage.appendString(message);
                mMessage.appendChar(2);
                mRoomInstance.RoomBroadcast(mMessage);
                mRoomInstance.MakeTalk(mSessionID, message);
            }
        }
Пример #20
0
 private void WhisperResponse(string response, long sessionid)
 {
     if (sessionid > 0)
     {
         int roomId = InstanceManager.Sessions.GetSession(sessionid).mRoomID;
         if (roomId > 0)
         {
             int           roomUser = InstanceManager.Game.Rooms.GetRoomInstance(roomId).GetUser(sessionid).RoomUserID;
             ClientMessage mMessage = new ClientMessage();
             mMessage.Init(25); //@Y
             mMessage.appendString(ArgumentEncoding.encodeInt(roomUser));
             mMessage.appendString(response);
             mMessage.appendChar(2);
             InstanceManager.Game.Rooms.GetRoomInstance(roomId).SendMessage(mMessage, sessionid);
         }
     }
 }
Пример #21
0
        private string BuildCategoryResponse(RoomCategory category, int hideFull, int roomCount)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(ArgumentEncoding.encodeInt(hideFull));
            sb.Append(ArgumentEncoding.encodeInt(category.CategoryID));
            sb.Append(ArgumentEncoding.encodeInt(category.RoomCategoryType));
            sb.Append(category.CategoryName);     // Name
            sb.Append(Convert.ToChar(2));
            sb.Append(ArgumentEncoding.encodeInt(0));
            sb.Append(ArgumentEncoding.encodeInt(10000));
            sb.Append(ArgumentEncoding.encodeInt(category.ParentCategory));
            if (category.RoomCategoryType == 2)     //Guest
            {
                sb.Append(ArgumentEncoding.encodeInt(roomCount));
            }
            return(sb.ToString());
        }
Пример #22
0
        private void DoBan()
        {
            string banReason = FuseMessage.getArgument(1, mPayload);
            string banExtra  = FuseMessage.getArgument(2, mPayload);
            string banUser   = FuseMessage.getArgument(3, mPayload);
            string banLast   = mPayload.Substring(FuseMessage.getArgumentEnd(3, mPayload));

            int  banHours   = ArgumentEncoding.decodeInt(banLast);
            bool banIp      = ArgumentEncoding.decodeInt(banLast.Substring(ArgumentEncoding.getLength(banHours) + 1)) > 0;
            bool banMachine = ArgumentEncoding.decodeInt(banLast.Substring(ArgumentEncoding.getLength(banHours))) > 0;

            long targetSession = InstanceManager.Sessions.GetSessionFromUser(banUser);

            if (targetSession != -1)
            {
                UserInfo user = InstanceManager.Sessions.GetSession(targetSession).mUserInfo;
                InstanceManager.Game.Moderation.ModeratorBan(null, user.userId, mUserInfo.userId, banReason, banHours, targetSession, mSessionID, banMachine, banIp, banExtra);
            }
        }
Пример #23
0
        public string GetFavouriteSearchResult(int userId, int roleId)
        {
            List <int> favouriteRooms = InstanceManager.Game.Users.GetFavouriteRooms(userId);
            UserInfo   userInfo       = InstanceManager.Game.Users.GetUser(userId);
            int        gRooms         = 0;

            StringBuilder sbGuest  = new StringBuilder();
            StringBuilder sbPublic = new StringBuilder();



            foreach (int roomId in favouriteRooms)
            {
                if (InstanceManager.Game.Rooms.RoomExists(roomId))
                {
                    RoomInfo info         = InstanceManager.Game.Rooms.GetRoom(roomId);
                    int      categoryType = InstanceManager.Game.Rooms.GetCategory(info.RoomCategory).RoomCategoryType;
                    if (categoryType == 2)
                    {
                        sbGuest.Append(BuildRoomResponse(info, userInfo, 0));
                    }
                    if (categoryType == 0)
                    {
                        sbPublic.Append(BuildRoomResponse(info, userInfo, 0));
                    }
                    if (categoryType == 2)
                    {
                        gRooms++;
                    }
                }
                else
                {
                    InstanceManager.Game.Users.DeleteFavouriteRoom(userId, roomId);
                }
            }
            StringBuilder final = new StringBuilder();

            final.Append("H" + "H" + "J" + Convert.ToChar(2) + "HHH");
            final.Append(ArgumentEncoding.encodeInt(gRooms));
            final.Append(sbGuest.ToString());
            final.Append(sbPublic.ToString());
            return(final.ToString());
        }
Пример #24
0
        //200 - "MODERATIONACTION": "CH"
        public void Listener200()
        {
            int commandCat = ArgumentEncoding.decodeInt(mPacketBody.Substring(0, 1));
            int commandId  = ArgumentEncoding.decodeInt(mPacketBody.Substring(1, 1));

            mPayload = mPacketBody.Substring(2);

            //User Command
            if (commandCat == 0)
            {
                switch (commandId)
                {
                case 0:     //Alert
                    DoAlert();
                    break;

                case 1:     //Kick
                    DoKick();
                    break;

                case 2:     //Ban
                    DoBan();
                    break;
                }
            }

            //Room Command
            if (commandCat == 1)
            {
                switch (commandId)
                {
                case 0:     //Room Alert
                    DoRoomAlert();
                    break;

                case 1:     //Room Kick
                    DoRoomKick();
                    break;
                }
            }
        }
Пример #25
0
        //157 - "GETAVAILABLEBADGES": "B]"
        public void Listener157()
        {
            int badgeCount = InstanceManager.Game.Roles.GetBadgeCount(mUserInfo.iRole);

            mMessage.Init(229); //Ce
            mMessage.appendString(ArgumentEncoding.encodeInt(badgeCount));

            int currentBadge = 0;
            int currentIt    = 0;

            if (badgeCount > 0)
            {
                mUserInfo.Badges = InstanceManager.Game.Roles.GetBadges(mUserInfo.iRole);

                foreach (string badge in mUserInfo.Badges)
                {
                    mMessage.appendString(badge);
                    mMessage.appendChar(2);

                    if (badge == mUserInfo.sBadge)
                    {
                        currentBadge = currentIt;
                    }

                    currentIt++;
                }
            }

            mMessage.appendArgumentInt(currentBadge);

            if (currentBadge > 0)
            {
                mMessage.appendArgumentInt(1);
            }
            else
            {
                mMessage.appendArgumentInt(0);
            }

            SendMessage(mMessage);
        }
Пример #26
0
        //2 - "room_directory": "@B"
        public void Listener2()
        {
            int roomId = InstanceManager.Sessions.GetSession(mSessionID).mRoomID;

            if (roomId != 0)
            {
                InstanceManager.Game.Rooms.GetRoomInstance(roomId).RemoveUser(mSessionID);
            }

            int requestType = Base64Encoding.DecodeInt(mPacketBody.Substring(0, 1));

            roomId = ArgumentEncoding.decodeInt(mPacketBody.Substring(1));

            mMessage.Init(19); //@S
            SendMessage(mMessage);

            if (requestType == 1) // Public
            {
                enterRoom(roomId, false);
            }
        }
Пример #27
0
        private string ProcessFloorFurniDefinition(FurniInfo info)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(info.FurniID);
            sb.Append(Convert.ToChar(2));
            sb.Append(info.FurniSprite);
            sb.Append(Convert.ToChar(2));
            sb.Append(ArgumentEncoding.encodeInt(info.PosX));
            sb.Append(ArgumentEncoding.encodeInt(info.PosY));
            sb.Append(ArgumentEncoding.encodeInt(info.W));
            sb.Append(ArgumentEncoding.encodeInt(info.L));
            sb.Append(ArgumentEncoding.encodeInt(info.PosRotation));
            sb.Append(info.PosZ.ToString().Replace(',', '.'));
            sb.Append(Convert.ToChar(2));
            sb.Append(info.Col);
            sb.Append(Convert.ToChar(2));
            sb.Append(Convert.ToChar(2));
            sb.Append(ArgumentEncoding.encodeInt(info.TeleportId));
            sb.Append(info.FurniVar);
            sb.Append(Convert.ToChar(2));
            return(sb.ToString());
        }
Пример #28
0
 //93 - "DANCE": "A]"
 public void Listener93()
 {
     if (!mRoomInstance.HasUniqueStatus(mSessionID, "sit") && !mRoomInstance.HasUniqueStatus(mSessionID, "lay") && !mRoomInstance.HasUniqueStatus(mSessionID, "swim"))
     {
         if (mPacketBody.Length == 0)
         {
             mRoomInstance.RemoveUniqueStatuses(mSessionID, "");
             ApplyUniqueStatus("dance", 0, null, true, 0, 0, null);
         }
         else
         {
             if (InstanceManager.Game.Roles.HasRight(mUserInfo.iRole, "fuse_use_club_dance"))
             {
                 int danceId = ArgumentEncoding.decodeInt(mPacketBody);
                 if (danceId >= 0 && danceId <= 4)
                 {
                     mRoomInstance.RemoveUniqueStatuses(mSessionID, "");
                     ApplyUniqueStatus("dance", 0, danceId.ToString(), true, 0, 0, null);
                 }
             }
         }
     }
 }
Пример #29
0
        //56 - "WHISPER": "@x"
        public void Listener56()
        {
            string message = FuseMessage.getArgument(1, mPacketBody);
            int    tSpace  = message.IndexOf(" ");
            string user    = message.Substring(0, tSpace);
            string chat    = message.Substring(tSpace + 1);

            InstanceManager.Game.Misc.ChatFilter.FilterText(ref chat, mSessionID, mRoomInstance.RoomInfo.RoomID, false, "whisper to " + user);

            if (chat != null && !mRoomInstance.GetUser(mSessionID).SpecialStates.ContainsKey("mute"))
            {
                ApplyEmotes(chat);
                long sender   = mRoomInstance.GetUser(mSessionID).SessionID;
                long receiver = mRoomInstance.GetUser(user).SessionID;
                mMessage.Init(25); //@Y
                mMessage.appendString(ArgumentEncoding.encodeInt(mRoomInstance.GetUser(mSessionID).RoomUserID));
                mMessage.appendString(chat);
                mMessage.appendChar(2);
                mRoomInstance.SendMessage(mMessage, sender);
                mRoomInstance.SendMessage(mMessage, receiver);
                mRoomInstance.MakeTalk(mSessionID, chat);
            }
        }
Пример #30
0
        //19 - "DEL_FAVORITE_ROOM": "@T"
        public void Listener20()
        {
            int roomId = ArgumentEncoding.decodeInt(mPacketBody.Substring(1));

            InstanceManager.Game.Users.DeleteFavouriteRoom(mUserInfo.userId, roomId);
        }