Subversion Repositories WoWGM

Rev

Rev 30 | Rev 32 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 30 Rev 31
Line 1... Line 1...
1
/****************************************************************************
1
/****************************************************************************
2
*
2
*
3
*	Client.cpp
3
*   Client.cpp
4
*
4
*
5
*	Program entry point (DllMain)
5
*   Program entry point (DllMain)
6
* 
6
* 
7
***/
7
***/
8
 
8
 
9
#include "pch.h"
9
#include "pch.h"
10
#pragma hdrstop
10
#pragma hdrstop
Line 19... Line 19...
19
#include <Object/ObjectClient/Player_C.h>
19
#include <Object/ObjectClient/Player_C.h>
20
 
20
 
21
 
21
 
22
/****************************************************************************
22
/****************************************************************************
23
*
23
*
24
*	Memory addresses
24
*   Client memory addresses
25
*
25
*
26
***/
26
***/
-
 
27
 
27
#define CLIENTREGISTERCONSOLECOMMANDS	0x00401B60;
28
#define  CLIENTREGISTERCONSOLECOMMANDS    0x00401B60;
28
#define CLIENTUNREGISTERCONSOLECOMMANDS	0x00402910;
29
#define  CLIENTUNREGISTERCONSOLECOMMANDS  0x00402910;
29
#define DESTROYHANDLERPLAYER			0x004066D0;
30
#define  DESTROYHANDLERPLAYER             0x004066D0;
30
#define INITIALIZEHANDLERPLAYER			0x004047E0;
31
#define  INITIALIZEHANDLERPLAYER          0x004047E0;
31
#define SCRIPT_GETBUILDINFO_PTR			0x004DBE60;
32
#define  SCRIPT_GETBUILDINFO_PTR          0x004DBE60;
32
#define WOWCLIENTINIT_PTR				0x00404130;
33
#define  WOWCLIENTINIT_PTR                0x00404130;
33
 
34
 
34
 
35
 
35
/****************************************************************************
36
/****************************************************************************
36
*
37
*
37
*	Function pointers
38
*   Client function pointers
38
*
39
*
39
***/
40
***/
40
 
41
 
41
void (*ClientRegisterConsoleCommandsPtr)()	= *(void(*)())CLIENTREGISTERCONSOLECOMMANDS;
42
void (*ClientRegisterConsoleCommandsPtr)() = *(void(*)())CLIENTREGISTERCONSOLECOMMANDS;
-
 
43
 
42
void (*ClientUnregisterConsoleCommandsPtr)()= *(void(*)())CLIENTUNREGISTERCONSOLECOMMANDS;
44
void (*ClientUnregisterConsoleCommandsPtr)()= *(void(*)())CLIENTUNREGISTERCONSOLECOMMANDS;
-
 
45
 
43
void (*DestroyHandlerPlayerPtr)()			= *(void(*)())DESTROYHANDLERPLAYER;
46
void (*DestroyHandlerPlayerPtr)() = *(void(*)())DESTROYHANDLERPLAYER;
-
 
47
 
44
void (*InitializeHandlerPlayerPtr)()		= *(void(*)())INITIALIZEHANDLERPLAYER;
48
void (*InitializeHandlerPlayerPtr)() = *(void(*)())INITIALIZEHANDLERPLAYER;
-
 
49
 
45
int (*Script_GetBuildInfoPtr)(lua_State* L) = *(int(*)(lua_State *))SCRIPT_GETBUILDINFO_PTR;
50
int (*Script_GetBuildInfoPtr)(lua_State*) = *(int(*)(lua_State *))SCRIPT_GETBUILDINFO_PTR;
-
 
51
 
46
void (*WowClientInitPtr)()					= *(void(*)())WOWCLIENTINIT_PTR;
52
void (*WowClientInitPtr)() = *(void(*)())WOWCLIENTINIT_PTR;
47
 
53
 
48
 
54
 
49
/****************************************************************************
55
/****************************************************************************
50
*
56
*
51
*	Program entry point
57
*   Program entry point (DllMain)
52
*
58
*
53
***/
59
***/
54
 
60
 
