https://wiki.alliedmods.net/api.php?action=feedcontributions&user=Freecode&feedformat=atomAlliedModders Wiki - User contributions [en]2024-03-29T07:25:02ZUser contributionsMediaWiki 1.31.6https://wiki.alliedmods.net/index.php?title=Main_Page&diff=3097Main Page2006-06-26T00:52:53Z<p>Freecode: /* News */</p>
<hr />
<div>__NOTOC__<br />
Welcome to the AMWiki, the unified and collaborative documentation project of the Consortium that runs such projects as [[AMX Mod X]], [[Metamod:Source]], and [[SourceMod]].<br />
<br />
How can you get started? Check out the [[AMWiki:Community Portal|Projects Page]] to see a general overview. Go to [[Help:Contents|Help]] to read about the basics and rules of this wiki. Or, if you're looking for something, just use search on the left hand side!<br />
<br />
=Featured Articles=<br />
<br />
==Optimizing Plugins==<br />
This [[Optimizing Plugins|ongoing article]] goes over many many important issues, tricks, and tips for making your plugins as fast as possible. Users following these directions have noticed significant CPU usage improvements in their CPU-hungry plugins. To visit, just click: [[Optimizing Plugins]]<br />
<br />
==AMX Mod X 1.70 Scripting Changes==<br />
[[AMX Mod X]] 1.70 has some important scripting changes. It is recommended that serious plugin authors quickly review some of the new features and changes available: [[AMX Mod X 1.70 Scripting Changes]].<br />
<br />
{| cellspacing="0" style="border:0px; margin-right:10%;"<br />
|- valign="top"<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
=Projects=<br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''AMX Mod X'''<br />
|- class="t2td"<br />
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]], the powerful and flexible scripting environment for [[Half-Life 1]].<br />
* [[:Category:Documentation (AMX Mod X)|Documentation]]<br />
* [[:Category:Scripting (AMX Mod X)|Scripting]]<br />
|}<br />
<p><br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''Metamod:Source'''<br />
|- class="t2td"<br />
|[[Image:Mms.jpg|left]][[Metamod:Source]], the ultimate plugin API for [[Half-Life 2]], featuring interface hooking and a versatile plugin API.<br />
* [[:Category:Documentation (SourceMM)|Documentation]]<br />
* [[Introduction_to_SourceMM_Coding|Developing]]<br />
|}<br />
|}<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
<br />
=News=<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Allied Modders Forums Luanch<br />
|- class="t2td"<br />
| ''2006-06-04'': The long awaited merge and release of Allied Modders Forums is now complete. Check the [http://forums.alliedmods.net/ Forums].<br />
|}<br />
<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Metamod:Source 1.2.3<br />
|- class="t2td"<br />
| ''2006-06-14'': New version of [[Metamod:Source|SourceMM]] was released with support for compatibility with the latest HL2DM update. See the [http://www.sourcemm.net/ homepage].<br />
|}<br />
<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| AMX Mod X 1.70<br />
|- class="t2td"<br />
| ''2006-03-04'': New version of [[AMX Mod X]] was released for bugfixes. See the [http://www.amxmodx.org/ homepage]. Developers should look at the featured articles, [[Optimizing Plugins]] and [[AMX Mod X 1.70 Scripting Changes]].<br />
|}<br />
<br />
|}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Main_Page&diff=3096Main Page2006-06-26T00:52:43Z<p>Freecode: /* News */</p>
<hr />
<div>__NOTOC__<br />
Welcome to the AMWiki, the unified and collaborative documentation project of the Consortium that runs such projects as [[AMX Mod X]], [[Metamod:Source]], and [[SourceMod]].<br />
<br />
How can you get started? Check out the [[AMWiki:Community Portal|Projects Page]] to see a general overview. Go to [[Help:Contents|Help]] to read about the basics and rules of this wiki. Or, if you're looking for something, just use search on the left hand side!<br />
<br />
=Featured Articles=<br />
<br />
==Optimizing Plugins==<br />
This [[Optimizing Plugins|ongoing article]] goes over many many important issues, tricks, and tips for making your plugins as fast as possible. Users following these directions have noticed significant CPU usage improvements in their CPU-hungry plugins. To visit, just click: [[Optimizing Plugins]]<br />
<br />
==AMX Mod X 1.70 Scripting Changes==<br />
[[AMX Mod X]] 1.70 has some important scripting changes. It is recommended that serious plugin authors quickly review some of the new features and changes available: [[AMX Mod X 1.70 Scripting Changes]].<br />
<br />
{| cellspacing="0" style="border:0px; margin-right:10%;"<br />
|- valign="top"<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
=Projects=<br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''AMX Mod X'''<br />
|- class="t2td"<br />
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]], the powerful and flexible scripting environment for [[Half-Life 1]].<br />
* [[:Category:Documentation (AMX Mod X)|Documentation]]<br />
* [[:Category:Scripting (AMX Mod X)|Scripting]]<br />
|}<br />
<p><br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''Metamod:Source'''<br />
|- class="t2td"<br />
|[[Image:Mms.jpg|left]][[Metamod:Source]], the ultimate plugin API for [[Half-Life 2]], featuring interface hooking and a versatile plugin API.<br />
* [[:Category:Documentation (SourceMM)|Documentation]]<br />
* [[Introduction_to_SourceMM_Coding|Developing]]<br />
|}<br />
|}<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
<br />
=News=<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Allied Modders Forums Luanch<br />
|- class="t2td"<br />
| ''2006-06-04'': The long awaited merge and release of Allied Modders Forums is now complete. Check the forums [http://forums.alliedmods.net/ Forums].<br />
|}<br />
<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Metamod:Source 1.2.3<br />
|- class="t2td"<br />
| ''2006-06-14'': New version of [[Metamod:Source|SourceMM]] was released with support for compatibility with the latest HL2DM update. See the [http://www.sourcemm.net/ homepage].<br />
|}<br />
<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| AMX Mod X 1.70<br />
|- class="t2td"<br />
| ''2006-03-04'': New version of [[AMX Mod X]] was released for bugfixes. See the [http://www.amxmodx.org/ homepage]. Developers should look at the featured articles, [[Optimizing Plugins]] and [[AMX Mod X 1.70 Scripting Changes]].<br />
|}<br />
<br />
|}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Main_Page&diff=3095Main Page2006-06-26T00:52:20Z<p>Freecode: /* News */</p>
<hr />
<div>__NOTOC__<br />
Welcome to the AMWiki, the unified and collaborative documentation project of the Consortium that runs such projects as [[AMX Mod X]], [[Metamod:Source]], and [[SourceMod]].<br />
<br />
How can you get started? Check out the [[AMWiki:Community Portal|Projects Page]] to see a general overview. Go to [[Help:Contents|Help]] to read about the basics and rules of this wiki. Or, if you're looking for something, just use search on the left hand side!<br />
<br />
=Featured Articles=<br />
<br />
==Optimizing Plugins==<br />
This [[Optimizing Plugins|ongoing article]] goes over many many important issues, tricks, and tips for making your plugins as fast as possible. Users following these directions have noticed significant CPU usage improvements in their CPU-hungry plugins. To visit, just click: [[Optimizing Plugins]]<br />
<br />
==AMX Mod X 1.70 Scripting Changes==<br />
[[AMX Mod X]] 1.70 has some important scripting changes. It is recommended that serious plugin authors quickly review some of the new features and changes available: [[AMX Mod X 1.70 Scripting Changes]].<br />
<br />
{| cellspacing="0" style="border:0px; margin-right:10%;"<br />
|- valign="top"<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
=Projects=<br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''AMX Mod X'''<br />
|- class="t2td"<br />
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]], the powerful and flexible scripting environment for [[Half-Life 1]].<br />
* [[:Category:Documentation (AMX Mod X)|Documentation]]<br />
* [[:Category:Scripting (AMX Mod X)|Scripting]]<br />
|}<br />
<p><br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''Metamod:Source'''<br />
|- class="t2td"<br />
|[[Image:Mms.jpg|left]][[Metamod:Source]], the ultimate plugin API for [[Half-Life 2]], featuring interface hooking and a versatile plugin API.<br />
* [[:Category:Documentation (SourceMM)|Documentation]]<br />
* [[Introduction_to_SourceMM_Coding|Developing]]<br />
|}<br />
|}<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
<br />
=News=<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Allied Modders Forum Luanch<br />
|- class="t2td"<br />
| ''2006-06-04'': The long awaited merge and release of Allied Modders Forums is now complete. Check the forums [http://forums.alliedmods.net].<br />
|}<br />
<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Metamod:Source 1.2.3<br />
|- class="t2td"<br />
| ''2006-06-14'': New version of [[Metamod:Source|SourceMM]] was released with support for compatibility with the latest HL2DM update. See the [http://www.sourcemm.net/ homepage].<br />
|}<br />
<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| AMX Mod X 1.70<br />
|- class="t2td"<br />
| ''2006-03-04'': New version of [[AMX Mod X]] was released for bugfixes. See the [http://www.amxmodx.org/ homepage]. Developers should look at the featured articles, [[Optimizing Plugins]] and [[AMX Mod X 1.70 Scripting Changes]].<br />
|}<br />
<br />
|}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:Freecode&diff=2964User:Freecode2006-05-28T13:47:45Z<p>Freecode: /* Old Projects */</p>
<hr />
<div>[[Image:FAM.jpg|thumb|actual size|Current Avatar]]<br />
<br />
== About Me ==<br />
Lets see. I have lived in U.S for about 7 years now. I own 7 gabens and 7 pies.<br />
I have a lower UserID on AMXX forums then BAILOPAN :D. Did i mention my 7 gabens and 7 pies?<br />
<br />
== Current Projects ==<br />
* [http://shero.rocks-hideout.com/ SuperHero Mod] w/ [[User:AssKicR|AssKicR]], [[User:Vittu|Vittu]], [[User:jtp10181|JTP10181]].<br />
*[http://www.tcwonline.org/~dvander/csdm/ Counter-Strike: Deathmatch 2.0+] w/ [[User:BAILOPAN|BAILOPAN]]<br />
<br />
== Old Projects ==<br />
* [http://soccermod.calzinger.net/ Soccer Mod] w/ [[User:AssKicR|AssKicR]], T[+]rget, [[User:Bludy|Bludy]]<br />
*FakeFull<br />
<br />
<br />
And now for my newest artwork piece<br />
<br />
[[Image:Freecode-graffiti.jpg]]</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2864Using New Menu System2006-04-02T15:23:57Z<p>Freecode: /* Handling Menu Choices */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Beginners Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
//menu_create ( title[], handler[], ml=0 )<br />
//title[] - Menu title<br />
//handler[] - This is a function which will get called once someone presses a key on your menu.<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
To display our menu we must simply use menu_display.<br />
<pawn>menu_display ( id, menu, page )</pawn><br />
* id - id of the user your displaying menu to.<br />
* menu - which menu are you showing the user.<br />
* page - what page (of the menu) to start on. Page of the menu starts at 0.<br />
<br />
Ok lets proceed to our code.<br />
<pawn>public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}</pawn><br />
*<tt>Notes:</tt><br />
** The for loop is used to cycle through players and display the menu to players that are alive.<br />
<br />
=== Handling Menu Choices ===<br />
Last step is actualy handling the menu choices. This happens through the menu handler function. It will get called once someone chooses an item off the menu. There are <b>3</b> variables that are passed to the function.<br />
* id - the users id<br />
* menu - the menu user had open<br />
* item - and the item user chose<br />
<br />
Now there are a few of special items like the Exit item.<br />
<pawn>#define MENU_EXIT -3<br />
#define MENU_BACK -2<br />
#define MENU_MORE -1</pawn><br />
<br />
So we must check at first if the item chosen was not one of the special ones.<br />
<pawn>if( item < 0 ) return PLUGIN_CONTINUE;</pawn><br />
<br />
Next we must retrieve the item information. What we are looking for is the number we gave the item (Yes = 1, No = 2). And to do this we use menu_item_getinfo.<br />
<pawn>menu_item_getinfo ( menu, item, &access, command[], cmdlen, name[]="", namelen=0, &callback )</pawn><br />
* menu - the menu where the item exists.<br />
* item - the item itself<br />
* &access - (edit)<br />
* command[] - (edit)(this is where we stored our item identification numbers)<br />
* cmdlen - length of the command[]<br />
* name[] - items name<br />
* namelen - length of the name<br />
* &callback - (edit)<br />
<br />
After we get our items info we will convert the command[] to a number (will either be a 1 or 2) and update the g_Votes array with the appropriate vote chosen.<br />
Here is our finished handle function:<br />
<pawn>public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[3];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn><br />
<br />
=== Fenito ===<br />
The end. You have completed the Beginner's Menu Tutorial. Using the new menu system we have more control over the menu. In the next tutorial you will see how powerfull the new menu system is. The use of callbacks and destroying and creating menus.<br />
Here is the completed code after the menu.<br />
<pawn>#include <amxmodx><br />
<br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
<br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
<br />
build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}<br />
<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[3];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2863Using New Menu System2006-04-02T15:17:48Z<p>Freecode: /* Handling Menu Choices */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Beginners Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
//menu_create ( title[], handler[], ml=0 )<br />
//title[] - Menu title<br />
//handler[] - This is a function which will get called once someone presses a key on your menu.<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
To display our menu we must simply use menu_display.<br />
<pawn>menu_display ( id, menu, page )</pawn><br />
* id - id of the user your displaying menu to.<br />
* menu - which menu are you showing the user.<br />
* page - what page (of the menu) to start on. Page of the menu starts at 0.<br />
<br />
Ok lets proceed to our code.<br />
<pawn>public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}</pawn><br />
*<tt>Notes:</tt><br />
** The for loop is used to cycle through players and display the menu to players that are alive.<br />
<br />
=== Handling Menu Choices ===<br />
Last step is actualy handling the menu choices. This happens through the menu handler function. It will get called once someone chooses an item off the menu. There are <b>3</b> variables that are passed to the function.<br />
* id - the users id<br />
* menu - the menu user had open<br />
* item - and the item user chose<br />
<br />
Now there are a few of special items like the Exit item.<br />
<pawn>#define MENU_EXIT -3<br />
#define MENU_BACK -2<br />
#define MENU_MORE -1</pawn><br />
<br />
So we must check at first if the item chosen was not one of the special ones.<br />
<pawn>if( item < 0 ) return PLUGIN_CONTINUE;</pawn><br />
<br />
Next we must retrieve the item information. What we are looking for is the number we gave the item (Yes = 1, No = 2). And to do this we use menu_item_getinfo.<br />
<pawn>menu_item_getinfo ( menu, item, &access, command[], cmdlen, name[]="", namelen=0, &callback )</pawn><br />
* menu - the menu where the item exists.<br />
* item - the item itself<br />
* &access - <br />
* command[] - (this is where we stored our item identification numbers)<br />
<br />
After we get our items info we will convert the command[] to a number (will either be a 1 or 2) and update the g_Votes array with the appropriate vote chosen.<br />
<pawn>public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[3];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2862Using New Menu System2006-04-02T15:01:36Z<p>Freecode: /* Displaying the Vote Menu */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Beginners Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
//menu_create ( title[], handler[], ml=0 )<br />
//title[] - Menu title<br />
//handler[] - This is a function which will get called once someone presses a key on your menu.<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
To display our menu we must simply use menu_display.<br />
<pawn>menu_display ( id, menu, page )</pawn><br />
* id - id of the user your displaying menu to.<br />
* menu - which menu are you showing the user.<br />
* page - what page (of the menu) to start on. Page of the menu starts at 0.<br />
<br />
Ok lets proceed to our code.<br />
<pawn>public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}</pawn><br />
*<tt>Notes:</tt><br />
** The for loop is used to cycle through players and display the menu to players that are alive.<br />
<br />
=== Handling Menu Choices ===<br />
<pawn>public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2861Using New Menu System2006-04-02T14:56:54Z<p>Freecode: /* Menu Tutorial */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Beginners Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
//menu_create ( title[], handler[], ml=0 )<br />
//title[] - Menu title<br />
//handler[] - This is a function which will get called once someone presses a key on your menu.<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2860Using New Menu System2006-04-02T14:55:31Z<p>Freecode: /* Registering Plugin and Menu */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
//menu_create ( title[], handler[], ml=0 )<br />
//title[] - Menu title<br />
//handler[] - This is a function which will get called once someone presses a key on your menu.<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2859Using New Menu System2006-04-02T14:55:20Z<p>Freecode: /* Registering Plugin and Menu */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
//menu_create ( title[], handler[], ml=0 )<br />
//title[] - Menu title<br />
//handler[] - This is a function which will get called once someone presses a key on your menu.<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2858Using New Menu System2006-04-02T14:54:16Z<p>Freecode: /* Registering Plugin and Menu */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>menu_create ( title[], handler[], ml=0 )</pawn><br />
* title[] - Menu title<br />
* handler[] - This is a function which will get called once someone presses a key on your menu.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
</pawn><br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2857Using New Menu System2006-04-02T14:53:13Z<p>Freecode: /* Registering Plugin and Menu */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<br />
*Registers our plugin<br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
<br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");<br />
//Syntax:<br />
//menu_create ( title[], handler[], ml=0 )<br />
</pawn><br />
* title[] - Menu title<br />
* handler[] - This is a function which will get called once someone presses a key on your menu.<br />
<br />
* We made this client command so we can start our vote.<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
<br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<pawn>build_menu();</pawn><br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2856Using New Menu System2006-04-02T14:51:19Z<p>Freecode: /* Constructing Menu */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
*Registers our plugin<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");</pawn><br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
**Syntax:<br />
<pawn>menu_create ( title[], handler[], ml=0 )<br />
</pawn><br />
* title[] - Menu title<br />
* handler[] - This is a function which will get called once someone presses a key on your menu.<br />
<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
* We made this client command so we can start our vote.<br />
<br />
<pawn>build_menu();</pawn><br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the item easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2855Using New Menu System2006-04-02T14:48:53Z<p>Freecode: /* Menu Tutorial */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
<pawn>register_plugin("Vote Menu","1.0","Freecode");</pawn><br />
*Registers our plugin<br />
<pawn>g_Menu = menu_create("Change Level?","menu_handle");</pawn><br />
*g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
**Syntax:<br />
<pawn>menu_create ( title[], handler[], ml=0 )<br />
</pawn><br />
* title[] - Menu title<br />
* handler[] - This is a function which will get called once someone presses a key on your menu.<br />
<br />
<pawn>register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
</pawn><br />
* We made this client command so we can start our vote.<br />
<br />
<pawn>build_menu();</pawn><br />
* This is a function call. build_menu() function will construct our vote menu.<br />
<br />
=== Constructing Menu ===<br />
Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.<br />
<pawn>menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )</pawn><br />
* menu - menu handle. This tells menu_additem the menu to which we are adding our item.<br />
* const name[] - the item name. This is what gets displayed into the menu.<br />
* const command[] - item info.<br />
<br />
Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".<br />
<pawn>build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}</pawn><br />
*<tt>Notes</tt><br />
** As you can see i set the const command[] to numbers. This is for us to identify the menu easier.<br />
** I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc<br />
<br />
=== Displaying the Vote Menu ===<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2854Using New Menu System2006-04-02T14:33:35Z<p>Freecode: /* Menu Tutorial */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
*<tt>register_plugin("Vote Menu","1.0","Freecode");</tt> - Registers our plugin<br />
*<tt>g_Menu = menu_create("Change Level?","menu_handle");</tt><br />
**Syntax:<br />
<pawn><br />
menu_create ( title[], handler[], ml=0 )<br />
</pawn><br />
**g_Menu - Our menu handle. It will be set after menu_create gets called.<br />
<br />
<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2853Using New Menu System2006-04-02T14:27:21Z<p>Freecode: /* Menu Tutorial */</p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
=== Includes ===<br />
As always we will start out by adding the required includes<br />
<pawn><br />
#include <amxmodx><br />
</pawn><br />
<br />
=== Global Variables ===<br />
<pawn><br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
</pawn><br />
<br />
In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].<br />
<br />
=== Registering Plugin and Menu ===<br />
<pawn><br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_plugin("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
</pawn><br />
<br />
Lets break this down. <br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2852Using New Menu System2006-04-02T14:23:12Z<p>Freecode: </p>
<hr />
<div>= Introduction =<br />
Write some intro here<br />
<br />
== Menu Tutorial ==<br />
Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.<br />
<br />
<pawn><br />
#include <amxmodx><br />
<br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
<br />
<br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_menu("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2851Using New Menu System2006-04-02T14:19:36Z<p>Freecode: </p>
<hr />
<div><pawn><br />
#include <amxmodx><br />
<br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
<br />
<br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_menu("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
</pawn></div>Freecodehttps://wiki.alliedmods.net/index.php?title=Using_New_Menu_System&diff=2850Using New Menu System2006-04-02T14:18:43Z<p>Freecode: </p>
<hr />
<div><br />
[small]<br />
#include <amxmodx><br />
<br />
new g_Menu; // Main Menu handler<br />
new g_Votes[3]; // Store Yes votes at 1, No at 2<br />
<br />
<br />
public plugin_init()<br />
{<br />
// Register Our Plugin<br />
register_menu("Vote Menu","1.0","Freecode");<br />
<br />
// Register our Change Level vote menu<br />
g_Menu = menu_create("Change Level?","menu_handle");<br />
<br />
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");<br />
<br />
// Now we need to build our menu<br />
build_menu();<br />
}<br />
<br />
public startvote(id)<br />
{<br />
for(new i = 0; i < 33; i++)<br />
{<br />
if( is_user_alive(i) )<br />
{<br />
menu_display(i, g_Menu, 0);<br />
}<br />
}<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
<br />
build_menu()<br />
{<br />
menu_additem(g_Menu, "Yes", "1");<br />
menu_additem(g_Menu, "No", "2");<br />
<br />
menu_setprop(g_Menu, MPROP_PERPAGE, 0);<br />
}<br />
<br />
public menu_handle(id, menu, item)<br />
{<br />
if( item < 0 ) return PLUGIN_CONTINUE;<br />
<br />
// Get item info<br />
new cmd[6], iName[64];<br />
new access, callback;<br />
<br />
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);<br />
<br />
new iChoice = str_to_num(cmd);<br />
<br />
g_Votes[iChoice]++;<br />
<br />
return PLUGIN_HANDLED;<br />
}<br />
[/small]</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Credits_(AMX_Mod_X)&diff=2727Credits (AMX Mod X)2006-03-11T05:12:32Z<p>Freecode: /* Donors who contributed money to AMX Mod X */</p>
<hr />
<div>=Development Team=<br />
*'''Felix "SniperBeamer" Geyer''' (inactive)<br />
**Project Founder<br />
**Plugin Maintenance<br />
**Language Translations and Foreign Relations<br />
**Web, IRC, and Forum Administrator<br />
*'''David "[[User:BAILOPAN|BAILOPAN]]" Anderson'''<br />
**Project Manager<br />
**System Administrator<br />
**Development/Maintenance of Core and Modules<br />
**Packaging/Releases<br />
**Publicist/Documentation<br />
**API for DBI, Plugin Debugging, GeoIP, RegEx<br />
*'''Pavol "[[User:Pavolmarko|PM OnoTo]]" Marko''' (inactive)<br />
**Core Developer<br />
**AMX/Small Technician<br />
**"0.20" Module API<br />
**FakeMeta Engine<br />
**Multi-Lingual API<br />
**"0.20" Forward Execution System<br />
*'''Jonny "Got His Gun" Bergström''' (inactive)<br />
**Fun Module<br />
**Counter-Strike Module<br />
**Valiantly finding many new CS offsets<br />
**Beta-testing all the mistakes we made :)<br />
**Counter-Strike Plugins Maintenance<br />
*'''Lukasz "SidLuke" Wlasinski''' (inactive)<br />
**Statistical Plugins Maintenance<br />
**Statistical and Add-On Packages for<br />
***Day of Defeat<br />
***Counter-Strike<br />
***The Specialists<br />
***Team Fortress Classic<br />
*'''Christian "[[User:Basic-Master|Basic-Master]]" Hammacher'''<br />
**AMXX Studio, the AMX Mod Editor<br />
**The wonderful new AMX Mod X Installer<br />
*'''Borja "faluco" Ferrer'''<br />
**General development and bug fixing<br />
**Making sure CVS is sane, clean, and up-to-date<br />
**Multi-Lingual management<br />
<br />
==Supporters, Contributers==<br />
*XAD<br />
**StatsX (based on stats by OLO).<br />
**Much insight into the future of AMX Mod X - FakeMeta.<br />
*Steve "mahnsawce" Duddenhoeffer<br />
**Official Natural-Selection Module<br />
**FakeMeta Module, revolutionary to HL Scripting<br />
**WTF Module, for adding new weapons<br />
**Putting up with [[User:BAILOPAN|BAILOPAN]] :)<br />
*Mike "[[User:Freecode|Freecode]]" Vvedenskiy<br />
**Long-time supporter and forum theme designer<br />
**Graphic design, documentation, moderation<br />
*Andreas "[[User:AssKicR|AssKicR]]" Caspers<br />
**Long-time supporter and popular plugin developer<br />
*fsfod, Ugly Punk, [[User:Damaged Soul|Damaged Soul]], Gonzo, jtp10181, Geesu, qizmo, fysh<br />
**Beta testing and code patches that greatly helped track down bugs.<br />
*Brian "[[User:Devicenull|Devicenull]]" Rak, Isaac "[[User:twistedeuphoria|twistedeuphoria]]" Edwards<br />
**Our trust-worthy forum moderators and plugin list maintainers.<br />
*Peter "CheesyPeteza" Holcroft<br />
**Natural-Selection package maintainer.<br />
*Borja "faluco" Ferrer<br />
**Diligently fixing bugs and translating things for the Multi-Lingual system.<br />
*-=HaXoMaTiC=-<br />
**The wonderful NSIS installer script.<br />
*DecemberX<br />
**Web-Site design and layout<br />
*Thiadmer Riemersma from ITB CompuPhase<br />
**For fixing our bug reports and general help, and of course, for his AMX/Small, and now Pawn maintenance.<br />
*Beta Testers<br />
**QwertyAccess, Zor, pendragon, KilledWithStyle, SirTiger<br />
*OLO<br />
**If it weren't for this strange guy, we wouldn't have had an AMX Mod to begin with.<br />
*'''And lastly, a thanks to all who used and contributed to AMX Mod X. Without the supportive and active community, AMX Mod X would not have been possible. Thank you!'''<br />
<br />
=Donors who contributed money to AMX Mod X=<br />
* =X=<br />
* AssKicR<br />
* azure<br />
* BigBaller<br />
* Burnzy<br />
* DopeFish<br />
* Dubie<br />
* Kamikaze<br />
* KiN | SuicideDog<br />
* Krin<br />
* Geesu<br />
* Ryan<br />
* StreetProphet<br />
* Striker<br />
* WeeWeeSlap<br />
* willyumyum<br />
* [KORT] IRON<br />
* {NM}JRBLOODMIST<br />
<br />
<br />
[[Category:AMX Mod X]]</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Credits_(AMX_Mod_X)&diff=2726Credits (AMX Mod X)2006-03-11T05:12:05Z<p>Freecode: /* Development Team */</p>
<hr />
<div>=Development Team=<br />
*'''Felix "SniperBeamer" Geyer''' (inactive)<br />
**Project Founder<br />
**Plugin Maintenance<br />
**Language Translations and Foreign Relations<br />
**Web, IRC, and Forum Administrator<br />
*'''David "[[User:BAILOPAN|BAILOPAN]]" Anderson'''<br />
**Project Manager<br />
**System Administrator<br />
**Development/Maintenance of Core and Modules<br />
**Packaging/Releases<br />
**Publicist/Documentation<br />
**API for DBI, Plugin Debugging, GeoIP, RegEx<br />
*'''Pavol "[[User:Pavolmarko|PM OnoTo]]" Marko''' (inactive)<br />
**Core Developer<br />
**AMX/Small Technician<br />
**"0.20" Module API<br />
**FakeMeta Engine<br />
**Multi-Lingual API<br />
**"0.20" Forward Execution System<br />
*'''Jonny "Got His Gun" Bergström''' (inactive)<br />
**Fun Module<br />
**Counter-Strike Module<br />
**Valiantly finding many new CS offsets<br />
**Beta-testing all the mistakes we made :)<br />
**Counter-Strike Plugins Maintenance<br />
*'''Lukasz "SidLuke" Wlasinski''' (inactive)<br />
**Statistical Plugins Maintenance<br />
**Statistical and Add-On Packages for<br />
***Day of Defeat<br />
***Counter-Strike<br />
***The Specialists<br />
***Team Fortress Classic<br />
*'''Christian "[[User:Basic-Master|Basic-Master]]" Hammacher'''<br />
**AMXX Studio, the AMX Mod Editor<br />
**The wonderful new AMX Mod X Installer<br />
*'''Borja "faluco" Ferrer'''<br />
**General development and bug fixing<br />
**Making sure CVS is sane, clean, and up-to-date<br />
**Multi-Lingual management<br />
<br />
==Supporters, Contributers==<br />
*XAD<br />
**StatsX (based on stats by OLO).<br />
**Much insight into the future of AMX Mod X - FakeMeta.<br />
*Steve "mahnsawce" Duddenhoeffer<br />
**Official Natural-Selection Module<br />
**FakeMeta Module, revolutionary to HL Scripting<br />
**WTF Module, for adding new weapons<br />
**Putting up with [[User:BAILOPAN|BAILOPAN]] :)<br />
*Mike "[[User:Freecode|Freecode]]" Vvedenskiy<br />
**Long-time supporter and forum theme designer<br />
**Graphic design, documentation, moderation<br />
*Andreas "[[User:AssKicR|AssKicR]]" Caspers<br />
**Long-time supporter and popular plugin developer<br />
*fsfod, Ugly Punk, [[User:Damaged Soul|Damaged Soul]], Gonzo, jtp10181, Geesu, qizmo, fysh<br />
**Beta testing and code patches that greatly helped track down bugs.<br />
*Brian "[[User:Devicenull|Devicenull]]" Rak, Isaac "[[User:twistedeuphoria|twistedeuphoria]]" Edwards<br />
**Our trust-worthy forum moderators and plugin list maintainers.<br />
*Peter "CheesyPeteza" Holcroft<br />
**Natural-Selection package maintainer.<br />
*Borja "faluco" Ferrer<br />
**Diligently fixing bugs and translating things for the Multi-Lingual system.<br />
*-=HaXoMaTiC=-<br />
**The wonderful NSIS installer script.<br />
*DecemberX<br />
**Web-Site design and layout<br />
*Thiadmer Riemersma from ITB CompuPhase<br />
**For fixing our bug reports and general help, and of course, for his AMX/Small, and now Pawn maintenance.<br />
*Beta Testers<br />
**QwertyAccess, Zor, pendragon, KilledWithStyle, SirTiger<br />
*OLO<br />
**If it weren't for this strange guy, we wouldn't have had an AMX Mod to begin with.<br />
*'''And lastly, a thanks to all who used and contributed to AMX Mod X. Without the supportive and active community, AMX Mod X would not have been possible. Thank you!'''<br />
<br />
=Donors who contributed money to AMX Mod X=<br />
* =X=<br />
* AssKicR<br />
* azure<br />
* BigBaller<br />
* Burnzy<br />
* DopeFish<br />
* Dubie<br />
* Kamikaze<br />
* KiN | SuicideDog<br />
* Krin<br />
* pimp daddy<br />
* Ryan<br />
* StreetProphet<br />
* Striker<br />
* WeeWeeSlap<br />
* willyumyum<br />
* [KORT] IRON<br />
* {NM}JRBLOODMIST<br />
<br />
<br />
[[Category:AMX Mod X]]</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Optimizing_Plugins_(AMX_Mod_X_Scripting)&diff=2538Optimizing Plugins (AMX Mod X Scripting)2006-02-01T05:35:51Z<p>Freecode: /* Constant variables */</p>
<hr />
<div>==Introduction==<br />
[[Admin-Mod]] and [[AMX Mod X]] became very popular because of their easy to use scripting language. However, the words "scripting language" come with a lot of loaded preconceptions. Most people assume that because it's scripted:<br />
*You can't possibly make it any faster<br />
*It's pre-compiled, so it's already quite fast<br />
*Details don't matter, as it's only "scripting" anyway<br />
<br />
Especially, with [[Pawn]] (formerly Small), none of these are true. The compiler, in fact, is very poor at optimizing, and you can '''greatly''' increase the speed and efficiency of your plugins by keeping a few rules in mind. Remember - it's more important to minimize instructions than it is to minimize lines of code.<br />
<br />
===Terms===<br />
To read this document, you will need to understand a few concepts beforehand:<br />
*<tt>BRANCHING</tt> - When the processor takes a different path of code. For example, to call a function or to use an if statement, the processor will "branch". Modern processors attempt to predict pathways with "branch prediction", but it's best to avoid branching a lot if possible.<br />
*<tt>STACK ALLOCATION</tt> - In Pawn, all local data is stored on the stack, a big chunk of continuous memory. Whenever you create a variable on the stack, it is automatically written with zeroes.<br />
*<tt>HEAP ALLOCATION</tt> - In Pawn, temporary data that needs to be referenced by a native is stored on the heap, another area of contiguous, but less restrictive memory.<br />
*<tt>DATA SECTION</tt> - This is an area of memory built into your .amxx file. In fact, it "becomes" the heap at load time. All your strings and arrays are hardcoded into this area.<br />
*<tt>EXPENSIVENESS</tt> - To be "expensive" in computer science means an operation requires a lot of CPU processing. It usually does not refer to memory size, only to processing cycles and time. Addition is inexpensive, floating power operations are expensive. However, both are inexpensive in comparison to writing a file. An inexpensive operation can also be called "cheap".<br />
*<tt>BIG-OH NOTATION</tt> - O(*) notation refers to the expensiveness of an algorithm. If something is O(n), it occurs in linear time -- meaning that for N items, it will complete relative to N. O(N^2) means with N items, it will complete relative to N^2. O(1) means "constant time" - no matter what N is, it will run in the same amount of time.<br />
<br />
==Compiler Optimizations==<br />
These optimizations have to do with changing how your code is compiled. While the syntax may remain the same, you are not only increasing compile time, but increasing your plugin's efficiency and speed at run time.<br />
<br />
===Always Save Results===<br />
Observe the example code snippet below:<br />
<pawn>if (get_user_team(player) == TEAM_T)<br />
{<br />
//...code<br />
} else if (get_user_team(player) == TEAM_CT) {<br />
//...code<br />
} else if (get_user_team(player) == TEAM_SPECTATOR) {<br />
//...code<br />
}</pawn><br />
This is a mild example of "cache your results". When the compiler generates assembly for this code, it will (in pseudo code) generate:<br />
<pre><br />
CALL get_user_team<br />
COMPARE+BRANCH<br />
CALL get_user_team<br />
COMPARE+BRANCH<br />
CALL get_user_team<br />
COMPARE+BRANCH<br />
</pre><br />
Notice the problem? We have called <tt>get_user_team</tt> an extra two times than necessary. The result doesn't change, so we can save it. Observe:<br />
<pawn>new team = get_user_team(player)<br />
if (team == TEAM_T)<br />
{<br />
//...code<br />
} else if (team == TEAM_CT) {<br />
//...code<br />
} //...etc</pawn><br />
Now, the compiler will only generate this:<br />
<pre><br />
CALL get_user_team<br />
COMPARE+BRANCH<br />
COMPARE+BRANCH<br />
COMPARE+BRANCH<br />
</pre><br />
If <tt>get_user_team</tt> were an expensive operation (it's relatively cheap), we would have recalculated the entire result each branch of the <tt>if</tt> case.<br />
<br />
<br />
===Switch instead of If===<br />
If you can, you should use <tt>switch</tt> cases instead of <tt>if</tt>. This is because for an if statement, the compiler must branch to each consecutive <tt>if</tt> case. Using the example from above, observe the switch version:<br />
<pawn>new team = get_user_team(player)<br />
switch (team)<br />
{<br />
case TEAM_T:<br />
//code...<br />
case TEAM_CT:<br />
//code...<br />
case TEAM_SPECTATOR:<br />
//code...<br />
}</pawn><br />
This will generate what's called a "case table". Rather than worm through displaced <tt>if</tt> tests, the compiler generates a table of possible values, which the virtual machine knows to browse through:<br />
<pre><br />
CALL get_user_team<br />
COMPARE<br />
COMPARE<br />
COMPARE<br />
</pre><br />
<br />
<br />
===Don't Re-index Arrays===<br />
A common practive in Small is to "save space" by re-indexing arrays. There are a few myths behind this, such as saving memory, assuming the compiler does it for you, or readability. Fact: none of these are true. Observe the code below:<br />
<pawn>new players[32], num, team<br />
get_players(players, num)<br />
for (new i=0; i<num; i++)<br />
{<br />
if (!is_user_connected(players[i]))<br />
continue;<br />
team = get_user_team(players[i])<br />
set_user_frags(players[i], 0)<br />
}</pawn><br />
For this, the compiler generates code similar to:<br />
<pre><br />
:LOOP_BEGIN<br />
LOAD i<br />
LOAD players<br />
CALC<br />
LOAD players[i]<br />
CALL is_user_connected<br />
LOAD i<br />
LOAD players<br />
CALC<br />
LOAD players[i]<br />
CALL get_user_team<br />
LOAD i<br />
LOAD players<br />
CALC<br />
LOAD players[i]<br />
CALL set_user_frags<br />
</pre><br />
See what happened? The compiler does not cache array indexing. Because we've used <tt>players[i]</tt> each time, every instance generates 4-6 (or more) instructions which load <tt>i</tt>, the address of <tt>players</tt>, computes the final location, and then grabs the data out of memory. It is much faster to do:<br />
<pawn>new player<br />
for (new i=0; i<num; i++)<br />
{<br />
player = players[i]<br />
if (!is_user_connected(player))<br />
continue;<br />
team = get_user_team(player)<br />
}</pawn><br />
Not only is this more readable, but look at how much cruft we've shaved off the compiler's generated code:<br />
<pre><br />
:LOOP_BEGIN<br />
LOAD i<br />
LOAD players<br />
CALC<br />
LOAD players[i]<br />
STORE player<br />
CALL is_user_connected<br />
LOAD player<br />
CALL get_user_team<br />
LOAD player<br />
CALL set_user_frags<br />
</pre><br />
In a large loop you can drastically reduce codesize in this manner.<br />
<br />
<br />
===Global vs Local and Variables in Loops===<br />
It is important to realize that every variable in [[Pawn]] is automatically zeroed. For global variables, they are static and permanent, thus they are zeroed when your plugin is loaded. Variables in functions, however, must be zeroed dynamically. This is a slow and tedious operation, and you should not only avoid relying on it when necessary, but you should keep that fact in mind when using arrays.<br />
<br />
[[Arrays]] in [[Pawn]] are "cells" of data. Each cell is four or eight bytes, depending on whether your processor is 32bit or 64bit. To create an array of 4096 cells, for example:<br />
<pawn>new array[4096]</pawn><br />
The compiler generates code to manually zero every single one of the 16,384 bytes in that location. Normally, this isn't too bad -- but it can be absolutely deadly in a function which is called quite often. For example, <tt>server_frame</tt> is called on every [[server tick]] in [[AMX Mod X]]. To declare an array of that size in <tt>server_frame</tt> is highly unnecessary. Instead, you can take advantage of the fact that not only are globals free of charge, but <tt>server_frame</tt> does not need to be re-entrant. That is, you will never call <tt>server_frame</tt> inside of <tt>server_frame</tt>, so making the variable global will not bring up the problem of one instance of the function overwriting data from another instance of the same function. Observe:<br />
<pawn>new g_serverframe_array[4096]<br />
public server_frame()<br />
{<br />
//...code that uses g_serverframe_array<br />
}</pawn><br />
This will execute conseridably faster. You can do this with smaller arrays too.<br />
<br />
Likewise, it is equally important to avoid declaring arrays inside of loops. Consider the following block of code:<br />
<pawn>for (new i=0; i<num; i++)<br />
{<br />
new message[255], name[32], player<br />
player = players[i]<br />
get_user_name(player, name, 31)<br />
format(message, 254, "Hello, %s", name)<br />
}</pawn><br />
If there are 32 players, this loop will actually resize and zero out over 1K of memory thirty two times in a row. Not good! However, on the other hand, it's nice that the message is zeroed out for us each time. <tt>Tip:</tt> you often only need to zero out the first character of a string. This will make the entire string empty. The code below is much more efficient:<br />
<pawn>new message[255], name[32], player<br />
for (new i=0; i<num; i++)<br />
{<br />
player = players[i]<br />
name[0] = '\0'<br />
message[0] = '\0'<br />
get_user_name(player, name, 31)<br />
format(message, 254, "Hello, %s", name)<br />
}</pawn><br />
This has the effect of safely making the string empty beforehand, as well as largely reducing a lot of run-time overhead.<br />
<br />
===Static vs Global===<br />
A way to drastically improve the memory footprint of your functions without the potentially confusing and damaging method of global variables can be found in static variables.<br />
<br />
A variable declared with the keyword "static" instead of "new" operates in the same way a global does (it is created only once) but the variable is still local to the function; this means it generates much easier to read code, while drastically improving speed.<br />
<br />
As such, one should always consider using a static variable or array in a situation where a global variable could be substituted for speed, but you want to keep your code neat and easy to analyze.<br />
<br />
===Constant variables===<br />
You can declare a variable "constant" by adding the "const" keyword before the variable name:<br />
<br />
<pawn>new const AMX_GABEN[] = "amx_gaben"</pawn><br />
<br />
What this does is prevents the variable from being changed; essentially, you've locked the variable to a certain value. In this way, a constant can offer a type safe method of simplifying code, unlike a define, which is not type safe.<br />
<br />
In addition, constant variables are often optimized out, resulting in quicker and smaller code.<br />
<br />
===For Loop Comparisons===<br />
A common mistake is to write code like this:<br />
<pawn>new string[256] = "something long"<br />
for (new i=0; i<strlen(string); i++)<br />
//...code</pawn><br />
This plays off a similar principle from before: cache results. The compiler will actually recompute your string length on each iteration of the loop. This will have even worse effects if your string changes mid-loop. A more sensible method is:<br />
<pawn>new string[256] = "something long"<br />
new len = strlen(string)<br />
for (new i=0; i<len; i++)<br />
//...code</pawn><br />
<br />
<br />
==Tips and Tricks==<br />
===Lookup Tables===<br />
Precompute what can be precomputed. For example, say you have a mapping of weapon indices to names:<br />
<pawn>if (weapon == CSW_AK47)<br />
copy(name, len, "weapon_ak47")</pawn><br />
Ignoring the fact that we have <tt>get_weapon_name</tt> in [[AMX Mod X]], this is inefficient. We could precompute this result in a table:<br />
<pawn>new g_WeaponNamesTable[TOTAL_WEAPONS] = {<br />
//..0 to CSW_AK47-1<br />
"weapon_ak47",<br />
//..CSW_AK47+1 to TOTAL_WEAPONS-1<br />
};</pawn><br />
<br />
===Perfect Hashing===<br />
:TODO: explain this<br />
<br />
<br />
===Local Strings===<br />
The [[Pawn]] compiler does not optimize the DATA section, which stores all hardcoded strings and global arrays. If you reference the same hardcoded string 500 times in your plugin, it will appear 500 different times. If this seems bad enough, it actually does this with all strings. For example, the empty string ("") appears everywhere in the include files, usually used as a default parameter to many natives. This too is copied into the data section for each unique reference. <br />
<br />
For example:<br />
<pawn>set_cvar_string("amx_gaben", get_cvar_string("amx_gaben") + 1)</pawn><br />
This will create two copies of "amx_gaben" in the DATA section. While this doesn't really hurt, it does increase the size of your plugin. <br />
<br />
Similarly, this has the same problem:<br />
<pawn>#define AMX_GABEN "amx_gaben"<br />
set_cvar_string(AMX_GABEN, get_cvar_string(AMX_GABEN) + 1)</pawn><br />
The only way to avoid this mess is to use global variables. As stated earlier, they're basically free storage.<br />
<pawn>new AMX_GABEN[] = "amx_gaben"<br />
set_cvar_string(AMX_GABEN, get_cvar_string(AMX_GABEN) + 1)</pawn><br />
<br />
Again, while not necessary, this will reduce your plugin's size in memory and on disk. If you're already using defines, you can make this switch easily.<br />
<br />
In order to prevent this from changing, you may want to declare it constant:<br />
<br />
<pawn>new const AMX_GABEN[] = "amx_gaben"<br />
set_cvar_string(AMX_GABEN, get_cvar_string(AMX_GABEN) + 1)</pawn><br />
<br />
Now it is a perfectly safe method of storage.<br />
<br />
<br />
[[Category:Scripting (AMX Mod X)]]</div>Freecodehttps://wiki.alliedmods.net/index.php?title=File:Amxx_88x31.jpg&diff=2511File:Amxx 88x31.jpg2006-01-30T06:57:01Z<p>Freecode: </p>
<hr />
<div></div>Freecodehttps://wiki.alliedmods.net/index.php?title=File:Banner.jpg&diff=2465File:Banner.jpg2006-01-24T00:22:52Z<p>Freecode: </p>
<hr />
<div></div>Freecodehttps://wiki.alliedmods.net/index.php?title=User_talk:CyberMind&diff=2400User talk:CyberMind2006-01-20T19:01:13Z<p>Freecode: </p>
<hr />
<div>This guy sure is awesome --[[User:CyberMind|cybermind]] 01:40, 20 January 2006 (EST)<br />
:yeah but can he do this *flips upside down* -- [[User:BAILOPAN|BAILOPAN]] 08:43, 20 January 2006 (EST)<br />
<br />
:: Oh man i think he got you there --[[User:Freecode|Freecode]] 14:01, 20 January 2006 (EST)</div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:Freecode&diff=2325User:Freecode2006-01-19T09:48:03Z<p>Freecode: </p>
<hr />
<div>[[Image:FAM.jpg|thumb|actual size|Current Avatar]]<br />
<br />
== About Me ==<br />
Lets see. I have lived in U.S for about 7 years now. I own 7 gabens and 7 pies.<br />
I have a lower UserID on AMXX forums then BAILOPAN :D. Did i mention my 7 gabens and 7 pies?<br />
<br />
== Current Projects ==<br />
* [http://shero.rocks-hideout.com/ SuperHero Mod] w/ [[User:AssKicR|AssKicR]], [[User:Vittu|Vittu]], [[User:jtp10181|JTP10181]].<br />
*[http://www.tcwonline.org/~dvander/csdm/ Counter-Strike: Deathmatch 2.0+] w/ [[User:BAILOPAN|BAILOPAN]]<br />
<br />
== Old Projects ==<br />
* [http://soccermod.calzinger.net/ Soccer Mod] w/ [[User:AssKicR|AssKicR]], T[+]rget, [[User:Bludy|Bludy]]<br />
*FakeFull<br />
<br />
<br />
And now for my newest artwork piece<br />
[[Image:Freecode-graffiti.jpg]]</div>Freecodehttps://wiki.alliedmods.net/index.php?title=File:Freecode-graffiti.jpg&diff=2324File:Freecode-graffiti.jpg2006-01-19T09:47:28Z<p>Freecode: My work :) (That says my name for illiterate people, Mike)</p>
<hr />
<div>My work :) (That says my name for illiterate people, Mike)</div>Freecodehttps://wiki.alliedmods.net/index.php?title=File:Amxx.jpg&diff=2316File:Amxx.jpg2006-01-18T01:12:51Z<p>Freecode: AMX Mod X Logo</p>
<hr />
<div>AMX Mod X Logo</div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:Freecode&diff=2314User:Freecode2006-01-17T22:13:19Z<p>Freecode: /* Current Projects */</p>
<hr />
<div>[[Image:FAM.jpg|thumb|actual size|Current Avatar]]<br />
<br />
== About Me ==<br />
Lets see. I have lived in U.S for about 7 years now. I own 7 gabens and 7 pies.<br />
I have a lower UserID on AMXX forums then BAILOPAN :D. Did i mention my 7 gabens and 7 pies?<br />
<br />
== Current Projects ==<br />
* [http://shero.rocks-hideout.com/ SuperHero Mod] w/ [[User:AssKicR|AssWoopeR :)]], [[User:Vittu|Vittu]], [[User:jtp10181|JTP10181]].<br />
*[http://www.tcwonline.org/~dvander/csdm/ Counter-Strike: Deathmatch 2.0+] w/ [[User:BAILOPAN|BAILOPAN]]<br />
<br />
== Old Projects ==<br />
* [http://soccermod.calzinger.net/ Soccer Mod] w/ [[User:AssKicR|AssWoopeR :)]], T[+]rget, [[User:Bludy|Bludy]]<br />
*FakeFull<br />
<br />
<br />
<br />
gaben</div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:Freecode&diff=2313User:Freecode2006-01-17T22:12:29Z<p>Freecode: </p>
<hr />
<div>[[Image:FAM.jpg|thumb|actual size|Current Avatar]]<br />
<br />
== About Me ==<br />
Lets see. I have lived in U.S for about 7 years now. I own 7 gabens and 7 pies.<br />
I have a lower UserID on AMXX forums then BAILOPAN :D. Did i mention my 7 gabens and 7 pies?<br />
<br />
== Current Projects ==<br />
* [http://shero.rocks-hideout.com/ Superheromod] w/ [[User:AssKicR|AssWoopeR :)]], [[User:Vittu|Vittu]], [[User:jtp10181|JTP10181]].<br />
*[http://www.tcwonline.org/~dvander/csdm/ Counter-Strike: Deathmatch 2.0+] w/ [[User:BAILOPAN|BAILOPAN]]<br />
<br />
== Old Projects ==<br />
* [http://soccermod.calzinger.net/ Soccer Mod] w/ [[User:AssKicR|AssWoopeR :)]], T[+]rget, [[User:Bludy|Bludy]]<br />
*FakeFull<br />
<br />
<br />
<br />
gaben</div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:Freecode&diff=2312User:Freecode2006-01-17T21:40:21Z<p>Freecode: </p>
<hr />
<div>[[Image:FAM.jpg|thumb|actual size|Current Avatar]]<br />
<br />
== About Me ==<br />
Lets see. I have lived in U.S for about 7 years now. I own 7 gabens and 7 pies.<br />
I have a lower UserID on AMXX forums then BAILOPAN :D. Did i mention my 7 gabens and 7 pies?<br />
<br />
== Current Projects ==<br />
*SuperHero Mod Module - with [[User:AssKicR|AssKicR]], [[User:Vittu|Vittu]], [[User:jtp10181|JTP10181]].<br />
*Counter-Strike: Deathmatch 2.0+<br />
<br />
== Old Projects ==<br />
*Soccer Mod<br />
*FakeFull<br />
<br />
<br />
<br />
gaben</div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:Freecode&diff=2307User:Freecode2006-01-17T19:19:04Z<p>Freecode: </p>
<hr />
<div>An AMXX veteran. Currently runs and maintains SuperHero Mod with [[User:AssKicR|AssKicR]], [[User:Vittu|Vittu]], [[User:jtp10181|JTP10181]].<br />
[[Image:FAM.jpg|thumb|actual size|Current Avatar]]<br />
<br />
== About Me ==<br />
Lets see. I have lived in U.S for about 7 years now. I own 7 gabens and 7 pies.<br />
I have a lower UserID on AMXX forums then BAILOPAN :D. Did i mention my 7 gabens and 7 pies?<br />
<br />
== Current Projects ==<br />
*SuperHero Mod Module<br />
*Counter-Strike: Deathmatch 2.0+<br />
<br />
== Old Projects ==<br />
*Soccer Mod<br />
*FakeFull<br />
<br />
<br />
<br />
gaben</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Half-Life_1_Game_Events&diff=2301Half-Life 1 Game Events2006-01-17T14:53:08Z<p>Freecode: </p>
<hr />
<div>[[Category:Half-Life 1]]<br />
= Half-Life Events =<br />
Description here<br />
<br />
== ADStop ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|ADStop}}<br />
{{end-hl1msg}}<br />
<br />
== AllowSpec ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|AllowSpec}}<br />
{{end-hl1msg}}<br />
<br />
== AmmoPickup ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|AmmoPickup|byte, byte}}<br />
{{hl1msg|byte|Ammo ID}}<br />
{{hl1msg|byte|Ammount}}<br />
{{end-hl1msg}}<br />
<br />
== AmmoX ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|AmmoX|byte, byte}}<br />
{{hl1msg|byte|Ammo ID}}<br />
{{hl1msg|byte|Ammount}}<br />
{{end-hl1msg}}<br />
<br />
== BarTime ==<br />
Leave the 2nd byte as 0, to turn off a BarTime that you started just send a duration of 0.<br />
{{begin-hl1msg|BarTime|byte, byte}}<br />
{{hl1msg|byte|Duration}}<br />
{{hl1msg|byte|Unknown}}<br />
{{end-hl1msg}}<br />
<br />
== BarTime2 ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|BarTime}}<br />
{{end-hl1msg}}<br />
<br />
== Battery ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|Battery|short}}<br />
{{hl1msg|byte|Armor}}<br />
{{end-hl1msg}}<br />
<br />
== BlinkAcct ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|BlinkAcct}}<br />
{{end-hl1msg}}<br />
<br />
== BombDrop ==<br />
The first three arguments are the origin of the dropped bomb. The last argument is set to 1 if the bomb has been planted. It is 0 if the bomb was dropped due to voluntary dropping or death. Setting the last argument 1, will also trigger the round timer to hide. It also will show the dropped bomb on the Terrorist team's radar in the location specified by the first three arguments. <br />
{{begin-hl1msg|BombDrop|coord, coord, coord, byte}}<br />
{{hl1msg|coord|X}}<br />
{{hl1msg|coord|Y}}<br />
{{hl1msg|coord|Z}}<br />
{{hl1msg|byte|Domb Droped?}}<br />
{{end-hl1msg}}<br />
<br />
== BombPickup ==<br />
This message just tells the game that the bomb has been picked up. It will cause the dropped bomb to disappear from the Terrorist team's radar. <br />
{{begin-hl1msg|BombPickup}}<br />
{{end-hl1msg}}<br />
<br />
== BotProgress ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|BotProgress}}<br />
{{end-hl1msg}}<br />
<br />
== BotVoice ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|BotVoice|byte, byte}}<br />
{{hl1msg|byte|unknown}}<br />
{{hl1msg|byte|unknown}}<br />
{{end-hl1msg}}<br />
<br />
== Brass ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|Brass}}<br />
{{end-hl1msg}}<br />
<br />
== BuyClose ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|BuyClose}}<br />
{{end-hl1msg}}<br />
<br />
== ClCorpse ==<br />
The model name does not have .mdl at the end<br />
{{begin-hl1msg|ClCorpse|string, long, long, long, coord, coord, coord, long, byte, byte, byte, byte}}<br />
{{hl1msg|string|model}}<br />
{{hl1msg|long|unknown}}<br />
{{hl1msg|long|unknown}}<br />
{{hl1msg|long|unknown}}<br />
{{hl1msg|coord|unknown}}<br />
{{hl1msg|coord|unknown}}<br />
{{hl1msg|coord|unknown}}<br />
{{hl1msg|long|unknown}}<br />
{{hl1msg|byte|unknown}}<br />
{{hl1msg|byte|unknown}}<br />
{{hl1msg|byte|unknown}}<br />
{{hl1msg|byte|unknown}}<br />
{{end-hl1msg}}<br />
<br />
== Crosshair ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|Crosshair|byte}}<br />
{{hl1msg|byte|unknown}}<br />
{{end-hl1msg}}<br />
<br />
== CurWeapon ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|CurWeapon|byte, byte, byte}}<br />
{{hl1msg|byte|isActive}}<br />
{{hl1msg|byte|WeaponID}}<br />
{{hl1msg|byte|Ammo in weapon}}<br />
{{end-hl1msg}}<br />
<br />
== CZCareer ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|CZCareer}}<br />
{{end-hl1msg}}<br />
<br />
== CZCareerHUD ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|CZCareerHUD}}<br />
{{end-hl1msg}}<br />
<br />
== Damage == <br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|Damage|byte, byte, long, coord, coord, coord}}<br />
{{hl1msg|byte|Damage save (armor)}}<br />
{{hl1msg|byte|Damage take (health)}}<br />
{{hl1msg|long|Damage type}}<br />
{{hl1msg|coord|X}}<br />
{{hl1msg|coord|Y}}<br />
{{hl1msg|coord|Z}}<br />
{{end-hl1msg}}<br />
<br />
== DeathMsg ==<br />
Fired to all players (MSG_ALL or MSG_BROADCAST) to notify them of a death. <br />
This generates the [[HUD]] message the client sees in the upper right corner of their screen.<br />
<br />
{{begin-hl1msg|DeathMsg|byte, byte, byte, string}}<br />
{{hl1msg|byte|killer}}<br />
{{hl1msg|byte|victim}}<br />
{{hl1msg|byte|headshot}}<br />
{{hl1msg|string|weapon}}<br />
{{end-hl1msg}}<br />
<br />
== FlashBat ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|FlashBat|byte}}<br />
{{hl1msg|byte|Amount}}<br />
{{end-hl1msg}}<br />
<br />
== Flashlight ==<br />
Flag would be 1 for turning the flashlight on or 0 for turning it off. In my testing the 2nd argument was always 100.<br />
{{begin-hl1msg|Flashlight|byte, byte}}<br />
{{hl1msg|byte|Flag}}<br />
{{hl1msg|byte|unknown}}<br />
{{end-hl1msg}}<br />
<br />
== Fog ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|Fog}}<br />
{{end-hl1msg}}<br />
<br />
== ForceCam ==<br />
{{qnotice|No Information available for this event}}<br />
{{begin-hl1msg|ForceCam}}<br />
{{end-hl1msg}}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Main_Page&diff=2300Main Page2006-01-17T14:40:21Z<p>Freecode: /* Projects */</p>
<hr />
<div>__NOTOC__<br />
Welcome to the AMWiki, the unified and collaborative documentation project of the Consortium that runs such projects as [[AMX Mod X]], [[Metamod:Source]], and [[SourceMod]].<br />
<br />
How can you get started? Check out the [[AMWiki:Community Portal|Projects Page]] to see a general overview. Go to [[Help:Contents|Help]] to read about the basics and rules of this wiki. Or, if you're looking for something, just use search on the left hand side!<br />
<br />
{| cellspacing="0" style="border:0px; margin-right:10%;"<br />
|- valign="top"<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
=Projects=<br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''AMX Mod X'''<br />
|- class="t2td"<br />
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]], the powerful and flexible scripting environment for [[Half-Life 1]].<br />
* [[:Category:Documentation (AMX Mod X)|Documentation]]<br />
* [[:Category:Scripting (AMX Mod X)|Scripting]]<br />
|}<br />
<p><br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''Metamod:Source'''<br />
|- class="t2td"<br />
|[[Image:Mms.jpg|left]][[Metamod:Source]], the ultimate plugin API for [[Half-Life 2]], featuring interface hooking and a versatile plugin API.<br />
* [[:Category:Documentation (SourceMM)|Documentation]]<br />
* [[Introduction_to_SourceMM_Coding|Developing]]<br />
|}<br />
|}<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
<br />
=News=<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Wiki Launched!<br />
|- class="t2td"<br />
| ''2005-01-17'': Wiki launched! Please post any suggestions in the [[Talk:Main_Page|Main Page Discussion]] area.<br />
|}<br />
|}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Main_Page&diff=2299Main Page2006-01-17T14:40:05Z<p>Freecode: /* Projects */</p>
<hr />
<div>__NOTOC__<br />
Welcome to the AMWiki, the unified and collaborative documentation project of the Consortium that runs such projects as [[AMX Mod X]], [[Metamod:Source]], and [[SourceMod]].<br />
<br />
How can you get started? Check out the [[AMWiki:Community Portal|Projects Page]] to see a general overview. Go to [[Help:Contents|Help]] to read about the basics and rules of this wiki. Or, if you're looking for something, just use search on the left hand side!<br />
<br />
{| cellspacing="0" style="border:0px; margin-right:10%;"<br />
|- valign="top"<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
=Projects=<br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| '''AMX Mod X'''<br />
|- class="t2td"<br />
|[[Image:Amxxsmall.gif|left]] [[AMX Mod X]], the powerful and flexible scripting environment for [[Half-Life 1]].<br />
* [[:Category:Documentation (AMX Mod X)|Documentation]]<br />
* [[:Category:Scripting (AMX Mod X)|Scripting]]<br />
|}<br />
<p><br />
{| width="100%" cellpadding="5"<br />
|- class="t2th"<br />
| [[Image:Mms.jpg|left]]'''Metamod:Source'''<br />
|- class="t2td"<br />
|[[Metamod:Source]], the ultimate plugin API for [[Half-Life 2]], featuring interface hooking and a versatile plugin API.<br />
* [[:Category:Documentation (SourceMM)|Documentation]]<br />
* [[Introduction_to_SourceMM_Coding|Developing]]<br />
|}<br />
|}<br />
|<br />
{| width="100%"<br />
|-<br />
|<br />
<br />
=News=<br />
{| cellpadding="6"<br />
|- class="t2th"<br />
| Wiki Launched!<br />
|- class="t2td"<br />
| ''2005-01-17'': Wiki launched! Please post any suggestions in the [[Talk:Main_Page|Main Page Discussion]] area.<br />
|}<br />
|}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=File:Mms.jpg&diff=2293File:Mms.jpg2006-01-17T09:29:15Z<p>Freecode: </p>
<hr />
<div></div>Freecodehttps://wiki.alliedmods.net/index.php?title=User:BAILOPAN&diff=2280User:BAILOPAN2006-01-17T08:09:00Z<p>Freecode: </p>
<hr />
<div>=Hello=<br />
oh, hello. You can see my [[AMX Mod X]] profile here: [http://www.amxmodx.org/forums/profile.php?mode=viewprofile&u=10 a link for you].<br />
<br />
If you need to contact me, you can PM me on the forums, add to my discussion page, etc.<br />
<br />
=About Me=<br />
I'm BAILOPAN. I'm a programmer/system administrator with too many ego problems. I will most likely correct <br />
any and all of your spelling mistakes, then write a five page dissertation on how much I hate you. Also, I <br />
didn't read anyone else's post. I also play the piano && paintball. Vi owns emacs. I program in Perl, PHP, <br />
C++, Small, and VB and admin Windows 2000, Linux, and FreeBSD servers.<br />
<br />
I am a college student and a Computer Science major at WPI (www.wpi.edu), with an interest in cryptograpy <br />
and security. I'm also a practicing Catholic and ... *speaks quietly* conservative.<br />
<br />
=Avatar History=<br />
I've had a long history of avatars over the past two years on the forums. I obsess over my avatars, to say the least - they have to be my liking and I can spend hours tweaking them. For no reason in particular, here are all of them in general chronological order.<br />
{|<br />
|- class="t2th"<br />
| Avatar<br />
| Description<br />
|- class="t2td"<br />
| [[Image:Bail blank face avatar.jpg]]<br />
| I used this avatar for at least two years before the forums. It was an inside joke amongst friends who thought I never revealed anything about myself.<br />
|- class="t2td"<br />
| [[Image:Bail madhatter avatar.gif]]<br />
| This is the Mad Hatter from the Disney animated film ''Alice in Wonderland''.<br />
|- class="t2td"<br />
| [[Image:Bail pwned avatar.gif]]<br />
| I stole this and edited it from one of Bender's CS cartoons. I cannot find the English version anymore, but here is the [http://www.bender.vault-tec.de/pic_sites/trashtalk.htm German one]. RULT!<br />
|- class="t2td"<br />
| [[Image:Bail buu avatar.gif]]<br />
| This is Majin Buu from the anime/manga ''Dragonball Z''. It was prettied up for me by [[User:Freecode]]. I consider it my best avatar to date, and when I switched I got a few comments from people who were used to it and were upset by the change.<br />
|- class="t2td"<br />
| [[Image:Bail goten avatar.JPG]]<br />
| This is Goten from the very end of ''Dragonball Z''. I edited it to modify facial features and make the background more transparent (I do not have the original), but the quality is poor.<br />
|- class="t2td"<br />
| [[Image:Bail emperor avatar.png]]<br />
| This is Emperor Palpatine from Star Wars Episode 6 - ''Return of the Jedi''.<br />
|- class="t2td"<br />
| [[Image:Bail avatar dai soutou1.png]]<br />
| This is Dai Soutou (Fuhrer) King Bradley, the ruler of the fictional country Amestris in the excellent anime/manga ''Fullmetal Alchemist''.<br />
|- class="t2td"<br />
| [[Image:Dai Soutou.gif]]<br />
| This is my current avatar. Same as above, except I ripped a nicer looking (but more comical) image from an art book.<br />
|}<br />
<br />
=Website=<br />
My website is at http://www.bailopan.net/ but there is nothing interesting there.<br />
<br />
=Stuff=<br />
My [[What]] page: [[User:BAILOPAN (What)]].<br />
<br />
<br />
<br />
{{gaben|I think it's fair to say I'm hooked.|BAILOPAN. no, wait, darwinia}}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Main_Page&diff=2279Main Page2006-01-17T08:05:28Z<p>Freecode: </p>
<hr />
<div>__NOTOC__<br />
Welcome to the AMWiki, the unified and collaborative documentation project of the Consortium that runs such projects as [[AMX Mod X]], [[Metamod:Source]], and [[SourceMod]].<br />
<br />
How can you get started? Check out the [[AMWiki:Community Portal|Projects Page]] to see a general overview. Go to [[Help:Contents|Help]] to read about the basics and rules of this wiki. Or, if you're looking for something, just use search on the left hand side!<br />
<br />
{| cellspacing="0" style="border:0px;margin-right:10%;"<br />
|- valign="top"<br />
|width="60%"|<br />
=Projects=<br />
{| style="background-color: #e0e0e0; margin: 0 7px; font-family: Verdana" width="100%" <br />
|- <br />
|<br />
[[AMX Mod X]], the powerful and flexible scripting environment for [[Half-Life 1]].<br />
|}<br />
<br />
|}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Template:Begin-hl1msg&diff=2278Template:Begin-hl1msg2006-01-17T08:02:29Z<p>Freecode: </p>
<hr />
<div>{| class="ent" border="0" cellpadding="0" cellspacing="0"<br />
|-<br />
| class="et2th" | Name:<br />
| class="et2td" | {{{1}}}<br />
|- valign="top"<br />
| class="et2th" | Structure:<br />
| class="et2td" | <br />
{| class="ent" border="0" cellpadding="0" cellspacing="0"</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Template:Begin-hl1msg&diff=2277Template:Begin-hl1msg2006-01-17T07:59:46Z<p>Freecode: </p>
<hr />
<div>{| class="ent" border="0" cellpadding="0" cellspacing="0"<br />
|-<br />
| class="et2th" | Name:<br />
| class="et2td" | {{{1}}}<br />
|-<br />
| class="et2th" | Structure:<br />
| class="et2td" | <br />
{| class="ent" border="0" cellpadding="0" cellspacing="0"</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2276MediaWiki:Monobook.css2006-01-17T07:58:54Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border-left: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border-left: 1px solid #000000;<br />
border-right: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
margin: 10px;<br />
border: 1px solid #000000;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2275MediaWiki:Monobook.css2006-01-17T07:58:15Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border-left: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border-left: 1px solid #000000;<br />
border-right: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
margin: 10px;<br />
background-color: #9FB8C5;<br />
border: 1px solid #000000;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2274MediaWiki:Monobook.css2006-01-17T07:57:56Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border-left: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border-left: 1px solid #000000;<br />
border-right: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
padding: 10px;<br />
background-color: #9FB8C5;<br />
border: 1px solid #000000;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2273MediaWiki:Monobook.css2006-01-17T07:56:58Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border-left: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border-left: 1px solid #000000;<br />
border-right: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
padding: 10px;<br />
background-color: #9FB8C5;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2272MediaWiki:Monobook.css2006-01-17T07:56:19Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border-left: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border-left: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
padding: 10px;<br />
background-color: #9FB8C5;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2271MediaWiki:Monobook.css2006-01-17T07:55:59Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border-left: 1px solid #000000;<br />
border-top: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
padding: 10px;<br />
background-color: #9FB8C5;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2270MediaWiki:Monobook.css2006-01-17T07:52:17Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
padding: 10px;<br />
background-color: #9FB8C5;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=Template:Begin-hl1msg&diff=2269Template:Begin-hl1msg2006-01-17T07:51:36Z<p>Freecode: </p>
<hr />
<div>{| border="0" cellpadding="0" cellspacing="0"<br />
|-<br />
| class="et2th" | Name:<br />
| class="et2td" | {{{1}}}<br />
|-<br />
| class="et2th" | Structure:<br />
| class="et2td" | <br />
{| class="ent" border="0" cellpadding="0" cellspacing="0"</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2268MediaWiki:Monobook.css2006-01-17T07:51:15Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border: 1px solid #000000;<br />
}<br />
<br />
.ent<br />
{<br />
padding: 10px;<br />
}</div>Freecodehttps://wiki.alliedmods.net/index.php?title=MediaWiki:Monobook.css&diff=2263MediaWiki:Monobook.css2006-01-17T07:42:28Z<p>Freecode: </p>
<hr />
<div>.messagebox {<br />
border: 1px solid #aaaaaa;<br />
background-color: #f9f9f9;<br />
width: 80%;<br />
margin: 0 auto 1em auto;<br />
padding: .2em;<br />
text-align: justify;<br />
}<br />
<br />
.messagebox.standard-talk {<br />
border: 1px solid #c0c090;<br />
background-color: #f8eaba;<br />
}<br />
<br />
.et2th {<br />
font-family: Verdana;<br />
color: #FFFFFF;<br />
font-weight: bold;<br />
background-color: #003D5C;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 8px;<br />
border: 1px solid #000000;<br />
}<br />
<br />
.et2td {<br />
font-family: Verdana;<br />
background-color: #9FB8C5;<br />
padding-left: 8px;<br />
padding-right: 8px;<br />
margin: 118px;<br />
border: 1px solid #000000;<br />
}</div>Freecode