Exemplo n.º 1
0
 public HostMutePlayerEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id = packet.ReadInteger();
     RoomId = packet.ReadInteger();
     Minutes = packet.ReadInteger();
 }
Exemplo n.º 2
0
 public HostMoveFurnitureEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id = packet.ReadInteger();
     Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger());
     Direction = (HDirection)packet.ReadInteger();
 }
Exemplo n.º 3
0
 public HostBanPlayerEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id = packet.ReadInteger();
     RoomId = packet.ReadInteger();
     Ban = SKore.ToBan(packet.ReadString());
 }
Exemplo n.º 4
0
        public HostShoutEventArgs(Func<Task> continuation, int step, HMessage packet)
            : base(continuation, step, packet)
        {
            Message = packet.ReadString();

            // TODO: Find the chunks before OwnerId and read them.
            Theme = (HTheme)packet.ReadInteger(packet.Length - 6);
        }
Exemplo n.º 5
0
 public PlayerUpdateEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Index = packet.ReadInteger();
     FigureId = packet.ReadString();
     Gender = SKore.ToGender(packet.ReadString());
     Motto = packet.ReadString();
 }
Exemplo n.º 6
0
        public void WriteStructureLog(HMessage packet, ASClass messageClass)
        {
            if (_invalidStructures.Contains(packet.Header))
            {
                return;
            }

            int      position     = 0;
            string   structureLog = $"{{l}}{{u:{packet.Header}}}";
            ASMethod msgCtor      = messageClass.Instance.Constructor;

            foreach (ASParameter parameter in msgCtor.Parameters)
            {
                switch (parameter.Type.Name.ToLower())
                {
                case "string":
                    if (!packet.CanReadString(position))
                    {
                        continue;
                    }
                    structureLog += ($"{{s:{packet.ReadString(ref position)}}}");
                    break;

                case "boolean":
                    if (packet.ReadableAt(position) < 1)
                    {
                        continue;
                    }
                    structureLog += ($"{{b:{packet.ReadBoolean(ref position)}}}");
                    break;

                case "int":
                    if (packet.ReadableAt(position) < 4)
                    {
                        continue;
                    }
                    structureLog += ($"{{i:{packet.ReadInteger(ref position)}}}");
                    break;
                }
            }
            if (packet.ReadableAt(position) == 0)
            {
                WriteHighlight(structureLog + "\r\n", StructureHighlight);
            }
            else
            {
                _invalidStructures.Add(packet.Header);
            }
        }
Exemplo n.º 7
0
        public HFurniture(HMessage packet)
        {
            Id     = packet.ReadInteger();
            TypeId = packet.ReadInteger();

            Tile   = new HPoint(packet.ReadInteger(), packet.ReadInteger());
            Facing = (HDirection)packet.ReadInteger();
            Tile.Z = double.Parse(packet.ReadString(), CultureInfo.InvariantCulture);

            var loc1 = packet.ReadString();
            var loc3 = packet.ReadInteger();

            Category = packet.ReadInteger();
            Stuff    = ReadData(packet, Category);

            var loc4 = packet.ReadInteger();
            var loc5 = packet.ReadInteger();

            OwnerId = packet.ReadInteger();
            if (TypeId < 0)
            {
                var loc6 = packet.ReadString();
            }
        }
Exemplo n.º 8
0
        public void init(HMessage message)
        {
            Id          = message.ReadInteger();
            Catalogname = message.ReadString();
            message.ReadBoolean();
            CreditCost  = message.ReadInteger();
            SpecialCost = message.ReadInteger();
            SpecialType = message.ReadInteger();
            AllowGift   = message.ReadBoolean();
            int ccount = message.ReadInteger();

            for (int p = 0; p < ccount; p++)
            {
                string type = message.ReadString();
                if (type == "b")
                {
                    Badge = message.ReadString();
                }
                else
                {
                    sprite_id   = message.ReadInteger();
                    SpecialData = message.ReadString();
                    Amount      = message.ReadInteger();
                    Limited     = message.ReadBoolean();
                    if (Limited)
                    {
                        message.ReadInteger();
                        message.ReadInteger();
                    }
                }
            }
            message.ReadInteger();
            message.ReadBoolean();
            message.ReadBoolean();
            message.ReadString();
        }
Exemplo n.º 9
0
        public FurnitureMoveEventArgs(Func <Task> continuation, int step, HMessage packet)
            : base(continuation, step, packet)
        {
            Id     = packet.ReadInteger();
            TypeId = packet.ReadInteger();

            int x = packet.ReadInteger();
            int y = packet.ReadInteger();

            Direction = (HDirection)packet.ReadInteger();
            Tile      = new HPoint(x, y, double.Parse(packet.ReadString()));

            // TODO: Find the chunks before OwnerId and read them.
            OwnerId = packet.ReadInteger(packet.Length - 6);
        }
