

#if defined _orpheu_memory_included

	#endinput

#endif

#define _orpheu_memory_included



#include <orpheu_const>



/*

* 	To use this functionality you must build files that identify memory locations

* This files go on the folder "configs/orpheu/memory" 

* More instructions on Orpheu thread

*/



/**

 * Replaces data in memory in the full extent of a library

 *

 * @param memoryDataName	The name of the block that qualifies memory as defined in a file at "configs/orpheu/memory" 

 * @param count				The number of occurences to replace. 0 = infinite

 * @param any				A pair "to be replaced" - "replacement". Pair members must be of the same type

 * 

 * @return 					The number of replacements made

 * 

 * Example:

 * 

 * 		Replacing the value 16000 by 100000 in a library

 * 

 * 		OrpheuMemoryReplace("name",0,16000,100000) (where name should be related to a block of data that qualifies the memory as holding a long value)

 * 	

 * 		Replacing the string "weapon_smokegrenade","weapon_flashbang" 

 * 

 * 		OrpheuMemoryReplace("name",0,"weapon_smokegrenade","weapon_flashbang") (where name should be related to a block of data that qualifies the memory as holding a string)

 */

native OrpheuMemoryReplace(const memoryDataName[],count,any:...)



/**

 * Replaces data in memory.It works like OrpheuMemoryReplace but starts at a given address	

 *

 * @param address			The address to start at

 * @param memoryDataName	The name of the block that qualifies memory as defined in a file at "configs/orpheu/memory" 

 * @param count				The number of occurence. 0 = infinite

 * @param any				A pair "to be replaced" - "replacement". Pair members must be of the same type

 * 

 * @return 					The number of replacements made

 */

native OrpheuMemoryReplaceAtAddress(address,const memoryDataNameName[],count,any:...)





/**

 * Retrieves data in memory. The block of data that qualifies memory must also identify it by having identifier blocks,

 * Memory can be located given an offset or a signature

 *

 * @param memoryDataName	The name of the block that qualifies memory as defined in a file at "configs/orpheu/memory"  

 * @param any				If the type of the memory location is passed by ref, the variables needed to get the value

 *							You can give an extra argument to retrieve the address where the data retrieved lies

 * 

 * @return 					If the type of the memory location is not passed by ref, its value

 */

native OrpheuMemoryGet(const memoryDataName[],any:...)



/**

 * Retrieves data in memory. It works like OrpheuMemoryGet but starts at a given address

 *

 * @param address			The address to start at

 * @param memoryDataName	The name of the block that qualifies memory as defined in a file at "configs/orpheu/memory"  

 * @param any				If the type of the memory location is passed by ref, the variables needed to get the value

 *							You can give an extra argument to retrieve the address where the data retrieved lies

 *

 * @return 					If the type of the memory location is not passed by ref, its value

 */

native OrpheuMemoryGetAtAddress(address,const memoryDataName[],any:...)



/**

 * Alters data in memory.  The block of data that qualifies memory must also identify it by having identifier blocks.

 * Memory can be located given an offset or a signature

 *

 * @param memoryDataName	The name of the block that qualifies memory as defined in a file at "configs/orpheu/memory"  

 * @param count				The number of occurences to alter. 0 = infinite

 * @param any				The value to use as replacement

 *							You can give an extra argument to retrieve the address where the data retrieved lies

 *

 * @return 					Number of occurences replaced

 */

native OrpheuMemorySet(const memoryDataName[],count,any:...)



/**

 * Alters data in memory.  It works like OrpheuMemorySet but starts at a given address	

 *

 * @param address			The address to start at

 * @param memoryDataName	The name of the block that qualifies memory as defined in a file at "configs/orpheu/memory"  

 * @param count				The number of occurences to alter. 0 = infinite

 * @param any				The value to use as replacement

 *							You can give an extra argument to retrieve the address where the data retrieved lies

 *

 * @return 					Number of occurences replaced

 */

native OrpheuMemorySetAtAddress(address,const memoryDataName[],count,any:...)