55
//===========================================================================
61
//===========================================================================
56
extern "C" BOOL WINAPI DllMain(HINSTANCE const	instance,
62
extern "C" BOOL WINAPI DllMain (HINSTANCE const instance,
57
							   DWORD const		reason,
63
                                DWORD const     reason,
58
							   LPVOID const		reserved)
64
                                LPVOID const    reserved) {
59
{
65
 
60
	switch (reason) {
66
	switch (reason) {
61
		case DLL_PROCESS_ATTACH: {
67
		case DLL_PROCESS_ATTACH:
-
 
68
    {
62
			WowGM::Initialize();
69
			WowGM::Initialize();
63
			ConsoleCommandInitialize();
70
			ConsoleCommandInitialize();
64
			WowGM::InitializeHandlerPlayer();
71
			WowGM::InitializeHandlerPlayer();
65
			WowGM::PlayerClientInitialize();
72
			WowGM::PlayerClientInitialize();
66
			WowGM::ClientRegisterConsoleCommands();
73
			WowGM::ClientRegisterConsoleCommands();
Line 68... Line 75...
68
			WowGM::CGGameUI::Initialize();
75
			WowGM::CGGameUI::Initialize();
69
			//ClientServices_Initialize();
76
			//ClientServices_Initialize();
70
			WowGM::InstallGameConsoleCommands();
77
			WowGM::InstallGameConsoleCommands();
71
			ConsoleAccessSetEnabled(TRUE);
78
			ConsoleAccessSetEnabled(TRUE);
72
			break;
79
			break;
73
								 }
80
		}
74
		case DLL_THREAD_ATTACH:
81
		case DLL_THREAD_ATTACH:
75
		case DLL_THREAD_DETACH:
82
		case DLL_THREAD_DETACH:
76
			break;
83
			break;
77
		case DLL_PROCESS_DETACH: {
84
		case DLL_PROCESS_DETACH:
-
 
85
    {
78
			WowGM::DestroyHandlerPlayer();
86
			WowGM::DestroyHandlerPlayer();
79
			WowGM::ClientUnregisterConsoleCommands();
87
			WowGM::ClientUnregisterConsoleCommands();
80
			WowGM::CGlueMgr::Shutdown();
88
      WowGM::CGlueMgr::Shutdown();
81
			WowGM::CGGameUI::Shutdown();
89
			WowGM::CGGameUI::Shutdown();
82
			//ClientServices_Destroy();
90
			//ClientServices_Destroy();
83
			WowGM::UninstallGameConsoleCommands();
91
			WowGM::UninstallGameConsoleCommands();
84
			break;
92
			break;
85
								 }
93
		}
86
	}
94
	}
-
 
95
 
87
	return TRUE;
96
	return TRUE;
88
}
97
}
89
 
98
 
90
 
99
 
91
/****************************************************************************
100
/****************************************************************************
92
*
101
*
93
*	Private functions
102
*   Private
94
*
103
*
95
***/
104
***/
96
 
105
 
97
//===========================================================================
106
//===========================================================================
98
void WowGM::Initialize()
107
void WowGM::Initialize ()  {
99
{
-
 
100
	DetourRestoreAfterWith();
108
	DetourRestoreAfterWith();
101
	FixInvalidPtrCheck();
109
	FixInvalidPtrCheck();
102
}
110
}
103
 
111
 
104
//===========================================================================
112
//===========================================================================
105
void WowGM::FixInvalidPtrCheck()
113
void WowGM::FixInvalidPtrCheck () {
106
{
-
 
107
	// Allow callbacks outside of the .text section
114
	// Allow callbacks outside of the .text section
108
	*((int*)0x00D415B8) = 0x00000001;
115
	*((int*)0x00D415B8) = 0x00000001;
109
	*((int*)0x00D415BC) = 0x7FFFFFFF;
116
	*((int*)0x00D415BC) = 0x7FFFFFFF;
110
}
117
}
111
 
118
 
112
//===========================================================================
119
//===========================================================================
113
void InitializeHandlerPlayer()
120
void InitializeHandlerPlayer () {
114
{
-
 
115
	InitializeHandlerPlayerPtr();
121
	InitializeHandlerPlayerPtr();
116
 
122
 
117
	ConsoleCommandExecute("run autoexec.wtf",FALSE);
123
	ConsoleCommandExecute("run autoexec.wtf",FALSE);
118
}
124
}
119
 
