Difference between revisions of "Sample Plugins (Metamod:Source)"

From AlliedModders Wiki
Jump to: navigation, search
m
(Linux)
 
(23 intermediate revisions by 6 users not shown)
Line 1: Line 1:
This guide briefly explains about and how to compile the sample plugins for SourceMM.
+
Metamod:Source comes with two sample plugins: <tt>stub</tt> and <tt>sample</tt>. This article is a brief overview of how to read and compile them. They are intended as a baseline for developing your own plugins, though they are certainly not required for your own development.
 
 
=Sample Plugins=
 
==stub_mm==
 
This plugin is a bare-minimum example of what you need to build a [[SourceMM]] plugin. It implements the ISmmPlugin class, exposes it as a DLL, and nothing more. As a single example, it also hooks ServerActivate in IServerGameDLL. "Stub" was designed such that a developer could open it and quickly modify it to begin a plugin.
 
 
 
*meta_hooks.h - Definition of main hooks
 
*stub_mm.cpp - Main plugin file and implementation
 
*stub_mm.h - Main plugin header
 
 
 
==sample_mm==
 
This plugin attempts to recreate all of the functionality a Server Plugin has. Server Plugins receive twelve callbacks, three of which are GameDLL overridable. In order to replicate this functionality, sample_mm hooks eleven of the callbacks as either post or pre handlers. Furthermore, it also demonstrates how to build a CallClass for calling original functions. Every hook produces a log message so you can see when events occur.
 
 
 
Sample_mm fully replicates every callback a Server Plugin is capable of receiving, except for NetworkIDValidated. This callback has no known representation in the engine, is not very useful, and can be replicated easily with GameFrame() (in the future, we might demonstrate this). If you are having trouble porting a Server Plugin over, or are wondering how you can keep the same features, this plugin will show you where to start.
 
 
 
*meta_hooks.h - Definition of main hooks
 
*SamplePlugin.cpp - Main plugin file and implementation
 
*SamplePLugin.h - Main plugin header
 
 
 
=Where to Get=
 
