| 
			
				|  | Cheat Engine The Official Site of Cheat Engine
 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| Beginner999 Cheater
 
 ![]() Reputation: 0 
 Joined: 27 Jul 2018
 Posts: 25
 
 
 | 
			
				|  Posted: Mon Mar 31, 2025 10:08 pm    Post subject: monoAA_GETMONOSTRUCT, str is a reserved word |   |  
				| 
 |  
				| My code is as followed. I was using monoAA_GETMONOSTRUCT and it was working very well until this error happen From what I understand, the class name Player_Attributes somehow is a reserved word and cannot be used, how can I go around it?
 
  	  | Code: |  	  | {$lua} return monoAA_GETMONOSTRUCT("Player_Attributes", false)
 {$asm}
 [ENABLE]
 aobscanregion(playercontrol2,Player_Attributes:Update,Player_Attributes:Update+30,8B * * * * * 85 * 75 * 0F) // should be unique
 alloc(newmem,$100)
 
 
 label(code2)
 label(return)
 
 newmem:
 push ebx
 mov [edi+Player_Attributes.stat_points],#10
 pop ebx
 code2:
 readmem(playercontrol2,6)
 //db 8B 87 D8 01 00 00
 jmp return
 
 playercontrol2:
 jmp newmem
 nop
 return:
 registersymbol(playercontrol2 code2)
 
 [DISABLE]
 //code from here till the end of the code will be used to disable the cheat
 playercontrol2:
 readmem(code2,6)
 //db 8B 87 D8 01 00 00
 
 unregistersymbol(*)
 dealloc(*)
 | 
 |  |  
		| Back to top |  |  
		|  |  
		| HenryEx Expert Cheater
 
 ![]() Reputation: 2 
 Joined: 18 Dec 2011
 Posts: 100
 
 
 | 
			
				|  Posted: Sun Apr 06, 2025 4:38 am    Post subject: |   |  
				| 
 |  
				| That function is prefixed with monoAA_ because.... you guessed it, it's supposed to be used from Auto Assembler. Why are you using it from a LUA block instead of ASM? 
 Call it from ASM with getMonoStruct(Player_Attributes), and maybe put it into the [ENABLE] block since you don't seem to need it for the disable anyways. Maybe that fixes the problem.
 
 I've had some weird problems with getMonoStruct too, where sometimes fields from multiple structs conflict and don't assemble unless i put them in a certain order. Like, "getMonoStruct(X) getMonoStruct(Y)" fails, but  "getMonoStruct(Y) getMonoStruct(X)" works.
 Sometimes, it worked just fine, until i saved and reopened the table and then a previously working script didn't assemble anymore.
 
 
 So in difficult cases or ones where i only need 1 or 2 fields from a mono class, i usually get them manually instead of using getMonoStruct to define the whole structure. Something like this in your case.
 
 
  	  | Code: |  	  | {$lua} if syntaxcheck then return 'define(stat_points,0)' end
 local fAttributes = getMonoFields('Player_Attributes')
 local off = fAttributes['stat_points'][1]
 return string.format('define(stat_points,%X)',off)
 {$asm}
 [ENABLE]
 aobscanregion(playercontrol2,Player_Attributes:Update,Player_Attributes:Update+30,8B * * * * * 85 * 75 * 0F) // should be unique
 alloc(newmem,$100)
 
 
 label(code2)
 label(return)
 
 newmem:
 push ebx
 mov [edi+stat_points],#10
 pop ebx
 code2:
 readmem(playercontrol2,6)
 //db 8B 87 D8 01 00 00
 jmp return
 
 playercontrol2:
 jmp newmem
 nop
 return:
 registersymbol(playercontrol2 code2)
 
 [DISABLE]
 //code from here till the end of the code will be used to disable the cheat
 playercontrol2:
 readmem(code2,6)
 //db 8B 87 D8 01 00 00
 
 unregistersymbol(*)
 dealloc(*)
 | 
 
 You will need a way to fetch class fields first though, i've used my getMonoFields function in this example which i have posted here.
 |  |  
		| Back to top |  |  
		|  |  
		| Beginner999 Cheater
 
 ![]() Reputation: 0 
 Joined: 27 Jul 2018
 Posts: 25
 
 
 | 
			
				|  Posted: Tue Apr 08, 2025 8:28 am    Post subject: |   |  
				| 
 |  
				|  	  | HenryEx wrote: |  	  | That function is prefixed with monoAA_ because.... you guessed it, it's supposed to be used from Auto Assembler. Why are you using it from a LUA block instead of ASM? 
 | 
 I read about it here, so I just follow the formula
   But thanks for your help, I will try it once I'm home
   |  |  
		| Back to top |  |  
		|  |  
		| panraven Grandmaster Cheater
 
 ![]() Reputation: 62 
 Joined: 01 Oct 2008
 Posts: 958
 
 
 | 
			
				|  Posted: Wed Apr 09, 2025 1:27 am    Post subject: |   |  
				| 
 |  
				| 'str' is a x86 instruction, so the error. ( https://www.felixcloutier.com/x86/str ) 
 As the function return an AA structure definition as string, we can do a string gsub etc to replace the 'invalid' name to something ok.
 
 This is an example for Lua and AA :
 
  	  | Code: |  	  | 
 function monoStruct(kls, renames)
 local struct, err = monoAA_GETMONOSTRUCT(kls)
 if type(struct)=='string'then
 if type(renames)=='string'then
 for from,to in renames:gmatch('(%S+)%s*=%s*(%S+)')do
 from = '(%s*)%f[%S]'..from..':'
 to = '%1'..to..':'
 struct = struct:gsub( from, to )
 end
 end
 return struct
 else
 return struct, err
 end
 end
 
 local cmd = 'monoStructure'
 unregisterAutoAssemblerCommand(cmd)
 registerAutoAssemblerCommand(cmd, function(s, sc)
 local symcls, renames = s:match'^(.-);+(.*)$'
 if not symcls then symcls = s end
 return monoStruct(symcls, renames)
 end)
 
 
 -- eg. in lua
 print(monoStruct('pp,DuloGames.UI:TimingAttackBar','MarginSpacingPercent = MSP'))
 -- in AA : monoStructure(pp,DuloGames.UI:TimingAttackBar ; MarginSpacingPercent = MSP)
 
 
 -- MarginSpacingPercent, or pp.MarginSpacingPercent is removed, instead
 -- MSP or pp.MSP is usable.
 
 | 
 
 
 btw, il2cpp game may also applied, but il2cpp symbol to seperate namespace and class is '.', remember to change it to ':',
 For example, above 'DuloGames.UI.TimingAttackBar' -> 'DuloGames.UI:TimingAttackBar'
 _________________
 
 - Retarded. |  |  
		| 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
 
 |  |