Advertisement
NoTextForSpeech

cheat engine get datamodel

Sep 14th, 2024
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.13 KB | None | 0 0
  1. util.aobScan = function(aob, code)
  2.     local new_results = {}
  3.     local results = AOBScan(aob, "*X*C*W")
  4.     if not results then
  5.         return new_results
  6.     end
  7.     for i = 1, results.Count do
  8.         local x = getAddress(results[i - 1])
  9.         table.insert(new_results, x)
  10.     end
  11.     return new_results
  12. end
  13.  
  14. util.intToBytes = function(val)
  15.     if val == nil then
  16.         error'Cannot convert nil value to byte table'
  17.     end
  18.     local t = { val & 0xFF }
  19.     for i = 1, 7 do
  20.         table.insert(t, (val >> (8 * i)) & 0xFF)
  21.     end
  22.     return t
  23. end
  24.  
  25. loader = {}
  26. loader.start = function()
  27.     local players, parentOffset;
  28.     local results = util.aobScan("506C6179657273??????????????????07000000000000000F")
  29.     for rn = 1, #results do
  30.         local result = results[rn]
  31.  
  32.         if not result then
  33.             return false
  34.         end
  35.  
  36.         local bres = util.intToBytes(result);
  37.         local aobs = ""
  38.         for i = 1, 8 do
  39.             aobs = aobs .. string.format("%02X", bres[i])
  40.         end
  41.  
  42.         local valid = false
  43.         local res = util.aobScan(aobs)
  44.         if res then
  45.             for i = 1, #res do
  46.                 result = res[i]
  47.                 for j = 1, 10 do
  48.                     local ptr = readQword(result - (8 * j))
  49.                     if ptr then
  50.                         ptr = readQword(ptr + 8)
  51.                         if (readString(ptr) == "Players") then
  52.                             players = (result - (8 * j)) - 0x18
  53.                             valid = true
  54.                             break
  55.                         end
  56.                     end
  57.                 end
  58.                 if valid then break end
  59.             end
  60.         end
  61.  
  62.         if valid then break end
  63.     end
  64.  
  65.     for i = 0x10, 0x120, 8 do
  66.         local ptr = readQword(players + i)
  67.         if ptr ~= 0 and ptr % 4 == 0 then
  68.             if (readQword(ptr + 8) == ptr) then
  69.                 parentOffset = i
  70.                 break
  71.             end
  72.         end
  73.     end
  74.  
  75.     local dataModel = readQword(players + parentOffset)
  76.     print(string.format("DataModel: %08X", dataModel))
  77. end
  78.  
  79. loader.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement