  | 
				
				Cheat Engine The Official Site of Cheat Engine   
				
 
				 | 
			 
		 
		 
	
		| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		Corroder Grandmaster Cheater Supreme
  Reputation: 75
  Joined: 10 Apr 2015 Posts: 1668
 
  | 
		
			
				 Posted: Wed Jun 12, 2019 10:53 pm    Post subject: CRDR - CE Text Manager / Text Finder | 
				        | 
			 
			
				
  | 
			 
			
				In relation to these topics:
 
 
https://forum.cheatengine.org/viewtopic.php?t=610292
 
https://forum.cheatengine.org/viewtopic.php?t=610277
 
 
This is a text finder/text manager I have provided.
 
 
 	  | Code: | 	 		  f=createForm()
 
f.setSize(550,550)
 
f.Position='poScreenCenter'
 
f.BorderStyle='bsSingle'
 
f.Color='7897995'
 
f.Caption='CRDR - CE Text Manager'
 
load_dialog = createOpenDialog(f)
 
save_dialog = createSaveDialog(f)
 
 
textbox=createEdit(f)
 
textbox.setPosition(5,5)
 
textbox.Autosize=false
 
textbox.setSize(280,28)
 
textbox.Font.Size=10
 
textbox.Color='13495295'
 
textbox.Text=""
 
 
searchButton=createButton(f)
 
searchButton.setPosition(textbox.Left+textbox.Width+10,5)
 
searchButton.setSize(80,27)
 
searchButton.Caption='Search Text'
 
 
lineButton=createButton(f)
 
lineButton.setPosition(searchButton.Left+searchButton.Width+5,5)
 
lineButton.setSize(80,27)
 
lineButton.Caption='Get Line'
 
 
openButton=createButton(f)
 
openButton.setPosition(lineButton.Left+lineButton.Width+5,5)
 
openButton.setSize(80,27)
 
openButton.Caption='Open File'
 
 
memo1=createMemo(f)
 
memo1.setPosition(5,textbox.Top+textbox.Height+10)
 
memo1.setSize(540,220)
 
memo1.BorderStyle='bsSingle'
 
memo1.HideSelection=false
 
memo1.WordWrap=false
 
memo1.ScrollBars='ssAutoBoth'
 
memo1.Color='13495295'
 
memo1.Font.Size = 10
 
 
memo2=createMemo(f)
 
memo2.setPosition(5,memo1.Top+memo1.Height+10)
 
memo2.setSize(540,220)
 
memo2.BorderStyle='bsSingle'
 
memo2.HideSelection=false
 
memo2.WordWrap=false
 
memo2.ScrollBars='ssAutoBoth'
 
memo2.Color='13495295'
 
memo2.Font.Size = 10
 
 
infoButton=createButton(f)
 
infoButton.setPosition(5,memo2.Top+memo2.Height+10)
 
infoButton.setSize(100,27)
 
infoButton.Caption='Get Info'
 
 
glosButton=createButton(f)
 
glosButton.setPosition(110,memo2.Top+memo2.Height+10)
 
glosButton.setSize(100,27)
 
glosButton.Caption='Glossary'
 
 
resetButton=createButton(f)
 
resetButton.setPosition(215,memo2.Top+memo2.Height+10)
 
resetButton.setSize(100,27)
 
resetButton.Caption='Reset'
 
 
saveButton=createButton(f)
 
saveButton.setPosition(445,memo2.Top+memo2.Height+10)
 
saveButton.setSize(100,27)
 
saveButton.Caption='Save Changes'
 
 
--------------------------------------------------------------------------------
 
local texture = [[
 
This is a dummy text for test all functions on this tool.
 
---------------------------------------------------------
 
cheat engine is a tool use to hack an app.
 
people mostly used cheat engine for hacking a game.
 
cheat engine is possible to manage memory such as
 
editing (reading and writing).
 
cheat engine made by Dark Byte a.k.a Eric henen.
 
cheat engine or CE, is an open-source
 
memory scanner/hex editor/debugger.
 
The first version of cheat engine has release at
 
June 28 2000 version 1.3 source code.
 
---------------------------------------------------------
 
]]
 
 
function init()
 
 memo1.Clear()
 
 memo1.Lines.Text = texture
 
 if memo1.Lines.Text == "" then
 
 infoButton.Enabled = false
 
 saveButton.Enabled = false
 
 else
 
 infoButton.Enabled = true
 
 saveButton.Enabled = true
 
 end
 
