Exemple #1
0
        public void ReadByMask(BinaryReader reader)
        {
            List <Action> maskActions = new List <Action>
            {
                () => Position      = new QVector3(reader.ReadInt64(), reader.ReadInt64(), reader.ReadInt64()),
                () => Rotation      = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()),
                () => Velocity      = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()),
                () => Acceleration  = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()),
                () => ExtraVelocity = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()),
                () => LookPitch     = reader.ReadSingle(),
                () => PhysicsFlags  = reader.ReadUInt32(),
                () => SpeedFlags    = reader.ReadByte(),
                () => EntityType    = reader.ReadUInt32(),
                () => CurrentMode   = reader.ReadByte(),
                () => LastShootTime = reader.ReadUInt32(),
                () => HitCounter    = reader.ReadUInt32(),
                () => LastHitTime   = reader.ReadUInt32(),
                () => Appearance.Read(reader),
                () =>
                {
                    Flags1 = reader.ReadByte();

                    // Not sure how necessary this is.
                    if (Client != null && Client.Pvp)
                    {
                        if (Flags1 == 0x40) // Non-hostile
                        {
                            Flags1 = 0x20;
                        }
                    }
                    else if (Client != null && !Client.Pvp)
                    {
                        if (Flags1 == 0x20) // Hostile
                        {
                            Flags1 = 0x40;
                        }
                    }

                    Flags2 = reader.ReadByte();
                },
                () => RollTime       = reader.ReadUInt32(),
                () => StunTime       = reader.ReadInt32(),
                () => SlowedTime     = reader.ReadUInt32(),
                () => MakeBlueTime   = reader.ReadUInt32(),
                () => SpeedUpTime    = reader.ReadUInt32(),
                () => ShowPatchTime  = reader.ReadSingle(),
                () => ClassType      = reader.ReadByte(),
                () => Specialization = reader.ReadByte(),
                () => ChargedMp      = reader.ReadSingle(),
                () =>
                {
                    notUsed1 = reader.ReadUInt32();
                    notUsed2 = reader.ReadUInt32();
                    notUsed3 = reader.ReadUInt32();
                },
                () =>
                {
                    notUsed4 = reader.ReadUInt32();
                    notUsed5 = reader.ReadUInt32();
                    notUsed6 = reader.ReadUInt32();
                },
                () => RayHit     = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()),
                () => HP         = reader.ReadSingle(),
                () => MP         = reader.ReadSingle(),
                () => BlockPower = reader.ReadSingle(),
                () =>
                {
                    MaxHpMultiplier      = reader.ReadSingle();
                    ShootSpeed           = reader.ReadSingle();
                    DamageMultiplier     = reader.ReadSingle();
                    ArmorMultiplier      = reader.ReadSingle();
                    ResistanceMultiplier = reader.ReadSingle();
                },
                () => notUsed7    = reader.ReadByte(),
                () => notUsed8    = reader.ReadByte(),
                () => Level       = reader.ReadUInt32(),
                () => CurrentXp   = reader.ReadUInt32(),
                () => ParentOwner = reader.ReadUInt64(),
                () =>
                {
                    unknownOrNotUsed1 = reader.ReadUInt32();
                    unknownOrNotUsed2 = reader.ReadUInt32();
                },
                () => unknownOrNotUsed3 = reader.ReadByte(),
                () => unknownOrNotUsed4 = reader.ReadUInt32(),
                () =>
                {
                    unknownOrNotUsed5 = reader.ReadUInt32();
                    notUsed11         = reader.ReadUInt32();
                    notUsed12         = reader.ReadUInt32();
                },
                () =>
                {
                    notUsed13 = reader.ReadUInt32();
                    notUsed14 = reader.ReadUInt32();
                    notUsed15 = reader.ReadUInt32();
                    notUsed16 = reader.ReadUInt32();
                    notUsed17 = reader.ReadUInt32();
                    notUsed18 = reader.ReadUInt32();
                },
                () =>
                {
                    notUsed20 = reader.ReadUInt32();
                    notUsed21 = reader.ReadUInt32();
                    notUsed22 = reader.ReadUInt32();
                },
                () => notUsed19 = reader.ReadByte(),
                () => ItemData.Read(reader),
                () =>
                {
                    for (int i = 0; i < EquipmentCount; ++i)
                    {
                        Item item = new Item();
                        item.Read(reader);
                        Equipment[i] = item;
                    }
                },
                () => Name = Encoding.ASCII.GetString(reader.ReadBytes(16)).TrimEnd(' ', '\0'),
                () =>
                {
                    Skills = new uint[SkillCount];
                    for (int i = 0; i < SkillCount; ++i)
                    {
                        Skills[i] = reader.ReadUInt32();
                    }
                },
                () => IceBlockFour = reader.ReadUInt32()
            };

            LastBitmask = reader.ReadBytes(8);
            BitArray bitArray = new BitArray(LastBitmask);

            for (int i = 0; i < maskActions.Count; ++i)
            {
                if (!bitArray.Get(i))
                {
                    continue;
                }

                maskActions[i]();
            }
        }