Exemplo n.º 10
0
        private bool TryHandleHostNavigateRoom(HMessage current, HMessage previous)
        {
            if (previous.Length >= 12 &&
                current.CanRead <string>(0) &&
                current.ReadString() == "Navigation")
            {
                current.ReadString();
                if (current.ReadString() != "go.official")
                {
                    return(false);
                }

                if (previous.ReadInteger(0).ToString() == current.ReadString())
                {
                    OutgoingHeaders.NavigateRoom = previous.Header;

                    _outLocked[previous.Header] = RaiseOnHostNavigateRoom;
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 11
0
        private bool TryHandleHostRaiseSign(HMessage current, HMessage previous)
        {
            if (previous.Length != 6)
            {
                return(false);
            }
            if (previous.ReadInteger(0) > 18)
            {
                return(false);
            }

            if (!current.CanReadString(22))
            {
                return(false);
            }
            if (current.ReadString(22) != "sign")
            {
                return(false);
            }

            OutgoingDetected.RaiseSign   = previous.Header;
            OutDetected[previous.Header] = RaiseOnHostRaiseSign;
            return(true);
        }
Exemplo n.º 12
0
        public HCatalogOffer(HMessage packet)
        {
            Id          = packet.ReadInteger();
            DisplayName = packet.ReadString();
            IsRentable  = packet.ReadBoolean();

            CreditCost        = packet.ReadInteger();
            OtherCurrencyCost = packet.ReadInteger();
            OtherCurrencyType = packet.ReadInteger();
            CanGift           = packet.ReadBoolean();

            Products = new HCatalogProduct[packet.ReadInteger()];
            for (int i = 0; i < Products.Length; i++)
            {
                Products[i] = new HCatalogProduct(packet);
            }

            ClubLevel   = packet.ReadInteger();
            IsPet       = packet.ReadBoolean();
            AllowBundle = packet.ReadBoolean();

            PreviewImage = packet.ReadString();
        }
Exemplo n.º 13
0
 public HostClickPlayerEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id = packet.ReadInteger();
     Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger());
 }
Exemplo n.º 14
0
        private void Connected(object sender, ConnectedEventArgs e)
        {
            if (InvokeRequired)
            {
                Invoke(_connected, sender, e);
                return;
            }

            HMessage remoteEndPointPkt = Connection.Local.ReceivePacketAsync().Result;

            e.HotelServer           = ConnectionPg.HotelServer = HotelEndPoint.Parse(remoteEndPointPkt.ReadString().Split('\0')[0], remoteEndPointPkt.ReadInteger());
            e.IsFakingPolicyRequest = (e.HotelServer.Hotel == HHotel.Unknown);

            ConnectionPg.IsReceiving = true;
            Text    = $"Tanji ~ Connected[{e.HotelServer}]";
            TopMost = PacketLoggerUI.TopMost;

            PacketLoggerUI.RevisionTxt.Text = ("Revision: " + Game.Revision);

            PacketLoggerUI.Show();
            PacketLoggerUI.WindowState = FormWindowState.Normal;

            BringToFront();
        }
Exemplo n.º 15
0
        public static void ReadStuffData(int category, HMessage packet)
        {
            switch (category & 0xff)
            {
            case 0:
            {
                packet.ReadString();
                break;
            }

            case 1:     /* MapStuffData */
            {
                int count = packet.ReadInteger();
                for (int j = 0; j < count; j++)
                {
                    packet.ReadString();
                    packet.ReadString();
                }
                break;
            }

            case 2:     /* StringArrayStuffData */
            {
                int count = packet.ReadInteger();
                for (int j = 0; j < count; j++)
                {
                    packet.ReadString();
                }
                break;
            }

            case 3:
            {
                packet.ReadString();
                packet.ReadInteger();
                break;
            }

            case 5:     /* IntArrayStuffData */
            {
                int count = packet.ReadInteger();
                for (int j = 0; j < count; j++)
                {
                    packet.ReadInteger();
                }
                break;
            }

            case 6:     /* HighScoreStuffData */
            {
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadInteger();

                int count = packet.ReadInteger();
                for (int j = 0; j < count; j++)
                {
                    int score    = packet.ReadInteger();
                    int subCount = packet.ReadInteger();
                    for (int k = 0; k < subCount; k++)
                    {
                        packet.ReadString();
                    }
                }
                break;
            }

            case 7:
            {
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadInteger();
                break;
            }
            }
        }
Exemplo n.º 16
0
 public HostTradeEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Index = packet.ReadInteger();
 }
Exemplo n.º 17
0
 public HostRaiseSignEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Sign = (HSign)packet.ReadInteger();
 }
