| 
			
				|  | Cheat Engine The Official Site of Cheat Engine
 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| Hi Kai How do I cheat?
 
 ![]() Reputation: 0 
 Joined: 19 Jan 2025
 Posts: 2
 
 
 | 
			
				|  Posted: Sun Jan 19, 2025 2:28 pm    Post subject: How to create a script that returns the value after disabled |   |  
				| 
 |  
				| There is such a simple script, I am not very good at writing scripts. But as I understand it, this value is not overwritten. This is the character's speed value set in the game's code. Therefore, after entering its value, it is stored there. I would like this value to be inserted into the address (the original value) after the script completes. 
 
 Script:
 
 [ENABLE]
 
 aobscanmodule(Runspeed,GameAssembly.dll,8B 43 34 48 8D 93 60 01 00 00) // should be unique
 alloc(newmem,$1000,Runspeed)
 
 label(code)
 label(return)
 
 newmem:
 mov [rbx+34],(float)25
 
 code:
 mov eax,[rbx+34]
 lea rdx,[rbx+00000160]
 jmp return
 
 Runspeed:
 jmp newmem
 nop 5
 return:
 registersymbol(Runspeed)
 
 [DISABLE]
 
 Runspeed:
 db 8B 43 34 48 8D 93 60 01 00 00
 
 unregistersymbol(Runspeed)
 dealloc(newmem)
 
 {
 // ORIGINAL CODE - INJECTION POINT: GameAssembly.dll+2F861D1
 
 GameAssembly.dll+2F86199: 8B B8 D4 01 00 00 - mov edi,[rax+000001D4]
 GameAssembly.dll+2F8619F: 48 8B 05 62 4B 92 02 - mov rax,[GameAssembly.dll+58AAD08]
 GameAssembly.dll+2F861A6: 83 B8 E0 00 00 00 00 - cmp dword ptr [rax+000000E0],00
 GameAssembly.dll+2F861AD: 75 0F - jne GameAssembly.dll+2F861BE
 GameAssembly.dll+2F861AF: 48 8B C8 - mov rcx,rax
 GameAssembly.dll+2F861B2: E8 B9 65 5D FD - call GameAssembly.dll+55C770
 GameAssembly.dll+2F861B7: 48 8B 05 4A 4B 92 02 - mov rax,[GameAssembly.dll+58AAD08]
 GameAssembly.dll+2F861BE: 48 8B 80 B8 00 00 00 - mov rax,[rax+000000B8]
 GameAssembly.dll+2F861C5: 3B B8 08 26 00 00 - cmp edi,[rax+00002608]
 GameAssembly.dll+2F861CB: 0F 84 FF 00 00 00 - je GameAssembly.dll+2F862D0
 // ---------- INJECTING HERE ----------
 GameAssembly.dll+2F861D1: 8B 43 34 - mov eax,[rbx+34]
 // ---------- DONE INJECTING ----------
 GameAssembly.dll+2F861D4: 48 8D 93 60 01 00 00 - lea rdx,[rbx+00000160]
 GameAssembly.dll+2F861DB: 48 8D 4C 24 30 - lea rcx,[rsp+30]
 GameAssembly.dll+2F861E0: 89 83 5C 01 00 00 - mov [rbx+0000015C],eax
 GameAssembly.dll+2F861E6: E8 55 89 65 FD - call UnityEngine.Vector3.get_normalized
 GameAssembly.dll+2F861EB: 33 D2 - xor edx,edx
 GameAssembly.dll+2F861ED: 48 8B CB - mov rcx,rbx
 GameAssembly.dll+2F861F0: F2 0F 10 00 - movsd xmm0,[rax]
 GameAssembly.dll+2F861F4: 8B 40 08 - mov eax,[rax+08]
 GameAssembly.dll+2F861F7: F2 0F 11 44 24 20 - movsd [rsp+20],xmm0
 GameAssembly.dll+2F861FD: 89 44 24 28 - mov [rsp+28],eax
 }
 |  |  
		| Back to top |  |  
		|  |  
		| jgoemat Master Cheater
 
 ![]() Reputation: 23 
 Joined: 25 Sep 2011
 Posts: 264
 
 
 | 
			
				|  Posted: Tue Jan 21, 2025 9:05 am    Post subject: |   |  
				| 
 |  
				| I think what you're saying is that you have a cheat here that sets the value to 25, but after you disable the script it remains with the new value of 25, but you want that to go back to it's original value.  That's a little tricky.   One thing you could do would be to just save the 'rbx' value and create a table entry to let people edit that value. 
 Another option might be to use a globalalloc to get memory that isn't deallocated and save the value, then instead of replacing the original code, replace it with code to set the value to the saved value instead of 25.   Or maybe save the pointer and speed and use a {$lua} section in the disable to restore the value to the original address.  This modification shows saving the speed one time.   It could be that your game does change that value sometimes like when you change equipment or get an upgrade and this would only store the first value.
 
 
 
 
  	  | Code: |  	  | label(savedValue)
 label(replaceOriginal)
 
 newmem:
 cmp [savedValue],0 // value not saved yet
 jne @f // jmp forward to next @@: label
 mov eax,[rbx+34] // get existing value, eax is fine as it is overwritten
 mov [savedValue],eax
 @@:
 mov [rbx+34],(float)25
 
 code:
 mov eax,[rbx+34]
 lea rdx,[rbx+00000160]
 jmp return
 
 // place to store original value
 align 10
 savedValue:
 dd 0
 
 Runspeed:
 jmp newmem
 nop 5
 return:
 registersymbol(Runspeed)
 
 | 
 |  |  
		| Back to top |  |  
		|  |  
		| Hi Kai How do I cheat?
 
 ![]() Reputation: 0 
 Joined: 19 Jan 2025
 Posts: 2
 
 
 | 
			
				|  Posted: Thu Jan 23, 2025 4:34 pm    Post subject: |   |  
				| 
 |  
				| Yes, you got it right, or you can learn more about recording in rbx. I would like to do this in order to manually edit the address. |  |  
		| 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
 
 |  |