Пример #1
0
        public override void ToStream(Stream stream, bool includeHeader = true)
        {
            /*
             * Length and ID headers get written in the base packet class.
             */
            if (includeHeader)
            {
                base.ToStream(stream, includeHeader);
            }

            /*
             * Always make sure to not close the stream when serializing.
             *
             * It is up to the caller to decide if the underlying stream
             * gets closed.  If this is a network stream we do not want
             * the regressions of unconditionally closing the TCP socket
             * once the payload of data has been sent to the client.
             */
            using (BinaryWriter br = new BinaryWriter(stream, new System.Text.UTF8Encoding(), leaveOpen: true)) {
                br.Write(PlayerId);
                br.Write(PlayerDeathReason);

                if (FromPlayerIndex != -1)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(0, true);
                    br.Write(FromPlayerIndex);
                }

                if (FromNpcIndex != -1)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(1, true);
                    br.Write(FromNpcIndex);
                }

                if (FromProjectileIndex != -1)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(2, true);
                    br.Write(FromProjectileIndex);
                }

                if (FromOther != 254)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(3, true);
                    br.Write(FromOther);
                }

                if (FromProjectileType != 0)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(4, true);
                    br.Write(FromProjectileType);
                }

                if (FromItemType != 0)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(5, true);
                    br.Write(FromItemType);
                }

                if (FromItemPrefix != 0)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(6, true);
                    br.Write(FromItemPrefix);
                }

                if (FromCustomReason != null)
                {
                    PlayerDeathReason = PlayerDeathReason.SetBit(7, true);
                    br.Write(FromCustomReason);
                }

                br.Write(Damage);
                br.Write(HitDirection);
                br.Write(Flags);
            }
        }