Exemplo n.º 18
0
        public static IReadOnlyList<HFurniture> Parse(HMessage packet)
        {
            int ownersCount = packet.ReadInteger();
            var owners = new Dictionary<int, string>(ownersCount);

            for (int i = 0; i < ownersCount; i++)
            {
                int ownerId = packet.ReadInteger();
                string ownerName = packet.ReadString();

                owners.Add(ownerId, ownerName);
            }

            int furnitureCount = packet.ReadInteger();
            var furnitureList = new List<HFurniture>(furnitureCount);

            for (int i = 0; i < furnitureList.Capacity; i++)
            {
                int id = packet.ReadInteger();
                int typeId = packet.ReadInteger();

                int x = packet.ReadInteger();
                int y = packet.ReadInteger();
                var direction = (HDirection)packet.ReadInteger();
                double z = double.Parse(packet.ReadString());

                packet.ReadString();
                packet.ReadInteger();

                int categoryId = (packet.ReadInteger() & 0xFF);
                #region Switch Statement: categoryId
                switch (categoryId)
                {
                    case 0:
                    {
                        packet.ReadString();
                        break;
                    }
                    case 1:
                    {
                        int count = packet.ReadInteger();
                        for (int j = 0; j < count; j++)
                        {
                            packet.ReadString();
                            packet.ReadString();
                        }
                        break;
                    }
                    case 2:
                    {
                        int count = packet.ReadInteger();
                        for (int j = 0; j < count; j++)
                        {
                            packet.ReadString();
                        }
                        break;
                    }
                    case 3:
                    {
                        packet.ReadString();
                        packet.ReadInteger();
                        break;
                    }
                    case 5:
                    {
                        int count = packet.ReadInteger();
                        for (int j = 0; j < count; j++)
                        {
                            packet.ReadInteger();
                        }
                        break;
                    }
                    case 6:
                    {
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadInteger();

                        int count = packet.ReadInteger();
                        for (int j = 0; j < count; j++)
                        {
                            int subCount = packet.ReadInteger();
                            for (int k = 0; k < subCount; k++)
                            {
                                packet.ReadString();
                            }
                        }
                        break;
                    }
                    case 7:
                    {
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadInteger();
                        break;
                    }
                }
                #endregion

                packet.ReadInteger();
                packet.ReadInteger();

                int ownerId = packet.ReadInteger();
                if (typeId < 0) packet.ReadString();

                var furniture = new HFurniture(id, typeId, ownerId,
                    owners[ownerId], new HPoint(x, y, z), direction);

                furnitureList.Add(furniture);
            }
            
            return furnitureList;
        }
Exemplo n.º 19
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList<HEntity> Parse(HMessage packet)
        {
            int entityCount = packet.ReadInteger();
            var entityList = new List<HEntity>(entityCount);

            for (int i = 0; i < entityList.Capacity; i++)
            {
                int id = packet.ReadInteger();
                string name = packet.ReadString();
                string motto = packet.ReadString();
                string figureId = packet.ReadString();
                int index = packet.ReadInteger();
                int x = packet.ReadInteger();
                int y = packet.ReadInteger();
                double z = double.Parse(packet.ReadString());

                packet.ReadInteger();
                int type = packet.ReadInteger();

                HGender gender = HGender.Unknown;
                string favoriteGroup = string.Empty;
                #region Switch Statement: type
                switch (type)
                {
                    case 1:
                    {
                        gender = SKore.ToGender(packet.ReadString());
                        packet.ReadInteger();
                        packet.ReadInteger();
                        favoriteGroup = packet.ReadString();
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadBoolean();

                        break;
                    }
                    case 2:
                    {
                        packet.ReadInteger();
                        packet.ReadInteger();
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadInteger();
                        packet.ReadString();
                        break;
                    }
                    case 4:
                    {
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadString();

                        for (int j = packet.ReadInteger(); j > 0; j--)
                            packet.ReadShort();

                        break;
                    }
                }
                #endregion

                var entity = new HEntity(id, index, name,
                    new HPoint(x, y, z), motto, gender, figureId, favoriteGroup);

                entityList.Add(entity);
            }

            return entityList;
        }
Exemplo n.º 20
0
        public HEntity(HMessage packet)
        {
            Id       = packet.ReadInteger();
            Name     = packet.ReadString();
            Motto    = packet.ReadString();
            FigureId = packet.ReadString();
            Index    = packet.ReadInteger();

            Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger(),
                              double.Parse(packet.ReadString(), CultureInfo.InvariantCulture));

            packet.ReadInteger();
            int type = packet.ReadInteger();

            switch (type)
            {
            case 1:
            {
                Gender = SKore.ToGender(packet.ReadString());
                packet.ReadInteger();
                packet.ReadInteger();
                FavoriteGroup = packet.ReadString();
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadBoolean();

                break;
            }

            case 2:
            {
                packet.ReadInteger();
                packet.ReadInteger();
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadInteger();
                packet.ReadString();
                break;
            }

            case 4:
            {
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadString();
                for (int j = packet.ReadInteger(); j > 0; j--)
                {
                    packet.ReadShort();
                }
                break;
            }
            }
        }
Exemplo n.º 21
0
 public HostRaiseSignEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Sign = (HSign)packet.ReadInteger();
 }
Exemplo n.º 22
0
        public static IReadOnlyList <HItem> Parse(HMessage packet)
        {
            packet.ReadInteger();
            packet.ReadInteger();

            int itemCount = packet.ReadInteger();
            var itemList  = new List <HItem>(itemCount);

            for (int i = 0; i < itemList.Capacity; i++)
            {
                packet.ReadInteger();
                string s1 = packet.ReadString();

                int id     = packet.ReadInteger();
                int typeId = packet.ReadInteger();
                packet.ReadInteger();

                int category = packet.ReadInteger();
                HStuffData.ReadStuffData(category, packet);

                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                int secondsToExpiration = packet.ReadInteger();

                bool hasRentPeriodStarted = packet.ReadBoolean();
                int  roomId = packet.ReadInteger();

                var item = new HItem(id, typeId, category,
                                     secondsToExpiration, hasRentPeriodStarted, roomId);

                if (s1 == "S")
                {
                    item.SlotId = packet.ReadString();
                    packet.ReadInteger();
                }
                itemList.Add(item);
            }
            return(itemList);
        }
