diff options
author | Thorvald Natvig <slicer@users.sourceforge.net> | 2010-02-25 17:18:35 +0300 |
---|---|---|
committer | Thorvald Natvig <slicer@users.sourceforge.net> | 2010-02-25 17:18:35 +0300 |
commit | f2c191daf8f5c7f5fa3b64ff9a6da5aaf108a85e (patch) | |
tree | 99427bb7e07391bd4e166781357d84e37c7c908f /plugins/tf2 | |
parent | 63adacd5fcee46c3b5294aade232bcd46e50cab4 (diff) |
The grand plugin multiregexp experiment
Diffstat (limited to 'plugins/tf2')
-rw-r--r-- | plugins/tf2/tf2.cpp | 121 |
1 files changed, 27 insertions, 94 deletions
diff --git a/plugins/tf2/tf2.cpp b/plugins/tf2/tf2.cpp index c6202d137..1daaa7df0 100644 --- a/plugins/tf2/tf2.cpp +++ b/plugins/tf2/tf2.cpp @@ -29,78 +29,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <stdio.h> -#include <stdlib.h> -#include <windows.h> -#include <tlhelp32.h> -#include <string> -#include <sstream> - -#define _USE_MATH_DEFINES -#include <math.h> - -#include "../mumble_plugin.h" +#include "../mumble_plugin_win32.h" using namespace std; -HANDLE h; BYTE *posptr; BYTE *rotptr; BYTE *stateptr; BYTE *hostptr; -static DWORD getProcess(const wchar_t *exename) { - PROCESSENTRY32 pe; - DWORD pid = 0; - - pe.dwSize = sizeof(pe); - HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - if (hSnap != INVALID_HANDLE_VALUE) { - BOOL ok = Process32First(hSnap, &pe); - - while (ok) { - if (wcscmp(pe.szExeFile, exename)==0) { - pid = pe.th32ProcessID; - break; - } - ok = Process32Next(hSnap, &pe); - } - CloseHandle(hSnap); - } - return pid; -} - -static BYTE *getModuleAddr(DWORD pid, const wchar_t *modname) { - MODULEENTRY32 me; - BYTE *addr = NULL; - me.dwSize = sizeof(me); - HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); - if (hSnap != INVALID_HANDLE_VALUE) { - BOOL ok = Module32First(hSnap, &me); - - while (ok) { - if (wcscmp(me.szModule, modname)==0) { - addr = me.modBaseAddr; - break; - } - ok = Module32Next(hSnap, &me); - } - CloseHandle(hSnap); - } - return addr; -} - - -static bool peekProc(VOID *base, VOID *dest, SIZE_T len) { - SIZE_T r; - BOOL ok=ReadProcessMemory(h, base, dest, len, &r); - return (ok && (r == len)); -} - -static void about(HWND h) { - ::MessageBox(h, L"Reads audio position information from Team Fortress 2 (Build 4105). IP:Port context support.", L"Mumble TF2 Plugin", MB_OK); -} - static bool calcout(float *pos, float *rot, float *opos, float *front, float *top) { float h = rot[0]; float v = rot[1]; @@ -185,22 +122,13 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa } static int trylock(const std::multimap<std::wstring, unsigned long long int> &pids) { - - h = NULL; posptr = rotptr = NULL; - DWORD pid=getProcess(L"hl2.exe"); - if (!pid) - return false; - BYTE *mod=getModuleAddr(pid, L"client.dll"); - if (!mod) - return false; - BYTE *mod_engine=getModuleAddr(pid, L"engine.dll"); - if (!mod_engine) + if (! initialize(pids, L"hl2.exe", L"client.dll")) return false; - h=OpenProcess(PROCESS_VM_READ, false, pid); - if (!h) + BYTE *mod_engine=getModuleAddr(L"engine.dll"); + if (!mod_engine) return false; // Check if we really have TF2 running @@ -217,13 +145,13 @@ static int trylock(const std::multimap<std::wstring, unsigned long long int> &pi // Remember addresses for later posptr = mod_engine + 0x507390; rotptr = mod_engine + 0x507304; - stateptr = mod + 0x4ECBF4; + stateptr = pModule + 0x4ECBF4; hostptr = mod_engine + 0x3C91EC; /* // Gamecheck char sMagic[9]; - if (!peekProc(mod + 0x4FB3E3, sMagic, 9) || strncmp("teamJet@@", sMagic, 9)!=0) + if (!peekProc(pModule + 0x4FB3E3, sMagic, 9) || strncmp("teamJet@@", sMagic, 9)!=0) return false; */ @@ -238,21 +166,12 @@ static int trylock(const std::multimap<std::wstring, unsigned long long int> &pi wstring sidentity; string scontext; - if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) + if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { return true; - - // If it failed clean up - CloseHandle(h); - h = NULL; - return false; -} - -static void unlock() { - if (h) { - CloseHandle(h); - h = NULL; + } else { + generic_unlock(); + return false; } - return; } static const std::wstring longdesc() { @@ -262,18 +181,32 @@ static const std::wstring longdesc() { static std::wstring description(L"Team Fortress 2 (Build 4105)"); static std::wstring shortname(L"Team Fortress 2"); +static int trylock1() { + return trylock(std::multimap<std::wstring, unsigned long long int>()); +} + static MumblePlugin tf2plug = { MUMBLE_PLUGIN_MAGIC, description, shortname, - about, NULL, - trylock, - unlock, + NULL, + trylock1, + generic_unlock, longdesc, fetch }; +static MumblePlugin2 tf2plug2 = { + MUMBLE_PLUGIN_MAGIC_2, + MUMBLE_PLUGIN_VERSION, + trylock +}; + extern "C" __declspec(dllexport) MumblePlugin *getMumblePlugin() { return &tf2plug; } + +extern "C" __declspec(dllexport) MumblePlugin2 *getMumblePlugin2() { + return &tf2plug2; +} |