コード例 #1
0
        public Player(Pointer playerTarget)
        {
            activePtr = playerTarget.Clone();

            Pointer playerEntity = playerTarget.Adjust(4);

            switch (GameHook.CurrentVersion)
            {
            case GameVersion.TFE: {
                namePtr = playerEntity.AddOffsets(0x310, 0x0);

                startTimeUnixPtr  = playerEntity.AddOffsets(0xAC0);
                levelStartTimePtr = playerEntity.AddOffsets(0xAC8);

                LevelStats = new PlayerStats(playerEntity.AddOffsets(0x1240));
                GameStats  = new PlayerStats(playerEntity.AddOffsets(0x1268));
                break;
            }

            case GameVersion.TSE: {
                namePtr = playerEntity.AddOffsets(0x310, 0x0);

                startTimeUnixPtr  = playerEntity.AddOffsets(0xC38);
                levelStartTimePtr = playerEntity.AddOffsets(0xC40);

                LevelStats = new PlayerStats(playerEntity.AddOffsets(0x2584));
                GameStats  = new PlayerStats(playerEntity.AddOffsets(0x25AC));
                break;
            }

            case GameVersion.REVOLUTION: {
                namePtr = playerEntity.AddOffsets(0x368, 0x0);

                startTimeUnixPtr  = playerEntity.AddOffsets(0xC2C);
                levelStartTimePtr = playerEntity.AddOffsets(0xC34);

                LevelStats = new PlayerStats(playerEntity.AddOffsets(0x2B20));
                GameStats  = new PlayerStats(playerEntity.AddOffsets(0x2B90));
                break;
            }
            }
        }
コード例 #2
0
 public PlayerStats(Pointer basePtr)
 {
     if (GameHook.CurrentVersion == GameVersion.REVOLUTION)
     {
         scorePtr        = basePtr.Adjust(0x0);
         killsPtr        = basePtr.Adjust(0x8);
         deathsPtr       = basePtr.Adjust(0x10);
         secretsPtr      = basePtr.Adjust(0x20);
         totalKillsPtr   = basePtr.Adjust(0x40);
         totalSecretsPtr = basePtr.Adjust(0x58);
     }
     else
     {
         scorePtr        = basePtr.Adjust(0x0);
         killsPtr        = basePtr.Adjust(0x4);
         deathsPtr       = basePtr.Adjust(0x8);
         secretsPtr      = basePtr.Adjust(0xC);
         totalKillsPtr   = basePtr.Adjust(0x18);
         totalSecretsPtr = basePtr.Adjust(0x20);
     }
 }
コード例 #3
0
        public static void TryHookGame()
        {
            foreach (Process p in Process.GetProcessesByName("SeriousSam"))
            {
                Manager = new MemManager(p);

                Engine = Manager.HookedProcess.Modules.Cast <ProcessModule>().Where(m => m.ModuleName == "Engine.dll").FirstOrDefault();
                if (Engine == null)
                {
                    continue;
                }

                CurrentVersion = CheckGameVersion();
                if (CurrentVersion != GameVersion.NONE)
                {
                    break;
                }
            }

            if (CurrentVersion == GameVersion.NONE)
            {
                return;
            }

            IntPtr _pNetwork = Manager.Read <IntPtr>(Manager.Read <IntPtr>(Manager.SigScan(
                                                                               Engine.BaseAddress,
                                                                               Engine.ModuleMemorySize,
                                                                               2,
                                                                               "8B 0D ????????", // mov ecx,[Engine._pNetwork]
                                                                               "83 C4 08",       // add esp,08
                                                                               "E8 ????????",    // call Engine.CNetworkLibrary::IsPaused
                                                                               "85 C0"           // test eax,eax
                                                                               )));

            if (_pNetwork == IntPtr.Zero)
            {
                CurrentVersion = GameVersion.NONE;
                return;
            }

            if (CurrentVersion == GameVersion.REVOLUTION)
            {
                difficultyPtr = new Pointer(_pNetwork, 0x9C);
                currentIGTPtr = new Pointer(_pNetwork, 0x20, 0x58);
                levelNamePtr  = new Pointer(_pNetwork, 0x12EC, 0x0);
            }
            else
            {
                difficultyPtr = new Pointer(_pNetwork, 0x988);
                currentIGTPtr = new Pointer(_pNetwork, 0x20, 0x38);
                levelNamePtr  = new Pointer(_pNetwork, (CurrentVersion == GameVersion.TFE)
                                              ? 0x1284
                                              : 0x1288, 0x0);
            }

            int     playerCount = Manager.Read <Int32>(new Pointer(_pNetwork, 0x20, 0x0));
            Pointer firstPlayer = new Pointer(_pNetwork, 0x20, 0x4, 0x0);

            AllPlayers = new Player[playerCount];
            for (int i = 0; i < playerCount; i++)
            {
                AllPlayers[i] = new Player(firstPlayer);
                firstPlayer   = firstPlayer.Adjust(PLAYER_TARGET_SIZE);
            }
        }