<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BooM</id>
	<title>AlliedModders Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BooM"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/Special:Contributions/BooM"/>
	<updated>2026-05-16T11:05:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.76_Changes&amp;diff=3410</id>
		<title>AMX Mod X 1.76 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=AMX_Mod_X_1.76_Changes&amp;diff=3410"/>
		<updated>2006-09-19T14:29:03Z</updated>

		<summary type="html">&lt;p&gt;BooM: /* Custom Sorting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AMX Mod X 1.76 will be a small feature release and contains mostly bug fixes.&lt;br /&gt;
This changelog is brought to you by Batman and ramen.&lt;br /&gt;
&lt;br /&gt;
=New Plugin File Features=&lt;br /&gt;
==Per-Map Plugin Files==&lt;br /&gt;
You can now have per-map plugin configuration files.  AMX Mod X will automatically load any plugins listed in files having the following name: &amp;lt;tt&amp;gt;configs/maps/plugins-&amp;lt;map&amp;gt;.ini&amp;lt;/tt&amp;gt;.  Thus, &amp;lt;tt&amp;gt;de_dust&amp;lt;/tt&amp;gt; specific plugins will be loaded from &amp;lt;tt&amp;gt;configs/maps/plugins-de_dust.ini&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Map-specific plugin files are parsed &amp;lt;b&amp;gt;after&amp;lt;/b&amp;gt; the main plugins.ini is parsed, and &amp;lt;b&amp;gt;after&amp;lt;/b&amp;gt; all secondary plugins-*.ini files are parsed in the &amp;lt;tt&amp;gt;configs&amp;lt;/tt&amp;gt; folder.  This means that a map-specific plugin listing inherits all settings above itself.&lt;br /&gt;
&lt;br /&gt;
==Disabling Plugins==&lt;br /&gt;
A second feature was introduced to let users &amp;lt;i&amp;gt;disable&amp;lt;/i&amp;gt; plugins per map.  In any plugins-*.ini file, you may now add a &amp;quot;disabled&amp;quot; flag to a plugin name.  This works like the &amp;quot;debug&amp;quot; flag.  Example:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
gaben.amxx disabled&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will block the plugin from being loaded from any other configuration file.  So if &amp;lt;tt&amp;gt;plugins-de_dust.ini&amp;lt;/tt&amp;gt; has the example line above, &amp;lt;tt&amp;gt;gaben.amxx&amp;lt;/tt&amp;gt; will not be loaded from any other plugins file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=New Scripting Features=&lt;br /&gt;
==Sorting==&lt;br /&gt;
AMX Mod X now has a comprehensive array sorting solution.  You can sort using pre-defined array types, or use your own custom comparison functions.  All of the sorting routines use the qsort() function from the C standard library, which is based on the [http://linux.wku.edu/~lamonml/algor/sort/quick.html Quick Sort] algorithm.  &lt;br /&gt;
&lt;br /&gt;
===Basic Sorting===&lt;br /&gt;
The follow basic sorting natives were added.  These natives sort an array in-place using pre-defined comparison routines.  You can change the sorting order using an optional third parameter.  By default it is &amp;lt;tt&amp;gt;Sort_Ascending&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;Sort_Descending&amp;lt;/tt&amp;gt; is available as well.&lt;br /&gt;
*&amp;lt;tt&amp;gt;[http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=1115 SortIntegers]()&amp;lt;/tt&amp;gt; - Sorts an array of integers.&lt;br /&gt;
*&amp;lt;tt&amp;gt;[http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=1116 SortFloats]()&amp;lt;/tt&amp;gt; - Sorts an array of floats.&lt;br /&gt;
*&amp;lt;tt&amp;gt;[http://www.amxmodx.org/funcwiki.php?go=func&amp;amp;id=1117 SortStrings]()&amp;lt;/tt&amp;gt; - Sorts an array of strings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
You can see an example of each native listed above in the [http://svn.tcwonline.org/viewvc.cgi/trunk/plugins/testsuite/sorttest.sma?root=amxmodx&amp;amp;view=log sorting testing] plugin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Full Changelog=&lt;br /&gt;
==Core Changes==&lt;br /&gt;
===New Features===&lt;br /&gt;
*The compiler has been heavily optimized and will now compile plugins much faster.&lt;br /&gt;
*Request {{AMBug|43012}}: You can now specify per-map plugins files.  For example, you can list de_dust only plugins in configs/maps/plugins-de_dust.ini.&lt;br /&gt;
*You can now specify a new &amp;quot;disabled&amp;quot; option after plugin names in plugins.ini files.  This will prevent the plugin from being loaded in any config file, and is useful for disabling plugins in map-specific plugin files.&lt;br /&gt;
*Added an experimental compatibility layer for AMX Mod.  See [[AMX Mod Compatibility Layer (AMX Mod X)]] for more information.&lt;br /&gt;
*Request {{AMBug|42871}}: Source file name is shown in the binary logs when the plugin is in the debug mode.&lt;br /&gt;
*Request {{AMBug|44299}}: Error logs now show the mapname and current log file.&lt;br /&gt;
*The developer test suite is now packaged with Core in the scripting folder.&lt;br /&gt;
&lt;br /&gt;
===Bug Fixes===&lt;br /&gt;
*Improved stability and eliminated weird bugs on Linux.  These were caused by code generation bugs in GCC and appear to exist primarily in versions higher than 1.60.&lt;br /&gt;
*Fixed a bug where secondary plugin files would not autoload modules.&lt;br /&gt;
*Fixed a serious corruption bug in callfunc_push_intrf(), callfunc_push_floatrf(), and callfunc_push_str().  Strings or data passed with these methods could be easily overwritten internally.&lt;br /&gt;
*Fixed the JIT not being able to compute heaplow bounds problems.&lt;br /&gt;
*Fixed {{AMBug|41317}}: ExecuteForward() string parameters would be trashed on future internal string calls.&lt;br /&gt;
*Fixed {{AMBug|41777}}: time.txt was not included in the installer.&lt;br /&gt;
*Fixed {{AMBug|42213}}: &amp;quot;amx_logs&amp;quot; was incorrectly listed as &amp;quot;amx_logsdir&amp;quot; in core.ini.&lt;br /&gt;
*Request {{AMBug|41036}}: Improved bot detection.&lt;br /&gt;
*Fixed a rare bug where passing (1&amp;lt;&amp;lt;31) into a %d format-code would print garbage characters.&lt;br /&gt;
&lt;br /&gt;
==Scripting Changes==&lt;br /&gt;
===Additions===&lt;br /&gt;
*Request {{AMBug|23838}}: Added natives to sort integers, floats, strings.  Also added natives to sort custom 1D and 2D arrays using user comparison functions.&lt;br /&gt;
*Added vdformat() for formatting variable argument strings in dynamic natives.&lt;br /&gt;
*Added CreateLangKey() and AddTranslation() for manipulating the multilingual translator.&lt;br /&gt;
*Added SQL_GetInsertId() to MySQL and sqLite modules.&lt;br /&gt;
*For callfunc_push_str() and callfunc_push_array(), you can now specify an optional parameter to stop write-back on change.&lt;br /&gt;
*Request {{AMBug|42810}}: Added callfunc_push_array() to push an array through a callfunc.&lt;br /&gt;
*Request {{AMBug|42697}}: Added SQL_GetQueryString() to find the query string of a query handle.&lt;br /&gt;
*Request {{AMBug|29544}}: Added nvault_touch() native for updating key timestamps.&lt;br /&gt;
*Request {{AMBug|28110}}: Added tfc_get_user_goalitem() to determine if player is carrying a goal item (such as a flag or keycard)&lt;br /&gt;
*Request {{AMBug|41295}}: Added CZ model types to the CsInternalModel enumeration.&lt;br /&gt;
*Request {{AMBug|41635}}: All string formatting routines can now use '%u' to print integers as unsigned.  Note that Pawn only supports signed arithmetic.&lt;br /&gt;
*Request {{AMBug|41585}}: Enhanced functionality of glb_pStringBase with global_get() and added a new return type to pev().&lt;br /&gt;
*Request {{AMBug|40967}}: set_fail_state() now logs that the plugin is failed.&lt;br /&gt;
*Request {{AMBug|41375}}: cs_set_weapon_silen() now has an additional parameter to toggle whether silencer animation is shown.&lt;br /&gt;
*Request {{AMBug|40169}}: cs_get_user_team() now has an additional parameter by reference to get the user's internal player model.&lt;br /&gt;
*Added amxx_setpl_curweap() to the native exports table.&lt;br /&gt;
*Added tfc_get/setweaponammo for ammo that is not in player's backpack.&lt;br /&gt;
*Engine's entity_get and entity_set routines no longer verify that players are fully ingame.  This check was deemed too restrictive.&lt;br /&gt;
*Added hyperbolic trigonomic natives: floatsinh(), floatcosh(), and floattanh().&lt;br /&gt;
&lt;br /&gt;
===Bug Fixes===&lt;br /&gt;
*Fixed {{AMBug|42916}}: get_user_aiming() did not work on Linux.&lt;br /&gt;
*Fixed {{AMBug|40963}}: GeoIP did not strip ports from IP addresses.&lt;br /&gt;
*Fixed {{AMBug|41483}}: xs.inc did not have double-include prevention.&lt;br /&gt;
*Fixed {{AMBug|43313}}: plugin_log() did not actually block log messages on returning PLUGIN_HANDLED.&lt;br /&gt;
*Fixed {{AMBug|42097}}: Hooking FM_ServerDeactivate did not work.&lt;br /&gt;
*Fixed {{AMBug|42307}}: nvault_open() did not return -1 on failure.&lt;br /&gt;
*Fixed {{AMBug|42383}}: SQL_ThreadQuery() was not working when called from plugin_end().&lt;br /&gt;
*Fixed {{AMBug|42321}}: TFC's Get/Set ammo natives did not work on Linux servers (thanks jRaven).&lt;br /&gt;
*Fixed {{AMBug|44776}}: user_silentkill() did not save the previous message block state.&lt;br /&gt;
*Fixed bug in get_user_aiming() where id and body would always be set to 0.&lt;br /&gt;
*Fixed bug in dllfunc() where DLLFunc_RegisterEncoders would not actually make a call.&lt;br /&gt;
*Fixed bug with floatatan() returning wrong values when trying to get angle in degrees or grades.&lt;br /&gt;
*Improved accuracy of is_user_bot().&lt;br /&gt;
*Rewrote replace_all() to address many serious bugs, including infinite replacements, improper re-indexing, and missed replacements.&lt;br /&gt;
&lt;br /&gt;
==Plugin Changes==&lt;br /&gt;
===Additions===&lt;br /&gt;
*Request {{AMBug|41367}}: stats_logging.sma now logs extra weapons from CSX.&lt;br /&gt;
*Request {{AMBug|44517}}: Added &amp;quot;Spectator&amp;quot; to TFC plmenu.sma's team switch list (thanks jRaven).&lt;br /&gt;
&lt;br /&gt;
===Bug Fixes===&lt;br /&gt;
*Fixed a potential memory corruption bug in StatsX.&lt;br /&gt;
*Fixed {{AMBug|42013}}: TFC team menu didn't allow for changing from blue team.  Also, all plmenu plugins showed team change messages in the language of the admin.&lt;br /&gt;
*Fixed {{AMBug|41768}}: statssounds.sma for TS had the wrong plugin name.&lt;br /&gt;
*Fixed {{AMBug|41563}}: TFC plmenu.sma had the wrong team names.&lt;br /&gt;
*Fixed {{AMBug|41259}}: amx_addadmin was messing users.ini upon new entries.&lt;br /&gt;
*Fixed {{AMBug|43881}}: adminslots did not work until a mapchange was issued.&lt;br /&gt;
&lt;br /&gt;
==Module Fixes==&lt;br /&gt;
*Fixed MySQLX threader on Linux locking up on mapchange if there were queries in the queue.&lt;br /&gt;
*Fixed {{AMBug|41030}}: All stats modules could generate files that would break the file parser.&lt;br /&gt;
*Fixed {{AMBug|41961}}: Fakemeta hooks for GetPlayerAuthId, GetPlayerWONId, and IsMapValid were not being reset on mapchange.&lt;br /&gt;
*Fixed {{AMBug|44428}}: GeoIP country codes were out of date.&lt;br /&gt;
*Updated the GeoIP library to September.&lt;/div&gt;</summary>
		<author><name>BooM</name></author>
		
	</entry>
</feed>