Difference between revisions of "FakeMeta General Usage (AMX Mod X)"

From AlliedModders Wiki
Jump to: navigation, search
(Return Values)
 
(7 intermediate revisions by 3 users not shown)
Line 3: Line 3:
  
 
==About==
 
==About==
FakeMeta is an extremely powerful module for AMX Mod X that effectively allows you to write Metamod plugins in [PAWN].
+
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 [[Abstraction|abstracted]], it is still achievable, and usually with more flexibility.
 
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 [[Abstraction|abstracted]], it is still achievable, and usually with more flexibility.
Line 12: Line 12:
  
 
FakeMeta:
 
FakeMeta:
<pawn>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <fakemeta>
 
#include <fakemeta>
  
Line 28: Line 27:
 
 
 
return FMRES_IGNORED;
 
return FMRES_IGNORED;
}
+
}</pawn>
</pawn>
 
  
 
Engine:
 
Engine:
<pawn>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <engine>
 
#include <engine>
  
 
public plugin_init()
 
public plugin_init()
 
{
 
{
register_plugin("FakeMeta Test","1.0","Hawk552");
+
register_plugin("Engine Test","1.0","Hawk552");
 
}
 
}
  
Line 46: Line 43:
 
 
 
return;
 
return;
}
+
}</pawn>
</pawn>
 
  
 
The "return FMRES_IGNORED" section will be covered later on this page.
 
The "return FMRES_IGNORED" section will be covered later on this page.
Line 59: Line 55:
  
 
Here is an example of how to retrieve the armor entvar from an entity in FakeMeta:
 
Here is an example of how to retrieve the armor entvar from an entity in FakeMeta:
<pawn>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <fakemeta>
 
#include <fakemeta>
  
Line 77: Line 72:
 
 
 
return FMRES_IGNORED;
 
return FMRES_IGNORED;
}
+
}</pawn>
</pawn>
 
  
 
==DLL / Engine Function Usage==
 
==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:
 
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:
  
<pawn>
+
<pawn>#include <amxmodx>
#include <amxmodx>
 
 
#include <fakemeta>
 
#include <fakemeta>
  
Line 99: Line 92:
 
 
 
return FMRES_IGNORED;
 
return FMRES_IGNORED;
}
+
}</pawn>
</pawn>
 
  
 
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.
 
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.
Line 106: Line 98:
 
==Return Values==
 
==Return Values==
 
There are 4 return values in FakeMeta:
 
There are 4 return values in FakeMeta:
#define FMRES_HANDLED 2
 
#define FMRES_SUPERCEDE 4
 
#define FMRES_IGNORED 1
 
#define FMRES_OVERRIDE 3
 
  
FMRES_HANDLED --> Something was done in this function, but call the one in the DLL / Engine anyways.
+
*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_SUPERCEDE --> Prevent function in DLL / Engine from being called.
FMRES_IGNORED --> Call original function.
+
*FMRES_IGNORED --> Call original function.
FMRES_OVERRIDE --> Call original function, but change return value.
+
*FMRES_OVERRIDE --> Call original function, but change return value.
  
 
==Constants / General==
 
==Constants / General==

Latest revision as of 04:02, 5 September 2006

Current FakeMeta and Old

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:

#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("Engine 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.

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:

#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.

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.

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