|
Cheat Engine The Official Site of Cheat Engine
|
View previous topic :: View next topic |
Author |
Message |
vng21092 Grandmaster Cheater Reputation: 15
Joined: 05 Apr 2013 Posts: 644
|
Posted: Mon Oct 12, 2015 2:53 pm Post subject: So... I made this |
|
|
Hey guys, so I've been teaching myself some LUA, and thanks to the many of you that helped me out, I was able to make this function. I actually had it up before but it was quite broken at the time so I took it down, but now I think its pretty ok. It's just my own version of an AOB scan using LUA, with an added parameter. So the syntax is as follows:
lua_aobscan("aob_name","aob_module","aob",#)
1) aob_name is just what you want your aob to be called, the same as what you'd enter in aobscan(____,90 90 90 90) and registersymbol(____)
2) aob_module is the module name, here's the cool part, there is only one syntax for this function. If the aob_module field is left as "" then it will perform a normal LUA aobscan, but if you put in a module name however, it'll perform a LUA equivalent of the aobscanmodule (faster).
3) aob is just your array of bytes
4) My little touch of salt, an indexing function. Say you want a really specific injection point, but when you scan for the aob you get more than one result, and yours happens to not be the first on the list, or in some cases the aob is just not unique at all. You use this parameter to pick the one you want. If your aob IS unique, leave this a value of 1, but if your aob ISN'T unique and appears say, 4th on a list of aobs, you'd enter a value of 4.
This function registers the symbol for you automatically, and has some error prevention. If you mistyped the AOB, and it's not found, LUA will print a message saying it wasn't found. If you mis-type a module name, it will also print a error saying the module wasn't found. If everything is fine, it won't say anything. The errors print BEFORE you close the asm window, so you'd know something was wrong even before you assigned it to the cheat table, or before you close it from editing a current script.
Just a comparison of each:
normal aobscan:
Code: | [Enable]
aobscan(my_aob1,12 34 56 78)
registersymbol(my_aob1) |
my aobscan: Code: | [Enable]
luaCall(lua_aobscan("my_aob1","","12 34 56 78",1) |
normal aobscanmodule:
Code: | [Enable]
aobscanmodule(my_aob1,module.exe,12 34 56 78)
registersymbol(my_aob1) |
my aobscanmodule Code: | [Enable]
luaCall(lua_aobscan("my_aob1","module.exe","12 34 56 78",1) |
So all in all, you save ONE LINE OF CODE Throw this in your C.E "autorun" folder if you wanna play around with it, or just have it in case you might need it one day.
Last edited by vng21092 on Mon Oct 12, 2015 5:23 pm; edited 2 times in total |
|
Back to top |
|
|
mgr.inz.Player I post too much Reputation: 218
Joined: 07 Nov 2008 Posts: 4438 Location: W kraju nad Wisla. UTC+01:00
|
Posted: Mon Oct 12, 2015 3:03 pm Post subject: |
|
|
Should be helpful for beginners
Lua script also looks good.
Nice.
PS: write new topic in "Cheat Engine Lua Scripting" sub-forum.
PSS: suggestion:
Code: | function lua_aobscan(name,module,bytes,index)
if index==nil then index=1 end
...
...
registerSymbol(name,resultSet[index-1])
...
...
registerSymbol(name,memFoundList.Address[index-1])
...
...
end |
So,
lua_aobscan("my_aob1","module.exe","12 34 56 78") will be the same as this
lua_aobscan("my_aob1","module.exe","12 34 56 78",1) _________________
|
|
Back to top |
|
|
vng21092 Grandmaster Cheater Reputation: 15
Joined: 05 Apr 2013 Posts: 644
|
Posted: Mon Oct 12, 2015 4:32 pm Post subject: |
|
|
hmm that's not a bad idea actually, but I like to see the index. Thanks for the suggestion though |
|
Back to top |
|
|
Zanzer I post too much Reputation: 126
Joined: 09 Jun 2013 Posts: 3278
|
Posted: Mon Oct 12, 2015 7:36 pm Post subject: |
|
|
registerSymbol() has a third argument that, when true, will prevent the name from being saved to the table.
This will prevent the name from already being registered when the table opens.
Don't think you'd need all the unregisterSymbol() calls after that.
It would also be nice to have a Lua failure prevent the {$asm} execution of the script too.
Not sure if someone else has a better idea, but assert(false) halts the script.
To coincide with not requiring the index, you could allow them to leave off the module name as well.
Code: | function lua_aobscan(...)
local i = #arg
-- check minimum arguments
if i < 2 then
showMessage("lua_aobscan failed: strings name and bytes are required")
assert(false)
end
-- declare local variables
local name, module, bytes, index
-- initialize index
if type(arg[i]) == "number" then
index = arg[i] - 1
i = i - 1
else
index = 0
end
-- initialize bytes
if i == 0 or type(arg[i]) ~= "string" then
showMessage("lua_aobscan failed: strings name and bytes are required")
assert(false)
else
bytes = arg[i]
i = i - 1
end
-- initialize name
if i == 0 or type(arg[1]) ~= "string" then
showMessage("lua_aobscan failed: strings name and bytes are required")
assert(false)
else
name = arg[1]
end
-- initialize module
if i == 2 then
module = arg[i]
end
print("Name: "..name)
print("Module: "..(module or "no module"))
print("Bytes: "..bytes)
print("Index: "..index)
-- etc. etc. etc.
end |
|
|
Back to top |
|
|
vng21092 Grandmaster Cheater Reputation: 15
Joined: 05 Apr 2013 Posts: 644
|
Posted: Mon Oct 12, 2015 8:11 pm Post subject: |
|
|
yea I saw that third argument in main.lua, but that isn't why I put the unregisters there. luaCall executes the code when I assign the script to the cheat table or when I press OK after editing it, registering the symbol. So when I actually want to activate the cheat I get an error saying "aob_1 already exists", so I found putting an unregister before registering it removes that problem. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|