125
 
120
//===========================================================================
126
//===========================================================================
121
void ClientRegisterConsoleCommands()
127
void ClientRegisterConsoleCommands () {
122
{
-
 
123
	ClientRegisterConsoleCommandsPtr();
128
	ClientRegisterConsoleCommandsPtr();
124
 
129
 
125
	g_password = CVar::Register("password",
130
	g_password = CVar::Register("password",
126
								"stored password for blizzcon, dev, qa, etc.",
131
                              "stored password for blizzcon, dev, qa, etc.",
127
								NULL,
132
                              NULL,
128
								"",
133
                              "",
129
								NULL,
134
                              NULL,
130
								GAME,
135
                              GAME,
131
								false,
136
                              false,
132
								NULL,
137
                              NULL,
133
								false);
138
                              false);
134
 
139
 
135
  ConsoleCommandRegister("Bug", CCommand_Bug, DEBUG, NOHELP);
140
  ConsoleCommandRegister("Bug", CCommand_Bug, DEBUG, NOHELP);
136
  ConsoleCommandRegister("Suggestion", CCommand_Bug, DEBUG, NOHELP);
141
  ConsoleCommandRegister("Suggestion", CCommand_Bug, DEBUG, NOHELP);
137
}
142
}
138
 
143
 
139
//===========================================================================
144
//===========================================================================
140
void DestroyHandlerPlayer()
145
void DestroyHandlerPlayer () {
141
{
-
 
142
	DestroyHandlerPlayerPtr();
146
	DestroyHandlerPlayerPtr();
143
}
147
}
144
 
148
 
145
//===========================================================================
149
//===========================================================================
146
void ClientUnregisterConsoleCommands()
150
void ClientUnregisterConsoleCommands () {
147
{
-
 
148
	ClientUnregisterConsoleCommandsPtr();
151
	ClientUnregisterConsoleCommandsPtr();
149
  
152
  
150
  ConsoleCommandUnregister("Bug");
153
  ConsoleCommandUnregister("Bug");
151
  ConsoleCommandUnregister("Suggestion");
154
  ConsoleCommandUnregister("Suggestion");
152
}
155
}
153
 
156
 
154
//===========================================================================
157
//===========================================================================
155
int Script_GetBuildInfo(lua_State* L)
158
int Script_GetBuildInfo (lua_State* L) {
156
{
-
 
157
	char* version = FrameScript_GetText("VERSION", -1, GENDER_NONE);
159
	char* version = FrameScript_GetText("VERSION", -1, GENDER_NONE);
158
	_lua_pushstring(L, version);
160
	_lua_pushstring(L, version);
159
#ifdef _DEBUG
161
#ifdef _DEBUG
160
	_lua_pushstring(L,"Debug");
162
	_lua_pushstring(L,"Debug");
161
#else
163
#else
Line 166... Line 168...
166
	_lua_pushstring(L, __DATE__);
168
	_lua_pushstring(L, __DATE__);
167
	return 5;	// TODO: automatically return the number of arguments returned by Lua
169
	return 5;	// TODO: automatically return the number of arguments returned by Lua
168
}
170
}
169
 
171
 
170
//===========================================================================
172
//===========================================================================
171
void WowClientInit()
173
void WowClientInit() {
172
{
-
 
173
	WowClientInitPtr();
174
	WowClientInitPtr();
174
 
175
 
175
	WowGM::CGlueMgr::SetLoginPassword();
176
	WowGM::CGlueMgr::SetLoginPassword();
176
	ConsoleCommandExecute("run autoexec.wtf",FALSE);
177
	ConsoleCommandExecute("run autoexec.wtf",FALSE);
177
}
178
}
178
 
179
 
179
 
180
 
180
/****************************************************************************
181
/****************************************************************************
181
*
182
*
182
*	Detours setup (external functions)
183
*   Detours setup
183
*
184
*
184
***/
185
***/
185
 
186
 
