FakeMeta used to be an internal mini-metamod inside AMX Mod X. This was removed in 1.50, and now only the module remains. The module is an entirely different concept, which extends Metamod HL1 programming powers to scripts.
About
FakeMeta is an extremely powerful module for AMX Mod X that effectively allows you to write Metamod plugins in Pawn.
Unlike Engine, FakeMeta uses no CPU if it is not told to do anything (other than to exist). For this reason, it is recommended to use FakeMeta over Engine. There is nothing in Engine that is not in FakeMeta -- while some functionality might be less abstracted, it is still achievable, and usually with more flexibility.
Engine vs. FakeMeta
Comparison between Engine and FakeMeta:
FakeMeta:
Code: Select all
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
register_forward(FM_PlayerPreThink,"PreThink");
}
public PreThink(id)
{
// here you would insert some code
return FMRES_IGNORED;
}Code: Select all
#include <amxmodx>
#include <engine>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
}
public client_PreThink(id)
{
// here you would insert some code
return;
}General Functionality
FakeMeta also allows you to do other things, such as retrieve private data (using pev, set_pev / get_pdata_int, get_pdata_float, get_pdata_string, set_pdata_int, set_pdata_float, set_pdata_string), forcing DLL functions to be executed, as well as call Engine (not the module) functions.
Entvars
It is easy to read entvars in FakeMeta, however it can sometimes cause problems if not done correctly (which is why Engine is more commonly used). Entvars are variables in a player's edict structure (an edict is the basis for an entity).
Here is an example of how to retrieve the armor entvar from an entity in FakeMeta:
Code: Select all
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
register_forward(FM_PlayerPreThink, "PreThink");
}
public PreThink(id)
{
new value = pev(id,pev_armorvalue); // gets armor from client/entity
client_print(id,print_chat,"%i",value); // prints armor value to client
return FMRES_IGNORED;
}In DLLs and the Engine, there are functions that are called when certain events happen. These can be forced to be called through FakeMeta. Here is a general example:
Code: Select all
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
register_forward(FM_PlayerPreThink,"PreThink");
}
public PreThink(id)
{
dllfunc(DLLFunc_RegisterEncoders);
return FMRES_IGNORED;
}Return Values
There are 4 return values in FakeMeta:
FMRES_HANDLED --> Something was done in this function, but call the one in the DLL / Engine anyways.
FMRES_SUPERCEDE --> Prevent function in DLL / Engine from being called.
FMRES_IGNORED --> Call original function.
FMRES_OVERRIDE --> Call original function, but change return value.
