Ejemplo n.º 1
0
        public GameManager(Process process, Rectangle screenSize)
        {
            SigScanSharp SigScan = new SigScanSharp(RPM.GetHandle());
            var          t       = process.MainModule;

            SigScan.SelectModule(process.MainModule);

            SigScan.AddPattern("GameRenderer", "48 8B 0D ? ? ? ? 48 85 C9 74 0B 48 8B 01 BA ? ? ? ? FF 50 68");
            SigScan.AddPattern("GameContext", "48 89 15 ? ? ? ? 48 89 CB");
            SigScan.AddPattern("FirstTypeInfo", "48 8B 05 ? ? ? ? 48 89 41 08 48 89 0D ? ? ? ?");

            var result = SigScan.FindPatterns(out long lTime);

            pGameContext   = SigScan.FindOffset(result["GameContext"]);
            pGameRenderer  = SigScan.FindOffset(result["GameRenderer"]);
            pFirstTypeInfo = SigScan.FindOffset(result["FirstTypeInfo"]);

            Console.WriteLine("GameRenderer  : 0x{0}", pGameRenderer.ToString("X"));
            Console.WriteLine("GameContext   : 0x{0}", pGameContext.ToString("X"));
            Console.WriteLine("FirstTypeInfo : 0x{0}", pFirstTypeInfo.ToString("X"));

            if (!RPM.IsValid(pGameContext))
            {
                IsValidGame = false; return;
            }
            if (!RPM.IsValid(pGameRenderer))
            {
                IsValidGame = false; return;
            }
            if (!RPM.IsValid(pFirstTypeInfo))
            {
                IsValidGame = false; return;
            }

            pGameContext  = RPM.Read <ulong>(pGameContext);
            pGameRenderer = RPM.Read <ulong>(pGameRenderer);

            gameContext  = RPM.Read <Frostbite.ClientGameContext>(pGameContext);
            gameRenderer = RPM.Read <Frostbite.GameRenderer>(pGameRenderer);

            pPlayerManager  = gameContext.m_ClientPlayerManager;
            pGameRenderView = gameRenderer.m_RenderView;

            if (!RPM.IsValid(gameContext.m_ClientPlayerManager))
            {
                IsValidGame = false; return;
            }
            playerManager = RPM.Read <Frostbite.ClientPlayerManager>(gameContext.m_ClientPlayerManager);

            AllPlayers = new List <Player>();

            ScreenSize = screenSize;
        }
Ejemplo n.º 2
0
        public bool UpdateFrame(Rectangle screenSize)
        {
            ScreenSize  = screenSize;
            IsValidGame = false;

            AllPlayers.Clear();

            if (!RPM.IsValid(gameContext.m_ClientPlayerManager))
            {
                return(false);
            }
            playerManager = RPM.Read <Frostbite.ClientPlayerManager>(gameContext.m_ClientPlayerManager);

            if (!RPM.IsValid(gameRenderer.m_RenderView))
            {
                return(false);
            }
            gameRenderview = RPM.Read <Frostbite.RenderView>(gameRenderer.m_RenderView);
            ViewProjection = gameRenderview.m_ViewProjection;

            if (!RPM.IsValid(playerManager.m_LocalPlayer))
            {
                return(false);
            }
            LocalPlayer = new Player(playerManager.m_LocalPlayer);

            if (LocalPlayer.IsValidPlayer)
            {
                if (!RPM.IsValid(playerManager.m_PlayerList))
                {
                    return(false);
                }

                for (ulong i = 0; i < maxPlayers; i++)
                {
                    Player player = new Player(RPM.Read <ulong>(playerManager.m_PlayerList + (i * sizeof(ulong))));

                    if ((player.IsValidPlayer) && (player.Name != LocalPlayer.Name))
                    {
                        if ((player.TeamId != LocalPlayer.TeamId) && (player.TeamId != 0))
                        {
                            player.ScreenPosition = (Vector2)WorldToScreen(player.Position);
                            player.Distance       = Vector3.Subtract(LocalPlayer.Position, player.Position).Length();

                            AllPlayers.Add(player);
                        }
                    }
                }
            }

            IsValidGame = true;
            return(true);
        }
Ejemplo n.º 3
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;
        }