186
//===========================================================================
187
//===========================================================================
187
void WowGM::InitializeHandlerPlayer()
188
void WowGM::InitializeHandlerPlayer () {
188
{
-
 
189
	DETOUR_INIT;
189
	DETOUR_INIT;
190
	DETOUR_ATTACH(WowClientInitPtr,WowClientInit);
190
	DETOUR_ATTACH(WowClientInitPtr,WowClientInit);
191
	DETOUR_ATTACH(InitializeHandlerPlayerPtr,::InitializeHandlerPlayer);
191
	DETOUR_ATTACH(InitializeHandlerPlayerPtr,::InitializeHandlerPlayer);
192
	DETOUR_ATTACH(Script_GetBuildInfoPtr, Script_GetBuildInfo);
192
	DETOUR_ATTACH(Script_GetBuildInfoPtr, Script_GetBuildInfo);
193
	DETOUR_ATTACH(DestroyHandlerPlayerPtr,::DestroyHandlerPlayer);
193
	DETOUR_ATTACH(DestroyHandlerPlayerPtr,::DestroyHandlerPlayer);
194
	DETOUR_COMMIT;
194
	DETOUR_COMMIT;
195
}
195
}
196
 
196
 
197
//===========================================================================
197
//===========================================================================
198
void WowGM::ClientRegisterConsoleCommands()
198
void WowGM::ClientRegisterConsoleCommands () {
199
{
-
 
200
	DETOUR_INIT;
199
	DETOUR_INIT;
201
	DETOUR_ATTACH(ClientRegisterConsoleCommandsPtr,::ClientRegisterConsoleCommands);
200
	DETOUR_ATTACH(ClientRegisterConsoleCommandsPtr,::ClientRegisterConsoleCommands);
202
	DETOUR_ATTACH(ClientUnregisterConsoleCommandsPtr,::ClientUnregisterConsoleCommands);
201
	DETOUR_ATTACH(ClientUnregisterConsoleCommandsPtr,::ClientUnregisterConsoleCommands);
203
	DETOUR_COMMIT;
202
	DETOUR_COMMIT;
204
}
203
}
205
 
204
 
206
//===========================================================================
205
//===========================================================================
207
void WowGM::DestroyHandlerPlayer()
206
void WowGM::DestroyHandlerPlayer () {
208
{
-
 
209
	DETOUR_INIT;
207
	DETOUR_INIT;
210
	DETOUR_DETACH(WowClientInitPtr,WowClientInit);
208
	DETOUR_DETACH(WowClientInitPtr,WowClientInit);
211
	DETOUR_DETACH(InitializeHandlerPlayerPtr,::InitializeHandlerPlayer);
209
	DETOUR_DETACH(InitializeHandlerPlayerPtr,::InitializeHandlerPlayer);
212
	DETOUR_DETACH(DestroyHandlerPlayerPtr,::DestroyHandlerPlayer);
210
	DETOUR_DETACH(DestroyHandlerPlayerPtr,::DestroyHandlerPlayer);
213
	DETOUR_DETACH(Script_GetBuildInfoPtr, Script_GetBuildInfo);
211
	DETOUR_DETACH(Script_GetBuildInfoPtr, Script_GetBuildInfo);
214
	DETOUR_COMMIT;
212
	DETOUR_COMMIT;
215
}
213
}
216
 
214
 
217
//===========================================================================
215
//===========================================================================
218
void WowGM::ClientUnregisterConsoleCommands()
216
void WowGM::ClientUnregisterConsoleCommands () {
219
{
-
 
220
	DETOUR_INIT;
217
	DETOUR_INIT;
221
	DETOUR_DETACH(ClientRegisterConsoleCommandsPtr,::ClientRegisterConsoleCommands);
218
	DETOUR_DETACH(ClientRegisterConsoleCommandsPtr,::ClientRegisterConsoleCommands);
222
	DETOUR_DETACH(ClientUnregisterConsoleCommandsPtr,::ClientUnregisterConsoleCommands);
219
	DETOUR_DETACH(ClientUnregisterConsoleCommandsPtr,::ClientUnregisterConsoleCommands);
223
	DETOUR_COMMIT;
220
	DETOUR_COMMIT;
224
}
221
}