Jump to content

Count_Nosferatu

Contributor
  • Posts

    128
  • Joined

  • Last visited

  • Days Won

    9

Everything posted by Count_Nosferatu

  1. Long tap on desired address, and select "Search Pointer" Or use in script gg.searchPointer() https://gameguardian.net/help/classgg.html#a5eef9aac9f02932a4c67a184edec2bd4
  2. The value of one byte can be from 0 to 255 decimal numbers. (0x00 - 0xFF) If the decimal number is greater than 255, then it is already two or more bytes. 256 - 0x01 & 0x00 257 - 0x01 & 0x01 999 - 0x03 & 0xE7
  3. Instead of the last line in your script, write: local r = getListItems() gg.clearList() local t for i = 1, #r do t = gg.getValues({{address = r[i].address, flags = gg.TYPE_DWORD}})[1].value if t ~= 670 then return else break end end print(r[i].value) print(r[i].address) Then do whatever you want.
  4. Hi Guys. Open the script with any text editor, the comments say what needs to be done for new versions of the game. Specifically for version 12.6.1 you need to change: local Events = { -- For RR3 v12.5 'HUAYRA ROYALE (Flashback) - August 20, 2024', 'Ferrari 296 GTB TTC - August 26, 2024', "F1 PIRELLI GP D'ITALIA 2024 (Race Day) - August 27, 2024", 'TRACK DAY: MONZA SP1 (Flashback) - September 1, 2024', 'Acura NSX GT3 LTS - September 6, 2024', 'GT3 Challenge TTC - September 10, 2024', 'Jaguar C-X75 R3 Spec LTS - September 11, 2024', 'F1 SINGAPORE GP 2024 (Race Day) - September 16, 2024', } local Date = { -- For RR3 v12.6 '2024082000', '2024082600', '2024082700', '2024090100', '2024090600', '2024091000', '2024091100', '2024091600', }
  5. I think the problem is not in the search, but in the memory overflow after execution gg.loadResults(results)
  6. For example, look at this part of the code, here you can see the main difference between x32 and x64 local f = {} local f1 = 0 local f2 = 0 local f3 = 0 local b = 0 local d2 = '2;h08;h32;h30;h30;h39::' local d6 = '6;h08;h32;h30;h31;h30::' local d7 = '7;h08;h32;h30;h31;h33::' local bytes = 9 gg.setRanges(gg.REGION_ANONYMOUS) if gg.getTargetInfo().x64 then bytes = 13 gg.setRanges(gg.REGION_C_ALLOC | gg.REGION_OTHER) end gg.searchNumber(d2 ..bytes, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 1) f = gg.getResults(1) f1 = f[1].address gg.toast('\nFound data for item #2') gg.clearResults() gg.searchNumber(d6 ..bytes, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 1) f = gg.getResults(1) f2 = f[1].address gg.toast('\nFound data for item #6') gg.clearResults() gg.searchNumber(d7 ..bytes, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 1) f = gg.getResults(1) f3 = f[1].address gg.toast('\nFound data for item #7') gg.clearResults() if gg.getTargetInfo().x64 then gg.searchNumber(f1 ..';' ..f2 ..';' ..f3 ..'::24', gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 1) b = gg.getResultCount() if b == 3 then gg.refineNumber(f1, gg.TYPE_QWORD, false, gg.SIGN_EQUAL, 0, -1, 0) b = gg.getResultCount() f = gg.getResults(1) end else gg.searchNumber(f1 ..';' ..f2 ..';' ..f3 ..'::12', gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 1) b = gg.getResultCount() if b == 3 then gg.refineNumber(f1, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1, 0) b = gg.getResultCount() f = gg.getResults(1) end end gg.alert('Found first address of items table')
  7. My grandfather used to say: "Everything is new, this is long forgotten old."
  8. Pointer is jump address. For 32bit programs, address is 4 bytes DWORD. For 64bit programs, address is 8 bytes QWORD
  9. Count_Nosferatu

    Game lib

    I think that the problem has not yet been solved. It is not clear which range should be used. The script finds many ranges with ['type'] = 'rw-p' t = gg.getRangesList('com.ea.games.r3_row*base.apk') for i = 1, #t do if t[i]['type'] == 'rw-p' then print(t[i]) end end script-output.txt
  10. Count_Nosferatu

    Game lib

    Script ended: Script error: luaj.o: /storage/emulated/0/Pictures/Scripts/pointerTest.lua:67 ` if ((a[1].address > v["start"]) and (a[1].address < v["end"])) then` attempt to index ? (a nil value) with key 'address' (field '1')
  11. Count_Nosferatu

    Game lib

    Doesn't really work. It is not clear which of base apk to count from. gg.setRanges(gg.REGION_CODE_APP) t = gg.getRangesList('^/data/*com.ea.games.r3_row*base.apk*$') print('Found ' ..#t ..' results') a = 0 for i = 1, #t do if t[i]['type'] == 'rw-p' then print(t[i]) a = a + 1 end end print('Found ' ..a ..' rw-p results') -- -> Script ended: Found 37 results { -- table(5d5648b) ['end'] = 133868052664320, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868052647936, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(f005968) ['end'] = 133868054269952, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868054241280, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(cd3f181) ['end'] = 133868055478272, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868055474176, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(4995226) ['end'] = 133868055621632, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868055617536, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(bb3be67) ['end'] = 133868057997312, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868057923584, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(a35a414) ['end'] = 133868058820608, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868058816512, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(c4d24bd) ['end'] = 133868059889664, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868059885568, ['state'] = 'O', ['type'] = 'rw-p', } { -- table(5386ab2) ['end'] = 133868116672512, ['internalName'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['name'] = '/data/app/com.ea.games.r3_row-etCOPHVNo-lYN2A8uKT50Q==/base.apk', ['start'] = 133868116594688, ['state'] = 'O', ['type'] = 'rw-p', } Found 8 rw-p results
  12. Count_Nosferatu

    Game lib

    Tablet Android 10 x64 with VirtualXposed, script returned this: Script ended: { -- table(8e7fafb) [1] = { -- table(2608718) ['arch'] = 'AArch64', ['end'] = 522830204928, ['internalName'] = '/data/data/io.va.exposed/virtual/data/app/com.ea.games.r3_row/base.apk', ['name'] = '/data/data/io.va.exposed/virtual/data/app/com.ea.games.r3_row/base.apk', ['start'] = 522830127104, ['state'] = 'O', ['type'] = 'rw-p', }, } It's normal ? print(gg.getTargetInfo()) --> --- ['nativeLibraryDir'] = '/data/user/0/io.va.exposed/virtual/data/app/com.ea.games.r3_row/lib', ---
  13. View File RR3 All version. Unlocks events in current ROUND. Unlocks events in current ROUND, which have not yet begun. Automatically changes rows count in gg.choice(), depending on the current date. Open source Submitter Count_Nosferatu Submitted 01/16/2024 Category LUA scripts  
  14. Version 1.0.0

    298 downloads

    Unlocks events in current ROUND, which have not yet begun. Automatically changes rows count in gg.choice(), depending on the current date. Open source
  15. Possible version of your script. Search is done once when script starts. Then it goes into invisible mode and waits for GG icon to be pressed. Until you select “Exit”, all found data in tables will be saved. gg.isVisible(false) gg.clearResults() gg.clearList() -------------Flying cost-------------------- gg.searchNumber( "-8.0004e10",gg.TYPE_FLOAT) -- Why do a refining if you don’t have a group search? gg.refineNumber(' -8.0004e10',gg.TYPE_FLOAT) Fly = gg.getResults(gg.getResultsCount()) gg.clearResults() -------------Energy cost-------------------- gg.searchNumber('55;53', gg.TYPE_FLOAT) -- Refining is needed here. gg.refineNumber('53', gg.TYPE_FLOAT) Energy = gg.getResults(gg.getResultsCount()) gg.clearResults() -------------Water cost-------------------- gg.searchNumber("7018090782024269824",gg.TTYPE_QWORD) -- Why do a refining if you don’t have a group search? gg.refineNumber("7018090782024269824",gg.TTYPE_QWORD) Water = gg.getResults(gg.getResultsCount()) gg.clearResults() ::retr1:: choices = gg.choice({'Engery cost', 'Water cost', 'Exit'}, 0, '\tSelect item cost:\n⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯') if choices == 1 then for i = 1, #Water do gg.setValues({{ address = Water[i].address, flags = gg.TTYPE_QWORD, value = 7018090361117474816 }}) end for i = 1, #Energy do gg.setValues({{ address = Energy[i].address, flags = gg.TYPE_FLOAT, value = 25 }}) end for i = 1, #Fly do gg.setValues({{ address = Fly[i].address, flags = gg.TYPE_FLOAT, value = 0 }}) end gg.toast('Engery cost') end if choices == 2 then for i = 1, #Fly do gg.setValues({{ address = Fly[i].address, flags = gg.TYPE_FLOAT, value = -8.0004e10 }}) end for i = 1, #Energy do gg.setValues({{ address = Energy[i].address, flags = gg.TYPE_FLOAT, value = 53 }}) end for i = 1, #Water do gg.setValues({{ address = Water[i].address, flags = gg.TTYPE_QWORD, value = 7018090782024269824 }}) end gg.toast('Water cost') end if choices == nil or choices == 3 then gg.setVisible(true) os.exit() end while not gg.isVisible() do gg.sleep(100) end gg.setVisible(false) goto retr1 os.exit()
  16. local resultnumber = {1} print(resultnumber) --> { -- table(d2fd880) --> [1] = 1, --> }
  17. See the description of the gg.loadResults() command. https://gameguardian.net/help/classgg.html#ade5f40667e80938ba1678d0623fe7b82 Existing search results will be cleared. After executing gg.loadResults(gg.getListItems()) - "list" table is empty. In the "troll" table, results of last search.gg.searchNumber() and gg.refineNumber() You don't check the number of results found. Maybe it doesn't find anything. PS Script example is clearer if you highlight it as “code”
  18. Thank you, Captain Obvious.
  19. gg.setVisible(false) -- -- Put Your first process -- while gg.isVisible() == false do if gg.isVisible() == true then break end gg.sleep(100) end gg.setVisible(false) -- -- Put Your second process --
  20. So you don't need to use gg.addListItems() Make three tables: control, health and energy. And process what you need in each table. Main use of gg.addListItems() is to freeze values.
  21. gg.setVisible(false) gg.searchNumber('100;140', gg.TYPE_FLOAT) -- ??? -- Do you really want to search for two 4 byte numbers in 512 byte range? gg.refineNumber('100', gg.TYPE_FLOAT) controlvalue = gg.getResults(999) -- ??? -- If you need only first variable, why fill the table with 999 numbers? -- May be need controlvalue = gg.getResults(1) gg.clearResults() choice = gg.choice({'Edit it to 100','Edit it to -1','Edit it back'}) if choice == 0 then -- insert cancel message in command gg.alert() or gg.toast() gg.setVisible(true) os.exit() end if choice == 1 then gg.setVlaues({{ address = controlvalue[1].address, flags = gg.TYPE_FLOAT, value = -100 }}) end if choice == 2 then gg.setVlaues({{ address = controlvalue[1].address, flags = gg.TYPE_FLOAT, value = -1 }}) end if choice == 3 then gg.setVlaues({{ address = controlvalue[1].address, flags = gg.TYPE_FLOAT, value = 100 }}) end gg.setVisible(true) os.exit()
  22. Your script contains a function call ch1() But there is no such function.
  23. Count_Nosferatu

    Lua Obfuscator

    This has already been described. All work is done on server side. Protecting Your Lua Scripts (#55ny5bi2)
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.