Exemplo n.º 23
0
        public static void AppendPacketStructure(StringBuilder sb, HMessage packet, StructureType[] structure)
        {
            int originalPosition = packet.Position;

            try
            {
                packet.Position = 0;

                for (int i = 0; i < structure.Length; i++)
                {
                    sb.Append(" ");

                    switch (structure[i])
                    {
                    case StructureType.Boolean:
                        sb.Append(packet.ReadBoolean() ? "true" : "false");
                        break;

                    case StructureType.Byte:
                        sb.Append($"b:{packet.ReadBytes(1)[0]}");
                        break;

                    case StructureType.Short:
                        sb.Append($"s:{(short)packet.ReadShort()}");
                        break;

                    case StructureType.Integer:
                        sb.Append($"{packet.ReadInteger()}");
                        break;

                    case StructureType.String:
                        sb.Append($"\"{EscapeString(packet.ReadString())}\"");
                        break;

                    case StructureType.ByteArray:
                        int    len   = packet.ReadInteger();
                        byte[] bytes = packet.ReadBytes(len);
                        sb.Append("a:[");
                        for (int j = 0; j < bytes.Length; j++)
                        {
                            if (j > 0)
                            {
                                sb.Append(" ");
                            }
                            sb.Append(bytes[j].ToString("x2"));
                        }
                        sb.Append("]");
                        break;

                    default:
                        throw new Exception($"Unknown/unsupported structure type: {structure[i]}");
                    }
                }

                if (packet.Readable > 0)
                {
                    byte[] extra = packet.ReadBytes(packet.Readable);
                    sb.Append(" [");
                    for (int i = 0; i < extra.Length; i++)
                    {
                        if (i > 0)
                        {
                            sb.Append(" ");
                        }
                        sb.Append(extra[i].ToString("x2"));
                    }
                    sb.Append("]");
                }
            }
            finally { packet.Position = originalPosition; }
        }
 public HostPrivateMessageEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id      = packet.ReadInteger();
     Message = packet.ReadString();
 }
Exemplo n.º 25
0
 public HostGestureEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Gesture = (HGesture)packet.ReadInteger();
 }
Exemplo n.º 26
0
 public HostPrivateMessageEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id = packet.ReadInteger();
     Message = packet.ReadString();
 }
Exemplo n.º 27
0
 public HostGestureEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Gesture = (HGesture)packet.ReadInteger();
 }
Exemplo n.º 28
0
        public static IReadOnlyList <HFurniture> Parse(HMessage packet)
        {
            int ownersCount = packet.ReadInteger();
            var owners      = new Dictionary <int, string>(ownersCount);

            for (int i = 0; i < ownersCount; i++)
            {
                int    ownerId   = packet.ReadInteger();
                string ownerName = packet.ReadString();

                owners.Add(ownerId, ownerName);
            }

            int furnitureCount = packet.ReadInteger();
            var furnitureList  = new List <HFurniture>(furnitureCount);

            for (int i = 0; i < furnitureList.Capacity; i++)
            {
                int id     = packet.ReadInteger();
                int typeId = packet.ReadInteger();

                int    x         = packet.ReadInteger();
                int    y         = packet.ReadInteger();
                var    direction = (HDirection)packet.ReadInteger();
                double z         = double.Parse(packet.ReadString());

                packet.ReadString();
                packet.ReadInteger();

                int categoryId = (packet.ReadInteger() & 0xFF);
                #region Switch Statement: categoryId
                switch (categoryId)
                {
                case 0:
                {
                    packet.ReadString();
                    break;
                }

                case 1:
                {
                    int count = packet.ReadInteger();
                    for (int j = 0; j < count; j++)
                    {
                        packet.ReadString();
                        packet.ReadString();
                    }
                    break;
                }

                case 2:
                {
                    int count = packet.ReadInteger();
                    for (int j = 0; j < count; j++)
                    {
                        packet.ReadString();
                    }
                    break;
                }

                case 3:
                {
                    packet.ReadString();
                    packet.ReadInteger();
                    break;
                }

                case 5:
                {
                    int count = packet.ReadInteger();
                    for (int j = 0; j < count; j++)
                    {
                        packet.ReadInteger();
                    }
                    break;
                }

                case 6:
                {
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadInteger();

                    int count = packet.ReadInteger();
                    for (int j = 0; j < count; j++)
                    {
                        int subCount = packet.ReadInteger();
                        for (int k = 0; k < subCount; k++)
                        {
                            packet.ReadString();
                        }
                    }
                    break;
                }

                case 7:
                {
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadInteger();
                    break;
                }
                }
                #endregion

                packet.ReadInteger();
                packet.ReadInteger();

                int ownerId = packet.ReadInteger();
                if (typeId < 0)
                {
                    packet.ReadString();
                }

                var furniture = new HFurniture(id, typeId, ownerId,
                                               owners[ownerId], new HPoint(x, y, z), direction);

                furnitureList.Add(furniture);
            }

            return(furnitureList);
        }
Exemplo n.º 29
0
 public HostDanceEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Dance = (HDance)packet.ReadInteger();
 }
