#include "luai.h"
#include <windows.h>
#include "detours.h"
#pragma comment(lib, "detours.lib")
DWORD WINAPI MyThread(LPVOID);
DWORD g_threadID;
HMODULE g_hModule;
HANDLE Console = GetStdHandle(STD_INPUT_HANDLE);
luai luaObj;
int (__stdcall* PauseGame)();
int (__stdcall* ResumeGame)();
static int MyPauseGame()
{
luaObj.PrintConsole("Game paused");
return PauseGame();
}
static int MyPauseGame2(lua_State *L) { MyPauseGame(); return 0; }
static int MyResumeGame()
{
luaObj.PrintConsole("Game resumed");
ResumeGame();
return 0;
}
static int MyResumeGame2(lua_State *L) { MyResumeGame(); return 0; }
INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
switch(Reason)
{
case DLL_PROCESS_ATTACH:
PauseGame = (int (__stdcall*)())DetourFunction((PBYTE)0x0100341C, (PBYTE)MyPauseGame);
ResumeGame = (int (__stdcall*)())DetourFunction((PBYTE)0x0100344C, (PBYTE)MyResumeGame);
g_hModule = hDLL;
DisableThreadLibraryCalls(hDLL);
CreateThread(NULL, NULL, &MyThread, NULL, NULL, &g_threadID);
luaObj.CreateConsole();
luaObj.LoadLua();
lua_register(luai::L,"PauseGame",MyPauseGame2);
lua_register(luai::L,"PauseGame",MyResumeGame2);
break;
case DLL_THREAD_ATTACH:
case DLL_PROCESS_DETACH:
//DetourRemove((PBYTE)0x009C630C, (PBYTE)a_chatclear);
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
DWORD WINAPI MyThread(LPVOID)
{
while(true)
{
if(luaObj.isLoaded)
{
luaObj.RunLuaScript("Thread()");
}
}
FreeLibraryAndExitThread(g_hModule, 0);
return 0;
}