public override void AppendString(string s, byte?b)
 {
     if (s != null && s.Length > 0)
     {
         this.AppendShort(s.Length);
         this.AppendBytes(Skylight.GetDefaultEncoding().GetBytes(s), false);
     }
     else
     {
         this.AppendShort(0);
     }
 }
Example #2
0
        public void WriteEvenPaddedString(string value)
        {
            byte[] data = Skylight.GetDefaultEncoding().GetBytes(value);

            this.WriteInt32(data.Length);
            this.WriteBytes(data);

            if (data.Length % 2 != 0)
            {
                this.WriteByte(0);
            }
        }
Example #3
0
        public override string PopStringUntilBreak(byte?b)
        {
            if (b != null)
            {
                List <byte> bytes = new List <byte>();
                byte        b_;
                while ((b_ = this.ReadByte()) != b)
                {
                    bytes.Add(b_);
                }

                return(Skylight.GetDefaultEncoding().GetString(bytes.ToArray()));
            }
            else
            {
                return(Skylight.GetDefaultEncoding().GetString(this.ReadBytes(this.GetRemainingLength())));
            }
        }
Example #4
0
        //public string Encipher(string theData)
        //{
        //    StringBuilder ciphered = new StringBuilder();

        //    foreach (Char character in theData)
        //    {
        //        ciphered.Append(((int)character ^ moveUp()).ToString("X"));
        //    }

        //    PremixTable("xllVGKnnQcW8aX4WefdKrBWTqiW5EwT", 1);

        //    return ciphered.ToString();
        //}

        public byte[] Decipher(byte[] theData, bool premix = true)
        {
            StringBuilder decipher = new StringBuilder();

            string data = Skylight.GetDefaultEncoding().GetString(theData);

            for (int i = 0; i < theData.Length; i = i + 2)
            {
                String hexChars = data.Substring(i, 2);
                decipher.Append(Convert.ToChar(int.Parse(hexChars, System.Globalization.NumberStyles.HexNumber) ^ MoveUp()));
            }

            if (premix)
            {
                PremixTable("xllVGKnnQcW8aX4WefdKrBWTqiW5EwT", 1);
            }

            return(Skylight.GetDefaultEncoding().GetBytes(decipher.ToString()));
        }
Example #5
0
        public string ReadEvenPaddedString()
        {
            int lenght = this.ReadInt32();

            if (lenght <= 0)
            {
                return("");
            }
            else
            {
                byte[] bytes = this.ReadBytes(lenght);

                if (lenght % 2 != 0)
                {
                    this.ReadByte();
                }

                return(Skylight.GetDefaultEncoding().GetString(bytes));
            }
        }