Exemplo n.º 30
0
        public HEntityUpdate(HMessage packet)
        {
            Index = packet.ReadInteger();

            Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger(),
                              double.Parse(packet.ReadString(), CultureInfo.InvariantCulture));

            HeadFacing = (HDirection)packet.ReadInteger();
            BodyFacing = (HDirection)packet.ReadInteger();

            string action = packet.ReadString();

            string[] actionData = action.Split(
                new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string actionInfo in actionData)
            {
                string[] actionValues = actionInfo.Split(' ');

                if (actionValues.Length < 2)
                {
                    continue;
                }
                if (string.IsNullOrWhiteSpace(actionValues[0]))
                {
                    continue;
                }

                switch (actionValues[0])
                {
                case "flatctrl":
                {
                    IsController = true;
                    break;
                }

                case "mv":
                {
                    string[] values = actionValues[1].Split(',');
                    if (values.Length >= 3)
                    {
                        MovingTo = new HPoint(int.Parse(values[0]), int.Parse(values[1]),
                                              double.Parse(values[2], CultureInfo.InvariantCulture));
                    }
                    Action = HAction.Move;
                    break;
                }

                case "sit":
                {
                    Action = HAction.Sit;
                    Stance = HStance.Sit;
                    break;
                }

                case "lay":
                {
                    Action = HAction.Lay;
                    Stance = HStance.Lay;
                    break;
                }

                case "sign":
                {
                    Sign   = (HSign)int.Parse(actionValues[1]);
                    Action = HAction.Sign;
                    break;
                }
                }
            }
        }
Exemplo n.º 31
0
 public HostWalkEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Tile = new HPoint(packet.ReadInteger(0),
                       packet.ReadInteger(4));
 }
Exemplo n.º 32
0
        private async Task ReceiveRemoteModuleDataAsync()
        {
            try
            {
                HMessage packet = await RemoteModule.ReceivePacketAsync().ConfigureAwait(false);

                if (packet == null)
                {
                    DataAwaiters.Values.ToList().ForEach(awaiter =>
                    {
                        if (awaiter != null)
                        {
                            awaiter.SetResult(null);
                        }
                    });

                    RemoteModule = null;
                    Task grabRemoteModuleTask =
                        GrabRemoteModuleAsync();

                    return;
                }

                var response = new HMessage(packet.Header);
                #region Switch: packet.Header
                switch (packet.Header)
                {
                default: response = null; break;

                case 0:
                {
                    response.WriteShort((ushort)Hotel);
                    break;
                }

                case 1:
                {
                    response.WriteString(Game?.Location);
                    if (!string.IsNullOrWhiteSpace(Game?.Location))
                    {
                        response.WriteString(Path.GetFullPath("Hashes.ini"));
                    }
                    break;
                }

                case 2:
                {
                    response.WriteString(GameData.Source);
                    break;
                }

                case 3:
                {
                    response.WriteShort(Connection.Port);
                    response.WriteString(Connection.Host);
                    response.WriteString(Connection.Address);
                    break;
                }

                case 4:
                {
                    if (Connection != null)
                    {
                        int    dataLength = packet.ReadInteger();
                        byte[] data       = packet.ReadBytes(dataLength);

                        await Connection.SendToClientAsync(
                            data).ConfigureAwait(false);

                        response = null;
                    }
                    break;
                }

                case 5:
                {
                    if (Connection != null)
                    {
                        int    dataLength = packet.ReadInteger();
                        byte[] data       = packet.ReadBytes(dataLength);

                        await Connection.SendToServerAsync(
                            data).ConfigureAwait(false);

                        response = null;
                    }
                    break;
                }

                case 6:
                case 7:
                {
                    string stamp = packet.ReadString();
                    if (DataAwaiters.ContainsKey(stamp))
                    {
                        var destination = (HDestination)(packet.Header - 6);

                        int    step        = packet.ReadInteger();
                        bool   isBlocked   = packet.ReadBoolean();
                        int    dataLength  = packet.ReadInteger();
                        byte[] data        = packet.ReadBytes(dataLength);
                        var    interPacket = new HMessage(data, destination);

                        var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server));
                        args.IsBlocked = isBlocked;

                        DataAwaiters[stamp].SetResult(args);
                        response = null;
                    }
                    break;
                }
                }
                #endregion

                if (response != null)
                {
                    await RemoteModule.SendPacketAsync(response).ConfigureAwait(false);
                }
            }
            finally
            {
                if (RemoteModule != null)
                {
                    Task receiveRemModuDataTask =
                        ReceiveRemoteModuleDataAsync();
                }
            }
        }
Exemplo n.º 33
0
 public PlayerGestureEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Index = packet.ReadInteger();
     Gesture = (HGesture)packet.ReadInteger();
 }
