Code:
// MWR FPS Changer.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <iostream>
#include <fstream>
typedef int(__cdecl *Cbuf_AddText_T)(int *localClientNum, const char *Command); //Send command to console
Cbuf_AddText_T Cbuf_AddText_MP = (Cbuf_AddText_T)0x00000001404033B0;
Cbuf_AddText_T Cbuf_AddText_SP = (Cbuf_AddText_T)0x0000000140342EB0;
unsigned long long com_maxFps = 0, cg_fov = 0, cg_fovScale = 0, cg_gun_x = 0; //Vars to hold dvar addresses
int fpsVal = 125;
float fovVal = 65, fovScaleVal = 1, gun_xVal = 0;
DWORD WINAPI Main(LPVOID threadArgs)
{
std::string input;
std::ifstream infile;
infile.open("Config.txt");
for (int i = 0; i < 3; i++)
{
std::getline(infile, input);
if (i == 0) fovVal = std::stof(input);
if (i == 1) fovScaleVal = std::stof(input);
if (i == 2) gun_xVal = std::stof(input);
}
infile.close();
if (GetModuleHandleA("h1_mp64_ship.exe") != NULL)
{
unsigned long long currentMPBase = 0x000000014D064D00;
do
{
Sleep(1000);
currentMPBase = 0x000000014D064D00;
for (int i = 0; i < *(int*)0x000000014D064CF4; i++)
{
currentMPBase += 0x60;
if (*(int*)currentMPBase == 0xF264C46C) com_maxFps = currentMPBase;
if (*(int*)currentMPBase == 0x8572B2C7) cg_fov = currentMPBase;
if (*(int*)currentMPBase == 0x79A1090F) cg_fovScale = currentMPBase;
if (*(int*)currentMPBase == 0x07AC182B) cg_gun_x = currentMPBase;
}
} while (com_maxFps == 0 || cg_fov == 0 || cg_fovScale == 0 || cg_gun_x == 0);
while (true)
{
*(int*)(com_maxFps + 0x50) = 0x0;
*(int*)(cg_fov + 0x50) = 0x0;
*(int*)(cg_fovScale + 0x50) = 0x0;
*(int*)(cg_gun_x + 0x50) = 0x0;
*(int*)(com_maxFps + 0x10) = fpsVal;
*(float*)(cg_fov + 0x10) = fovVal;
*(float*)(cg_fovScale + 0x10) = fovScaleVal;
*(float*)(cg_gun_x + 0x10) = gun_xVal;
Sleep(1000);
}
}
else if (GetModuleHandleA("h1_sp64_ship.exe") != NULL)
{
unsigned long long currentSPBase = 0x000000014C217D20;
do
{
Sleep(1000);
currentSPBase = 0x000000014C217D20;
for (int i = 0; i < *(int*)0x000000014C217D10; i++)
{
currentSPBase += 0x60;
if (*(int*)currentSPBase == 0xF264C46C) com_maxFps = currentSPBase;
if (*(int*)currentSPBase == 0x8572B2C7) cg_fov = currentSPBase;
if (*(int*)currentSPBase == 0x79A1090F) cg_fovScale = currentSPBase;
if (*(int*)currentSPBase == 0x07AC182B) cg_gun_x = currentSPBase;
}
} while (com_maxFps == 0 || cg_fov == 0 || cg_fovScale == 0 || cg_gun_x == 0);
while (true)
{
*(int*)(com_maxFps + 0x50) = 0x0;
*(int*)(cg_fov + 0x50) = 0x0;
*(int*)(cg_fovScale + 0x50) = 0x0;
*(int*)(cg_gun_x + 0x50) = 0x0;
*(int*)(com_maxFps + 0x10) = fpsVal;
*(float*)(cg_fov + 0x10) = fovVal;
*(float*)(cg_fovScale + 0x10) = fovScaleVal;
*(float*)(cg_gun_x + 0x10) = gun_xVal;
Sleep(1000);
}
}
return 0;
}
DWORD WINAPI Keys(LPVOID threadArgs)
{
while (true)
{
if (GetAsyncKeyState(0x56)) fpsVal = 125; //V = 125
if (GetAsyncKeyState(0x42)) fpsVal = 250; //B = 250
if (GetAsyncKeyState(0x4E)) fpsVal = 333; //N = 333
Sleep(20);
}
return 0;
}
BOOL APIENTRY DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
{
DWORD threadID;
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, 0, Main, NULL, 0, &threadID);
CreateThread(NULL, 0, Keys, NULL, 0, &threadID);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}