FakeMeta General Usage (AMX Mod X)

From AlliedModders Wiki
Revision as of 19:03, 20 January 2006 by Hawk552 (talk | contribs) (Current FakeMeta and Old)
Jump to: navigation, search

Current FakeMeta and Old

This FakeMeta article is not to be confused with the old FakeMeta included directly in AMX Mod X, which allowed a fix for a problem that arose due to a Steam update. For this context, see FakeMeta (Old).

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, some way or another.

Engine vs. FakeMeta

Comparison between Engine and FakeMeta:

FakeMeta:

#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;
}

Engine:

#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;
}

The "return FMRES_IGNORED" section will be covered later on this page.

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.

Private Data Collecting

It is easy to read private data in FakeMeta, however it can sometimes cause problems if not done correctly (which is why Engine is more commonly used).

Here is an example of how to retrieve private data from an entity in FakeMeta:

#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;
}

DLL / Engine Function Usage

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:

#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;
}

Refer to the end of the line while viewing the DLLFunc and EngFunc sections, as there is usually some description of paramaters, such as edict_t *p_Entity or void. void generally refers to no parameters, while edict_t *p_Entity means the entity id, so the first parameter in the function would be the entity to call the function onto.

Constants / General

A list of general constants and usage can be found on this page: http://www.amxmodx.org/funcwiki.php?go=module&id=16