Exemplo n.º 34
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntityAction"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntityAction"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList <HEntityAction> Parse(HMessage packet)
        {
            int entityActionCount = packet.ReadInteger();
            var entityActionList  = new List <HEntityAction>(entityActionCount);

            for (int i = 0; i < entityActionList.Capacity; i++)
            {
                int index = packet.ReadInteger();
                int x     = packet.ReadInteger();
                int y     = packet.ReadInteger();
                var z     = double.Parse(packet.ReadString(), CultureInfo.InvariantCulture);

                var headDirection = (HDirection)packet.ReadInteger();
                var bodyDirection = (HDirection)packet.ReadInteger();

                string   actionString = packet.ReadString();
                string[] actionData   = actionString.Split(new[] { '/' },
                                                           StringSplitOptions.RemoveEmptyEntries);

                HSign   sign   = HSign.One;
                HAction action = HAction.None;
                HStance stance = HStance.Stand;

                double movingToZ = 0.0;
                bool   isEmpowered = false;
                int    movingToX = 0, movingToY = 0;

                foreach (string actionInfo in actionData)
                {
                    string[] actionValues = actionInfo.Split(' ');

                    if (actionValues.Length < 2)
                    {
                        continue;
                    }
                    if (string.IsNullOrWhiteSpace(actionValues[0]))
                    {
                        continue;
                    }

                    #region Switch Statement: actionValues[]
                    switch (actionValues[0])
                    {
                    case "flatctrl":
                    {
                        isEmpowered = true;
                        break;
                    }

                    case "mv":
                    {
                        string[] movingToValues = actionValues[1].Split(',');
                        if (movingToValues.Length >= 3)
                        {
                            movingToX = int.Parse(movingToValues[0]);
                            movingToY = int.Parse(movingToValues[1]);
                            movingToZ = double.Parse(movingToValues[2], CultureInfo.InvariantCulture);
                        }
                        action = HAction.Move;
                        break;
                    }

                    case "sit":
                    {
                        action = HAction.Sit;
                        stance = HStance.Sit;
                        break;
                    }

                    case "lay":
                    {
                        action = HAction.Lay;
                        stance = HStance.Lay;
                        break;
                    }

                    case "sign":
                    {
                        sign   = (HSign)int.Parse(actionValues[1]);
                        action = HAction.Sign;
                        break;
                    }
                    }
                    #endregion
                }

                var entityAction = new HEntityAction(isEmpowered, index, new HPoint(x, y, z),
                                                     new HPoint(movingToX, movingToY, movingToZ), sign, stance, headDirection, bodyDirection, action);

                entityActionList.Add(entityAction);
            }
            return(entityActionList);
        }
Exemplo n.º 35
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntityAction"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntityAction"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList<HEntityAction> Parse(HMessage packet)
        {
            int entityActionCount = packet.ReadInteger();
            var entityActionList = new List<HEntityAction>(entityActionCount);

            for (int i = 0; i < entityActionList.Capacity; i++)
            {
                int index = packet.ReadInteger();
                int x = packet.ReadInteger();
                int y = packet.ReadInteger();
                double z = double.Parse(packet.ReadString());
                var headDirection = (HDirection)packet.ReadInteger();
                var bodyDirection = (HDirection)packet.ReadInteger();

                string actionString = packet.ReadString();
                string[] actionData = actionString.Split(new[] { '/' },
                    StringSplitOptions.RemoveEmptyEntries);

                HSign sign = HSign.One;
                HAction action = HAction.None;
                HStance stance = HStance.Stand;

                double movingToZ = 0.0;
                bool isEmpowered = false;
                int movingToX = 0, movingToY = 0;

                foreach (string actionInfo in actionData)
                {
                    string[] actionValues = actionInfo.Split(' ');
                    if (actionValues.Length < 2 || string.IsNullOrWhiteSpace(actionValues[0]))
                        continue;

                    #region Switch Statement: actionValues[]
                    switch (actionValues[0])
                    {
                        case "flatctrl":
                        {
                            isEmpowered = true;
                            break;
                        }
                        case "mv":
                        {
                            string[] movingToValues = actionValues[1].Split(',');
                            if (movingToValues.Length >= 3)
                            {
                                movingToX = int.Parse(movingToValues[0]);
                                movingToY = int.Parse(movingToValues[1]);
                                movingToZ = double.Parse(movingToValues[2]);
                            }
                            action = HAction.Move;
                            break;
                        }
                        case "sit":
                        {
                            action = HAction.Sit;
                            stance = HStance.Sit;
                            break;
                        }
                        case "lay":
                        {
                            action = HAction.Lay;
                            stance = HStance.Lay;
                            break;
                        }
                        case "sign":
                        {
                            sign = (HSign)int.Parse(actionValues[1]);
                            action = HAction.Sign;
                            break;
                        }
                    }
                    #endregion
                }

                var entityAction = new HEntityAction(isEmpowered, index, new HPoint(x, y, z),
                    new HPoint(movingToX, movingToY, movingToZ), sign, stance, headDirection, bodyDirection, action);

                entityActionList.Add(entityAction);
            }
            return entityActionList;
        }
Exemplo n.º 36
0
        public static IReadOnlyList <HFurniture> Parse(HMessage packet)
        {
            int ownersCount = packet.ReadInteger();
            var owners      = new Dictionary <int, string>(ownersCount);

            for (int i = 0; i < ownersCount; i++)
            {
                int    ownerId   = packet.ReadInteger();
                string ownerName = packet.ReadString();

                owners.Add(ownerId, ownerName);
            }

            int furnitureCount = packet.ReadInteger();
            var furnitureList  = new List <HFurniture>(furnitureCount);

            for (int i = 0; i < furnitureList.Capacity; i++)
            {
                int id     = packet.ReadInteger();
                int typeId = packet.ReadInteger();

                int x         = packet.ReadInteger();
                int y         = packet.ReadInteger();
                var direction = (HDirection)packet.ReadInteger();
                var z         = double.Parse(packet.ReadString(), CultureInfo.InvariantCulture);

                packet.ReadString();
                packet.ReadInteger();

                int category = packet.ReadInteger();
                HStuffData.ReadStuffData(category, packet);

                packet.ReadInteger();
                packet.ReadInteger();

                int ownerId = packet.ReadInteger();
                if (typeId < 0)
                {
                    packet.ReadString();
                }

                var furniture = new HFurniture(id, typeId, ownerId,
                                               owners[ownerId], new HPoint(x, y, z), direction);

                furnitureList.Add(furniture);
            }
            return(furnitureList);
        }