end
 
 
function charCount()
 
 cnt = memo1.Lines.Count-1
 
 s = memo1.Lines.Text
 
 c = string.len(s)
 
 _,n = s:gsub("%S+","")
 
 sumL = s:gsub("%s+", "")
 
 sumL = string.gsub(s, "%s+", "")
 
 str=string.len(sumL)
 
 whitespace = c - str
 
 info1 = 'Total Characters :   '..c..'   (including whitespace : '..whitespace..' )'
 
 info2 = 'Total Words :   '..n
 
 info3 = 'Total Lines :   '..cnt..'   (starting from line 0)'
 
 memo2.Clear()
 
 memo2.Lines.Add(info1)
 
 memo2.Lines.Add(info2)
 
 memo2.Lines.Add(info3)
 
end
 
infoButton.OnClick=charCount
 
 
function glsry()
 
 memo2.Clear()
 
 local sl = createStringList()
 
 local content = memo1.Lines.Text
 
 local wrd
 
 local words = {}
 
 local lines = {}
 
 local line_count = -1
 
 for l in content:gmatch("[^\n]+") do
 
 line_count = line_count + 1
 
 for w in l:gmatch("[^%s%p]+") do
 
 w = w:lower()
 
 words[w] = words[w] and words[w] + 1 or 1
 
 lines[w] = lines[w] or {}
 
 if lines[w][#lines[w]] ~= line_count then
 
 lines[w][#lines[w] + 1] = line_count
 
 end
 
 end
 
 end
 
 for w, count in pairs(words) do
 
 local the_lines = ""
 
 for _,line in ipairs(lines[w]) do
 
 the_lines = the_lines .. line .. ' / '
 
 end
 
 if count>1 then wrd = "words" else wrd = "word" end
 
 --print(w .." = " .. count .. " words , lines " .. the_lines)
 
 --memo2.Lines.Add(w .." = " .. count .. " ".. wrd .. "     [ lines : /  " .. the_lines .." ]")
 
 sl.Add(w .." = " .. count .. " ".. wrd .. "     [ lines : /  " .. the_lines .." ]")
 
 end
 
 sl.sorted = true
 
 for i=0, sl.Count-1 do
 
 memo2.Lines.Add(sl[i])
 
 end
 
 sl.destroy()
 
end
 
glosButton.OnClick=glsry
 
 
function getline()
 
 local m = textbox.Text
 
 local counter = memo1.Lines.Count-1
 
 if tonumber(m) ~= nil then
 
 m = tonumber(m)
 
 if m > counter then
 
 showMessage('Line number out of range. Max. Lines = '..counter)
 
 return
 
 end
 
 --memo2.Clear()
 
 memo2.Lines.Add('Line '..m..' : '..memo1.Lines[m])
 
 else
 
 showMessage('Please input line number..')
 
 return
 
 end
 
end
 
lineButton.OnClick=getline
 
 
function search(code,term)
 
 --memo2.Clear()
 
 code = memo1.Lines.Text
 
 term = textbox.Text
 
 if term == "" then
 
 showMessage("Please input words/characters to be search..")
 
 return nil
 
 end
 
 local n=0
 
 code="\n"..code
 
 code=code:gsub("\n", function () n=n+1 return "\n@"..n..":" end)
 
 memo2.Lines.Add('Search result for ['..term..'] found at :')
 
 memo2.Lines.Add('-------------------------------------------------------------')
 
 for a,b in code:gmatch("@(%d+):([^\n]-"..term.."[^\n]-)\n") do
 
 -- print('Line '..a..' : '..b)
 
 a = math.floor(a - 1)
 
 memo2.Lines.Add('Line '..a..' : '..b)
 
 end
 
 memo2.Lines.Add('=============================================================')
 
end
 
searchButton.OnClick = search
 
 
function reseter()
 
 memo2.Clear()
 
 textbox.Text = ""
 
end
 
resetButton.OnClick = reseter
 
 
local open = io.open
 
local function read_file(path)
 
 local file = open(path, "rb")
 
 if not file then
 
 showMessage("Error - can't read file content!")
 
 return nil
 
 end
 
 local content = file:read "*a"
 
 file:close()
 
 return content
 
end
 
 
function loadtext()
 
 load_dialog.InitalDir = os.getenv('%USERPROFILE%')
 
 load_dialog.Filter = 'Text files|*.TXT;*.txt|All files (*.*)|*'
 
 load_dialog.execute()
 
 local file = load_dialog.FileName
 
 local fileContent = read_file(file)
 
 memo1.Clear()
 
 memo1.Lines.Text = fileContent
 
end
 
openButton.OnClick = loadtext
 
 
function savechange()
 
 --local defaultpath = TrainerOrigin or getMainForm().SaveDialog1.InitialDir
 
 save_dialog.InitalDir = os.getenv('%USERPROFILE%')
 
 save_dialog.Filter = 'Text files|*.TXT;*.txt|All files (*.*)|*'
 
 save_dialog.execute()
 
 local file = save_dialog.FileName
 
 local fname = file
 
 contents = memo1.Lines.Text
 
 local file,err = io.open(file,'w')
 
 if file then
 
  file:write(contents)
 
  file:close()
 
  showMessage('Changed data has been saved on '..fname)
 
 else
 
  showMessage("error:", err)
 
 end
 
end
 
saveButton.OnClick = savechange
 
 
function closer()
 
 closeCE()
 
 return caFree
 
end
 
f.onClose = closer
 
--------------------------------------------------------------------------------
 
f.show()
 
init()
 
 | 	  
 
 
Copy those code to your CE Lua Table Script and save as a CT file. Or CETRAINER/EXE file (if you are very very super care your code will be stolen).
 
 
Demo Video:
 
 
https://youtu.be/u9XuSfIYRIc
 
 
 
Need to do:
 
- Add a function to read/open a text file from a URL
 
- Handle Unicode/UTF-16 texts or Non-Latin Windows Codepage
	
  
	 
	
	
		
	 
	
		|  Description: | 
		
			
		 | 
	 
	
		|  Filesize: | 
		 78.42 KB | 
	 
	
		|  Viewed: | 
		 20452 Time(s) | 
	 
	
		
  
 
  | 
	 
	 
	 
 _________________
 Stealing Code From Stolen Code...
 
And Admit It.. Hmmm....Typically LOL  | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		AylinCE Grandmaster Cheater Supreme
  Reputation: 37
  Joined: 16 Feb 2017 Posts: 1530
 
  | 
		
			
				 Posted: Thu Jun 13, 2019 6:15 am    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				Your attention to detail is admirable.
 
Search result: must contain rows and subsequent rows.
 
Not only the word, but also the lines below the word.
 
 
Search: a.k.a
 
 
result:
 
Search result for [a.k.a] found at :
 
Line 7 : 
 
------------------------------------------
 
a.k.a Eric henen. 
 
cheat engine or CE, is an open-source 
 
memory scanner/hex editor/debugger.
 
etc
 
etc
 
etc
 
 
 
Is it possible?
 
Thanks again for this work.
 _________________
  | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Corroder Grandmaster Cheater Supreme
  Reputation: 75
  Joined: 10 Apr 2015 Posts: 1668
 
  | 
		
			
				 Posted: Thu Jun 13, 2019 7:04 am    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				Your welcome, of course, that is possible. With this logic, after parsing all lines containing the searched word, then do a parsing process again using string.match and then display the results in memo2. How to do that?.
 
Try googling "Parsing/split specific word from text using Lua".
 
 
And I think I did it on my project above by a function on 'Glossary' button.
 
 
But if you must then just change this code:
 
 
Line 191: from
 
 
 	  | Code: | 	 		  | memo2.Lines.Add('Line '..a..' : '..b) | 	  
 
 
change to:
 
 
 	  | Code: | 	 		  | memo2.Lines.Add('Line '..a..' : '..term) | 	  
 
 
Enjoy!
 _________________
 Stealing Code From Stolen Code...
 
And Admit It.. Hmmm....Typically LOL  | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		AylinCE Grandmaster Cheater Supreme
  Reputation: 37
  Joined: 16 Feb 2017 Posts: 1530
 
  | 
		
			
				 Posted: Thu Jun 13, 2019 6:08 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				For now, I will use it.
 
Line search yields limited results.  
 
( But for you, it provided a new project sharing.   )
 
All files and folders with archiving,
 
Able to write and install again.
 
 
 
video: https://www.youtube.com/watch?v=fMCg7ni5UEU&feature=youtu.be
 _________________
  | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		danrevella Master Cheater
  Reputation: 2
  Joined: 11 Jun 2008 Posts: 292
 
  | 
		
			
				 Posted: Wed Apr 08, 2020 2:38 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				Please excuse, anyone does have got this very first relase version of Cheat Engine 1.3 year 2000 ?
 
Many thanks!!!
 | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Dark Byte Site Admin
  Reputation: 470
  Joined: 09 May 2003 Posts: 25807 Location: The netherlands
  | 
		
			
				 Posted: Wed Apr 08, 2020 3:03 pm    Post subject:  | 
				       | 
			 
			
				
  | 
			 
			
				that is off-topic, but the sourcecode (delphi 2) is here: http://cheatengine.org/download/Cheatengine1.3.RAR
 _________________
 Do not ask me about online cheats. I don't know any and wont help finding them.
 
 
Like my help? Join me on Patreon so i can keep helping  | 
			 
		  | 
	 
	
		| 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
  | 
   
 
		 |