GhostRunner2Demo.asl 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. state("Ghostrunner2-Win64-Shipping")
  2. {
  3. }
  4. init
  5. {
  6. vars.TotalTime = 0f;
  7. vars.CurrentLevelTime = 0f;
  8. vars.timerRunning = 0;
  9. // Code stipet written by just_ero, derived from Micrologist's original codework on UE4 sigscanning
  10. Func<int, string, IntPtr> scan = (offset, pattern) => {
  11. var scn = new SignatureScanner(game, game.MainModule.BaseAddress, game.MainModule.ModuleMemorySize);
  12. var pttern = new SigScanTarget(offset, pattern);
  13. var ptr = scn.Scan(pttern);
  14. return ptr + 0x4 + game.ReadValue<int>(ptr);
  15. };
  16. vars.GameEngine = scan(0x3, "48 89 05 ?? ?? ?? ?? 48 85 c9 74 ?? e8 ?? ?? ?? ?? 48 8d 4d");
  17. //7FF668598330
  18. //7FF66859BCB0
  19. vars.PlayerEngine = scan (0x3, "48 8b 05 ?? ?? ?? ?? c3 cc cc cc cc cc cc cc cc 48 39 51");
  20. vars.UWorld = scan(0x3, "48 8b 1d ?? ?? ?? ?? 48 85 db 75 ?? e8 ?? ?? ?? ?? 48 8b d8 48 85 c0 74 ?? e8 ?? ?? ?? ?? 48 8b 53 ?? 4c 8d 40 ?? 48 63 40 ?? 3b 42 ?? 7f ?? 48 8b c8 48 8b 42 ?? 4c 39 04 c8 74 ?? 49 8b df");
  21. print(vars.PlayerEngine.ToString("X"));
  22. vars.watchers = new MemoryWatcherList
  23. {
  24. //Current map in engine
  25. new StringWatcher(new DeepPointer(vars.GameEngine, 0x8B0, 0x0), 100) { Name = "CurMap"},
  26. // Player individualized checks
  27. new MemoryWatcher<bool>(new DeepPointer(vars.PlayerEngine, 0x90, 0x6CF)) { Name = "isPlayerDead"},
  28. new MemoryWatcher<bool>(new DeepPointer(vars.PlayerEngine, 0x90, 0x12B4)) { Name = "isPlayerInCutscene"},
  29. //World/Menuing Checks
  30. new MemoryWatcher<bool>(new DeepPointer(vars.UWorld, 0x238)) { Name = "isPaused"},
  31. new MemoryWatcher<float>(new DeepPointer(vars.UWorld, 0x1D0, 0x118, 0x3AC)) { Name = "CurrentIGT"},
  32. new MemoryWatcher<float>(new DeepPointer(vars.UWorld, 0x1D0, 0x118, 0x3A8)) { Name = "PreviousTime"},
  33. };
  34. }
  35. update
  36. {
  37. vars.watchers.UpdateAll(game);
  38. current.CurMap = vars.watchers["CurMap"].Current;
  39. current.IGT = vars.watchers["CurrentIGT"].Current;
  40. old.IGT = vars.watchers["CurrentIGT"].Old;
  41. current.PreviousTime = vars.watchers["PreviousTime"].Current;
  42. current.isPaused = vars.watchers["isPaused"].Current;
  43. current.isPlayerInCutscene = vars.watchers["isPlayerInCutscene"].Current;
  44. old.isPlayerInCutscene = vars.watchers["isPlayerInCutscene"].Old;
  45. current.isPlayerDead = vars.watchers["isPlayerDead"].Current;
  46. //print(current.IGT.ToString());
  47. if ((vars.timerRunning == 1))
  48. {
  49. vars.TotalTime = current.PreviousTime + current.IGT;
  50. vars.CurrentLevelTime = 0f;
  51. }
  52. print(vars.CurrentLevelTime.ToString());
  53. }
  54. isLoading
  55. {
  56. return true;
  57. }
  58. start
  59. {
  60. return ((!current.isPlayerDead) && (!current.isPlayerInCutscene) && (old.isPlayerInCutscene) && (!current.CurMap.Contains("MainMenu")));
  61. }
  62. onStart
  63. {
  64. vars.TotalTime = 0f;
  65. vars.timerRunning = 1;
  66. }
  67. gameTime
  68. {
  69. if (!current.CurMap.Contains("MainMenu") && (!current.isPlayerInCutscene) && (!current.isPaused))
  70. {
  71. return TimeSpan.FromSeconds(vars.TotalTime);
  72. }
  73. }
  74. reset
  75. {
  76. return (current.CurMap.Contains("MainMenu"));
  77. }
  78. onReset
  79. {
  80. vars.TotalTime = 0f;
  81. vars.timerRunning = 0;
  82. }