Beispiel #1
0
        public Player(ulong playerPointer)
        {
            ulong EntityComponents;

            IsValidPlayer = false;
            InVehicle     = false;

            if (!RPM.IsValid(playerPointer))
            {
                return;
            }
            CPlayer = RPM.Read <Frostbite.ClientPlayer>(playerPointer);

            if (CPlayer.x003C != 511)
            {
                return;
            }

            if (!RPM.IsValid(CPlayer.m_ControlledControllable))
            {
                return;
            }
            CSoldier = RPM.Read <Frostbite.WSClientSoldierEntity>(CPlayer.m_ControlledControllable);

            Name   = RPM.ReadString(CPlayer.m_Name, 32);
            TeamId = CPlayer.m_TeamId;

            if (RPM.IsValid(CPlayer.m_AttachedControllable))
            {
                CVehicle  = RPM.Read <Frostbite.WSClientVehicleEntity>(CPlayer.m_AttachedControllable);
                InVehicle = true;
            }

            Frostbite.HealthComponent CHealthComponent;

            if (!InVehicle)
            {
                Pose = (Frostbite.PoseType)CSoldier.m_Pose;

                IsVisible   = !(CSoldier.m_IsOccluded == 1);
                IsSprinting = (CSoldier.m_IsSprinting == 1);

                Pitch = CSoldier.m_PitchRads;
                Yaw   = CSoldier.m_YawRads;

                HeadoffsetY = CSoldier.m_HeadboneOffsetY;

                Velocity = (Vector3)CSoldier.m_Velocity;

                if (!RPM.IsValid(CSoldier.m_HealthComponent))
                {
                    return;
                }
                CHealthComponent = RPM.Read <Frostbite.HealthComponent>(CSoldier.m_HealthComponent);

                TransformAABB.AABB.Min = new Vector4(-0.350000f, 0.000000f, -0.350000f, 0);
                TransformAABB.AABB.Max = new Vector4(0.350000f, (CSoldier.m_HeadboneOffsetY + 0.3f), 0.350000f, 0);

                EntityComponents = CSoldier.m_EntityComponents;
            }
            else
            {
                if (!RPM.IsValid(CVehicle.m_HealthComponent))
                {
                    return;
                }
                CHealthComponent = RPM.Read <Frostbite.HealthComponent>(CVehicle.m_HealthComponent);
                Velocity         = (Vector3)CVehicle.m_Velocity;

                TransformAABB.AABB.Min = CVehicle.m_MinAABB;
                TransformAABB.AABB.Max = CVehicle.m_MaxAABB;

                EntityComponents = CVehicle.m_EntityComponents;
            }

            Health    = CHealthComponent.m_Health;
            MaxHealth = CHealthComponent.m_MaxHealth;

            if (IsDead)
            {
                return;
            }

            { // huangfengye's function for transformation matrix from any entity
                byte  ECX;
                byte  EAX;
                ulong pTrans;

                ECX = RPM.Read <byte>(EntityComponents + 0x09);
                EAX = RPM.Read <byte>(EntityComponents + 0x0A);

                pTrans = (ulong)((ECX + EAX * 2) * 0x20);

                var temp = EntityComponents + pTrans + 0x10;

                TransformAABB.Matrix = RPM.Read <Matrix>(EntityComponents + pTrans + 0x10);
            }

            Position = TransformAABB.Matrix.TranslationVector;

            IsValidPlayer = true;
        }