Exemplo n.º 37
0
        private bool TryHandleHostExitRoom(HMessage current, HMessage previous)
        {
            if (previous.Length != 2 || current.ReadInteger(0) != -1)
                return false;

            OutgoingHeaders.HostExitRoom = previous.Header;
            _outLocked[previous.Header] = RaiseOnHostExitRoom;
            return true;
        }
Exemplo n.º 38
0
 public HostNavigateRoomEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     RoomId   = packet.ReadInteger();
     Password = packet.ReadString();
 }
Exemplo n.º 39
0
 private bool TryHandlePlayerKickHost(HMessage current, HMessage previous)
 {
     bool isPlayerKickHost = (current.ReadInteger(0) == 4008);
     if (isPlayerKickHost)
     {
         IncomingHeaders.PlayerKickHost = current.Header;
         _inLocked[current.Header] = RaiseOnPlayerKickHost;
     }
     return isPlayerKickHost;
 }
Exemplo n.º 40
0
        protected object[] ReadData(HMessage packet, int category)
        {
            var values = new List <object>();

            switch (category & 0xFF)
            {
            case 0:
            {
                values.Add(packet.ReadString());
                break;
            }

            case 1:     /* MapStuffData */
            {
                int count = packet.ReadInteger();
                values.Add(count);

                for (int j = 0; j < count; j++)
                {
                    values.Add(packet.ReadString());
                    values.Add(packet.ReadString());
                }
                break;
            }

            case 2:     /* StringArrayStuffData */
            {
                int count = packet.ReadInteger();
                values.Add(count);

                for (int j = 0; j < count; j++)
                {
                    values.Add(packet.ReadString());
                }
                break;
            }

            case 3:
            {
                values.Add(packet.ReadString());
                values.Add(packet.ReadInteger());
                break;
            }

            case 5:     /* IntArrayStuffData */
            {
                int count = packet.ReadInteger();
                values.Add(count);

                for (int j = 0; j < count; j++)
                {
                    values.Add(packet.ReadInteger());
                }
                break;
            }

            case 6:     /* HighScoreStuffData */
            {
                values.Add(packet.ReadString());
                values.Add(packet.ReadInteger());
                values.Add(packet.ReadInteger());

                int count = packet.ReadInteger();
                values.Add(count);

                for (int j = 0; j < count; j++)
                {
                    int score = packet.ReadInteger();
                    values.Add(score);

                    int subCount = packet.ReadInteger();
                    values.Add(subCount);

                    for (int k = 0; k < subCount; k++)
                    {
                        values.Add(packet.ReadString());
                    }
                }
                break;
            }

            case 7:
            {
                values.Add(packet.ReadString());
                values.Add(packet.ReadInteger());
                values.Add(packet.ReadInteger());
                break;
            }
            }
            if (((category & 0xFF00) & 0x100) > 0)
            {
                values.Add(packet.ReadInteger());
                values.Add(packet.ReadInteger());
            }
            return(values.ToArray());
        }
Exemplo n.º 41
0
        private bool TryHandleHostNavigateRoom(HMessage current, HMessage previous)
        {
            if (previous.Length >= 12 &&
                current.CanRead<string>(0) &&
                current.ReadString() == "Navigation")
            {
                current.ReadString();
                if (current.ReadString() != "go.official") return false;

                if (previous.ReadInteger(0).ToString() == current.ReadString())
                {
                    OutgoingHeaders.NavigateRoom = previous.Header;

                    _outLocked[previous.Header] = RaiseOnHostNavigateRoom;
                    return true;
                }
            }
            return false;
        }
Exemplo n.º 42
0
 public HostKickPlayerEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Id = packet.ReadInteger();
 }
Exemplo n.º 43
0
 public HostWalkEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Tile = new HPoint(packet.ReadInteger(0),
         packet.ReadInteger(4));
 }
Exemplo n.º 44
0
 public PlayerDanceEventArgs(Func <Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Index = packet.ReadInteger();
     Dance = (HDance)packet.ReadInteger();
 }