Example #6
0
        public RoomModel(string id, int doorx, int doory, int doorz, int doorDir, string heightmap, string publicItems, string clubName)
        {
            this.ID          = id;
            this.DoorX       = doorx;
            this.DoorY       = doory;
            this.DoorZ       = doorz;
            this.DoorDir     = doorDir;
            this.Heightmap   = heightmap.ToLower();
            this.PublicItems = publicItems;
            this.ClubName    = clubName;

            string[] splitedHeightmap = this.Heightmap.Split(new char[]
            {
                Convert.ToChar(13)
            });

            this.MaxX = splitedHeightmap[0].Length;
            this.MaxY = splitedHeightmap.Length;

            this.TileStates   = new ModelTileState[this.MaxX, this.MaxY];
            this.ModelHeights = new int[this.MaxX, this.MaxY];
            for (int i = 0; i < this.MaxY; i++)
            {
                if (i > 0)
                {
                    splitedHeightmap[i] = splitedHeightmap[i].Substring(1);
                }

                for (int j = 0; j < this.MaxX; j++)
                {
                    if (splitedHeightmap[i].Length >= j + 1)
                    {
                        string text = splitedHeightmap[i].Substring(j, 1).Trim().ToLower();
                        if (text == "x")
                        {
                            this.TileStates[j, i] = ModelTileState.BLOCKED;
                        }
                        else
                        {
                            int height;
                            if (int.TryParse(text, out height))
                            {
                                this.TileStates[j, i]   = ModelTileState.OPEN;
                                this.ModelHeights[j, i] = height;
                            }
                        }
                    }
                    else
                    {
                        this.TileStates[j, i] = ModelTileState.BLOCKED;
                        Logging.WriteLine("OOPS! Room model '" + this.ID + "' got some invalid data on heightmap! Temp fixed this! :)");
                    }
                }
            }

            if (!string.IsNullOrWhiteSpace(this.PublicItems))
            {
                this.Rotation = new int[this.MaxX, this.MaxY];

                List <string[]> items = new List <string[]>();
                if (!this.PublicItems.Contains(Convert.ToChar(2)))
                {
                    foreach (string item in this.PublicItems.Split(Convert.ToChar(13)))
                    {
                        string[] data = item.Split(' ');

                        this.TileStates[int.Parse(data[2]), int.Parse(data[3])] = (ModelTileState)int.Parse(data[6]);
                        this.Rotation[int.Parse(data[2]), int.Parse(data[3])]   = int.Parse(data[5]);

                        items.Add(data);
                    }
                }
                else
                {
                    ClientMessage message = BasicUtilies.GetRevisionClientMessage(Revision.RELEASE63_35255_34886_201108111108);
                    message.Init(0, Skylight.GetDefaultEncoding().GetBytes(this.PublicItems));

                    int count = message.PopWiredInt32();
                    for (int i = 0; i < count; i++)
                    {
                        string name = message.PopStringUntilBreak();
                        string item = message.PopStringUntilBreak();
                        int    x    = message.PopWiredInt32();
                        int    y    = message.PopWiredInt32();
                        int    z    = message.PopWiredInt32();
                        int    rot  = message.PopWiredInt32();

                        if (item.Contains("bench") || item.Contains("chair") || item.Contains("stool") || item.Contains("seat") || item.Contains("sofa"))
                        {
                            this.TileStates[x, y] = ModelTileState.SEAT;
                        }
                        else
                        {
                            this.TileStates[x, y] = ModelTileState.BLOCKED;
                        }

                        items.Add(new string[] { name, item, x.ToString(), y.ToString(), z.ToString(), rot.ToString() });
                    }
                }

                this.PublicItemsServerMessage = new MultiRevisionServerMessage(OutgoingPacketsEnum.PublicItems, new ValueHolder("Items", items.ToArray()));
            }

            this.TileStates[this.DoorX, this.DoorY] = ModelTileState.DOOR;

            using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient())
            {
                DataTable dataTable = dbClient.ReadDataTable("SELECT * FROM room_models_triggers WHERE id = '" + this.ID + "'");
                if (dataTable != null && dataTable.Rows.Count > 0)
                {
                    this.Triggers = new RoomModelTrigger[this.MaxX, this.MaxY];

                    foreach (DataRow dataRow in dataTable.Rows)
                    {
                        this.Triggers[(int)dataRow["x"], (int)dataRow["y"]] = new RoomModelTrigger((int)dataRow["x"], (int)dataRow["y"], (string)dataRow["type"], (string)dataRow["data"]);
                    }
                }
            }
        }
Example #7
0
 public override string PopFixedString()
 {
     return(this.PopFixedString(Skylight.GetDefaultEncoding()));
 }
Example #8
0
 public override string ReadBytesAsString(int bytes)
 {
     return(Skylight.GetDefaultEncoding().GetString(this.ReadBytes(bytes)));
 }
