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/l4d | |
parent | 63adacd5fcee46c3b5294aade232bcd46e50cab4 (diff) |
The grand plugin multiregexp experiment
Diffstat (limited to 'plugins/l4d')
-rw-r--r-- | plugins/l4d/l4d.cpp | 113 |
1 files changed, 24 insertions, 89 deletions
diff --git a/plugins/l4d/l4d.cpp b/plugins/l4d/l4d.cpp index 28ef5d43c..adc08d789 100644 --- a/plugins/l4d/l4d.cpp +++ b/plugins/l4d/l4d.cpp @@ -28,73 +28,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <stdio.h> -#include <stdlib.h> -#include <windows.h> -#include <tlhelp32.h> +#include "../mumble_plugin_win32.h" -#define _USE_MATH_DEFINES -#include <math.h> - -#include "../mumble_plugin.h" - -HANDLE h; BYTE *posptr; BYTE *rotptr; BYTE *stateptr; -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 Left 4 Dead (Build 4023).", L"Mumble L4D Plugin", MB_OK); -} - static bool calcout(float *pos, float *rot, float *opos, float *front, float *top) { float h = rot[0]; float v = rot[1]; @@ -128,24 +67,14 @@ static bool calcout(float *pos, float *rot, float *opos, float *front, float *to } static int trylock(const std::multimap<std::wstring, unsigned long long int> &pids) { - h = NULL; posptr = rotptr = NULL; - DWORD pid=getProcess(L"left4dead.exe"); - if (!pid) + if (! initialize(pids, L"left4dead.exe", L"client.dll")) return false; - BYTE *mod=getModuleAddr(pid, L"client.dll"); - if (!mod) - return false; - - h=OpenProcess(PROCESS_VM_READ, false, pid); - if (!h) - return false; - - posptr = mod + 0x580588; - rotptr = mod + 0x4FF024; - stateptr = mod + 0x4F8E34; + posptr = pModule + 0x580588; + rotptr = pModule + 0x4FF024; + stateptr = pModule + 0x4F8E34; float pos[3]; float rot[3]; @@ -157,17 +86,9 @@ static int trylock(const std::multimap<std::wstring, unsigned long long int> &pi if (ok) return calcout(pos, rot, opos, top, front); - CloseHandle(h); - h = NULL; - return false; -} + generic_unlock(); -static void unlock() { - if (h) { - CloseHandle(h); - h = NULL; - } - return; + return false; } static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &context, std::wstring &identity) { @@ -211,18 +132,32 @@ static const std::wstring longdesc() { static std::wstring description(L"Left 4 Dead (Build 4023)"); static std::wstring shortname(L"Left 4 Dead"); +static int trylock1() { + return trylock(std::multimap<std::wstring, unsigned long long int>()); +} + static MumblePlugin l4dplug = { MUMBLE_PLUGIN_MAGIC, description, shortname, - about, NULL, - trylock, - unlock, + NULL, + trylock1, + generic_unlock, longdesc, fetch }; +static MumblePlugin2 l4dplug2 = { + MUMBLE_PLUGIN_MAGIC_2, + MUMBLE_PLUGIN_VERSION, + trylock +}; + extern "C" __declspec(dllexport) MumblePlugin *getMumblePlugin() { return &l4dplug; } + +extern "C" __declspec(dllexport) MumblePlugin2 *getMumblePlugin2() { + return &l4dplug2; +} |