Exemplo n.º 45
0
        private async Task ReceiveRemoteContractorDataAsync()
        {
            try
            {
                HMessage packet = await _remoteContractor.ReceivePacketAsync().ConfigureAwait(false);

                if (packet == null)
                {
                    Environment.Exit(0);
                }
                #region Switch: packet.Header
                switch (packet.Header)
                {
                case 0:
                {
                    _initStep++;
                    _hotel = (HHotel)packet.ReadShort();
                    break;
                }

                case 1:
                {
                    _initStep++;
                    _in  = new Incoming();
                    _out = new Outgoing();

                    string location = packet.ReadString();
                    if (!string.IsNullOrWhiteSpace(location))
                    {
                        _game = new HGame(location);
                        _game.Disassemble();

                        _game.GenerateMessageHashes();
                        if (packet.Readable > 0)
                        {
                            string hashesPath = packet.ReadString();
                            _in.Load(_game, hashesPath);
                            _out.Load(_game, hashesPath);
                        }
                        _module.ModifyGame(_game);
                    }
                    break;
                }

                case 2:
                {
                    _initStep++;
                    _gameData = new HGameData(packet.ReadString());
                    _module.ModifyGameData(_gameData);
                    break;
                }

                case 3:
                {
                    _initStep++;
                    var connection = (ContractorProxy)_connection;
                    connection.Port    = packet.ReadShort();
                    connection.Host    = packet.ReadString();
                    connection.Address = packet.ReadString();
                    break;
                }

                case 4:
                case 5:
                {
                    var destination = (HDestination)(packet.Header - 4);

                    string stamp       = packet.ReadString();
                    int    step        = packet.ReadInteger();
                    bool   isBlocked   = packet.ReadBoolean();
                    int    dataLength  = packet.ReadInteger();
                    byte[] data        = packet.ReadBytes(dataLength);
                    var    interPacket = new HMessage(data, destination);

                    var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server));
                    try
                    {
                        if (destination == HDestination.Server)
                        {
                            _module.HandleOutgoing(args);
                        }
                        else
                        {
                            _module.HandleIncoming(args);
                        }
                    }
                    finally
                    {
                        await SendInterceptedDataResponseAsync(
                            stamp, args).ConfigureAwait(false);
                    }
                    break;
                }
                }
                #endregion

                if (_initStep == 4)
                {
                    _initializationSource?.SetResult(true);
                }
            }
            finally
            {
                Task receiveRemContDataTask = ReceiveRemoteContractorDataAsync();
            }
        }
Exemplo n.º 46
0
 public HostDanceEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Dance = (HDance)packet.ReadInteger();
 }
Exemplo n.º 47
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList <HEntity> Parse(HMessage packet)
        {
            int entityCount = packet.ReadInteger();
            var entityList  = new List <HEntity>(entityCount);

            for (int i = 0; i < entityList.Capacity; i++)
            {
                int    id       = packet.ReadInteger();
                string name     = packet.ReadString();
                string motto    = packet.ReadString();
                string figureId = packet.ReadString();
                int    index    = packet.ReadInteger();
                int    x        = packet.ReadInteger();
                int    y        = packet.ReadInteger();
                double z        = double.Parse(packet.ReadString());

                packet.ReadInteger();
                int type = packet.ReadInteger();

                HGender gender        = HGender.Unknown;
                string  favoriteGroup = string.Empty;
                #region Switch Statement: type
                switch (type)
                {
                case 1:
                {
                    gender = SKore.ToGender(packet.ReadString());
                    packet.ReadInteger();
                    packet.ReadInteger();
                    favoriteGroup = packet.ReadString();
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadBoolean();

                    break;
                }

                case 2:
                {
                    packet.ReadInteger();
                    packet.ReadInteger();
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadInteger();
                    packet.ReadString();
                    break;
                }

                case 4:
                {
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadString();

                    for (int j = packet.ReadInteger(); j > 0; j--)
                    {
                        packet.ReadShort();
                    }

                    break;
                }
                }
                #endregion

                var entity = new HEntity(id, index, name,
                                         new HPoint(x, y, z), motto, gender, figureId, favoriteGroup);

                entityList.Add(entity);
            }

            return(entityList);
        }
Exemplo n.º 48
0
 public HostTradeEventArgs(Func<Task> continuation, int step, HMessage packet)
     : base(continuation, step, packet)
 {
     Index = packet.ReadInteger();
 }
Exemplo n.º 49
0
        public HRoomEntry(HMessage packet)
        {
            Id   = packet.ReadInteger();
            Name = packet.ReadString();

            OwnerId   = packet.ReadInteger();
            OwnerName = packet.ReadString();

            DoorMode     = packet.ReadInteger();
            UserCount    = packet.ReadInteger();
            MaxUserCount = packet.ReadInteger();

            Description = packet.ReadString();
            TradeMode   = packet.ReadInteger();
            Ranking     = packet.ReadInteger();
            Category    = packet.ReadInteger();
            Stars       = packet.ReadInteger();

            Tags = new string[packet.ReadInteger()];
            for (int i = 0; i < Tags.Length; i++)
            {
                Tags[i] = packet.ReadString();
            }

            var roomEntryBitmask = (HRoomFlags)packet.ReadInteger();

            if (roomEntryBitmask.HasFlag(HRoomFlags.HasCustomThumbnail))
            {
                ThumbnailUrl = packet.ReadString();
            }
            if (roomEntryBitmask.HasFlag(HRoomFlags.HasGroup))
            {
                GroupId        = packet.ReadInteger();
                GroupName      = packet.ReadString();
                GroupBadgeCode = packet.ReadString();
            }
            if (roomEntryBitmask.HasFlag(HRoomFlags.HasAdvertisement))
            {
                AdName             = packet.ReadString();
                AdDescription      = packet.ReadString();
                AdExpiresInMinutes = packet.ReadInteger();
            }

            ShowOwner   = roomEntryBitmask.HasFlag(HRoomFlags.ShowOwner);
            AllowPets   = roomEntryBitmask.HasFlag(HRoomFlags.AllowPets);
            ShowEntryAd = roomEntryBitmask.HasFlag(HRoomFlags.ShowRoomAd);
        }