Example #9
0
        private void HandleMessage(MUSClientMessage message)
        {
            int    errorCode = message.ReadInt32();
            int    timestamp = message.ReadInt32();
            string subject   = message.ReadEvenPaddedString();
            string senderId  = message.ReadEvenPaddedString();

            string[] receivers = new string[message.ReadInt32()];
            for (int i = 0; i < receivers.Length; i++)
            {
                receivers[i] = message.ReadEvenPaddedString();
            }

            if (subject != "Logon")
            {
                short contentType = message.ReadShort();
            }

            switch (subject)
            {
            case "Logon":
            {
                MUSServerMessage message_ = new MUSServerMessage("Logon", MUSType.String);
                message_.WriteEvenPaddedString("Skylight: The best emulator around");
                this.SendMessage(message_);

                MUSServerMessage message_2 = new MUSServerMessage("HELLO", MUSType.String);
                message_2.WriteEvenPaddedString("");
                this.SendMessage(message_2);
            }
            break;

            case "LOGIN":
            {
                string[] credentials = message.ReadEvenPaddedString().Split(new char[] { ' ' }, 2);

                GameClient gameClient = Skylight.GetGame().GetGameClientManager().GetGameClientById(uint.Parse(credentials[0]));
                if (gameClient != null && gameClient.MachineID == credentials[1])
                {
                    this.UserID = gameClient.GetHabbo().ID;
                }
                else
                {
                    this.Dispose();
                }
            }
            break;

            case "PHOTOTXT":
            {
                if (this.UserID > 0)
                {
                    this.PhotoText = message.ReadEvenPaddedString().Substring(1);
                }
            }
            break;

            case "BINDATA":
            {
                if (this.UserID > 0 && this.PhotoText != null)
                {
                    Dictionary <string, MUSPropListItem> props = message.ReadPropList();

                    Photo photo = new Photo();
                    photo.CS    = MUSUtils.BytesToInt(props["cs"].Data);
                    photo.Image = props["image"].Data;
                    photo.Text  = this.PhotoText;
                    photo.Time  = TimeUtilies.GetUnixTimestamp();

                    this.PhotoText = null;

                    using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient())
                    {
                        dbClient.AddParamWithValue("userId", this.UserID);

                        uint itemId = (uint)dbClient.ExecuteQuery("INSERT INTO items(user_id, room_id, base_item, extra_data, wall_pos) VALUES(@userId, 0, 2268736439, '', '')");
                        if (itemId > 0)
                        {
                            string data = JsonConvert.SerializeObject(photo);

                            dbClient.AddParamWithValue("itemId", itemId);
                            dbClient.AddParamWithValue("data", data);
                            dbClient.ExecuteQuery("INSERT INTO items_data(item_id, data) VALUES(@itemId, @data)");
                        }

                        MUSServerMessage message_ = new MUSServerMessage("BINDATA_SAVED", MUSType.String);
                        message_.WriteEvenPaddedString(itemId.ToString());
                        this.SendMessage(message_);

                        Skylight.GetGame().GetGameClientManager().GetGameClientById(this.UserID).GetHabbo().GetInventoryManager().AddInventoryItemToHand(new InventoryItem(itemId, 2268736439, ""));
                        Skylight.GetGame().GetGameClientManager().GetGameClientById(this.UserID).SendMessage(Skylight.GetGame().GetGameClientManager().GetGameClientById(this.UserID).GetHabbo().GetInventoryManager().OldSchoolGetHand("last"));
                    }
                }
            }
            break;

            case "GETBINDATA":
            {
                uint itemId = uint.Parse(message.ReadEvenPaddedString().Split(' ')[0]);

                RoomItemPhoto roomItem = (RoomItemPhoto)Skylight.GetGame().GetGameClientManager().GetGameClientById(this.UserID).GetHabbo().GetRoomSession().GetRoom().RoomItemManager.TryGetWallItem(itemId);
                if (roomItem != null)
                {
                    Dictionary <string, MUSPropListItem> data = new Dictionary <string, MUSPropListItem>();
                    data.Add("image", new MUSPropListItem(MUSType.Media, roomItem.Photo.Image));
                    data.Add("time", new MUSPropListItem(MUSType.String, Skylight.GetDefaultEncoding().GetBytes(TimeUtilies.UnixTimestampToDateTime(roomItem.Photo.Time).ToString())));
                    data.Add("cs", new MUSPropListItem(MUSType.Integer, MUSUtils.IntToBytes(roomItem.Photo.CS)));

                    MUSServerMessage message_ = new MUSServerMessage("BINARYDATA", MUSType.PropList);
                    message_.WritePropList(data);
                    this.SendMessage(message_);
                }
            }
            break;
            }
        }
Example #10
0
 public override void AppendString(string s, byte?b)
 {
     this.AppendString(s, b, Skylight.GetDefaultEncoding());
 }