AMX Mod X 1.76 Changes

From AlliedModders Wiki
Revision as of 08:29, 19 September 2006 by BooM (talk | contribs) (Custom Sorting)
Jump to: navigation, search

AMX Mod X 1.76 will be a small feature release and contains mostly bug fixes. This changelog is brought to you by Batman and ramen.

New Plugin File Features

Per-Map Plugin Files

You can now have per-map plugin configuration files. AMX Mod X will automatically load any plugins listed in files having the following name: configs/maps/plugins-<map>.ini. Thus, de_dust specific plugins will be loaded from configs/maps/plugins-de_dust.ini.

Map-specific plugin files are parsed after the main plugins.ini is parsed, and after all secondary plugins-*.ini files are parsed in the configs folder. This means that a map-specific plugin listing inherits all settings above itself.

Disabling Plugins

A second feature was introduced to let users disable plugins per map. In any plugins-*.ini file, you may now add a "disabled" flag to a plugin name. This works like the "debug" flag. Example: gaben.amxx disabled

This will block the plugin from being loaded from any other configuration file. So if plugins-de_dust.ini has the example line above, gaben.amxx will not be loaded from any other plugins file.


New Scripting Features

Sorting

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 Quick Sort algorithm.

Basic Sorting

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 Sort_Ascending, and Sort_Descending is available as well.


Examples

You can see an example of each native listed above in the sorting testing plugin.


Full Changelog

Core Changes

New Features

  • The compiler has been heavily optimized and will now compile plugins much faster.
  • Request am43012: You can now specify per-map plugins files. For example, you can list de_dust only plugins in configs/maps/plugins-de_dust.ini.
  • You can now specify a new "disabled" 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.
  • Added an experimental compatibility layer for AMX Mod. See AMX Mod Compatibility Layer (AMX Mod X) for more information.
  • Request am42871: Source file name is shown in the binary logs when the plugin is in the debug mode.
  • Request am44299: Error logs now show the mapname and current log file.
  • The developer test suite is now packaged with Core in the scripting folder.

Bug Fixes

  • 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.
  • Fixed a bug where secondary plugin files would not autoload modules.
  • 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.
  • Fixed the JIT not being able to compute heaplow bounds problems.
  • Fixed am41317: ExecuteForward() string parameters would be trashed on future internal string calls.
  • Fixed am41777: time.txt was not included in the installer.
  • Fixed am42213: "amx_logs" was incorrectly listed as "amx_logsdir" in core.ini.
  • Request am41036: Improved bot detection.
  • Fixed a rare bug where passing (1<<31) into a %d format-code would print garbage characters.

Scripting Changes

Additions

  • Request am23838: Added natives to sort integers, floats, strings. Also added natives to sort custom 1D and 2D arrays using user comparison functions.
  • Added vdformat() for formatting variable argument strings in dynamic natives.
  • Added CreateLangKey() and AddTranslation() for manipulating the multilingual translator.
  • Added SQL_GetInsertId() to MySQL and sqLite modules.
  • For callfunc_push_str() and callfunc_push_array(), you can now specify an optional parameter to stop write-back on change.
  • Request am42810: Added callfunc_push_array() to push an array through a callfunc.
  • Request am42697: Added SQL_GetQueryString() to find the query string of a query handle.
  • Request am29544: Added nvault_touch() native for updating key timestamps.
  • Request am28110: Added tfc_get_user_goalitem() to determine if player is carrying a goal item (such as a flag or keycard)
  • Request am41295: Added CZ model types to the CsInternalModel enumeration.
  • Request am41635: All string formatting routines can now use '%u' to print integers as unsigned. Note that Pawn only supports signed arithmetic.
  • Request am41585: Enhanced functionality of glb_pStringBase with global_get() and added a new return type to pev().
  • Request am40967: set_fail_state() now logs that the plugin is failed.
  • Request am41375: cs_set_weapon_silen() now has an additional parameter to toggle whether silencer animation is shown.
  • Request am40169: cs_get_user_team() now has an additional parameter by reference to get the user's internal player model.
  • Added amxx_setpl_curweap() to the native exports table.
  • Added tfc_get/setweaponammo for ammo that is not in player's backpack.
  • Engine's entity_get and entity_set routines no longer verify that players are fully ingame. This check was deemed too restrictive.
  • Added hyperbolic trigonomic natives: floatsinh(), floatcosh(), and floattanh().

Bug Fixes

  • Fixed am42916: get_user_aiming() did not work on Linux.
  • Fixed am40963: GeoIP did not strip ports from IP addresses.
  • Fixed am41483: xs.inc did not have double-include prevention.
  • Fixed am43313: plugin_log() did not actually block log messages on returning PLUGIN_HANDLED.
  • Fixed am42097: Hooking FM_ServerDeactivate did not work.
  • Fixed am42307: nvault_open() did not return -1 on failure.
  • Fixed am42383: SQL_ThreadQuery() was not working when called from plugin_end().
  • Fixed am42321: TFC's Get/Set ammo natives did not work on Linux servers (thanks jRaven).
  • Fixed am44776: user_silentkill() did not save the previous message block state.
  • Fixed bug in get_user_aiming() where id and body would always be set to 0.
  • Fixed bug in dllfunc() where DLLFunc_RegisterEncoders would not actually make a call.
  • Fixed bug with floatatan() returning wrong values when trying to get angle in degrees or grades.
  • Improved accuracy of is_user_bot().
  • Rewrote replace_all() to address many serious bugs, including infinite replacements, improper re-indexing, and missed replacements.

Plugin Changes

Additions

  • Request am41367: stats_logging.sma now logs extra weapons from CSX.
  • Request am44517: Added "Spectator" to TFC plmenu.sma's team switch list (thanks jRaven).

Bug Fixes

  • Fixed a potential memory corruption bug in StatsX.
  • Fixed am42013: 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.
  • Fixed am41768: statssounds.sma for TS had the wrong plugin name.
  • Fixed am41563: TFC plmenu.sma had the wrong team names.
  • Fixed am41259: amx_addadmin was messing users.ini upon new entries.
  • Fixed am43881: adminslots did not work until a mapchange was issued.

Module Fixes

  • Fixed MySQLX threader on Linux locking up on mapchange if there were queries in the queue.
  • Fixed am41030: All stats modules could generate files that would break the file parser.
  • Fixed am41961: Fakemeta hooks for GetPlayerAuthId, GetPlayerWONId, and IsMapValid were not being reset on mapchange.
  • Fixed am44428: GeoIP country codes were out of date.
  • Updated the GeoIP library to September.