Example #1
0
        private void OnSendTileSquare(TSPlayer player, BinaryReader reader)
        {
            var size = reader.ReadUInt16();

            if (size != 1)
            {
                return;
            }

            reader.ReadInt16();
            reader.ReadInt16();
            var tile = new NetTile(reader.BaseStream);

            if (tile.Type == TileID.Mannequin || tile.Type == TileID.Womannequin)
            {
                var baseFrameX = tile.FrameX / 100;
                ILookup <int, Item> lookup;
                if (tile.FrameY == 0)
                {
                    lookup = _headSlotLookup;
                }
                else if (tile.FrameY == 18)
                {
                    lookup = _bodySlotLookup;
                }
                else
                {
                    lookup = _legSlotLookup;
                }

                var armorItem = lookup[baseFrameX].FirstOrDefault();
                if (armorItem != null)
                {
                    var balanceSheet = player.GetOrCreateBalanceSheet();
                    balanceSheet.AddTransaction(Transaction.WorldSlot, armorItem.type, -1);
                }
            }
            else if (tile.Type == TileID.WeaponsRack)
            {
                var baseFrameX = tile.FrameX - 5000 * (tile.FrameX / 5000);
                // When placing a weapon an a weapon rack, the client will send two SendTileSquare packets; the first
                // gives the item ID, and the second gives the item prefix. We know which one is the item ID since the
                // base frameX is over 100.
                if (baseFrameX > 100)
                {
                    player.SetWeaponRackItemId(baseFrameX - 100);
                }
                else
                {
                    var balanceSheet     = player.GetOrCreateBalanceSheet();
                    var weaponRackItemId = player.GetWeaponRackItemId();
                    balanceSheet.AddTransaction(Transaction.WorldSlot, weaponRackItemId, -1, (byte)baseFrameX);
                }
            }
        }