示例#1
0
        private void ParseTile()
        {
            var tile = new OtTile(message.ReadLocation());

            //Console.WriteLine("[Debug] Tile received, location: " + tile.Location);

            var thingCount = message.ReadByte();

            for (int i = 0; i < thingCount; i++)
            {
                var thingType = message.ReadByte();
                if (thingType == 0x01) //Creature
                {
                    var id   = message.ReadUInt();
                    var name = message.ReadString();
                    var type = (CreatureType)message.ReadByte();

                    if (type != CreatureType.PLAYER)
                    {
                        map.AddCreature(new OtCreature {
                            Id = id, Name = name, Type = type, Location = tile.Location
                        });
                    }
                }
                else
                {
                    var id      = message.ReadUShort();
                    var subType = message.ReadByte();

                    var itemType = items.GetItemBySpriteId(id);
                    if (itemType != null)
                    {
                        var item = OtItem.Create(itemType);

                        if (item.Type.IsStackable)
                        {
                            item.SetAttribute(OtItemAttribute.COUNT, subType);
                        }
                        else if (item.Type.Group == OtItemGroup.Splash || item.Type.Group == OtItemGroup.FluidContainer)
                        {
                            item.SetAttribute(OtItemAttribute.COUNT, OtConverter.TibiaFluidToOtFluid(subType));
                        }

                        tile.AddItem(item);
                    }
                }
            }

            if (map.GetTile(tile.Location) == null)
            {
                map.SetTile(tile);
            }
        }
        private void ParseTibiaPacket(InMessage message)
        {
            var cmd = message.ReadByte();

            switch (cmd)
            {
            case 0x6C:
            case 0x6D:
                var location = message.ReadLocation();
                var stack    = message.ReadByte();
                if (location.IsCreature && !client.BattleList.ContainsCreature(location.GetCretureId(stack)))
                {
                    return;
                }
                break;
            }

            message.ReadPosition = 0;
            client.ProtocolWorld.ParseServerMessage(message);
        }