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); }