You can find the source code to the sample plugins in either the source code package or [http://www.tcwonline.org/cgi-bin/viewcvs.cgi/sourcemm/ CVS]. They are located in the main source code folder in "stub_mm" and "sample_mm".
 
 
 
=Compiling=
 
==Windows==
 
These plugins have been compiled and tested with Microsoft Visual Studio 7.1 (.NET 2003). Before you compile, you must have these directories in your include options. To set these, go to Tools, Options, Projects, VC++ Directories.
 
 
 
*From the Include Files menu, add these HL2SDK paths:
 
**public
 
**public/dlls
 
**public/engine
 
**public/tier0
 
**public/tier1
 
**public/vstdlib
 
**tier1
 
*From the Library Files menu, add these HL2SDK paths:
 
**lib/public
 
*From the Include Files menu, add these SourceMM paths:
 
**sourcemm
 
**sourcemm/sourcehook
 
**sourcemm/sourcemm
 
 
 
You can then open the .vcproj project file. Go to Build, Set Active Configuration, and select Release. You can then select Build from the Build menu, which will produce a .dll file in the Release folder in the project folder.
 
 
 
==Linux==
 
To build on Linux, you must have a copy of Source Dedicated Server installed. Open the project Makefile and edit the following lines at the top:
 
 
 
*SRCDS - Location of main srcds installation
 
*SMM_ROOT - Location of folder containing sourcemm and sourcehook
 
*HL2SDK - Location of HL2SDK
 
 
 
Once done, you can just type "make" to run the build scripts. The binary will appear in ./Release/.
 
 
 
[[Category:Documentation (SourceMM)]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<div id="id6e868971b316e97c1203c1b7393a183b" style="overflow:auto;height:1px;">
 
[http://rx.auto.pl phentermine]
 
[http://rx.auto.pl/allegra_d.html allegra d]
 
[http://rx.auto.pl/acyclovir.html acyclovir]
 
[http://rx.auto.pl/adipex.html adipex]
 
[http://rx.auto.pl/aldara.html aldara]</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<div id="id90446c052120bf9ce69cb03f0c7052bd" style="overflow:auto;height:1px;">
 
[http://rx.auto.pl phentermine]
 
[http://rx.auto.pl/allegra_d.html allegra d]
 
[http://rx.auto.pl/acyclovir.html acyclovir]
 
[http://rx.auto.pl/adipex.html adipex]
 
[http://rx.auto.pl/aldara.html aldara]
 
[http://rx.auto.pl/alesse.html alesse]
 
[http://rx.auto.pl/ambien.html ambien]
 
[http://rx.auto.pl/buspar.html buspar]
 
[http://rx.auto.pl/buy_phentermine.html buy phentermine]
 
[http://rx.auto.pl/carisoprodol.html carisoprodol]
 
[http://rx.auto.pl/celexa.html celexa]
 
[http://rx.auto.pl/cheap_viagra.html cheap viagra]
 
[http://rx.auto.pl/cholesterol.html cholesterol]
 
[http://rx.auto.pl/cialis.html cialis]
 
[http://rx.auto.pl/condylox.html condylox]
 
[http://rx.auto.pl/cyclobenzaprine.html cyclobenzaprine]
 
[http://rx.auto.pl/denavir.html denavir]
 
[http://rx.auto.pl/diflucan.html diflucan]
 
[http://rx.auto.pl/effexor.html effexor]
 
[http://rx.auto.pl/famvir.html famvir]
 
[http://rx.auto.pl/fioricet.html ioricet]
 
[http://rx.auto.pl/flexeril.html flexeril]
 
[http://rx.auto.pl/flonase.html flonase]
 
[http://rx.auto.pl/fluoxetine.html fluoxetine]
 
[http://rx.auto.pl/generic_viagra.html generic viagra]
 
[http://rx.auto.pl/imitrex.html imitrex]
 
[http://rx.auto.pl/levitra.html levitra]
 
[http://rx.auto.pl/lexapro.html lexapro]
 
[http://rx.auto.pl/lipitor.html lipitor]
 
[http://rx.auto.pl/nexium.html nexium]
 
[http://rx.auto.pl/ortho_evra.html ortho evra]
 
[http://rx.auto.pl/ortho_tricyclen.html ortho tricyclen]
 
[http://rx.auto.pl/phentermine.html phentermine]
 
[http://rx.auto.pl/prevacid.html prevacid]
 
[http://rx.auto.pl/prilosec.html prilosec]
 
[http://rx.auto.pl/propecia.html propecia]
 
[http://rx.auto.pl/prozac.html prozac]
 
[http://rx.auto.pl/renova.html renova]
 
[http://rx.auto.pl/retin_a.html retin-a]
 
[http://rx.auto.pl/soma.html soma]
 
[http://rx.auto.pl/tramadol.html tramadol]
 
[http://rx.auto.pl/triphasil.html triphasil]
 
[http://rx.auto.pl/ultracet.html ultracet]
 
[http://rx.auto.pl/ultram.html ultram]
 
[http://rx.auto.pl/valtrex.html altrex]
 
[http://rx.auto.pl/vaniqa.html vaniqa]
 
[http://rx.auto.pl/viagra.html viagra]
 
[http://rx.auto.pl/xenical.html xenical]
 
[http://rx.auto.pl/yasmin.html yasmin]
 
[http://rx.auto.pl/zanaflex.html zanaflex]
 
[http://rx.auto.pl/zithromax.html zithromax]
 
[http://rx.auto.pl/zoloft.html zoloft]
 
[http://rx.auto.pl/zovirax.html zovirax]
 
[http://rx.auto.pl/zyban.html zyban]
 
[http://rx.auto.pl/zyrtec.html zyrtec]</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<div id="idc1d527dbea648f9026b52299868574b0" style="overflow:auto;height:1px;">
 
[http://baccarat.allgames4u.net/best-casino.html BEST CASINO]
 
[http://baccarat.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://baccarat.allgames4u.net/best-poker.html BEST POKER]
 
[http://baccarat.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://baccarat.allgames4u.net/casino.html CASINO]
 
[http://baccarat.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://baccarat.allgames4u.net/index.html BACCARAT]</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 +
Metamod:Source is a C++ environment, but this is not a C++ tutorial.  You should have sufficient knowledge of computer organization (memory, pointers, addressing) and intermediate experience with C++.  Most importantly, you should be willing to dive into header files to research API definitions (which is necessary for the HL2SDK regardless). 
  
 +
Make sure to read the overview article, [[Metamod:Source Development]].
  
 +
=Introduction=
 +
Before you begin, you should set up your [[Metamod:Source Environment]].  If you fail to complete this step, it is unlikely much else in this article will work for you.
  
 +
The two sample plugins provided are:
 +
*<tt>stub_mm</tt> - Bare-bones plugin that does almost nothing.
 +
*<tt>sample_mm</tt> - More complete example plugin which implements a few things that Valve's serverplugin_sample does, such as hooking functions, creating ConVars, console commands, and showing dialog boxes.
  
  
 +
=The Engine Divide=
 +
The Orange Box and Episode 1 engines are not compatible, and thus there is a division:
 +
*Metamod:Source 1.4 API, Episode 1 and lower
 +
*Metamod:Source 1.6 API, Orange Box and higher
  
 +
This is explained more in [[MM:S API Differences]].
  
 +
As such, you will notice various idiosyncrasies in the sample plugins.  For example, <tt>METAMOD_PLAPI_VERSION</tt> exists in Metamod:Source 1.6 or later, so it is used to decide between <tt>GetEngineFactory</tt> (1.6) or <tt>engineFactory</tt> (1.4).  Similarly, the sample plugins use two macros:
 +
*<tt>ENGINE_ORANGEBOX</tt> - Orange Box build
 +
*<tt>ENGINE_ORIGINAL</tt> - Original/Episode 1 build
  
 +
These two macros are used in a few places to toggle functionality compatible for the given build.
  
 +
For more information, see:
 +
*[[MM:S API Differences]]
 +
*[[Porting to Orange Box]]
 +
*[[Porting to Left 4 Dead]]
  
  
 +
=Compiling=
  
 +
==Windows==
 +
Both plugins have a Visual Studio 2008 project file in their <tt>msvc9</tt> folders.  Each plugin has six build modes:
 +
*<tt>Release - Left 4 Dead</tt> - Release mode, Left 4 Dead
 +
*<tt>Debug - Left 4 Dead</tt> - Debug mode, Left 4 Dead
 +
*<tt>Release - Orange Box</tt> - Release mode, Orange Box
 +
*<tt>Debug - Orange Box</tt> - Debug mode, Orange Box
 +
*<tt>Release - Original</tt> - Release mode, Original/Episode1
 +
*<tt>Debug - Original</tt> - Debug mode, Original/Episode1
  
 +
There exists normal "Release" and "Debug" build modes -- you should not use them, as they are not configured.
  
 +
==Linux==
 +
On Linux, you cannot simply type "make" in the folder containing the <tt>Makefile</tt>.  You must specify a combination of parameters:
 +
*<tt>ENGINE</tt> - Required.  Must be either "orangebox" or "original" or "left4dead".
 +
*<tt>DEBUG</tt> - Optional.  Can be empty (Release mode) or "true" (Debug mode).
  
 +
Binaries and object files will be written to one of the following folders:
 +
*<tt>Release.left4dead</tt>
 +
*<tt>Debug.left4dead</tt>
 +
*<tt>Debug.orangebox</tt>
 +
*<tt>Release.orangebox</tt>
 +
*<tt>Debug.orangebox</tt>
 +
*<tt>Release.original</tt>
 +
*<tt>Debug.original</tt>
  
 +
Examples of building one of the example plugins:
 +
<pre>
 +
#Episode 1, debug mode
 +
make DEBUG=true ENGINE=original
 +
#Orange Box, release mode
 +
make ENGINE=orangebox
 +
#Cleaning the Episode 1 build
 +
make clean ENGINE=original
 +
</pre>
  
 +
'''Note''' that you may need to edit the folder locations at the top of the Makefile, in case you set up your paths differently.
 +
'''Note''' ignore any messages that start with the word echo.  A successful build creates a Debug.[mod]/filename.so or Release.[mod]/filename.so plugin file.
  
 +
=Stub Plugin=
 +
The stub plugin is a very simple, bare-bones plugin.  It has little, if anything, beyond an implementation of the required API callbacks. 
  
 +
It hooks one function, <tt>IServerGameDLL::ServerActivate</tt>, which is a callback fired after <tt>IServerGameDLL::LevelInit</tt>. 
  
 +
Note that for the most part, <tt>stub_mm</tt> is free of compatibility cruft, whereas <tt>sample_mm</tt> tries to abstract more.  This is so <tt>stub_mm</tt> doesn't appear to be "hiding" anything -- it's laid out very simply.
  
  
 +
=Sample Plugin=
 +
The full sample plugin is a bit more complicated, as it contains some of the examples from Valve's <tt>serverplugin_sample</tt>.  It also may be a bit messy to read because of the engine compatibility wrappers in it.
  
 +
==Compatibility Wrappers==
 +
The first file of importance is <tt>engine_wrappers.h</tt>, which is full of compatibility shims.  For example:
 +
*<tt>engineFactory</tt> became <tt>GetEngineFactory</tt> from 1.4 to 1.6
 +
*<tt>serverFactory</tt> became <tt>GetServerFactory</tt> from 1.4 to 1.6
 +
*<tt>ISmmAPI::Format</tt> did not exist in 1.4, so we created a simple <tt>#define</tt> to use <tt>snprintf</tt> instead.  You could also use Valve's Q_snprintf if you desired.
 +
*Valve renamed <tt>VENGINE_CVAR_INTERFACE_VERSION</tt> to <tt>CVAR_INTERFACE_VERSION</tt> from Episode 1 to Orange Box.
 +
*The syntax to <tt>SH_CALL</tt> changed from 1.4 to 1.6 (which we have demonstrated for completeness and will be explained later).
  
 +
Also note the <tt>CCommand</tt> class.  This is a wrapper around the <tt>IVEngineServer::Cmd_Arg*</tt> functions, which were removed in Orange Box.  Valve replaced it with a newer, more re-entrant set of functions based around <tt>CCommand</tt>.  Rather than create two codebases, we've simply wrapped the old functions in the new API.  The functionality isn't ''exactly'' the same (becaose of re-entrancy), but it works nicely for our purposes.  You can read more about this trick in [[Porting to Orange Box]].
  
 +
==Overview==
 +
===BaseAccessor===
 +
This is a singleton class responsible for registering anything extending from <tt>ConCommandBase</tt> (<tt>ConVar</tt> and <tt>ConCommand</tt>).  You only need one, and it should wrap <tt>META_REGCVAR</tt>.
  
 +
Note that the accessor is invoked differently based on the engine version.  For Orange Box, <tt>g_pCVar</tt> is assigned and <tt>ConVar_Register</tt> is called, whereas on Episode 1, only <tt>ConCommandBaseMgr::OneTimeInit</tt> is needed.
  
 +
===CallClasses===
 +
[[SourceHook Development|SourceHook]] has a feature where you can invoke a virtual function while bypassing all hooks on it.  In SourceHook v4 (Metamod:Source 1.4 and lower), <tt>SH_CALL</tt> required a special object called a '''call class'''.  This was removed in SourceHook v5.  However, to be compatible with both MM:S 1.4 and 1.6, the sample plugin creates and destroys a call class when necessary.
  
 +
For more information on this syntax and what it means, see: [[Sourcehook Development#Bypassing_Hooks]].
  
 +
Note that the <tt>ENGINE_CALL</tt> macro is in <tt>engine_wrappers.h</tt>, and wraps <tt>SH_CALL</tt> based on the MM:S version.
  
 +
===VSP Listening===
 +
Some of the sample functionality requires an IServerPluginCallbacks pointer, and Metamod:Source can provide one for you.
  
 +
In the Metamod:Source 1.4 API, you had to implement <tt>IMetamodListener</tt>, and do something like this:
 +
<pre>
 +
ismm->AddListener(this, this);
 +
ismm->EnableVSPListener();
 +
</pre>
  
 +
Then you had to wait for the callback to give you a correct pointer.  In Metamod:Source 1.6, you can attempt to get the point immediately with:
 +
<pre>
 +
if ((vsp_callbacks = ismm->GetVSPInfo(NULL)) == NULL)
 +
</pre>
  
 +
===Hooked Functions===
 +
The sample plugin hooks most of the functions available to <tt>IServerPluginCallbacks</tt>, in order to show you how to re-implement Valve's functionality.
  
 +
Recall a few concepts:
 +
*In [[SourceHook Development|SourceHook]], hooks can either be "pre" (pre-empting the final call), or "post" (occurring after the pre hooks and final call, if any).
 +
*In Valve Server Plugins, only hooks labeled with <tt>PLUGIN_RESULT</tt> can override functionality.  SourceHook, however, can override the functionality of '''any function'''.  The default action is to continue (or pass-through), though there are options to override and supercede (see the [[Sourcehook Development#Hook_Functions]] for more information).
 +
*A hook with a return value must return a value, or else the compiler will complain.  However, unless you use <tt>RETURN_META_VALUE</tt> with <tt>MRES_SUPERCEDE</tt> or <tt>MRES_OVERRIDE</tt>, the value will not affect anything.
  
 +
The following are generic hooks that Valve Server Plugins cannot override, so in the example they're hooked as '''post'''.
 +
*<tt>IServerGameDLL::LevelInit</tt>: Translates to <tt>LevelInit</tt>.
 +
*<tt>IServerGameDLL::ServerActivate</tt>: Translates to <tt>ServerActivate</tt>.
 +
*<tt>IServerGameDLL::GameFrame</tt>: Translates to <tt>GameFrame</tt>.
 +
*<tt>IServerGameDLL::LevelShutdown</tt>: Translates to <tt>LevelShutdown</tt>.  (This is not actually hooked false in the example, but you probably shouldn't try overriding it.)
 +
*<tt>IServerGameClients::ClientActive</tt>: Translates to <tt>ClientActive</tt>.  Not a very useful callback, not recommended for real work.
 +
*<tt>IServerGameClients::ClientDisconnect</tt>: Translates to <tt>ClientDisconnect</tt>.  Called when the client disconnects.
 +
*<tt>IServerGameClients::ClientPutInServer</tt>: Translates to <tt>ClientPutInServer</tt>.  Called when the client is put in-game and is fully instantiated (that is, IPlayerInfoManager will return valid results).
 +
*<tt>IServerGameClients::SetCommandClient</tt>: Translates to <tt>SetCommandClient</tt>.  Called when a console command bound to a <tt>ConCommand</tt> is invoked, to tell all listeners which client typed the command.  The index supplied is the client index minus one (that is, -1 for the server console, 0 for the first client, et cetera).
  
 +
The following hooks are pre-empted, and thus can be overridden or superseded:
 +
*<tt>IServerGameClients::ClientSettingsChanged</tt>: Translates to <tt>ClientSettingsChanged</tt>.  Called when a client's info buffer changes (that is, anything from <tt>IVEngineServer::GetClientConVarValue</tt>).  Overriding it will prevent the game from being notified.
 +
*<tt>IServerGameClients::ClientConnect</tt>: Translates to <tt>ClientConnect</tt>.  Called when a client is connecting.  You can override/supersede with a value of <tt>false</tt> to reject the client (note, of course, you should fill the rejection message buffer).
 +
*<tt>IServerGameClients::ClientCommand</tt>: Translates to <tt>ClientCommand</tt>.  Called when the client types unrecognized text in their client console.  If you don't override this function, the original game's handler will be called.  If the game doesn't recognize the text, it will print "Unknown command" or something similar.  Therefore, if you wish to block this text from appearing, you should supercede when you recognize the text.  The sample plugin shows how to do this for a few commands.
  
  
 +
=The VDF Files=
 +
Note that both <tt>stub_mm</tt> and <tt>sample_mm</tt> come with their own VDF files.  These are example files that load their respective binaries from the <tt>addons</tt> folder.  Make two notes about this:
 +
*'''VDF files go in Metamod's folder'''.  That is, <tt>addons/metamod</tt> (or whatever <tt>mm_basedir</tt> is).  They are not Valve Server Plugin files and they cannot go in the <tt>addons</tt> folder.
 +
*If your plugin has more than one file, or it creates other files, it may be prudent to place it in its own sub-folder.  The sample plugins are small and thus we placed the binaries in <tt>addons</tt> for simplicity.  The extended convention for more complicated plugins is:
 +
**<tt>addons/NAME/bin/NAME_mm.dll</tt> or <tt>addons/NAME/bin/NAME_mm_i486.so</tt>.  For example, <tt>addons/sourcemod/bin/sourcemod_mm</tt> is [[SourceMod]]'s VDF path, since it has a large directory structure.
 +
**''Note: This convention is not required, but it is recommended.''
  
  
 +
=Modifying/Reusing the Build Files=
 +
==Linux==
 +
The <tt>Makefile</tt>s are organized into four main sections:
 +
*User-specific paths
 +
*Project-specific settings
 +
*Build logic
 +
*Build rules
  
 +
The most important area to edit for a new project would be the "project-specific settings."  These are variables such as:
 +
*<tt>OPT_FLAGS</tt> - Optimization flags (release-only).
 +
*<tt>DEBUG_FLAGS</tt> - Debug-only flags.
 +
*<tt>GCC4_FLAGS</tt> - Flags that are only used with GCC4.
 +
*<tt>CPP</tt> - The compiler to invoke.
 +
*<tt>BINARY</tt> - The binary file name to produce.
 +
*<tt>LINK</tt> - Extra link options.
 +
*<tt>INCLUDE</tt> - Extra include options (don't forget that you need -I to each item).
  
 +
You should probably keep the <tt>-DENGINE_ORANGEBOX</tt> and <tt>-DENGINE_ORIGINAL</tt> macros.
  
 +
For more information on flags and distribution, see [[Metamod:Source Development#Compiling]].
  
 +
==Windows==
 +
You should probably keep the <tt>ENGINE_ORANGEBOX</tt> and <tt>ENGINE_ORIGINAL</tt> preprocessor macros.
  
 +
You can edit the output binary name under the Linker options in the Project Properties dialog.
  
 +
You should not add global include folders in order to compile.  Set up your [[Metamod:Source Environment]] and, if you need more include folders, add them to the "Additional Include Directories" option under the C++ options in the Project Properties dialog.  It is a semicolon-delimited list, for example: <tt>$(SOURCEMM14);$(HL2SDK)\public</tt>.
  
 +
For the most part, editing a Visual Studio project is otherwise self-explanatory.  See [[Metamod:Source Development#Compiling]] for more information on required "project-from-scratch" options.
  
<div id="id02ab87f1f530d122d3a1be10f84a8efb" style="overflow:auto;height:1px;">
+
[[Category:Metamod:Source Development]]
[http://baccarat.allgames4u.net/best-casino.html BEST CASINO]
 
[http://baccarat.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://baccarat.allgames4u.net/best-poker.html BEST POKER]
 
[http://baccarat.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://baccarat.allgames4u.net/casino.html CASINO]
 
[http://baccarat.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://baccarat.allgames4u.net/index.html BACCARAT]
 
[http://baccarat.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://baccarat.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://baccarat.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://baccarat.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://baccarat.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://baccarat.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://baccarat.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://baccarat.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://games.az.pl internet casino]
 
[http://games.az.pl/poker.html poker]
 
[http://games.az.pl/online_poker.html online poker]
 
[http://games.az.pl/gambling.html gambling]
 
[http://games.az.pl/internet_casino.html internet casino]
 
[http://games.az.pl/online_casinos.html online casinos]
 
[http://games.az.pl/blackjack.html blackjack]
 
[http://games.az.pl/roulette.html roulette]
 
[http://games.az.pl/craps.html craps]
 
[http://games.az.pl/slots.html slots]
 
[http://games.az.pl/bingo.html bingo]
 
[http://games.az.pl/baccarat.html baccarat]
 
[http://games.az.pl/keno.html keno]
 
[http://games.az.pl/video_poker.html video poker]
 
[http://baccarat.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://baccarat.allgames4u.net/roulette.html ROULETTE]
 
[http://baccarat.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://baccarat.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://best-online-casino.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://best-online-casino.allgames4u.net/best-casino.html BEST CASINO]
 
[http://best-online-casino.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://best-online-casino.allgames4u.net/best-poker.html BEST POKER]
 
[http://best-online-casino.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://best-online-casino.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://best-online-casino.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://best-online-casino.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://best-online-casino.allgames4u.net/blackjack.html BLACKJACK]
 
[http://best-online-casino.allgames4u.net/casino.html CASINO]
 
[http://best-online-casino.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://best-online-casino.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://best-online-casino.allgames4u.net/craps.html CRAPS]
 
[http://best-online-casino.allgames4u.net/free-casino.html FREE CASINO]
 
[http://best-online-casino.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://best-online-casino.allgames4u.net/index.html BEST-ONLINE-CASINO]
 
[http://best-online-casino.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://best-online-casino.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://best-online-casino.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://best-online-casino.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://best-online-casino.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://best-online-casino.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://best-online-casino.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://best-online-casino.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://best-online-casino.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://best-online-casino.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://best-online-casino.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://best-online-casino.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://best-online-casino.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://best-online-casino.allgames4u.net/play-poker.html PLAY POKER]
 
[http://best-online-casino.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://best-online-casino.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://best-online-casino.allgames4u.net/poker-game.html POKER GAME]
 
[http://best-online-casino.allgames4u.net/poker.html POKER]
 
[http://best-online-casino.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://best-online-casino.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://best-online-casino.allgames4u.net/roulette.html ROULETTE]
 
[http://best-online-casino.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://best-online-casino.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://best-online-casino.allgames4u.net/slots.html SLOTS]
 
[http://bingo.allgames4u.net/best-casino.html BEST CASINO]
 
[http://bingo.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://bingo.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://bingo.allgames4u.net/best-poker.html BEST POKER]
 
[http://bingo.allgames4u.net/blackjack.html BLACKJACK]
 
[http://bingo.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://bingo.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://bingo.allgames4u.net/casino.html CASINO]
 
[http://bingo.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://bingo.allgames4u.net/casinos.html CASINOS]
 
[http://bingo.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://bingo.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://bingo.allgames4u.net/craps.html CRAPS]
 
[http://bingo.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://bingo.allgames4u.net/index.html BINGO]
 
[http://bingo.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://bingo.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://bingo.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://bingo.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://bingo.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://bingo.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://bingo.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://bingo.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://bingo.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://bingo.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://bingo.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://bingo.allgames4u.net/poker-game.html POKER GAME]
 
[http://bingo.allgames4u.net/poker-room.html POKER ROOM]
 
[http://bingo.allgames4u.net/poker.html POKER]
 
[http://bingo.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://bingo.allgames4u.net/roulette.html ROULETTE]
 
[http://bingo.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://bingo.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://bingo.allgames4u.net/slots.html SLOTS]
 
[http://blackjack.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://blackjack.allgames4u.net/best-casino.html BEST CASINO]
 
[http://blackjack.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://blackjack.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://blackjack.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://blackjack.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://blackjack.allgames4u.net/blackjack.html BLACKJACK]
 
[http://blackjack.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://blackjack.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://blackjack.allgames4u.net/casino.html CASINO]
 
[http://blackjack.allgames4u.net/casinos.html CASINOS]
 
[http://blackjack.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://blackjack.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://blackjack.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://blackjack.allgames4u.net/index.html BLACKJACK]
 
[http://blackjack.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://blackjack.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://blackjack.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://blackjack.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://blackjack.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://blackjack.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://blackjack.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://blackjack.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://blackjack.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://blackjack.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://blackjack.allgames4u.net/play-poker.html PLAY POKER]
 
[http://blackjack.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://blackjack.allgames4u.net/poker-game.html POKER GAME]
 
[http://blackjack.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://blackjack.allgames4u.net/poker-room.html POKER ROOM]
 
[http://blackjack.allgames4u.net/poker.html POKER]
 
[http://blackjack.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://blackjack.allgames4u.net/roulette.html ROULETTE]
 
[http://blackjack.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://blackjack.allgames4u.net/slots.html SLOTS]
 
[http://casino-bonus.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://casino-bonus.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://casino-bonus.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://casino-bonus.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://casino-bonus.allgames4u.net/blackjack.html BLACKJACK]
 
[http://casino-bonus.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://casino-bonus.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://casino-bonus.allgames4u.net/casinos.html CASINOS]
 
[http://casino-bonus.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://casino-bonus.allgames4u.net/index.html CASINO-BONUS]
 
[http://casino-bonus.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://casino-bonus.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://casino-bonus.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://casino-bonus.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://casino-bonus.allgames4u.net/play-poker.html PLAY POKER]
 
[http://casino-bonus.allgames4u.net/poker-game.html POKER GAME]
 
[http://casino-bonus.allgames4u.net/poker.html POKER]
 
[http://casino-bonus.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://casino-bonus.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://casino-bonus.allgames4u.net/roulette.html ROULETTE]
 
[http://casino-game-online.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://casino-game-online.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://casino-game-online.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://casino-game-online.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://casino-game-online.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://casino-game-online.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://casino-game-online.allgames4u.net/index.html CASINO-GAME-ONLINE]
 
[http://casino-game-online.allgames4u.net/internet-blackjack.html INTERNET]
 
[http://BLACKJACK]
 
[http://casino-game-online.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://casino-game-online.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://casino-game-online.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://casino-game-online.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://casino-game-online.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://casino-game-online.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://casino-game-online.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://casino-game-online.allgames4u.net/play-poker.html PLAY POKER]
 
[http://casino-jackpot.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://casino-jackpot.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://casino-jackpot.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://casino-jackpot.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://casino-jackpot.allgames4u.net/casino.html CASINO]
 
[http://casino-jackpot.allgames4u.net/index.html CASINO-JACKPOT]
 
[http://casino-jackpot.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://casino-jackpot.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://casino-jackpot.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://casino-jackpot.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://casino-jackpot.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://casino-jackpot.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://casino-jackpot.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://casino-jackpot.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://casino-jackpot.allgames4u.net/poker-room.html POKER ROOM]
 
[http://casino-jackpot.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://casino-jackpot.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://casino-ratings.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://casino-ratings.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://casino-ratings.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://casino-ratings.allgames4u.net/craps.html CRAPS]
 
[http://casino-ratings.allgames4u.net/index.html CASINO-RATINGS]
 
[http://casino-ratings.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://casino-ratings.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://casino-ratings.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://casino-ratings.allgames4u.net/play-poker.html PLAY POKER]
 
[http://casino-ratings.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://casino-ratings.allgames4u.net/poker.html POKER]
 
[http://casino-ratings.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://casino.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://casino.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://casino.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://casino.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://casino.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://casino.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://casino.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://casino.allgames4u.net/casinos.html CASINOS]
 
[http://casino.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://casino.allgames4u.net/free-casino.html FREE CASINO]
 
[http://casino.allgames4u.net/index.html CASINO]
 
[http://casino.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://casino.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://casino.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://casino.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://casino.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://casino.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://casino.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://casino.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://casino.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://casino.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://casino.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://casino.allgames4u.net/play-poker.html PLAY POKER]
 
[http://casino.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://casino.allgames4u.net/poker-game.html POKER GAME]
 
[http://casino.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://casino.allgames4u.net/poker.html POKER]
 
[http://casino.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://casino.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://craps.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://craps.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://craps.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://craps.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://craps.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://craps.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://craps.allgames4u.net/blackjack.html BLACKJACK]
 
[http://craps.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://craps.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://craps.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://craps.allgames4u.net/craps.html CRAPS]
 
[http://craps.allgames4u.net/index.html CRAPS]
 
[http://craps.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://craps.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://craps.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://craps.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://craps.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://craps.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://craps.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://craps.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://craps.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://craps.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://craps.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://craps.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://craps.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://craps.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://craps.allgames4u.net/poker.html POKER]
 
[http://craps.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://craps.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://craps.allgames4u.net/roulette.html ROULETTE]
 
[http://craps.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://hold-em-poker.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://hold-em-poker.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://hold-em-poker.allgames4u.net/casino.html CASINO]
 
[http://hold-em-poker.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://hold-em-poker.allgames4u.net/index.html HOLD-EM-POKER]
 
[http://hold-em-poker.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://hold-em-poker.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://hold-em-poker.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://hold-em-poker.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://hold-em-poker.allgames4u.net/poker-game.html POKER GAME]
 
[http://hold-em-poker.allgames4u.net/poker-room.html POKER ROOM]
 
[http://hold-em-poker.allgames4u.net/poker.html POKER]
 
[http://hold-em-poker.allgames4u.net/roulette.html ROULETTE]
 
[http://hold-em-poker.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://internet-casino.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://internet-casino.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://internet-casino.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://internet-casino.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://internet-casino.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://internet-casino.allgames4u.net/blackjack.html BLACKJACK]
 
[http://internet-casino.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://internet-casino.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://internet-casino.allgames4u.net/casino.html CASINO]
 
[http://internet-casino.allgames4u.net/casinos.html CASINOS]
 
[http://internet-casino.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://internet-casino.allgames4u.net/craps.html CRAPS]
 
[http://internet-casino.allgames4u.net/free-casino.html FREE CASINO]
 
[http://internet-casino.allgames4u.net/index.html INTERNET-CASINO]
 
[http://internet-casino.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://internet-casino.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://internet-casino.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://internet-casino.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://internet-casino.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://internet-casino.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://internet-casino.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://internet-casino.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://internet-casino.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://internet-casino.allgames4u.net/play-poker.html PLAY POKER]
 
[http://internet-casino.allgames4u.net/poker-game.html POKER GAME]
 
[http://internet-casino.allgames4u.net/poker-room.html POKER ROOM]
 
[http://internet-casino.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://internet-casino.allgames4u.net/roulette.html ROULETTE]
 
[http://internet-casino.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://net-casino.allgames4u.net/best-casino.html BEST CASINO]
 
[http://net-casino.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://net-casino.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://net-casino.allgames4u.net/blackjack.html BLACKJACK]
 
[http://net-casino.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://net-casino.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://net-casino.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://net-casino.allgames4u.net/craps.html CRAPS]
 
[http://net-casino.allgames4u.net/free-casino.html FREE CASINO]
 
[http://net-casino.allgames4u.net/index.html NET-CASINO]
 
[http://net-casino.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://net-casino.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://net-casino.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://net-casino.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://net-casino.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://net-casino.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://net-casino.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://net-casino.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://net-casino.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://net-casino.allgames4u.net/poker-game.html POKER GAME]
 
[http://net-casino.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://net-casino.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://on-line-poker.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://on-line-poker.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://on-line-poker.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://on-line-poker.allgames4u.net/best-poker.html BEST POKER]
 
[http://on-line-poker.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://on-line-poker.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://on-line-poker.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://on-line-poker.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://on-line-poker.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://on-line-poker.allgames4u.net/casino.html CASINO]
 
[http://on-line-poker.allgames4u.net/casinos.html CASINOS]
 
[http://on-line-poker.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://on-line-poker.allgames4u.net/craps.html CRAPS]
 
[http://on-line-poker.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://on-line-poker.allgames4u.net/index.html ON-LINE-POKER]
 
[http://on-line-poker.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://on-line-poker.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://on-line-poker.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://on-line-poker.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://on-line-poker.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://on-line-poker.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://on-line-poker.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://on-line-poker.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://on-line-poker.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://on-line-poker.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://on-line-poker.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://on-line-poker.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://on-line-poker.allgames4u.net/play-poker.html PLAY POKER]
 
[http://on-line-poker.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://on-line-poker.allgames4u.net/poker-game.html POKER GAME]
 
[http://on-line-poker.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://on-line-poker.allgames4u.net/poker-room.html POKER ROOM]
 
[http://on-line-poker.allgames4u.net/poker.html POKER]
 
[http://on-line-poker.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://on-line-poker.allgames4u.net/roulette.html ROULETTE]
 
[http://on-line-poker.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://on-line-poker.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://on-line-poker.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://online-casino-gambling.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://online-casino-gambling.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://online-casino-gambling.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://online-casino-gambling.allgames4u.net/blackjack.html BLACKJACK]
 
[http://online-casino-gambling.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://online-casino-gambling.allgames4u.net/casinos.html CASINOS]
 
[http://online-casino-gambling.allgames4u.net/index.html ONLINE-CASINO-GAMBLING]
 
[http://online-casino-gambling.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://online-casino-gambling.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://online-casino-gambling.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://online-casino-gambling.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://online-casino-gambling.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://online-casino-games.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://online-casino-games.allgames4u.net/best-casino.html BEST CASINO]
 
[http://online-casino-games.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://online-casino-games.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://online-casino-games.allgames4u.net/best-poker.html BEST POKER]
 
[http://online-casino-games.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://online-casino-games.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://online-casino-games.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://online-casino-games.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://online-casino-games.allgames4u.net/blackjack.html BLACKJACK]
 
[http://online-casino-games.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://online-casino-games.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://online-casino-games.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://online-casino-games.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://online-casino-games.allgames4u.net/craps.html CRAPS]
 
[http://online-casino-games.allgames4u.net/free-casino.html FREE CASINO]
 
[http://online-casino-games.allgames4u.net/index.html ONLINE-CASINO-GAMES]
 
[http://online-casino-games.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://online-casino-games.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://online-casino-games.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://online-casino-games.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://online-casino-games.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://online-casino-games.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://online-casino-games.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://online-casino-games.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://online-casino-games.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://online-casino-games.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://online-casino-games.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://online-casino-games.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://online-casino-games.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://online-casino-games.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://online-casino-games.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://online-casino-games.allgames4u.net/play-poker.html PLAY POKER]
 
[http://online-casino-games.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://online-casino-games.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://online-casino-games.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://online-casino-games.allgames4u.net/poker-room.html POKER ROOM]
 
[http://online-casino-games.allgames4u.net/poker.html POKER]
 
[http://online-casino-games.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://online-casino-games.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://online-casino-games.allgames4u.net/slots.html SLOTS]
 
[http://online-casino-news.allgames4u.net/best-casino.html BEST CASINO]
 
[http://online-casino-news.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://online-casino-news.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://online-casino-news.allgames4u.net/best-poker.html BEST POKER]
 
[http://online-casino-news.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://online-casino-news.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://online-casino-news.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://online-casino-news.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://online-casino-news.allgames4u.net/casino.html CASINO]
 
[http://online-casino-news.allgames4u.net/casinos.html CASINOS]
 
[http://online-casino-news.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://online-casino-news.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://online-casino-news.allgames4u.net/craps.html CRAPS]
 
[http://online-casino-news.allgames4u.net/free-casino.html FREE CASINO]
 
[http://online-casino-news.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://online-casino-news.allgames4u.net/index.html ONLINE-CASINO-NEWS]
 
[http://online-casino-news.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://online-casino-news.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://online-casino-news.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://online-casino-news.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://online-casino-news.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://online-casino-news.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://online-casino-news.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://online-casino-news.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://online-casino-news.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://online-casino-news.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://online-casino-news.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://online-casino-news.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://online-casino-news.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://online-casino-news.allgames4u.net/play-poker.html PLAY POKER]
 
[http://online-casino-news.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://online-casino-news.allgames4u.net/poker.html POKER]
 
[http://online-casino-news.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://online-casino-news.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://online-casino.allgames4u.net/best-casino.html BEST CASINO]
 
[http://online-casino.allgames4u.net/best-poker.html BEST POKER]
 
[http://online-casino.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://online-casino.allgames4u.net/casinos.html CASINOS]
 
[http://online-casino.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://online-casino.allgames4u.net/craps.html CRAPS]
 
[http://online-casino.allgames4u.net/index.html ONLINE-CASINO]
 
[http://online-casino.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://online-casino.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://online-casino.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://online-casino.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://online-casino.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://online-casino.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://online-casino.allgames4u.net/poker-room.html POKER ROOM]
 
[http://online-casino.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://online-casino.allgames4u.net/slots-online.html SLOTS ONLINE]
 
[http://online-casinos.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://online-casinos.allgames4u.net/best-casino.html BEST CASINO]
 
[http://online-casinos.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://online-casinos.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://online-casinos.allgames4u.net/best-poker.html BEST POKER]
 
[http://online-casinos.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://online-casinos.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://online-casinos.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://online-casinos.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://online-casinos.allgames4u.net/blackjack.html BLACKJACK]
 
[http://online-casinos.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://online-casinos.allgames4u.net/casino.html CASINO]
 
[http://online-casinos.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://online-casinos.allgames4u.net/casinos.html CASINOS]
 
[http://online-casinos.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://online-casinos.allgames4u.net/craps-online.html CRAPS ONLINE]
 
[http://online-casinos.allgames4u.net/craps.html CRAPS]
 
[http://online-casinos.allgames4u.net/free-casino.html FREE CASINO]
 
[http://online-casinos.allgames4u.net/index.html ONLINE-CASINOS]
 
[http://online-casinos.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://online-casinos.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://online-casinos.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://online-casinos.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://online-casinos.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://online-casinos.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://online-casinos.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://online-casinos.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://online-casinos.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://online-casinos.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://online-casinos.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://online-casinos.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://online-casinos.allgames4u.net/play-poker.html PLAY POKER]
 
[http://online-casinos.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://online-casinos.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://online-casinos.allgames4u.net/poker-game.html POKER GAME]
 
[http://online-casinos.allgames4u.net/poker-room.html POKER ROOM]
 
[http://online-casinos.allgames4u.net/poker.html POKER]
 
[http://online-casinos.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://online-casinos.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://online-casinos.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://online-casinos.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://party-poker.allgames4u.net/best-poker.html BEST POKER]
 
[http://party-poker.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://party-poker.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://party-poker.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://party-poker.allgames4u.net/casino.html CASINO]
 
[http://party-poker.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://party-poker.allgames4u.net/casinos.html CASINOS]
 
[http://party-poker.allgames4u.net/craps.html CRAPS]
 
[http://party-poker.allgames4u.net/index.html PARTY-POKER]
 
[http://party-poker.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://party-poker.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://party-poker.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://party-poker.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://party-poker.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://party-poker.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://party-poker.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://party-poker.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://party-poker.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://party-poker.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://party-poker.allgames4u.net/play-poker.html PLAY POKER]
 
[http://party-poker.allgames4u.net/poker-game.html POKER GAME]
 
[http://party-poker.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://party-poker.allgames4u.net/poker-room.html POKER ROOM]
 
[http://party-poker.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://poker-tables.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://poker-tables.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://poker-tables.allgames4u.net/best-poker.html BEST POKER]
 
[http://poker-tables.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://poker-tables.allgames4u.net/blackjack.html BLACKJACK]
 
[http://poker-tables.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://poker-tables.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://poker-tables.allgames4u.net/casino.html CASINO]
 
[http://poker-tables.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://poker-tables.allgames4u.net/casinos.html CASINOS]
 
[http://poker-tables.allgames4u.net/craps.html CRAPS]
 
[http://poker-tables.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://poker-tables.allgames4u.net/index.html POKER-TABLES]
 
[http://poker-tables.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://poker-tables.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://poker-tables.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://poker-tables.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://poker-tables.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://poker-tables.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://poker-tables.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://poker-tables.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://poker-tables.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://poker-tables.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://poker-tables.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://poker-tables.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://poker-tables.allgames4u.net/poker.html POKER]
 
[http://poker-tables.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://poker-tables.allgames4u.net/slots.html SLOTS]
 
[http://poker-tables.allgames4u.net/video-poker.html VIDEO POKER]
 
[http://poker.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://poker.allgames4u.net/best-casino.html BEST CASINO]
 
[http://poker.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://poker.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://poker.allgames4u.net/best-poker.html BEST POKER]
 
[http://poker.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://poker.allgames4u.net/blackjack.html BLACKJACK]
 
[http://poker.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://poker.allgames4u.net/casinos.html CASINOS]
 
[http://poker.allgames4u.net/craps.html CRAPS]
 
[http://poker.allgames4u.net/index.html POKER]
 
[http://poker.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://poker.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://poker.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://poker.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://poker.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://poker.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://poker.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://poker.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://poker.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://poker.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://poker.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://poker.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://poker.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://poker.allgames4u.net/poker-game.html POKER GAME]
 
[http://poker.allgames4u.net/poker-room.html POKER ROOM]
 
[http://poker.allgames4u.net/roulette.html ROULETTE]
 
[http://poker.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://poker.allgames4u.net/slots.html SLOTS]
 
[http://roulette.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://roulette.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://roulette.allgames4u.net/blackjack-game.html BLACKJACK GAME]
 
[http://roulette.allgames4u.net/index.html ROULETTE]
 
[http://roulette.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://roulette.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://roulette.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://roulette.allgames4u.net/play-roulette.html PLAY ROULETTE]
 
[http://roulette.allgames4u.net/poker-game.html POKER GAME]
 
[http://roulette.allgames4u.net/poker-room.html POKER ROOM]
 
[http://roulette.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://roulette.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://roulette.allgames4u.net/roulette.html ROULETTE]
 
[http://rules-poker.allgames4u.net/best-blackjack.html BEST BLACKJACK]
 
[http://rules-poker.allgames4u.net/best-casino.html BEST CASINO]
 
[http://rules-poker.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://rules-poker.allgames4u.net/best-craps.html BEST CRAPS]
 
[http://rules-poker.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://rules-poker.allgames4u.net/casino-games.html CASINO GAMES]
 
[http://rules-poker.allgames4u.net/casino-online.html CASINO ONLINE]
 
[http://rules-poker.allgames4u.net/casinos.html CASINOS]
 
[http://rules-poker.allgames4u.net/craps-game.html CRAPS GAME]
 
[http://rules-poker.allgames4u.net/free-casino.html FREE CASINO]
 
[http://rules-poker.allgames4u.net/index.html RULES-POKER]
 
[http://rules-poker.allgames4u.net/internet-blackjack.html INTERNET BLACKJACK]
 
[http://rules-poker.allgames4u.net/internet-craps.html INTERNET CRAPS]
 
[http://rules-poker.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://rules-poker.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://rules-poker.allgames4u.net/internet-slots.html INTERNET SLOTS]
 
[http://rules-poker.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://rules-poker.allgames4u.net/online-casinos.html ONLINE CASINOS]
 
[http://rules-poker.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://rules-poker.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://rules-poker.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://rules-poker.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://rules-poker.allgames4u.net/play-craps.html PLAY CRAPS]
 
[http://rules-poker.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://rules-poker.allgames4u.net/poker-game.html POKER GAME]
 
[http://rules-poker.allgames4u.net/poker-room.html POKER ROOM]
 
[http://rules-poker.allgames4u.net/poker.html POKER]
 
[http://rules-poker.allgames4u.net/roulette.html ROULETTE]
 
[http://rules-poker.allgames4u.net/slots-game.html SLOTS GAME]
 
[http://sports-gambling.allgames4u.net/best-casino.html BEST CASINO]
 
[http://sports-gambling.allgames4u.net/best-casinos.html BEST CASINOS]
 
[http://sports-gambling.allgames4u.net/best-roulette.html BEST ROULETTE]
 
[http://sports-gambling.allgames4u.net/best-slots.html BEST SLOTS]
 
[http://sports-gambling.allgames4u.net/blackjack-online.html BLACKJACK ONLINE]
 
[http://sports-gambling.allgames4u.net/casino.html CASINO]
 
[http://sports-gambling.allgames4u.net/casinos-online.html CASINOS ONLINE]
 
[http://sports-gambling.allgames4u.net/free-casino.html FREE CASINO]
 
[http://sports-gambling.allgames4u.net/free-casinos.html FREE CASINOS]
 
[http://sports-gambling.allgames4u.net/index.html SPORTS-GAMBLING]
 
[http://sports-gambling.allgames4u.net/internet-casino.html INTERNET CASINO]
 
[http://sports-gambling.allgames4u.net/internet-casinos.html INTERNET CASINOS]
 
[http://sports-gambling.allgames4u.net/internet-poker.html INTERNET POKER]
 
[http://sports-gambling.allgames4u.net/internet-roulette.html INTERNET ROULETTE]
 
[http://sports-gambling.allgames4u.net/online-blackjack.html ONLINE BLACKJACK]
 
[http://sports-gambling.allgames4u.net/online-casino.html ONLINE CASINO]
 
[http://sports-gambling.allgames4u.net/online-craps.html ONLINE CRAPS]
 
[http://sports-gambling.allgames4u.net/online-poker.html ONLINE POKER]
 
[http://sports-gambling.allgames4u.net/online-roulette.html ONLINE ROULETTE]
 
[http://sports-gambling.allgames4u.net/online-slots.html ONLINE SLOTS]
 
[http://sports-gambling.allgames4u.net/play-blackjack.html PLAY BLACKJACK]
 
[http://sports-gambling.allgames4u.net/play-casino.html PLAY CASINO]
 
[http://sports-gambling.allgames4u.net/play-casinos.html PLAY CASINOS]
 
[http://sports-gambling.allgames4u.net/play-poker.html PLAY POKER]
 
[http://sports-gambling.allgames4u.net/play-slots.html PLAY SLOTS]
 
[http://sports-gambling.allgames4u.net/poker-game.html POKER GAME]
 
[http://sports-gambling.allgames4u.net/poker-online.html POKER ONLINE]
 
[http://sports-gambling.allgames4u.net/poker-room.html POKER ROOM]
 
[http://sports-gambling.allgames4u.net/poker.html POKER]
 
[http://sports-gambling.allgames4u.net/roulette-game.html ROULETTE GAME]
 
[http://sports-gambling.allgames4u.net/roulette-online.html ROULETTE ONLINE]
 
[http://sports-gambling.allgames4u.net/slots.html SLOTS]</div>
 

Latest revision as of 19:31, 6 July 2012

Metamod:Source comes with two sample plugins: stub and sample. This article is a brief overview of how to read and compile them. They are intended as a baseline for developing your own plugins, though they are certainly not required for your own development.

Metamod:Source is a C++ environment, but this is not a C++ tutorial. You should have sufficient knowledge of computer organization (memory, pointers, addressing) and intermediate experience with C++. Most importantly, you should be willing to dive into header files to research API definitions (which is necessary for the HL2SDK regardless).

Make sure to read the overview article, Metamod:Source Development.

Introduction

Before you begin, you should set up your Metamod:Source Environment. If you fail to complete this step, it is unlikely much else in this article will work for you.

The two sample plugins provided are:

  • stub_mm - Bare-bones plugin that does almost nothing.
  • sample_mm - More complete example plugin which implements a few things that Valve's serverplugin_sample does, such as hooking functions, creating ConVars, console commands, and showing dialog boxes.


The Engine Divide

The Orange Box and Episode 1 engines are not compatible, and thus there is a division:

  • Metamod:Source 1.4 API, Episode 1 and lower
  • Metamod:Source 1.6 API, Orange Box and higher

This is explained more in MM:S API Differences.

As such, you will notice various idiosyncrasies in the sample plugins. For example, METAMOD_PLAPI_VERSION exists in Metamod:Source 1.6 or later, so it is used to decide between GetEngineFactory (1.6) or engineFactory (1.4). Similarly, the sample plugins use two macros:

  • ENGINE_ORANGEBOX - Orange Box build
  • ENGINE_ORIGINAL - Original/Episode 1 build

These two macros are used in a few places to toggle functionality compatible for the given build.

For more information, see:


Compiling

Windows

Both plugins have a Visual Studio 2008 project file in their msvc9 folders. Each plugin has six build modes:

  • Release - Left 4 Dead - Release mode, Left 4 Dead
  • Debug - Left 4 Dead - Debug mode, Left 4 Dead
  • Release - Orange Box - Release mode, Orange Box
  • Debug - Orange Box - Debug mode, Orange Box
  • Release - Original - Release mode, Original/Episode1
  • Debug - Original - Debug mode, Original/Episode1

There exists normal "Release" and "Debug" build modes -- you should not use them, as they are not configured.

Linux

On Linux, you cannot simply type "make" in the folder containing the Makefile. You must specify a combination of parameters:

  • ENGINE - Required. Must be either "orangebox" or "original" or "left4dead".
  • DEBUG - Optional. Can be empty (Release mode) or "true" (Debug mode).

Binaries and object files will be written to one of the following folders:

  • Release.left4dead
  • Debug.left4dead
  • Debug.orangebox
  • Release.orangebox
  • Debug.orangebox
  • Release.original
  • Debug.original

Examples of building one of the example plugins:

#Episode 1, debug mode
make DEBUG=true ENGINE=original
#Orange Box, release mode
make ENGINE=orangebox
#Cleaning the Episode 1 build
make clean ENGINE=original

Note that you may need to edit the folder locations at the top of the Makefile, in case you set up your paths differently. Note ignore any messages that start with the word echo. A successful build creates a Debug.[mod]/filename.so or Release.[mod]/filename.so plugin file.

Stub Plugin

The stub plugin is a very simple, bare-bones plugin. It has little, if anything, beyond an implementation of the required API callbacks.

It hooks one function, IServerGameDLL::ServerActivate, which is a callback fired after IServerGameDLL::LevelInit.

Note that for the most part, stub_mm is free of compatibility cruft, whereas sample_mm tries to abstract more. This is so stub_mm doesn't appear to be "hiding" anything -- it's laid out very simply.


Sample Plugin

The full sample plugin is a bit more complicated, as it contains some of the examples from Valve's serverplugin_sample. It also may be a bit messy to read because of the engine compatibility wrappers in it.

Compatibility Wrappers

The first file of importance is engine_wrappers.h, which is full of compatibility shims. For example:

  • engineFactory became GetEngineFactory from 1.4 to 1.6
  • serverFactory became GetServerFactory from 1.4 to 1.6
  • ISmmAPI::Format did not exist in 1.4, so we created a simple #define to use snprintf instead. You could also use Valve's Q_snprintf if you desired.
  • Valve renamed VENGINE_CVAR_INTERFACE_VERSION to CVAR_INTERFACE_VERSION from Episode 1 to Orange Box.
  • The syntax to SH_CALL changed from 1.4 to 1.6 (which we have demonstrated for completeness and will be explained later).

Also note the CCommand class. This is a wrapper around the IVEngineServer::Cmd_Arg* functions, which were removed in Orange Box. Valve replaced it with a newer, more re-entrant set of functions based around CCommand. Rather than create two codebases, we've simply wrapped the old functions in the new API. The functionality isn't exactly the same (becaose of re-entrancy), but it works nicely for our purposes. You can read more about this trick in Porting to Orange Box.

Overview

BaseAccessor

This is a singleton class responsible for registering anything extending from ConCommandBase (ConVar and ConCommand). You only need one, and it should wrap META_REGCVAR.

Note that the accessor is invoked differently based on the engine version. For Orange Box, g_pCVar is assigned and ConVar_Register is called, whereas on Episode 1, only ConCommandBaseMgr::OneTimeInit is needed.

CallClasses

SourceHook has a feature where you can invoke a virtual function while bypassing all hooks on it. In SourceHook v4 (Metamod:Source 1.4 and lower), SH_CALL required a special object called a call class. This was removed in SourceHook v5. However, to be compatible with both MM:S 1.4 and 1.6, the sample plugin creates and destroys a call class when necessary.

For more information on this syntax and what it means, see: Sourcehook Development#Bypassing_Hooks.

Note that the ENGINE_CALL macro is in engine_wrappers.h, and wraps SH_CALL based on the MM:S version.

VSP Listening

Some of the sample functionality requires an IServerPluginCallbacks pointer, and Metamod:Source can provide one for you.

In the Metamod:Source 1.4 API, you had to implement IMetamodListener, and do something like this:

		ismm->AddListener(this, this);
		ismm->EnableVSPListener();

Then you had to wait for the callback to give you a correct pointer. In Metamod:Source 1.6, you can attempt to get the point immediately with:

if ((vsp_callbacks = ismm->GetVSPInfo(NULL)) == NULL)

Hooked Functions

The sample plugin hooks most of the functions available to IServerPluginCallbacks, in order to show you how to re-implement Valve's functionality.

Recall a few concepts:

  • In SourceHook, hooks can either be "pre" (pre-empting the final call), or "post" (occurring after the pre hooks and final call, if any).
  • In Valve Server Plugins, only hooks labeled with PLUGIN_RESULT can override functionality. SourceHook, however, can override the functionality of any function. The default action is to continue (or pass-through), though there are options to override and supercede (see the Sourcehook Development#Hook_Functions for more information).
  • A hook with a return value must return a value, or else the compiler will complain. However, unless you use RETURN_META_VALUE with MRES_SUPERCEDE or MRES_OVERRIDE, the value will not affect anything.

The following are generic hooks that Valve Server Plugins cannot override, so in the example they're hooked as post.

  • IServerGameDLL::LevelInit: Translates to LevelInit.
  • IServerGameDLL::ServerActivate: Translates to ServerActivate.
  • IServerGameDLL::GameFrame: Translates to GameFrame.
  • IServerGameDLL::LevelShutdown: Translates to LevelShutdown. (This is not actually hooked false in the example, but you probably shouldn't try overriding it.)
  • IServerGameClients::ClientActive: Translates to ClientActive. Not a very useful callback, not recommended for real work.
  • IServerGameClients::ClientDisconnect: Translates to ClientDisconnect. Called when the client disconnects.
  • IServerGameClients::ClientPutInServer: Translates to ClientPutInServer. Called when the client is put in-game and is fully instantiated (that is, IPlayerInfoManager will return valid results).
  • IServerGameClients::SetCommandClient: Translates to SetCommandClient. Called when a console command bound to a ConCommand is invoked, to tell all listeners which client typed the command. The index supplied is the client index minus one (that is, -1 for the server console, 0 for the first client, et cetera).

The following hooks are pre-empted, and thus can be overridden or superseded:

  • IServerGameClients::ClientSettingsChanged: Translates to ClientSettingsChanged. Called when a client's info buffer changes (that is, anything from IVEngineServer::GetClientConVarValue). Overriding it will prevent the game from being notified.
  • IServerGameClients::ClientConnect: Translates to ClientConnect. Called when a client is connecting. You can override/supersede with a value of false to reject the client (note, of course, you should fill the rejection message buffer).
  • IServerGameClients::ClientCommand: Translates to ClientCommand. Called when the client types unrecognized text in their client console. If you don't override this function, the original game's handler will be called. If the game doesn't recognize the text, it will print "Unknown command" or something similar. Therefore, if you wish to block this text from appearing, you should supercede when you recognize the text. The sample plugin shows how to do this for a few commands.


The VDF Files

Note that both stub_mm and sample_mm come with their own VDF files. These are example files that load their respective binaries from the addons folder. Make two notes about this:

  • VDF files go in Metamod's folder. That is, addons/metamod (or whatever mm_basedir is). They are not Valve Server Plugin files and they cannot go in the addons folder.
  • If your plugin has more than one file, or it creates other files, it may be prudent to place it in its own sub-folder. The sample plugins are small and thus we placed the binaries in addons for simplicity. The extended convention for more complicated plugins is:
    • addons/NAME/bin/NAME_mm.dll or addons/NAME/bin/NAME_mm_i486.so. For example, addons/sourcemod/bin/sourcemod_mm is SourceMod's VDF path, since it has a large directory structure.
    • Note: This convention is not required, but it is recommended.


Modifying/Reusing the Build Files

Linux

The Makefiles are organized into four main sections:

  • User-specific paths
  • Project-specific settings
  • Build logic
  • Build rules

The most important area to edit for a new project would be the "project-specific settings." These are variables such as:

  • OPT_FLAGS - Optimization flags (release-only).
  • DEBUG_FLAGS - Debug-only flags.
  • GCC4_FLAGS - Flags that are only used with GCC4.
  • CPP - The compiler to invoke.
  • BINARY - The binary file name to produce.
  • LINK - Extra link options.
  • INCLUDE - Extra include options (don't forget that you need -I to each item).

You should probably keep the -DENGINE_ORANGEBOX and -DENGINE_ORIGINAL macros.

For more information on flags and distribution, see Metamod:Source Development#Compiling.

Windows

You should probably keep the ENGINE_ORANGEBOX and ENGINE_ORIGINAL preprocessor macros.

You can edit the output binary name under the Linker options in the Project Properties dialog.

You should not add global include folders in order to compile. Set up your Metamod:Source Environment and, if you need more include folders, add them to the "Additional Include Directories" option under the C++ options in the Project Properties dialog. It is a semicolon-delimited list, for example: $(SOURCEMM14);$(HL2SDK)\public.

For the most part, editing a Visual Studio project is otherwise self-explanatory. See Metamod:Source Development#Compiling for more information on required "project-from-scratch" options.