Beispiel #1
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);
        }
Beispiel #2
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;
        }
Beispiel #3
0
        public Overlay(Process gameProcess)
        {
            process = gameProcess;

            // check the game window exists then create the overlay
            while (true)
            {
                handle = NativeMethods.FindWindow(null, "STAR WARS Battlefront II");

                if (handle != IntPtr.Zero)
                {
                    break;
                }
            }

            // check if game running. timed at 2-5ms per call so runs in own thread
            gameCheckThread = new Thread(new ParameterizedThreadStart(GameCheck));
            gameCheckThread.Start();

            // Starting the ESP before the game leaves invalid process info so we'll wait a second to let the game check thread fix that
            if (process.MainWindowHandle == IntPtr.Zero)
            {
                Thread.Sleep(1000);
            }

            // set up the remote process memory class
            RPM.OpenProcess(process.Id);

            // setup the overlay
            var rendererOptions = new Direct2DRendererOptions()
            {
                AntiAliasing = OPTIONS_AA,
                Hwnd         = IntPtr.Zero,
                MeasureFps   = OPTIONS_ShowFPS,
                VSync        = OPTIONS_VSync
            };

            OverlayManager manager = new OverlayManager(handle, rendererOptions);

            overlay    = manager.Window;
            d2d        = manager.Graphics;
            clearBrush = d2d.CreateBrush(0xF5, 0xF5, 0xF5, 0);  // our transparent colour

            // start the update thread
            updateThread = new Thread(new ParameterizedThreadStart(Update));
            updateThread.Start();
        }
Beispiel #4
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;
        }
Beispiel #5
0
        private void Update(object sender)
        {
            // set up our colours for drawing
            var blackBrush      = d2d.CreateBrush(0, 0, 0, 255);
            var redBrush        = d2d.CreateBrush(153, 0, 0, 128);
            var yellowBrush     = d2d.CreateBrush(153, 153, 0, 128);
            var orangeBrush     = d2d.CreateBrush(255, 200, 0, 255);
            var darkOrangeBrush = d2d.CreateBrush(255, 100, 0, 255);
            var greenBrush      = d2d.CreateBrush(0, 255, 0, 255);
            var blueBrush       = d2d.CreateBrush(0, 0, 255, 255);
            var whiteBrush      = d2d.CreateBrush(250, 250, 250, 128);
            var vehicleBrush    = d2d.CreateBrush(243, 243, 255, 128);
            var heroVisBrush    = d2d.CreateBrush(240, 0, 255, 255);
            var heroBrush       = d2d.CreateBrush(120, 0, 120, 255);

            // and our font
            var font = d2d.CreateFont("Tahoma", 9);

            Direct2DBrush brush;

            Console.WriteLine("Initialising...");

            // initialise the GameManager class that handles the player data
            gameManager = new GameManager(process, new Rectangle(0, 0, overlay.Width, overlay.Height));

            Console.WriteLine("Ready.");

            // main loop
            while (IsGameRunning)
            {
                if (gameManager.UpdateFrame(new Rectangle(0, 0, overlay.Width, overlay.Height)))
                {
                    d2d.BeginScene();
                    d2d.ClearScene(clearBrush);

                    if (OPTIONS_ShowFPS)
                    {
                        d2d.DrawTextWithBackground($"FPS: {d2d.FPS}", 20, 20, font, greenBrush, blackBrush);
                    }

                    foreach (Player player in gameManager.AllPlayers)
                    {
                        if (!player.IsDead)
                        {
                            if (player.IsVisible)
                            {
                                if (player.MaxHealth < 400)
                                {
                                    brush = yellowBrush;
                                }
                                else
                                {
                                    brush = heroVisBrush;
                                }
                            }
                            else
                            {
                                if (player.MaxHealth < 400)
                                {
                                    brush = redBrush;
                                }
                                else
                                {
                                    brush = heroBrush;
                                }
                            }

                            if (!player.InVehicle)
                            {
                                /*if (!player.IsVisible)*/ DrawAABB(player.TransformAABB, brush);
                            }
                            else
                            {
                                brush = vehicleBrush;

                                DrawAABB(player.TransformAABB, brush);
                            }

                            var name = player.Name;
                            var dist = $"{(int)player.Distance}m";

                            Vector3 textPos = new Vector3(player.Position.X, player.Position.Y, player.Position.Z);
                            if (gameManager.WorldToScreen(textPos, out textPos))
                            {
                                var textPosX = textPos.X - ((name.Length * font.FontSize) / 4);
                                d2d.DrawText(name, textPosX - 1, textPos.Y - 1, font, blackBrush);
                                d2d.DrawText(name, textPosX, textPos.Y, font, whiteBrush);

                                textPosX = textPos.X - ((dist.Length * font.FontSize) / 4);
                                var textPosY = textPos.Y + font.FontSize;

                                d2d.DrawText(dist, textPosX - 1, textPosY - 1, font, blackBrush);
                                d2d.DrawText(dist, textPosX, textPosY, font, whiteBrush);
                            }
                        }
                    }

                    d2d.EndScene();
                }
            }

            // clean up if the game has closed
            RPM.CloseProcess();
            Environment.Exit(0);
        }