#pragma once #include #include extern HANDLE g_Process; template class Cheat { private: void* m_Addr; wstring m_ProcName; //most errors are here?? DWORD m_Size; Type m_Value, m_PreValue; public: Cheat(wstring ProcessName, void* Address, Type Value); ~Cheat(); int ModifyProcess(Type* Val, Type* PreVal = NULL); int EnableCheat(bool SavePre = false); int DisableCheat(); }; template Cheat::Cheat(wstring ProcessName, void* Address, Type Value) { DWORD ProcessID; HWND SA; m_Addr = Address; g_Process = NULL; m_ProcName = ProcessName; m_Value = Value; m_PreValue = NULL; m_Size = sizeof(Type); if(!g_Process) { if((SA = FindWindow(NULL, _T(m_ProcName.c_str())))) { if(GetWindowThreadProcessId(SA, &ProcessID)) { g_Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID); } } } } template Cheat::~Cheat() { if(g_Process) { CloseHandle(g_Process); } } template int Cheat::ModifyProcess(Type* Val, Type* PreVal = NULL) { if(g_Process) { if(PreVal) ReadProcessMemory(g_Process, m_Addr, PreVal, NULL); if(WriteProcessMemory(g_Process, m_Addr, Val, m_Size, NULL)) { return 1; } } return 0; } template int Cheat::EnableCheat(bool SavePre = false) { if(SavePre) { return ModifyProcess(m_Value, m_PreVal); } return ModifyProcess(m_Value); } template int Cheat::DisableCheat() { return ModifyProcess(m_PreVal); }