

#if defined _orpheu_stocks_included

	#endinput

#endif

#define _orpheu_stocks_included



#include <orpheu_const>

#include <orpheu>

#include <orpheu_advanced>





/**

 *  Retrieves an engine function handler by having its name as a member of the struct that hold 

 * engine functions and the name that you give it in the file where you define the function

 *  The name must be the same as the one in the file where the function is defined

 *

 * @param memberName		The name of the member of the struct that holds the address of the function

 * 							Example: pfnPrecacheModel

 * 							The struct representation can be seen in hlsdk at multiplayer/engine/eiface.h with the name "enginefuncs_s"

 * 

 * @param libFunctionName	The name of the function as it is in the file where the function is defined

 *

 * @return 					A handler to the function

 */

stock OrpheuFunction:OrpheuGetEngineFunction(const memberName[],const libFunctionName[])

{

	static OrpheuStruct:engineFunctions

	

	if(!engineFunctions)

	{

		engineFunctions = OrpheuGetEngineFunctionsStruct()

	}

	

	return OrpheuCreateFunction( OrpheuGetStructMember(engineFunctions,memberName),libFunctionName )

}



/**

 *  Retrieves a dll function handler by having its name as a member of the struct that hold 

 * dll functions and the name that you give it in the file where you define the function

 *  The name must be the same as the one in the file where the function is defined

 *

 * @param memberName		The name of the member of the struct that holds the address of the function

 * 							Example: pfnGameInit

 * 							The struct representation can be seen in hlsdk at multiplayer/engine/eiface.h with the name "DLL_FUNCTIONS"

 * 

 * @param libFunctionName	The name of the function as it is in the file where the function is defined

 *

 * @return 					A handler to the function

 */

stock OrpheuFunction:OrpheuGetDLLFunction(const memberName[],const libFunctionName[])

{

	static OrpheuStruct:OrpheuDLLFunctions

	

	if(!OrpheuDLLFunctions)

	{

		OrpheuDLLFunctions = OrpheuGetDLLFunctionsStruct()

	}

	

	return OrpheuCreateFunction( OrpheuGetStructMember(OrpheuDLLFunctions,memberName),libFunctionName )

}



stock OrpheuHook:OrpheuRegisterHookFromClass(const entityClassName[],const libFunctionName[],const libClassName[],const hookFunctionName[],OrpheuHookPhase:phase = OrpheuHookPre)

{

	return OrpheuRegisterHook(OrpheuGetFunctionFromClass(entityClassName,libFunctionName,libClassName),hookFunctionName,phase)

}



stock OrpheuHook:OrpheuRegisterHookFromEntity(id,const libFunctionName[],const libClassName[],const hookFunctionName[],OrpheuHookPhase:phase = OrpheuHookPre)

{

	return OrpheuRegisterHook(OrpheuGetFunctionFromEntity(id,libFunctionName,libClassName),hookFunctionName,phase)

}



stock OrpheuHook:OrpheuRegisterHookFromObject(object,const libFunctionName[],const libClassName[],const hookFunctionName[],OrpheuHookPhase:phase = OrpheuHookPre)

{

	return OrpheuRegisterHook(OrpheuGetFunctionFromObject(object,libFunctionName,libClassName),hookFunctionName,phase)

}

