Request for CT Automation Feature
Re: Request for CT Automation Feature
I currently don't have much more time for this request. I'm sorry. I do think it's a nice feature that I may eventually research more of, but right now I'm kind of busy with some other things. You can copy those things back into the one I posted from the original post. Just look for things that are not there.
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
"just" look for stuff that aint there he says , lols, dude i have 0 clue how to handle code its like a jungle to me , i dont get jack lol, ill gladly wait till you got some spare time to finish this for sure , no rush but was a great start for sure thanks a ton , btw ive atleast managed to add autoload on fresh start feature , for that single profile , from some old lua code i had laying around, heres the lua code, just gotta make sure to change both the DefaultProccessName and PROCESS_NAME at the bottom to your own game exe >
maybe someone else might like to help out on polishing this further besides you , not too hopeful bout that tho lol , but you never know
Code: Select all
local format = string.format
local strE = string.empty or STRING_EMPTY or ''
local t = translate
if AddressList == nil then
AddressList = getAddressList()
end
if MainForm == nil then
MainForm = getMainForm()
end
if getCEVersion == nil or getCEVersion() < 6.5 then
messageDialog('It is recommended to use at least Cheat Engine 6.7! (Your Version: '..getCEVersion()..')', mtError, mbOK)
end
errorOnLookupFailure(false)
setGlobalDelayBetweenHotkeyActivation(200)
DefaultProccessName = "pcsx2.exe"
strings_add(getAutoAttachList(), DefaultProccessName)
PRIVATETABLE, SWITCHSUPPORT = true, false
----
--
---- Logger
local Logger = {
LEVELS = {
OFF = 0,
FATAL = 1,
ERROR = 2,
WARN = 3,
INFO = 4,
DEBUG = 5,
TRACE = 6
},
Level = 0,
}
for k, v in pairs(Logger.LEVELS) do
Logger[k:lower()] = function( ... ) return end
Logger[k:lower() .. 'f'] = function( ... ) return end
-- Logger[k:lower()] = function(msg, ex) return print(msg, ex) end
-- Logger[k:lower() .. 'f'] = function(msg, ... ) return print(string.format(msg, ... )) end
end
--
---- Helpers
local function split(s, delimiter)
result = {}
for match in (s .. delimiter):gmatch('(.-)' .. delimiter) do
table.insert(result, match)
end
return result
end
local function interp(s, tbl)
if s == nil then return end
return (s:gsub('($%b{})', function(w) return tbl[w:sub(3, -2)] or w end))
end
--
---- I2CETState
I2CETState = {
--
---- Settings
DefaultState = 'default',
SaveFileName = 'I2CETState.${StateName}.txt',
UseMemoryRecordDescriptions = false,
LineEnd = '\n',
DisableBeforeLoad = true,
PrintStatus = false, --true,
SaveValueMatch = 'AUTO SET:',
LineDelimiter = ',',
ScriptID = 'I2CETStateSCRIPTID',
BlackList = {
['_[ I2CETState ]_'] = true,
['_[ Save Table State ]_'] = true,
['_[ Load Table State ]_'] = true,
},
}
function I2CETState.saveTableState(stateName)
if not inMainThread() then
synchronize(function(thread)
I2CETState.saveTableState(stateName)
end)
return
end
Logger.trace()
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
getLuaEngine().show()
end
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Saving Table State: %s', stateName))
end
local le = I2CETState.LineEnd
local ld = I2CETState.LineDelimiter
local sid = I2CETState.ScriptID
local svm = I2CETState.SaveValueMatch
if stateName == nil then
stateName = I2CETState.DefaultState
end
local fileName = interp(I2CETState.SaveFileName, { StateName = stateName } )
Logger.debugf('Using state file name: "%s"', fileName)
local fileStr = strE
for i = 0, AddressList.Count - 1 do
local mr = AddressList.getMemoryRecord(i)
if I2CETState.BlackList[mr.Description] ~= true
and mr.Description:sub(0, 16) ~= 'Load Table State'
and mr.Description:sub(0, 16) ~= 'Save Table State' then
local id = tostring(mr.ID)
if I2CETState.UseMemoryRecordDescriptions then
id = mr.Description
end
if mr.Type == vtAutoAssembler and mr.Active then
Logger.debugf('Saving script state: %d, %d, "%s"', mr.Index, mr.ID, mr.Description)
fileStr = fileStr..id..ld..sid..ld..tostring(mr.Active)..le
elseif mr.Value ~= '??' then
Logger.debugf('Saving value: %d, %d, "%s", %s', mr.Index, mr.ID, mr.Description, mr.Value)
fileStr = fileStr..id..ld..mr.Value..ld..tostring(mr.Active)..le
end
end
end
local f, err = io.open(fileName, 'w')
if err then
Logger.errorf('The file could not be opened, "%s", %s', fileName, err)
elseif f and not err then
f:write(fileStr)
f:close()
end
end
saveTableState = I2CETState.saveTableState
function I2CETState.loadTableState(stateName)
if not inMainThread() then
synchronize(function(thread)
I2CETState.loadTableState(stateName)
end)
return
end
Logger.trace()
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
getLuaEngine().show()
end
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Setting Table State: %s', stateName))
end
local le = I2CETState.LineEnd
local ld = I2CETState.LineDelimiter
local sid = I2CETState.ScriptID
local svm = I2CETState.SaveValueMatch
if stateName == nil then
stateName = I2CETState.DefaultState
end
local fileName = interp(I2CETState.SaveFileName, { StateName = stateName } )
Logger.debugf('Using state file name: "%s"', fileName)
local fileStr = nil
local f, err = io.open(fileName, 'r')
if err then
Logger.infof('The local file could not be opened, "%s", %s', fileName, err)
local tableFile = findTableFile(fileName)
if tableFile == nil then
Logger.warnf('file not found, "%s"', fileName)
return
end
local stream = tableFile.getData()
local bytes = stream.read(stream.Size)
for i = 1, #bytes do
if fileStr == nil then
fileStr = strE
end
fileStr = fileStr .. string.char(bytes[i])
end
elseif f and not err then
fileStr = f:read('*all')
f:close()
else
Logger.errorf('The file could not be opened, "%s"', fileName)
end
if I2CETState.DisableBeforeLoad then
for i = AddressList.Count - 1, 0, -1 do
local mr = AddressList.getMemoryRecord(i)
if I2CETState.BlackList[mr.Description] ~= true
and mr.Description:sub(0, 16) ~= 'Load Table State'
and mr.Description:sub(0, 16) ~= 'Save Table State' then
if mr.Active then
Logger.infof('Disabling memory record: %d, %d, "%s"', mr.Index, mr.ID, mr.Description)
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Disabling: %s', mr.Description))
end
mr.Active = false
while mr.Async and mr.AsyncProcessing do
checkSynchronize()
end
sleep(0)
end
end
end
sleep(0)
end
if fileStr == nil then
Logger.info('File string was nil')
return
end
local lines = split(fileStr, I2CETState.LineEnd)
for i, v in ipairs(lines) do
if v ~= nil and v ~= strE then
local data = split(v, I2CETState.LineDelimiter)
local mr = nil
if I2CETState.UseMemoryRecordDescriptions then
mr = AddressList.getMemoryRecordByDescription(data[1])
else
mr = AddressList.getMemoryRecordByID(tonumber(data[1]))
end
if mr ~= nil then
if mr.Type == vtAutoAssembler and mr.Active == false
and data[2] == sid and data[3] == tostring(true) then
Logger.infof('Enabling memory record: %d, %d, "%s"', mr.Index, mr.ID, mr.Description)
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Enabling: "%s"', mr.Description))
end
mr.Active = true
while mr.Async and mr.AsyncProcessing do
checkSynchronize()
end
sleep(0)
elseif mr.Type ~= vtAutoAssembler then
if mr.Value == '??' then
Logger.warnf('Memory record value not set: %d, %d, "%s", "%s"', mr.Index, mr.ID, mr.Description, mr.Value)
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Memory record value not set: "%s", "%s"', mr.Description, mr.Value))
end
else
Logger.infof('Setting memory record: %d, %d, "%s", %s, %s', mr.Index, mr.ID, mr.Description, data[1], data[2])
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Setting: "%s", %s', mr.Description, data[2]))
end
mr.Value = data[2]
if data[3] == tostring(true) then
mr.Active = true
end
end
end
else
Logger.errorf('Memory record not found: "%s", "%s", "%s"', data[1], data[2], v)
end
end
end
if I2CETState.PrintStatus and Logger.Level <= Logger.LEVELS.WARN then
print(format('Table State Set: %s', stateName))
getLuaEngine().hide()
end
end
loadTableState = I2CETState.loadTableState
--------
PROCESS_NAME = 'pcsx2.exe'
--------
-------- Auto Attach
--------
local autoAttachTimer = nil
local autoAttachTimerInterval = 100
local autoAttachTimerTicks = 0
local autoAttachTimerTickMax = 5000
local function autoAttachTimer_tick(timer)
if autoAttachTimerTickMax > 0 and autoAttachTimerTicks >= autoAttachTimerTickMax then
timer.destroy()
end
if getProcessIDFromProcessName(PROCESS_NAME) ~= nil then
timer.destroy()
openProcess(PROCESS_NAME)
getAddressList().getMemoryRecordByDescription("Load Table State").active=true
end
autoAttachTimerTicks = autoAttachTimerTicks + 1
end
autoAttachTimer = createTimer(MainForm)
autoAttachTimer.Interval = autoAttachTimerInterval
autoAttachTimer.OnTimer = autoAttachTimer_tick
Last edited by dreamcactus on Thu Jul 08, 2021 6:40 am, edited 1 time in total.
-
- Table Makers
- Posts: 690
- Joined: Mon Jul 06, 2020 3:19 am
- Reputation: 1262
Re: Request for CT Automation Feature
Do you actively try to be an annoying little puke or does it just come naturally to you?dreamcactus wrote: ↑Thu Jul 08, 2021 6:25 am"just" look for stuff that aint there he says , lols
maybe someone else might like to help out on polishing this further besides you , not too hopeful bout that tho lol
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
meh ...pretty naturally lols
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
oh btw for anyone that dont know this for autohooking of CTs to game exes , you gotta add them into CEs settings under the
option named automatically attach to process named:
option named automatically attach to process named:
Re: Request for CT Automation Feature
getAutoAttachList().add("AutoAttachMyGame.exe")
Quite the interesting read over the two threads.. best of luck.
Try not to be so abrasive towards people when they offer help, though, even if you don't understand it. All I got was that you really wanted to be spoonfed the solution, with nothing in return. Some people are really nice and will take on the project but I can't see the reasoning in passively attacking the people who offered help in the first place.
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
been a few there ...sup , btw ive been brainstorming how to further improve this automation feature ....after finding this , id like to integrate it
[Link]
if possible , aka to have it additionally autoload all .CEAs in game dir, without having to add .CEAs names one by one in LUA
btw is there a solution to not having to set the game exe twice , once at the top and once at the bottom of the lua script we hacked together?
heres a CT that incorporates current features , appreciated if someone could have a look at current code and maybe even a clean up if possible , thanks
@EpicBirdi, your right and i try to not be too abrasive ...just kinda have to defend myself when some folks lash out there....sorry , not my idea of fun either
[Link]
if possible , aka to have it additionally autoload all .CEAs in game dir, without having to add .CEAs names one by one in LUA
btw is there a solution to not having to set the game exe twice , once at the top and once at the bottom of the lua script we hacked together?
heres a CT that incorporates current features , appreciated if someone could have a look at current code and maybe even a clean up if possible , thanks
@EpicBirdi, your right and i try to not be too abrasive ...just kinda have to defend myself when some folks lash out there....sorry , not my idea of fun either
- Attachments
-
- NGS2SPAWNMOD.CT
- (334.99 KiB) Downloaded 74 times
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
so heres an update ...think i managed to remove the dual .exe input requirement for the lua for starters...
- Attachments
-
- NGS2SPAWNMOD.CT
- (334.94 KiB) Downloaded 73 times
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
as said this feature would be much appreciated >
....after finding this , id like to integrate it
[Link]
if possible , aka to have it additionally autoload all .CEAs in game dir, without having to add .CEAs names one by one in LUA
....after finding this , id like to integrate it
[Link]
if possible , aka to have it additionally autoload all .CEAs in game dir, without having to add .CEAs names one by one in LUA
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
anybody? would be much appreciated as usual guys, wheres my expert level CE crew at.... , gonna need all hands on deck for this LUA update i recon ...appreciated alot , mean it , comes from the heart...., aim as usual is to make the automation include even more automation features and autoload all .CEAs in game dir where CT resides support is up next , now....., been told the old method of a additional plugin isnt even required no more hmmmm..... , if true ...could be cool
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
dont want to bump too hard here , but anyone yet ?
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
nobody? please
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
bump for justice
Re: Request for CT Automation Feature
For the "autoload all .CEAs in game dir" you'd have to load the module then change the setting for the folder you want it to look for (dreamcactus wrote: ↑Tue Oct 26, 2021 5:56 pmas said this feature would be much appreciated >
....after finding this , id like to integrate it
[Link]
if possible , aka to have it additionally autoload all .CEAs in game dir, without having to add .CEAs names one by one in LUA
I2CETableCEA.CEAFilesDirectory
), you can use absolute paths for the folder to point it to the game folder. But that can change for every user so you should stick with using the relative path so it looks in the CT's folder to start. But in the end you'd just need to set up a loop looking up file names and checking file extensions for the ".CEA" extension.Here's the CE functions you'd likely want (from "celua.txt" file).
Code: Select all
getFileList(Path:string, searchMask:string OPTIONAL, SearchSubDirs: boolean OPTIONAL, DirAttrib: integer OPTIONAL): Returns an indexed table with filenames
getDirectoryList(Path:string, SearchSubDirs: boolean OPTIONAL): Returns an indexed table with directory names
extractFileName(filepath): returns the filename of the path
extractFileExt(filepath): returns the file extension of the path
extractFileNameWithoutExt(filepath): Returns the filename of the path, without the extension
extractFilePath(filepath): removes the filename from the path
Plus keep in mind this module was setup to work with memory records on the CT, and it needs
memrec
to know if it's enabling or disabling a script (plus using it's description and id). But you could always use a dummy object in it's place.And I need to update the CEF posts, it's an old version so I have no idea if it's working with newer versions of CE. But with the current module version using CE 7.3, I'm having issues with
dealloc
and unregisterSymbol
. But it's changed a lot and is using other modules at this point and I'm not sure if posting a bunch of modules one of which is getting errors, would help or just make it more confusing for you. It's like 4 or 5 files for this one I think, but let me know if you want me to post them.
- dreamcactus
- Expert Cheater
- Posts: 144
- Joined: Sat Jul 06, 2019 12:21 pm
- Reputation: 0
Re: Request for CT Automation Feature
oh thank god! finally a proper reply ....give me some time to work through it all , but THANKS alot my bro ShyTwig16 ....very much appreciated as usual , you guys are the best ...comes from the heart
update>
ok ...finished reading it all, and suffice to say ...my brain hurts ALOT...once again lol , if possible you could use one of the CTs preferably the most recent one i posted and maybe just modify it to include said function , you know me ....i suck at comprehension of code or instructions , hell the last time you did so i had to pass em on to DrummerIX to get a working global function one can simply copy paste into other CTs and it just working ...without having to be a coder aka userfriendly, also ive been told most recent version of CE dont even need it as a separate .DLL no more ...and should fit into LUA script fully
update>
ok ...finished reading it all, and suffice to say ...my brain hurts ALOT...once again lol , if possible you could use one of the CTs preferably the most recent one i posted and maybe just modify it to include said function , you know me ....i suck at comprehension of code or instructions , hell the last time you did so i had to pass em on to DrummerIX to get a working global function one can simply copy paste into other CTs and it just working ...without having to be a coder aka userfriendly, also ive been told most recent version of CE dont even need it as a separate .DLL no more ...and should fit into LUA script fully
Who is online
Users browsing this forum: admantx, AhrefsBot, Badbecky21, pemangkas, Redadare