|  |  |  | @@ -1316,114 +1316,137 @@ cell MNF_PrepareCharArray(char *ptr, unsigned int size) | 
		
	
		
			
				|  |  |  |  | 	return prepareCharArray(ptr, size, false); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | inline bool operator ==(func_s &arg1, const char *desc) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	if (strcmp(arg1.desc, desc) == 0) | 
		
	
		
			
				|  |  |  |  | 		return true; | 
		
	
		
			
				|  |  |  |  | 	return false; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | CList<func_s, const char *> g_functions; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // Fnptr Request function for the new interface | 
		
	
		
			
				|  |  |  |  | const char *g_LastRequestedFunc = NULL; | 
		
	
		
			
				|  |  |  |  | #define REGISTER_FUNC(name, func) { name, (void*)func }, | 
		
	
		
			
				|  |  |  |  | void *Module_ReqFnptr(const char *funcName) | 
		
	
		
			
				|  |  |  |  | #define REGISTER_FUNC(name, func) \ | 
		
	
		
			
				|  |  |  |  | 	{ \ | 
		
	
		
			
				|  |  |  |  | 		pFunc = new func_s; \ | 
		
	
		
			
				|  |  |  |  | 		pFunc->pfn = func; \ | 
		
	
		
			
				|  |  |  |  | 		pFunc->desc = name; \ | 
		
	
		
			
				|  |  |  |  | 		g_functions.put(pFunc); \ | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | void MNF_RegisterFunction(void *pfn, const char *description) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	// func table | 
		
	
		
			
				|  |  |  |  | 	struct Func_s | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		const char *name; | 
		
	
		
			
				|  |  |  |  | 		void *ptr; | 
		
	
		
			
				|  |  |  |  | 	}; | 
		
	
		
			
				|  |  |  |  | 	static Func_s functions[] = { | 
		
	
		
			
				|  |  |  |  | 		// Misc | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("BuildPathname", build_pathname) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("PrintSrvConsole", print_srvconsole) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetModname", MNF_GetModname) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Log", MNF_Log) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("LogError", LogError) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("MergeDefinitionFile", MNF_MergeDefinitionFile) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Format", MNF_Format) | 
		
	
		
			
				|  |  |  |  | 	func_s *pFunc; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			// Amx scripts loading / unloading / managing | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetAmxScript", MNF_GetAmxScript) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetAmxScriptName", MNF_GetAmxScriptName) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("FindAmxScriptByName", MNF_FindAmxScriptByName) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("FindAmxScriptByAmx", MNF_FindAmxScriptByAmx) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("LoadAmxScript", load_amxscript) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("UnloadAmxScript", unload_amxscript) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC(description, pfn); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			// String / mem in amx scripts support | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("SetAmxString", set_amxstring) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetAmxString", MNF_GetAmxString) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetAmxStringLen", MNF_GetAmxStringLen) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("FormatAmxString", MNF_FormatAmxString) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("CopyAmxMemory", MNF_CopyAmxMemory) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetAmxAddr", get_amxaddr) | 
		
	
		
			
				|  |  |  |  | void Module_CacheFunctions() | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	func_s *pFunc; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			// other amx stuff | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("amx_Exec", amx_Exec) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("amx_Execv", amx_Execv) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("amx_Allot", amx_Allot) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("amx_FindPublic", amx_FindPublic) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("amx_FindNative", amx_FindNative) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("BuildPathname", build_pathname) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("PrintSrvConsole", print_srvconsole) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetModname", MNF_GetModname) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Log", MNF_Log) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("LogError", LogError) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("MergeDefinitionFile", MNF_MergeDefinitionFile) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Format", MNF_Format) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("RegisterFunction", MNF_RegisterFunction); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			// Natives / Forwards | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("AddNatives", MNF_AddNatives) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("RaiseAmxError", amx_RaiseError) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("RegisterForward", registerForward) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("RegisterSPForward", registerSPForward) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("RegisterSPForwardByName", registerSPForwardByName) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("UnregisterSPForward", unregisterSPForward) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("ExecuteForward", executeForwards) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("PrepareCellArray", MNF_PrepareCellArray) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("PrepareCharArray", MNF_PrepareCharArray) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("PrepareCellArrayA", prepareCellArray) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("PrepareCharArrayA", prepareCharArray) | 
		
	
		
			
				|  |  |  |  | 	// Amx scripts loading / unloading / managing | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetAmxScript", MNF_GetAmxScript) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetAmxScriptName", MNF_GetAmxScriptName) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("FindAmxScriptByName", MNF_FindAmxScriptByName) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("FindAmxScriptByAmx", MNF_FindAmxScriptByAmx) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("LoadAmxScript", load_amxscript) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("UnloadAmxScript", unload_amxscript) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			// Player | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerFlags", MNF_GetPlayerFlags) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerValid", MNF_IsPlayerValid) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerName", MNF_GetPlayerName) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerIP", MNF_GetPlayerIP) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerInGame", MNF_IsPlayerInGame) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerBot", MNF_IsPlayerBot) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerAuthorized", MNF_IsPlayerAuthorized) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerTime", MNF_GetPlayerTime) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerPlayTime", MNF_GetPlayerPlayTime) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerCurweapon", MNF_GetPlayerCurweapon) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerTeamID", MNF_GetPlayerTeamID) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerTeam", MNF_GetPlayerTeam) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerDeaths", MNF_GetPlayerDeaths) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerFrags", MNF_GetPlayerFrags) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerMenu", MNF_GetPlayerMenu) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerKeys", MNF_GetPlayerKeys) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerAlive", MNF_IsPlayerAlive) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerConnecting", MNF_IsPlayerConnecting) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("IsPlayerHLTV", MNF_IsPlayerHLTV) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerArmor", MNF_GetPlayerArmor) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerHealth", MNF_GetPlayerHealth) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("GetPlayerEdict", MNF_GetPlayerEdict) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("CellToReal", MNF_CellToReal) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("RealToCell", MNF_RealToCell) | 
		
	
		
			
				|  |  |  |  | 	// String / mem in amx scripts support | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("SetAmxString", set_amxstring) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetAmxString", MNF_GetAmxString) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetAmxStringLen", MNF_GetAmxStringLen) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("FormatAmxString", MNF_FormatAmxString) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("CopyAmxMemory", MNF_CopyAmxMemory) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetAmxAddr", get_amxaddr) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	// other amx stuff | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("amx_Exec", amx_Exec) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("amx_Execv", amx_Execv) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("amx_Allot", amx_Allot) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("amx_FindPublic", amx_FindPublic) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("amx_FindNative", amx_FindNative) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	// Natives / Forwards | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("AddNatives", MNF_AddNatives) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("RaiseAmxError", amx_RaiseError) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("RegisterForward", registerForward) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("RegisterSPForward", registerSPForward) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("RegisterSPForwardByName", registerSPForwardByName) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("UnregisterSPForward", unregisterSPForward) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("ExecuteForward", executeForwards) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("PrepareCellArray", MNF_PrepareCellArray) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("PrepareCharArray", MNF_PrepareCharArray) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("PrepareCellArrayA", prepareCellArray) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("PrepareCharArrayA", prepareCharArray) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	// Player | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerFlags", MNF_GetPlayerFlags) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerValid", MNF_IsPlayerValid) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerName", MNF_GetPlayerName) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerIP", MNF_GetPlayerIP) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerInGame", MNF_IsPlayerInGame) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerBot", MNF_IsPlayerBot) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerAuthorized", MNF_IsPlayerAuthorized) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerTime", MNF_GetPlayerTime) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerPlayTime", MNF_GetPlayerPlayTime) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerCurweapon", MNF_GetPlayerCurweapon) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerTeamID", MNF_GetPlayerTeamID) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerTeam", MNF_GetPlayerTeam) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerDeaths", MNF_GetPlayerDeaths) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerFrags", MNF_GetPlayerFrags) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerMenu", MNF_GetPlayerMenu) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerKeys", MNF_GetPlayerKeys) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerAlive", MNF_IsPlayerAlive) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerConnecting", MNF_IsPlayerConnecting) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("IsPlayerHLTV", MNF_IsPlayerHLTV) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerArmor", MNF_GetPlayerArmor) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerHealth", MNF_GetPlayerHealth) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("GetPlayerEdict", MNF_GetPlayerEdict) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("CellToReal", MNF_CellToReal) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("RealToCell", MNF_RealToCell) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #ifdef MEMORY_TEST | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Allocator", m_allocator) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Deallocator", m_deallocator) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Reallocator", m_reallocator) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Allocator", m_allocator) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Deallocator", m_deallocator) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Reallocator", m_reallocator) | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Allocator", MNF_Allocator) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Deallocator", MNF_Deallocator) | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Reallocator", MNF_Reallocator) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Allocator", MNF_Allocator) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Deallocator", MNF_Deallocator) | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Reallocator", MNF_Reallocator) | 
		
	
		
			
				|  |  |  |  | #endif // MEMORY_TEST | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			REGISTER_FUNC("Haha_HiddenStuff", MNF_HiddenStuff) | 
		
	
		
			
				|  |  |  |  | 	}; | 
		
	
		
			
				|  |  |  |  | 	REGISTER_FUNC("Haha_HiddenStuff", MNF_HiddenStuff) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | void *Module_ReqFnptr(const char *funcName) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	// code | 
		
	
		
			
				|  |  |  |  | 	if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach) | 
		
	
		
			
				|  |  |  |  | 	// ^---- really? wow! | 
		
	
		
			
				|  |  |  |  | 	if (!g_CurrentlyCalledModule) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		return NULL; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	g_LastRequestedFunc = funcName; | 
		
	
		
			
				|  |  |  |  | 	for (unsigned int i = 0; i < (sizeof(functions) / sizeof(Func_s)); ++i) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	CList<func_s, const char *>::iterator iter; | 
		
	
		
			
				|  |  |  |  | 	for (iter = g_functions.begin(); iter; ++iter) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		if (strcmp(funcName, functions[i].name) == 0) | 
		
	
		
			
				|  |  |  |  | 			return functions[i].ptr; | 
		
	
		
			
				|  |  |  |  | 		if (strcmp(funcName, iter->desc) == 0) | 
		
	
		
			
				|  |  |  |  | 			return iter->pfn; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	return NULL; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  |   |