From 917ec936f88cc803fbae6f5d58f613d2a5363ce1 Mon Sep 17 00:00:00 2001 From: BotoX Date: Fri, 27 Sep 2019 13:14:44 +0200 Subject: [PATCH] Update spcomp and includes to latest 1.10-fork disable warning 241: Array-based enum structs will be removed in 1.11 --- Makefile | 2 +- compile.bat | 2 +- env/darwin/bin/spcomp | Bin 285612 -> 731340 bytes env/include/admin.inc | 450 +++++++------- env/include/adminmenu.inc | 44 +- env/include/adt_array.inc | 222 ++++--- env/include/adt_stack.inc | 94 +-- env/include/adt_trie.inc | 142 ++--- env/include/banning.inc | 110 ++-- env/include/basecomm.inc | 32 +- env/include/bitbuffer.inc | 192 +++--- env/include/clientprefs.inc | 321 ++++++---- env/include/clients.inc | 471 +++++++------- env/include/commandfilters.inc | 85 +-- env/include/commandline.inc | 42 +- env/include/console.inc | 430 +++++++------ env/include/convars.inc | 276 +++++---- env/include/core.inc | 83 ++- env/include/cstrike.inc | 255 +++++--- env/include/datapack.inc | 118 ++-- env/include/dbi.inc | 548 ++++++++-------- env/include/entity.inc | 548 ++++++++-------- env/include/entity_prop_stocks.inc | 498 +++++++-------- env/include/events.inc | 157 ++--- env/include/files.inc | 392 ++++++------ env/include/float.inc | 172 ++--- env/include/functions.inc | 533 ++++++++++------ env/include/geoip.inc | 22 +- env/include/halflife.inc | 528 ++++++++-------- env/include/handles.inc | 53 +- env/include/helpers.inc | 214 +++---- env/include/keyvalues.inc | 406 ++++++------ env/include/lang.inc | 62 +- env/include/logging.inc | 80 +-- env/include/mapchooser.inc | 55 +- env/include/menus.inc | 757 ++++++++++++----------- env/include/nextmap.inc | 38 +- env/include/profiler.inc | 50 +- env/include/protobuf.inc | 340 +++++----- env/include/regex.inc | 207 +++++-- env/include/sdkhooks.inc | 281 +++++---- env/include/sdktools.inc | 129 ++-- env/include/sdktools_client.inc | 6 +- env/include/sdktools_engine.inc | 24 +- env/include/sdktools_entinput.inc | 79 +-- env/include/sdktools_entoutput.inc | 75 ++- env/include/sdktools_functions.inc | 239 ++++--- env/include/sdktools_gamerules.inc | 152 ++--- env/include/sdktools_hooks.inc | 68 +- env/include/sdktools_sound.inc | 510 ++++++++------- env/include/sdktools_stocks.inc | 10 +- env/include/sdktools_stringtables.inc | 112 ++-- env/include/sdktools_tempents.inc | 112 ++-- env/include/sdktools_tempents_stocks.inc | 254 ++++---- env/include/sdktools_trace.inc | 685 ++++++++++++++------ env/include/sdktools_variant_t.inc | 93 +++ env/include/sdktools_voice.inc | 68 +- env/include/sorting.inc | 110 ++-- env/include/sourcemod.inc | 466 ++++++++------ env/include/string.inc | 323 +++++----- env/include/testing.inc | 21 +- env/include/textparse.inc | 176 +++--- env/include/tf2.inc | 397 ++++++------ env/include/tf2_stocks.inc | 101 +-- env/include/timers.inc | 152 ++--- env/include/topmenus.inc | 240 +++---- env/include/usermessages.inc | 169 ++--- env/include/vector.inc | 86 +-- env/include/version.inc | 18 +- env/include/version_auto.inc | 8 +- env/linux/bin/spcomp | Bin 271484 -> 331440 bytes env/win32/bin/spcomp.exe | Bin 345600 -> 428032 bytes 72 files changed, 7755 insertions(+), 6440 deletions(-) create mode 100644 env/include/sdktools_variant_t.inc diff --git a/Makefile b/Makefile index 7c66211..2f0cc1a 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ prepare_builddir: %.smx: %.sp $(VERSIONDUMP) - $(SPCOMP) -i$(SOURCEDIR) -i$(SMINCLUDES) -i$(ZRINCLUDES) -o$(BUILDDIR)/$@ $< + $(SPCOMP) -w241 -i$(SOURCEDIR) -i$(SMINCLUDES) -i$(ZRINCLUDES) -o$(BUILDDIR)/$@ $< clean: @rm -fr $(BUILDDIR) diff --git a/compile.bat b/compile.bat index 362cdaa..4a67b57 100644 --- a/compile.bat +++ b/compile.bat @@ -17,7 +17,7 @@ if not exist "%BUILDDIR%" ( :: Compile. echo Starting compiler: -%SPCOMP% -i%SOURCEDIR% -i%SOURCEDIR%/include -i%SMINCLUDES% -o%BUILDDIR%/zombiereloaded.smx %SOURCEDIR%\zombiereloaded.sp +%SPCOMP% -w241 -i%SOURCEDIR% -i%SOURCEDIR%/include -i%SMINCLUDES% -o%BUILDDIR%/zombiereloaded.smx %SOURCEDIR%\zombiereloaded.sp echo Compiling done. This script is looped, close if you're done. pause diff --git a/env/darwin/bin/spcomp b/env/darwin/bin/spcomp index a1abd19f4d6aa8f9a6a197665ac9d98584e13271..e6e5cb39462a298dfedda358328b4a99188284be 100755 GIT binary patch literal 731340 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

w#YZD6THd~@yvD$r$Q?kn?Ja$lK$tXj?* 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 YED!6SHt~~)Zr7$(Eki>Cw8^Y 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 Lm6~j+e&78E{Dpnf diff --git a/env/include/admin.inc b/env/include/admin.inc index 5052db4..d365dd2 100644 --- a/env/include/admin.inc +++ b/env/include/admin.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _admin_included #endinput #endif @@ -40,67 +40,66 @@ */ enum AdminFlag { - Admin_Reservation = 0, /**< Reserved slot */ - Admin_Generic, /**< Generic admin abilities */ - Admin_Kick, /**< Kick another user */ - Admin_Ban, /**< Ban another user */ - Admin_Unban, /**< Unban another user */ - Admin_Slay, /**< Slay/kill/damage another user */ - Admin_Changemap, /**< Change the map */ - Admin_Convars, /**< Change basic convars */ - Admin_Config, /**< Change configuration */ - Admin_Chat, /**< Special chat privileges */ - Admin_Vote, /**< Special vote privileges */ - Admin_Password, /**< Set a server password */ - Admin_RCON, /**< Use RCON */ - Admin_Cheats, /**< Change sv_cheats and use its commands */ - Admin_Root, /**< All access by default */ - Admin_Custom1, /**< First custom flag type */ - Admin_Custom2, /**< Second custom flag type */ - Admin_Custom3, /**< Third custom flag type */ - Admin_Custom4, /**< Fourth custom flag type */ - Admin_Custom5, /**< Fifth custom flag type */ - Admin_Custom6, /**< Sixth custom flag type */ - /* --- */ + Admin_Reservation = 0, /**< Reserved slot */ + Admin_Generic, /**< Generic admin abilities */ + Admin_Kick, /**< Kick another user */ + Admin_Ban, /**< Ban another user */ + Admin_Unban, /**< Unban another user */ + Admin_Slay, /**< Slay/kill/damage another user */ + Admin_Changemap, /**< Change the map */ + Admin_Convars, /**< Change basic convars */ + Admin_Config, /**< Change configuration */ + Admin_Chat, /**< Special chat privileges */ + Admin_Vote, /**< Special vote privileges */ + Admin_Password, /**< Set a server password */ + Admin_RCON, /**< Use RCON */ + Admin_Cheats, /**< Change sv_cheats and use its commands */ + Admin_Root, /**< All access by default */ + Admin_Custom1, /**< First custom flag type */ + Admin_Custom2, /**< Second custom flag type */ + Admin_Custom3, /**< Third custom flag type */ + Admin_Custom4, /**< Fourth custom flag type */ + Admin_Custom5, /**< Fifth custom flag type */ + Admin_Custom6 /**< Sixth custom flag type */ }; -#define AdminFlags_TOTAL 21 /**< Total number of admin flags */ +#define AdminFlags_TOTAL 21 /**< Total number of admin flags */ /** * @section Bitwise values definitions for admin flags. */ -#define ADMFLAG_RESERVATION (1<<0) /**< Convenience macro for Admin_Reservation as a FlagBit */ -#define ADMFLAG_GENERIC (1<<1) /**< Convenience macro for Admin_Generic as a FlagBit */ -#define ADMFLAG_KICK (1<<2) /**< Convenience macro for Admin_Kick as a FlagBit */ -#define ADMFLAG_BAN (1<<3) /**< Convenience macro for Admin_Ban as a FlagBit */ -#define ADMFLAG_UNBAN (1<<4) /**< Convenience macro for Admin_Unban as a FlagBit */ -#define ADMFLAG_SLAY (1<<5) /**< Convenience macro for Admin_Slay as a FlagBit */ -#define ADMFLAG_CHANGEMAP (1<<6) /**< Convenience macro for Admin_Changemap as a FlagBit */ -#define ADMFLAG_CONVARS (1<<7) /**< Convenience macro for Admin_Convars as a FlagBit */ -#define ADMFLAG_CONFIG (1<<8) /**< Convenience macro for Admin_Config as a FlagBit */ -#define ADMFLAG_CHAT (1<<9) /**< Convenience macro for Admin_Chat as a FlagBit */ -#define ADMFLAG_VOTE (1<<10) /**< Convenience macro for Admin_Vote as a FlagBit */ -#define ADMFLAG_PASSWORD (1<<11) /**< Convenience macro for Admin_Password as a FlagBit */ -#define ADMFLAG_RCON (1<<12) /**< Convenience macro for Admin_RCON as a FlagBit */ -#define ADMFLAG_CHEATS (1<<13) /**< Convenience macro for Admin_Cheats as a FlagBit */ -#define ADMFLAG_ROOT (1<<14) /**< Convenience macro for Admin_Root as a FlagBit */ -#define ADMFLAG_CUSTOM1 (1<<15) /**< Convenience macro for Admin_Custom1 as a FlagBit */ -#define ADMFLAG_CUSTOM2 (1<<16) /**< Convenience macro for Admin_Custom2 as a FlagBit */ -#define ADMFLAG_CUSTOM3 (1<<17) /**< Convenience macro for Admin_Custom3 as a FlagBit */ -#define ADMFLAG_CUSTOM4 (1<<18) /**< Convenience macro for Admin_Custom4 as a FlagBit */ -#define ADMFLAG_CUSTOM5 (1<<19) /**< Convenience macro for Admin_Custom5 as a FlagBit */ -#define ADMFLAG_CUSTOM6 (1<<20) /**< Convenience macro for Admin_Custom6 as a FlagBit */ +#define ADMFLAG_RESERVATION (1<<0) /**< Convenience macro for Admin_Reservation as a FlagBit */ +#define ADMFLAG_GENERIC (1<<1) /**< Convenience macro for Admin_Generic as a FlagBit */ +#define ADMFLAG_KICK (1<<2) /**< Convenience macro for Admin_Kick as a FlagBit */ +#define ADMFLAG_BAN (1<<3) /**< Convenience macro for Admin_Ban as a FlagBit */ +#define ADMFLAG_UNBAN (1<<4) /**< Convenience macro for Admin_Unban as a FlagBit */ +#define ADMFLAG_SLAY (1<<5) /**< Convenience macro for Admin_Slay as a FlagBit */ +#define ADMFLAG_CHANGEMAP (1<<6) /**< Convenience macro for Admin_Changemap as a FlagBit */ +#define ADMFLAG_CONVARS (1<<7) /**< Convenience macro for Admin_Convars as a FlagBit */ +#define ADMFLAG_CONFIG (1<<8) /**< Convenience macro for Admin_Config as a FlagBit */ +#define ADMFLAG_CHAT (1<<9) /**< Convenience macro for Admin_Chat as a FlagBit */ +#define ADMFLAG_VOTE (1<<10) /**< Convenience macro for Admin_Vote as a FlagBit */ +#define ADMFLAG_PASSWORD (1<<11) /**< Convenience macro for Admin_Password as a FlagBit */ +#define ADMFLAG_RCON (1<<12) /**< Convenience macro for Admin_RCON as a FlagBit */ +#define ADMFLAG_CHEATS (1<<13) /**< Convenience macro for Admin_Cheats as a FlagBit */ +#define ADMFLAG_ROOT (1<<14) /**< Convenience macro for Admin_Root as a FlagBit */ +#define ADMFLAG_CUSTOM1 (1<<15) /**< Convenience macro for Admin_Custom1 as a FlagBit */ +#define ADMFLAG_CUSTOM2 (1<<16) /**< Convenience macro for Admin_Custom2 as a FlagBit */ +#define ADMFLAG_CUSTOM3 (1<<17) /**< Convenience macro for Admin_Custom3 as a FlagBit */ +#define ADMFLAG_CUSTOM4 (1<<18) /**< Convenience macro for Admin_Custom4 as a FlagBit */ +#define ADMFLAG_CUSTOM5 (1<<19) /**< Convenience macro for Admin_Custom5 as a FlagBit */ +#define ADMFLAG_CUSTOM6 (1<<20) /**< Convenience macro for Admin_Custom6 as a FlagBit */ /** * @endsection */ /** - * @section Hardcoded authentication methods + * @section Hardcoded authentication methods */ -#define AUTHMETHOD_STEAM "steam" /**< SteamID based authentication */ -#define AUTHMETHOD_IP "ip" /**< IP based authentication */ -#define AUTHMETHOD_NAME "name" /**< Name based authentication */ +#define AUTHMETHOD_STEAM "steam" /**< SteamID based authentication */ +#define AUTHMETHOD_IP "ip" /**< IP based authentication */ +#define AUTHMETHOD_NAME "name" /**< Name based authentication */ /** * @endsection @@ -111,8 +110,8 @@ enum AdminFlag */ enum OverrideType { - Override_Command = 1, /**< Command */ - Override_CommandGroup, /**< Command group */ + Override_Command = 1, /**< Command */ + Override_CommandGroup /**< Command group */ }; /** @@ -121,7 +120,7 @@ enum OverrideType enum OverrideRule { Command_Deny = 0, - Command_Allow = 1, + Command_Allow = 1 }; /** @@ -129,24 +128,24 @@ enum OverrideRule */ enum ImmunityType { - Immunity_Default = 1, /**< Deprecated. */ - Immunity_Global, /**< Deprecated. */ + Immunity_Default = 1, /**< Deprecated. */ + Immunity_Global /**< Deprecated. */ }; -/** +/** * Identifies a unique entry in the group permissions cache. These are not Handles. */ enum GroupId { - INVALID_GROUP_ID = -1, /**< An invalid/non-existent group */ + INVALID_GROUP_ID = -1 /**< An invalid/non-existent group */ }; -/** +/** * Identifies a unique entry in the admin permissions cache. These are not Handles. */ enum AdminId { - INVALID_ADMIN_ID = -1, /**< An invalid/non-existent admin */ + INVALID_ADMIN_ID = -1 /**< An invalid/non-existent admin */ }; /** @@ -154,8 +153,8 @@ enum AdminId */ enum AdmAccessMode { - Access_Real, /**< Access the user has inherently */ - Access_Effective, /**< Access the user has from their groups */ + Access_Real, /**< Access the user has inherently */ + Access_Effective /**< Access the user has from their groups */ }; /** @@ -163,9 +162,9 @@ enum AdmAccessMode */ enum AdminCachePart { - AdminCache_Overrides = 0, /**< Global overrides */ - AdminCache_Groups = 1, /**< All groups (automatically invalidates admins too) */ - AdminCache_Admins = 2, /**< All admins */ + AdminCache_Overrides = 0, /**< Global overrides */ + AdminCache_Groups = 1, /**< All groups (automatically invalidates admins too) */ + AdminCache_Admins = 2 /**< All admins */ }; methodmap AdminId { @@ -221,7 +220,7 @@ methodmap AdminId { // @param maxlength Maximum size of the output name buffer. // @return A GroupId index and a name pointer, or // INVALID_GROUP_ID and NULL if an error occurred. - public native GroupId GetGroup(int index, const char[] name, int maxlength); + public native GroupId GetGroup(int index, char[] name, int maxlength); // Sets a password on an admin. // @@ -269,45 +268,45 @@ methodmap AdminId { methodmap GroupId { // Gets whether or not a flag is enabled on a group's flag set. // - // @param flag Admin flag to retrieve. - // @return True if enabled, false otherwise, + // @param flag Admin flag to retrieve. + // @return True if enabled, false otherwise, public native bool HasFlag(AdminFlag flag); // Adds or removes a flag from a group's flag set. // - // @param flag Admin flag to toggle. - // @param enabled True to set the flag, false to unset/disable. + // @param flag Admin flag to toggle. + // @param enabled True to set the flag, false to unset/disable. public native void SetFlag(AdminFlag flag, bool enabled); // Returns the flag set that is added to users from this group. // - // @return Bitstring containing the flags enabled. + // @return Bitstring containing the flags enabled. public native int GetFlags(); // Returns a group that this group is immune to given an index. // - // @param number Index from 0 to N-1, from GroupImmunitiesCount. - // @return GroupId that this group is immune to, or INVALID_GROUP_ID on failure. + // @param number Index from 0 to N-1, from GroupImmunitiesCount. + // @return GroupId that this group is immune to, or INVALID_GROUP_ID on failure. public native GroupId GetGroupImmunity(int index); // Adds immunity to a specific group. // - // @param other Group id to receive immunity to. + // @param other Group id to receive immunity to. public native void AddGroupImmunity(GroupId other); // Retrieves a group-specific command override. // - // @param name String containing command name (case sensitive). - // @param type Override type (specific command or group). - // @param rule Optional pointer to store allow/deny setting. - // @return True if an override exists, false otherwise. + // @param name String containing command name (case sensitive). + // @param type Override type (specific command or group). + // @param rule Optional pointer to store allow/deny setting. + // @return True if an override exists, false otherwise. public native bool GetCommandOverride(const char[] name, OverrideType type, OverrideRule &rule); // Adds a group-specific override type. // - // @param name String containing command name (case sensitive). - // @param type Override type (specific command or group). - // @param rule Override allow/deny setting. + // @param name String containing command name (case sensitive). + // @param type Override type (specific command or group). + // @param rule Override allow/deny setting. public native void AddCommandOverride(const char[] name, OverrideType type, OverrideRule rule); // Number of specific group immunities @@ -325,15 +324,15 @@ methodmap GroupId { /** * Called when part of the cache needs to be rebuilt. * - * @param part Part of the admin cache to rebuild. + * @param part Part of the admin cache to rebuild. */ forward void OnRebuildAdminCache(AdminCachePart part); /** * Tells the admin system to dump a portion of the cache. * - * @param part Part of the cache to dump. Specifying groups also dumps admins. - * @param rebuild If true, the rebuild forwards will fire. + * @param part Part of the cache to dump. Specifying groups also dumps admins. + * @param rebuild If true, the rebuild forwards will fire. */ native void DumpAdminCache(AdminCachePart part, bool rebuild); @@ -341,43 +340,43 @@ native void DumpAdminCache(AdminCachePart part, bool rebuild); * Adds a global command flag override. Any command registered with this name * will assume the new flag. This is applied retroactively as well. * - * @param cmd String containing command name (case sensitive). - * @param type Override type (specific command or group). - * @param flags New admin flag. + * @param cmd String containing command name (case sensitive). + * @param type Override type (specific command or group). + * @param flags New admin flag. */ native void AddCommandOverride(const char[] cmd, OverrideType type, int flags); /** * Returns a command override. * - * @param cmd String containing command name (case sensitive). - * @param type Override type (specific command or group). - * @param flags By-reference cell to store the flag (undefined if not found). - * @return True if there is an override, false otherwise. + * @param cmd String containing command name (case sensitive). + * @param type Override type (specific command or group). + * @param flags By-reference cell to store the flag (undefined if not found). + * @return True if there is an override, false otherwise. */ native bool GetCommandOverride(const char[] cmd, OverrideType type, int &flags); /** * Unsets a command override. * - * @param cmd String containing command name (case sensitive). - * @param type Override type (specific command or group). + * @param cmd String containing command name (case sensitive). + * @param type Override type (specific command or group). */ native void UnsetCommandOverride(const char[] cmd, OverrideType type); /** * Adds a new group. Name must be unique. * - * @param group_name String containing the group name. - * @return A new group id, INVALID_GROUP_ID if it already exists. + * @param group_name String containing the group name. + * @return A new group id, INVALID_GROUP_ID if it already exists. */ native GroupId CreateAdmGroup(const char[] group_name); /** * Finds a group by name. * - * @param group_name String containing the group name. - * @return A group id, or INVALID_GROUP_ID if not found. + * @param group_name String containing the group name. + * @return A group id, or INVALID_GROUP_ID if not found. */ native GroupId FindAdmGroup(const char[] group_name); @@ -385,9 +384,9 @@ native GroupId FindAdmGroup(const char[] group_name); * Adds or removes a flag from a group's flag set. * @note These are called "add flags" because they add to a user's flags. * - * @param id Group id. - * @param flag Admin flag to toggle. - * @param enabled True to set the flag, false to unset/disable. + * @param id Group id. + * @param flag Admin flag to toggle. + * @param enabled True to set the flag, false to unset/disable. */ native void SetAdmGroupAddFlag(GroupId id, AdminFlag flag, bool enabled); @@ -395,9 +394,9 @@ native void SetAdmGroupAddFlag(GroupId id, AdminFlag flag, bool enabled); * Gets the set value of an add flag on a group's flag set. * @note These are called "add flags" because they add to a user's flags. * - * @param id Group id. - * @param flag Admin flag to retrieve. - * @return True if enabled, false otherwise, + * @param id Group id. + * @param flag Admin flag to retrieve. + * @return True if enabled, false otherwise, */ native bool GetAdmGroupAddFlag(GroupId id, AdminFlag flag); @@ -405,19 +404,19 @@ native bool GetAdmGroupAddFlag(GroupId id, AdminFlag flag); * Returns the flag set that is added to a user from their group. * @note These are called "add flags" because they add to a user's flags. * - * @param id GroupId of the group. - * @return Bitstring containing the flags enabled. + * @param id GroupId of the group. + * @return Bitstring containing the flags enabled. */ native int GetAdmGroupAddFlags(GroupId id); /** - * @deprecated Functionality removed. + * @deprecated Functionality removed. */ #pragma deprecated Use SetAdmGroupImmunityLevel() instead. native void SetAdmGroupImmunity(GroupId id, ImmunityType type, bool enabled); /** - * @deprecated Functionality removed. + * @deprecated Functionality removed. */ #pragma deprecated Use GetAdmGroupImmunityLevel() instead. native bool GetAdmGroupImmunity(GroupId id, ImmunityType type); @@ -425,62 +424,63 @@ native bool GetAdmGroupImmunity(GroupId id, ImmunityType type); /** * Adds immunity to a specific group. * - * @param id Group id. - * @param other_id Group id to receive immunity to. + * @param id Group id. + * @param other_id Group id to receive immunity to. */ native void SetAdmGroupImmuneFrom(GroupId id, GroupId other_id); /** * Returns the number of specific group immunities. * - * @param id Group id. - * @return Number of group immunities. + * @param id Group id. + * @return Number of group immunities. */ native int GetAdmGroupImmuneCount(GroupId id); /** * Returns a group that this group is immune to given an index. * - * @param id Group id. - * @param number Index from 0 to N-1, from GetAdmGroupImmuneCount(). - * @return GroupId that this group is immune to, or INVALID_GROUP_ID on failure. + * @param id Group id. + * @param number Index from 0 to N-1, from GetAdmGroupImmuneCount(). + * @return GroupId that this group is immune to, or INVALID_GROUP_ID on failure. */ -native GroupId GetAdmGroupImmuneFrom(GroupId id, int number); +native GroupId GetAdmGroupImmuneFrom(GroupId id, int number); /** * Adds a group-specific override type. * - * @param id Group id. - * @param name String containing command name (case sensitive). - * @param type Override type (specific command or group). - * @param rule Override allow/deny setting. + * @param id Group id. + * @param name String containing command name (case sensitive). + * @param type Override type (specific command or group). + * @param rule Override allow/deny setting. */ native void AddAdmGroupCmdOverride(GroupId id, const char[] name, OverrideType type, OverrideRule rule); /** * Retrieves a group-specific command override. * - * @param id Group id. - * @param name String containing command name (case sensitive). - * @param type Override type (specific command or group). - * @param rule Optional pointer to store allow/deny setting. - * @return True if an override exists, false otherwise. + * @param id Group id. + * @param name String containing command name (case sensitive). + * @param type Override type (specific command or group). + * @param rule Optional pointer to store allow/deny setting. + * @return True if an override exists, false otherwise. */ native bool GetAdmGroupCmdOverride(GroupId id, const char[] name, OverrideType type, OverrideRule &rule); /** - * Registers an authentication identity type. You normally never need to call this except for + * Registers an authentication identity type. You normally never need to call this except for * very specific systems. * - * @param name Codename to use for your authentication type. + * @param name Codename to use for your authentication type. */ native void RegisterAuthIdentType(const char[] name); /** - * Creates a new admin entry in the permissions cache. + * Creates a new admin entry in the permissions cache and returns the generated AdminId index. * - * @param name Name for this entry (does not have to be unique). - * Specify an empty string for an anonymous admin. + * @param name Name for this entry (does not have to be unique). + * Specify an empty string for an anonymous admin. + * @return New AdminId index or INVALID_ADMIN_ID if name is empty */ native AdminId CreateAdmin(const char[] name=""); @@ -489,109 +489,109 @@ native AdminId CreateAdmin(const char[] name=""); * * @note This function can return UTF-8 strings, and will safely chop UTF-8 strings. * - * @param id AdminId of the admin. - * @param name String buffer to store name. - * @param maxlength Maximum size of string buffer. - * @return Number of bytes written. + * @param id AdminId of the admin. + * @param name String buffer to store name. + * @param maxlength Maximum size of string buffer. + * @return Number of bytes written. */ native int GetAdminUsername(AdminId id, char[] name, int maxlength); /** * Binds an admin to an identity for fast lookup later on. The bind must be unique. * - * @param id AdminId of the admin. - * @param auth Auth method to use, predefined or from RegisterAuthIdentType(). - * @param ident String containing the arbitrary, unique identity. - * @return True on success, false if the auth method was not found, - * ident was already taken, or ident invalid for auth method. + * @param id AdminId of the admin. + * @param auth Auth method to use, predefined or from RegisterAuthIdentType(). + * @param ident String containing the arbitrary, unique identity. + * @return True on success, false if the auth method was not found, + * ident was already taken, or ident invalid for auth method. */ native bool BindAdminIdentity(AdminId id, const char[] auth, const char[] ident); /** * Sets whether or not a flag is enabled on an admin. * - * @param id AdminId index of the admin. - * @param flag Admin flag to use. - * @param enabled True to enable, false to disable. + * @param id AdminId index of the admin. + * @param flag Admin flag to use. + * @param enabled True to enable, false to disable. */ native void SetAdminFlag(AdminId id, AdminFlag flag, bool enabled); /** * Returns whether or not a flag is enabled on an admin. * - * @param id AdminId index of the admin. - * @param flag Admin flag to use. - * @param mode Access mode to check. - * @return True if enabled, false otherwise. + * @param id AdminId index of the admin. + * @param flag Admin flag to use. + * @param mode Access mode to check. + * @return True if enabled, false otherwise. */ native bool GetAdminFlag(AdminId id, AdminFlag flag, AdmAccessMode mode=Access_Effective); /** * Returns the bitstring of access flags on an admin. * - * @param id AdminId index of the admin. - * @param mode Access mode to use. - * @return A bitstring containing which flags are enabled. + * @param id AdminId index of the admin. + * @param mode Access mode to use. + * @return A bitstring containing which flags are enabled. */ native int GetAdminFlags(AdminId id, AdmAccessMode mode); /** - * Adds a group to an admin's inherited group list. Any flags the group has + * Adds a group to an admin's inherited group list. Any flags the group has * will be added to the admin's effective flags. * - * @param id AdminId index of the admin. - * @param gid GroupId index of the group. - * @return True on success, false on invalid input or duplicate membership. + * @param id AdminId index of the admin. + * @param gid GroupId index of the group. + * @return True on success, false on invalid input or duplicate membership. */ native bool AdminInheritGroup(AdminId id, GroupId gid); /** * Returns the number of groups this admin is a member of. - * - * @param id AdminId index of the admin. - * @return Number of groups this admin is a member of. + * + * @param id AdminId index of the admin. + * @return Number of groups this admin is a member of. */ native int GetAdminGroupCount(AdminId id); /** * Returns group information from an admin. * - * @param id AdminId index of the admin. - * @param index Group number to retrieve, from 0 to N-1, where N - * is the value of GetAdminGroupCount(id). - * @param name Buffer to store the group's name. - * Note: This will safely chop UTF-8 strings. - * @param maxlength Maximum size of the output name buffer. - * @return A GroupId index and a name pointer, or - * INVALID_GROUP_ID and NULL if an error occurred. + * @param id AdminId index of the admin. + * @param index Group number to retrieve, from 0 to N-1, where N + * is the value of GetAdminGroupCount(id). + * @param name Buffer to store the group's name. + * Note: This will safely chop UTF-8 strings. + * @param maxlength Maximum size of the output name buffer. + * @return A GroupId index and a name pointer, or + * INVALID_GROUP_ID and NULL if an error occurred. */ -native GroupId GetAdminGroup(AdminId id, int index, const char[] name, int maxlength); +native GroupId GetAdminGroup(AdminId id, int index, char[] name, int maxlength); /** * Sets a password on an admin. * - * @param id AdminId index of the admin. - * @param password String containing the password. + * @param id AdminId index of the admin. + * @param password String containing the password. */ native void SetAdminPassword(AdminId id, const char[] password); /** * Gets an admin's password. * - * @param id AdminId index of the admin. - * @param buffer Optional buffer to store the admin's password. - * @param maxlength Maximum size of the output name buffer. - * Note: This will safely chop UTF-8 strings. - * @return True if there was a password set, false otherwise. + * @param id AdminId index of the admin. + * @param buffer Optional buffer to store the admin's password. + * @param maxlength Maximum size of the output name buffer. + * Note: This will safely chop UTF-8 strings. + * @return True if there was a password set, false otherwise. */ native bool GetAdminPassword(AdminId id, char[] buffer="", int maxlength=0); /** * Attempts to find an admin by an auth method and an identity. * - * @param auth Auth method to try. - * @param identity Identity string to look up. - * @return An AdminId index if found, INVALID_ADMIN_ID otherwise. + * @param auth Auth method to try. + * @param identity Identity string to look up. + * @return An AdminId index if found, INVALID_ADMIN_ID otherwise. */ native AdminId FindAdminByIdentity(const char[] auth, const char[] identity); @@ -600,82 +600,82 @@ native AdminId FindAdminByIdentity(const char[] auth, const char[] identity); * * @note This will remove any bindings to a specific user. * - * @param id AdminId index to remove/invalidate. - * @return True on success, false otherwise. + * @param id AdminId index to remove/invalidate. + * @return True on success, false otherwise. */ native bool RemoveAdmin(AdminId id); /** * Converts a flag bit string to a bit array. * - * @param bits Bit string containing the flags. - * @param array Array to write the flags to. Enabled flags will be 'true'. - * @param maxSize Maximum number of flags the array can store. - * @return Number of flags written. + * @param bits Bit string containing the flags. + * @param array Array to write the flags to. Enabled flags will be 'true'. + * @param maxSize Maximum number of flags the array can store. + * @return Number of flags written. */ native int FlagBitsToBitArray(int bits, bool[] array, int maxSize); /** * Converts a flag array to a bit string. * - * @param array Array containing true or false for each AdminFlag. - * @param maxSize Maximum size of the flag array. - * @return A bit string composed of the array bits. + * @param array Array containing true or false for each AdminFlag. + * @param maxSize Maximum size of the flag array. + * @return A bit string composed of the array bits. */ native int FlagBitArrayToBits(const bool[] array, int maxSize); /** * Converts an array of flags to bits. * - * @param array Array containing flags that are enabled. - * @param numFlags Number of flags in the array. - * @return A bit string composed of the array flags. + * @param array Array containing flags that are enabled. + * @param numFlags Number of flags in the array. + * @return A bit string composed of the array flags. */ native int FlagArrayToBits(const AdminFlag[] array, int numFlags); /** * Converts a bit string to an array of flags. * - * @param bits Bit string containing the flags. - * @param array Output array to write flags. - * @param maxSize Maximum size of the flag array. - * @return Number of flags written. + * @param bits Bit string containing the flags. + * @param array Output array to write flags. + * @param maxSize Maximum size of the flag array. + * @return Number of flags written. */ native int FlagBitsToArray(int bits, AdminFlag[] array, int maxSize); /** * Finds a flag by its string name. * - * @param name Flag name (like "kick"), case sensitive. - * @param flag Variable to store flag in. - * @return True on success, false if not found. + * @param name Flag name (like "kick"), case sensitive. + * @param flag Variable to store flag in. + * @return True on success, false if not found. */ native bool FindFlagByName(const char[] name, AdminFlag &flag); /** * Finds a flag by a given character. * - * @param c Flag ASCII character/token. - * @param flag Variable to store flag in. - * @return True on success, false if not found. + * @param c Flag ASCII character/token. + * @param flag Variable to store flag in. + * @return True on success, false if not found. */ native bool FindFlagByChar(int c, AdminFlag &flag); /** * Finds the flag char for a given admin flag. * - * @param flag Flag to look up. - * @param c Variable to store flag char. - * @return True on success, false if not found. + * @param flag Flag to look up. + * @param c Variable to store flag char. + * @return True on success, false if not found. */ native bool FindFlagChar(AdminFlag flag, int &c); /** * Converts a string of flag characters to a bit string. * - * @param flags Flag ASCII string. - * @param numchars Optional variable to store the number of bytes read. - * @return Bit string of ADMFLAG values. + * @param flags Flag ASCII string. + * @param numchars Optional variable to store the number of bytes read. + * @return Bit string of ADMFLAG values. */ native int ReadFlagString(const char[] flags, int &numchars=0); @@ -688,15 +688,15 @@ native int ReadFlagString(const char[] flags, int &numchars=0); * 2. If the targeted AdminId is the same as the targeting AdminId, * (self) targeting succeeds. * 3. If the targeting admin is root, targeting succeeds. - * 4. If the targeted admin has access higher (as interpreted by + * 4. If the targeted admin has access higher (as interpreted by * (sm_immunity_mode) than the targeting admin, then targeting fails. * 5. If the targeted admin has specific immunity from the * targeting admin via group immunities, targeting fails. * 6. Targeting succeeds. * - * @param admin Admin doing the targetting (may be INVALID_ADMIN_ID). - * @param target Target admin (may be INVALID_ADMIN_ID). - * @return True if targetable, false if immune. + * @param admin Admin doing the targetting (may be INVALID_ADMIN_ID). + * @param target Target admin (may be INVALID_ADMIN_ID). + * @return True if targetable, false if immune. */ native bool CanAdminTarget(AdminId admin, AdminId target); @@ -704,50 +704,50 @@ native bool CanAdminTarget(AdminId admin, AdminId target); * Creates an admin auth method. This does not need to be called more than once * per method, ever. * - * @param method Name of the authentication method. - * @return True on success, false on failure. + * @param method Name of the authentication method. + * @return True on success, false on failure. */ native bool CreateAuthMethod(const char[] method); /** * Sets a group's immunity level. * - * @param gid Group Id. - * @param level Immunity level value. - * @return Old immunity level value. + * @param gid Group Id. + * @param level Immunity level value. + * @return Old immunity level value. */ native int SetAdmGroupImmunityLevel(GroupId gid, int level); /** * Gets a group's immunity level (defaults to 0). * - * @param gid Group Id. - * @return Immunity level value. + * @param gid Group Id. + * @return Immunity level value. */ native int GetAdmGroupImmunityLevel(GroupId gid); /** * Sets an admin's immunity level. * - * @param id Admin Id. - * @param level Immunity level value. - * @return Old immunity level value. + * @param id Admin Id. + * @param level Immunity level value. + * @return Old immunity level value. */ native int SetAdminImmunityLevel(AdminId id, int level); /** * Gets an admin's immunity level. * - * @param id Admin Id. - * @return Immunity level value. + * @param id Admin Id. + * @return Immunity level value. */ native int GetAdminImmunityLevel(AdminId id); /** * Converts a flag to its single bit. - * - * @param flag Flag to convert. - * @return Bit representation of the flag. + * + * @param flag Flag to convert. + * @return Bit representation of the flag. */ stock int FlagToBit(AdminFlag flag) { @@ -757,19 +757,19 @@ stock int FlagToBit(AdminFlag flag) /** * Converts a bit to an AdminFlag. * - * @param bit Bit to convert. - * @param flag Stores the converted flag by reference. - * @return True on success, false otherwise. + * @param bit Bit to convert. + * @param flag Stores the converted flag by reference. + * @return True on success, false otherwise. */ stock bool BitToFlag(int bit, AdminFlag &flag) { AdminFlag array[1]; - + if (FlagBitsToArray(bit, array, 1)) { flag = array[0]; return true; } - + return false; } diff --git a/env/include/adminmenu.inc b/env/include/adminmenu.inc index 2bcffde..e82323e 100644 --- a/env/include/adminmenu.inc +++ b/env/include/adminmenu.inc @@ -52,32 +52,32 @@ #endif /** Category for player commands. */ -#define ADMINMENU_PLAYERCOMMANDS "PlayerCommands" +#define ADMINMENU_PLAYERCOMMANDS "PlayerCommands" /** Category for server commands. */ -#define ADMINMENU_SERVERCOMMANDS "ServerCommands" +#define ADMINMENU_SERVERCOMMANDS "ServerCommands" /** Category for voting commands. */ -#define ADMINMENU_VOTINGCOMMANDS "VotingCommands" +#define ADMINMENU_VOTINGCOMMANDS "VotingCommands" /** * Called when the admin menu is created and 3rd party plugins can grab * the Handle or add categories. * - * @param topmenu Handle to the admin menu's TopMenu. + * @param topmenu Handle to the admin menu's TopMenu. */ forward void OnAdminMenuCreated(Handle topmenu); /** * Called when the admin menu is ready to have items added. * - * @param topmenu Handle to the admin menu's TopMenu. + * @param topmenu Handle to the admin menu's TopMenu. */ forward void OnAdminMenuReady(Handle topmenu); /** * Retrieves the Handle to the admin top menu. * - * @return Handle to the admin menu's TopMenu, - * or INVALID_HANDLE if not created yet. + * @return Handle to the admin menu's TopMenu, + * or INVALID_HANDLE if not created yet. */ native TopMenu GetAdminTopMenu(); @@ -87,16 +87,16 @@ native TopMenu GetAdminTopMenu(); * Each client is displayed as: name (userid) * Each item contains the userid as a string for its info. * - * @param menu Menu Handle. - * @param source_client Source client, or 0 to ignore immunity. - * @param in_game_only True to only select in-game players. - * @param alive_only True to only select alive players. - * @return Number of clients added. + * @param menu Menu Handle. + * @param source_client Source client, or 0 to ignore immunity. + * @param in_game_only True to only select in-game players. + * @param alive_only True to only select alive players. + * @return Number of clients added. */ native int AddTargetsToMenu(Handle menu, - int source_client, - bool in_game_only=true, - bool alive_only=false); + int source_client, + bool in_game_only=true, + bool alive_only=false); /** * Adds targets to an admin menu. @@ -104,10 +104,10 @@ native int AddTargetsToMenu(Handle menu, * Each client is displayed as: name (userid) * Each item contains the userid as a string for its info. * - * @param menu Menu Handle. - * @param source_client Source client, or 0 to ignore immunity. - * @param flags COMMAND_FILTER flags from commandfilters.inc. - * @return Number of clients added. + * @param menu Menu Handle. + * @param source_client Source client, or 0 to ignore immunity. + * @param flags COMMAND_FILTER flags from commandfilters.inc. + * @return Number of clients added. */ native int AddTargetsToMenu2(Handle menu, int source_client, int flags); @@ -115,9 +115,9 @@ native int AddTargetsToMenu2(Handle menu, int source_client, int flags); * Re-displays the admin menu to a client after selecting an item. * Auto-aborts if the Handle is invalid. * - * @param topmenu TopMenu Handle. - * @param client Client index. - * @return True on success, false on failure. + * @param topmenu TopMenu Handle. + * @param client Client index. + * @return True on success, false on failure. */ stock bool RedisplayAdminMenu(Handle topmenu, int client) { diff --git a/env/include/adt_array.inc b/env/include/adt_array.inc index 18456da..c8fd919 100644 --- a/env/include/adt_array.inc +++ b/env/include/adt_array.inc @@ -39,13 +39,16 @@ * Given a maximum string size (including the null terminator), * returns the number of cells required to fit that string. * - * @param size Number of bytes. - * @return Minimum number of cells required to fit the byte count. + * @param size Number of bytes. + * @return Minimum number of cells required to fit the byte count. */ stock int ByteCountToCells(int size) { if (!size) + { return 1; + } + return (size + 3) / 4; } @@ -78,7 +81,8 @@ methodmap ArrayList < Handle { public native ArrayList Clone(); // Resizes an array. If the size is smaller than the current size, the - // array is truncated. + // array is truncated. If the size is larger than the current size, + // the data at the additional indexes will not be initialized. // // @param newsize New size. public native void Resize(int newsize); @@ -91,7 +95,6 @@ methodmap ArrayList < Handle { // @param value Value to push. // @return Index of the new entry. // @error Invalid Handle or out of memory. - // public native int Push(any value); // Pushes a string onto the end of an array, truncating it if it is too big. @@ -202,15 +205,32 @@ methodmap ArrayList < Handle { // value cannot be located, -1 will be returned. // // @param item Value to search for - // @param block Optionally which block to search in + // @param block Optionally which block to search in // @return Array index, or -1 on failure // @error Invalid block index public native int FindValue(any item, int block=0); + // Sort an ADT Array. Specify the type as Integer, Float, or String. + // + // @param order Sort order to use, same as other sorts. + // @param type Data type stored in the ADT Array + public native void Sort(SortOrder order, SortType type); + + // Custom sorts an ADT Array. You must pass in a comparison function. + // + // @param sortfunc Sort comparison function to use + // @param hndl Optional Handle to pass through the comparison calls. + public native void SortCustom(SortFuncADTArray sortfunc, Handle hndl=INVALID_HANDLE); + // Retrieve the size of the array. property int Length { public native get(); } + + // Retrieve the blocksize the array was created with. + property int BlockSize { + public native get(); + } }; /** @@ -222,20 +242,20 @@ methodmap ArrayList < Handle { * The "blocksize" determines how many cells each array slot has; it cannot * be changed after creation. * - * @param blocksize The number of cells each member of the array can - * hold. For example, 32 cells is equivalent to: - * new Array[X][32] - * @param startsize Initial size of the array. Note that data will - * NOT be auto-initialized. - * @return New Handle to the array object. + * @param blocksize The number of cells each member of the array can + * hold. For example, 32 cells is equivalent to: + * new Array[X][32] + * @param startsize Initial size of the array. Note that data will + * NOT be auto-initialized. + * @return New Handle to the array object. */ native ArrayList CreateArray(int blocksize=1, int startsize=0); /** * Clears an array of all entries. This is the same as ResizeArray(0). * - * @param array Array Handle. - * @error Invalid Handle. + * @param array Array Handle. + * @error Invalid Handle. */ native void ClearArray(Handle array); @@ -244,28 +264,29 @@ native void ClearArray(Handle array); * be confused with CloneHandle. This is a completely new handle with the same data but * no relation to the original. You MUST close it. * - * @param array Array handle to be cloned - * @return New handle to the cloned array object - * @error Invalid Handle + * @param array Array handle to be cloned + * @return New handle to the cloned array object + * @error Invalid Handle */ native Handle CloneArray(Handle array); /** * Resizes an array. If the size is smaller than the current size, - * the array is truncated. + * the array is truncated. If the size is larger than the current size, + * the data at the additional indexes will not be initialized. * - * @param array Array Handle. - * @param newsize New size. - * @error Invalid Handle or out of memory. + * @param array Array Handle. + * @param newsize New size. + * @error Invalid Handle or out of memory. */ native void ResizeArray(Handle array, int newsize); /** * Returns the array size. * - * @param array Array Handle. - * @return Number of elements in the array. - * @error Invalid Handle. + * @param array Array Handle. + * @return Number of elements in the array. + * @error Invalid Handle. */ native int GetArraySize(Handle array); @@ -275,10 +296,10 @@ native int GetArraySize(Handle array); * This may safely be used even if the array has a blocksize * greater than 1. * - * @param array Array Handle. - * @param value Value to push. - * @return Index of the new entry. - * @error Invalid Handle or out of memory. + * @param array Array Handle. + * @param value Value to push. + * @return Index of the new entry. + * @error Invalid Handle or out of memory. */ native int PushArrayCell(Handle array, any value); @@ -286,10 +307,10 @@ native int PushArrayCell(Handle array, any value); * Pushes a string onto the end of an array, truncating it * if it is too big. * - * @param array Array Handle. - * @param value String to push. - * @return Index of the new entry. - * @error Invalid Handle or out of memory. + * @param array Array Handle. + * @param value String to push. + * @return Index of the new entry. + * @error Invalid Handle or out of memory. */ native int PushArrayString(Handle array, const char[] value); @@ -298,88 +319,88 @@ native int PushArrayString(Handle array, const char[] value); * are pushed as a block (i.e. the entire array sits at the index), * rather than pushing each cell individually. * - * @param array Array Handle. - * @param values Block of values to copy. - * @param size If not set, the number of elements copied from the array - * will be equal to the blocksize. If set higher than the - * blocksize, the operation will be truncated. - * @return Index of the new entry. - * @error Invalid Handle or out of memory. + * @param array Array Handle. + * @param values Block of values to copy. + * @param size If not set, the number of elements copied from the array + * will be equal to the blocksize. If set higher than the + * blocksize, the operation will be truncated. + * @return Index of the new entry. + * @error Invalid Handle or out of memory. */ native int PushArrayArray(Handle array, const any[] values, int size=-1); /** * Retrieves a cell value from an array. * - * @param array Array Handle. - * @param index Index in the array. - * @param block Optionally specify which block to read from - * (useful if the blocksize > 0). - * @param asChar Optionally read as a byte instead of a cell. - * @return Value read. - * @error Invalid Handle, invalid index, or invalid block. + * @param array Array Handle. + * @param index Index in the array. + * @param block Optionally specify which block to read from + * (useful if the blocksize > 0). + * @param asChar Optionally read as a byte instead of a cell. + * @return Value read. + * @error Invalid Handle, invalid index, or invalid block. */ native any GetArrayCell(Handle array, int index, int block=0, bool asChar=false); /** * Retrieves a string value from an array. * - * @param array Array Handle. - * @param index Index in the array. - * @param buffer Buffer to copy to. - * @param maxlength Maximum size of the buffer. - * @return Number of characters copied. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index Index in the array. + * @param buffer Buffer to copy to. + * @param maxlength Maximum size of the buffer. + * @return Number of characters copied. + * @error Invalid Handle or invalid index. */ native int GetArrayString(Handle array, int index, char[] buffer, int maxlength); /** * Retrieves an array of cells from an array. * - * @param array Array Handle. - * @param index Index in the array. - * @param buffer Buffer to store the array in. - * @param size If not set, assumes the buffer size is equal to the - * blocksize. Otherwise, the size passed is used. - * @return Number of cells copied. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index Index in the array. + * @param buffer Buffer to store the array in. + * @param size If not set, assumes the buffer size is equal to the + * blocksize. Otherwise, the size passed is used. + * @return Number of cells copied. + * @error Invalid Handle or invalid index. */ native int GetArrayArray(Handle array, int index, any[] buffer, int size=-1); /** * Sets a cell value in an array. * - * @param array Array Handle. - * @param index Index in the array. - * @param value Cell value to set. - * @param block Optionally specify which block to write to - * (useful if the blocksize > 0). - * @param asChar Optionally set as a byte instead of a cell. - * @error Invalid Handle, invalid index, or invalid block. + * @param array Array Handle. + * @param index Index in the array. + * @param value Cell value to set. + * @param block Optionally specify which block to write to + * (useful if the blocksize > 0). + * @param asChar Optionally set as a byte instead of a cell. + * @error Invalid Handle, invalid index, or invalid block. */ native void SetArrayCell(Handle array, int index, any value, int block=0, bool asChar=false); /** * Sets a string value in an array. * - * @param array Array Handle. - * @param index Index in the array. - * @param value String value to set. - * @return Number of characters copied. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index Index in the array. + * @param value String value to set. + * @return Number of characters copied. + * @error Invalid Handle or invalid index. */ native int SetArrayString(Handle array, int index, const char[] value); /** * Sets an array of cells in an array. * - * @param array Array Handle. - * @param index Index in the array. - * @param values Array to copy. - * @param size If not set, assumes the buffer size is equal to the - * blocksize. Otherwise, the size passed is used. - * @return Number of cells copied. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index Index in the array. + * @param values Array to copy. + * @param size If not set, assumes the buffer size is equal to the + * blocksize. Otherwise, the size passed is used. + * @return Number of cells copied. + * @error Invalid Handle or invalid index. */ native int SetArrayArray(Handle array, int index, const any[] values, int size=-1); @@ -388,9 +409,9 @@ native int SetArrayArray(Handle array, int index, const any[] values, int size=- * index are shifted up by one, and the given index is then "free." * After shifting, the contents of the given index is undefined. * - * @param array Array Handle. - * @param index Index in the array to shift up from. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index Index in the array to shift up from. + * @error Invalid Handle or invalid index. */ native void ShiftArrayUp(Handle array, int index); @@ -399,19 +420,19 @@ native void ShiftArrayUp(Handle array, int index); * on. For example, if item 8 of 10 is removed, the last 3 items will then be * (6,7,8) instead of (7,8,9), and all indexes before 8 will remain unchanged. * - * @param array Array Handle. - * @param index Index in the array to remove at. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index Index in the array to remove at. + * @error Invalid Handle or invalid index. */ native void RemoveFromArray(Handle array, int index); /** * Swaps two items in the array. * - * @param array Array Handle. - * @param index1 First index. - * @param index2 Second index. - * @error Invalid Handle or invalid index. + * @param array Array Handle. + * @param index1 First index. + * @param index2 Second index. + * @error Invalid Handle or invalid index. */ native void SwapArrayItems(Handle array, int index1, int index2); @@ -419,10 +440,10 @@ native void SwapArrayItems(Handle array, int index1, int index2); * Returns the index for the first occurrence of the provided string. If the string * cannot be located, -1 will be returned. * - * @param array Array Handle. - * @param item String to search for - * @return Array index, or -1 on failure - * @error Invalid Handle + * @param array Array Handle. + * @param item String to search for + * @return Array index, or -1 on failure + * @error Invalid Handle */ native int FindStringInArray(Handle array, const char[] item); @@ -430,10 +451,19 @@ native int FindStringInArray(Handle array, const char[] item); * Returns the index for the first occurrence of the provided value. If the value * cannot be located, -1 will be returned. * - * @param array Array Handle. - * @param item Value to search for - * @param block Optionally which block to search in - * @return Array index, or -1 on failure - * @error Invalid Handle or invalid block + * @param array Array Handle. + * @param item Value to search for + * @param block Optionally which block to search in + * @return Array index, or -1 on failure + * @error Invalid Handle or invalid block */ native int FindValueInArray(Handle array, any item, int block=0); + +/** + * Returns the blocksize the array was created with. + * + * @param array Array Handle. + * @return The blocksize of the array. + * @error Invalid Handle + */ +native int GetArrayBlockSize(Handle array); diff --git a/env/include/adt_stack.inc b/env/include/adt_stack.inc index 05c3d3f..9be8857 100644 --- a/env/include/adt_stack.inc +++ b/env/include/adt_stack.inc @@ -109,6 +109,11 @@ methodmap ArrayStack < Handle property bool Empty { public native get(); } + + // Retrieve the blocksize the stack was created with. + property int BlockSize { + public native get(); + } }; /** @@ -124,10 +129,10 @@ methodmap ArrayStack < Handle * The "blocksize" determines how many cells each slot has; it cannot * be changed after creation. * - * @param blocksize The number of cells each entry in the stack can - * hold. For example, 32 cells is equivalent to: - * new Array[X][32] - * @return New stack Handle. + * @param blocksize The number of cells each entry in the stack can + * hold. For example, 32 cells is equivalent to: + * new Array[X][32] + * @return New stack Handle. */ native ArrayStack CreateStack(int blocksize=1); @@ -137,9 +142,9 @@ native ArrayStack CreateStack(int blocksize=1); * This may safely be used even if the stack has a blocksize * greater than 1. * - * @param stack Stack Handle. - * @param value Value to push. - * @error Invalid Handle or out of memory. + * @param stack Stack Handle. + * @param value Value to push. + * @error Invalid Handle or out of memory. */ native void PushStackCell(Handle stack, any value); @@ -147,9 +152,9 @@ native void PushStackCell(Handle stack, any value); * Pushes a copy of a string onto the end of a stack, truncating it if it is * too big. * - * @param stack Stack Handle. - * @param value String to push. - * @error Invalid Handle or out of memory. + * @param stack Stack Handle. + * @param value String to push. + * @error Invalid Handle or out of memory. */ native void PushStackString(Handle stack, const char[] value); @@ -158,69 +163,78 @@ native void PushStackString(Handle stack, const char[] value); * are pushed as a block (i.e. the entire array takes up one stack slot), * rather than pushing each cell individually. * - * @param stack Stack Handle. - * @param values Block of values to copy. - * @param size If not set, the number of elements copied from the array - * will be equal to the blocksize. If set higher than the - * blocksize, the operation will be truncated. - * @error Invalid Handle or out of memory. + * @param stack Stack Handle. + * @param values Block of values to copy. + * @param size If not set, the number of elements copied from the array + * will be equal to the blocksize. If set higher than the + * blocksize, the operation will be truncated. + * @error Invalid Handle or out of memory. */ native void PushStackArray(Handle stack, const any[] values, int size=-1); /** * Pops a cell value from a stack. * - * @param stack Stack Handle. - * @param value Variable to store the value. - * @param block Optionally specify which block to read from - * (useful if the blocksize > 0). - * @param asChar Optionally read as a byte instead of a cell. - * @return True on success, false if the stack is empty. - * @error Invalid Handle. + * @param stack Stack Handle. + * @param value Variable to store the value. + * @param block Optionally specify which block to read from + * (useful if the blocksize > 0). + * @param asChar Optionally read as a byte instead of a cell. + * @return True on success, false if the stack is empty. + * @error Invalid Handle. */ native bool PopStackCell(Handle stack, any &value, int block=0, bool asChar=false); /** * Pops a string value from a stack. * - * @param stack Stack Handle. - * @param buffer Buffer to store string. - * @param maxlength Maximum size of the buffer. - * @return True on success, false if the stack is empty. - * @error Invalid Handle. + * @param stack Stack Handle. + * @param buffer Buffer to store string. + * @param maxlength Maximum size of the buffer. + * @return True on success, false if the stack is empty. + * @error Invalid Handle. */ native bool PopStackString(Handle stack, char[] buffer, int maxlength, int &written=0); /** * Pops an array of cells from a stack. * - * @param stack Stack Handle. - * @param buffer Buffer to store the array in. - * @param size If not set, assumes the buffer size is equal to the - * blocksize. Otherwise, the size passed is used. - * @return True on success, false if the stack is empty. - * @error Invalid Handle. + * @param stack Stack Handle. + * @param buffer Buffer to store the array in. + * @param size If not set, assumes the buffer size is equal to the + * blocksize. Otherwise, the size passed is used. + * @return True on success, false if the stack is empty. + * @error Invalid Handle. */ native bool PopStackArray(Handle stack, any[] buffer, int size=-1); /** * Checks if a stack is empty. * - * @param stack Stack Handle. - * @return True if empty, false if not empty. - * @error Invalid Handle. + * @param stack Stack Handle. + * @return True if empty, false if not empty. + * @error Invalid Handle. */ native bool IsStackEmpty(Handle stack); /** * Pops a value off a stack, ignoring it completely. * - * @param stack Stack Handle. - * @return True if something was popped, false otherwise. - * @error Invalid Handle. + * @param stack Stack Handle. + * @return True if something was popped, false otherwise. + * @error Invalid Handle. */ stock bool PopStack(Handle stack) { int value; return PopStackCell(stack, value); } + +/** + * Returns the blocksize the stack was created with. + * + * @param stack Stack Handle. + * @return The blocksize of the stack. + * @error Invalid Handle + */ +native int GetStackBlockSize(Handle stack); diff --git a/env/include/adt_trie.inc b/env/include/adt_trie.inc index 337fe1f..2d262c4 100644 --- a/env/include/adt_trie.inc +++ b/env/include/adt_trie.inc @@ -124,9 +124,11 @@ methodmap StringMap < Handle } }; -// A StringMapSnapshot is created via StringMap.Snapshot(). It captures the -// keys on a map so they can be read. Snapshots must be freed with delete or -// CloseHandle(). +/** + * A StringMapSnapshot is created via StringMap.Snapshot(). It captures the + * keys on a map so they can be read. Snapshots must be freed with delete or + * CloseHandle(). + */ methodmap StringMapSnapshot < Handle { // Returns the number of keys in the map snapshot. @@ -164,111 +166,111 @@ methodmap StringMapSnapshot < Handle * been internally replaced with hash tables, which have O(1) insertion time * instead of O(n). * - * @return New Map Handle, which must be freed via CloseHandle(). + * @return New Map Handle, which must be freed via CloseHandle(). */ native StringMap CreateTrie(); /** * Sets a value in a hash map, either inserting a new entry or replacing an old one. * - * @param map Map Handle. - * @param key Key string. - * @param value Value to store at this key. - * @param replace If false, operation will fail if the key is already set. - * @return True on success, false on failure. - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @param value Value to store at this key. + * @param replace If false, operation will fail if the key is already set. + * @return True on success, false on failure. + * @error Invalid Handle. */ native bool SetTrieValue(Handle map, const char[] key, any value, bool replace=true); /** * Sets an array value in a Map, either inserting a new entry or replacing an old one. * - * @param map Map Handle. - * @param key Key string. - * @param array Array to store. - * @param num_items Number of items in the array. - * @param replace If false, operation will fail if the key is already set. - * @return True on success, false on failure. - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @param array Array to store. + * @param num_items Number of items in the array. + * @param replace If false, operation will fail if the key is already set. + * @return True on success, false on failure. + * @error Invalid Handle. */ native bool SetTrieArray(Handle map, const char[] key, const any[] array, int num_items, bool replace=true); /** * Sets a string value in a Map, either inserting a new entry or replacing an old one. * - * @param map Map Handle. - * @param key Key string. - * @param value String to store. - * @param replace If false, operation will fail if the key is already set. - * @return True on success, false on failure. - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @param value String to store. + * @param replace If false, operation will fail if the key is already set. + * @return True on success, false on failure. + * @error Invalid Handle. */ native bool SetTrieString(Handle map, const char[] key, const char[] value, bool replace=true); /** * Retrieves a value in a Map. * - * @param map Map Handle. - * @param key Key string. - * @param value Variable to store value. - * @return True on success. False if the key is not set, or the key is set - * as an array or string (not a value). - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @param value Variable to store value. + * @return True on success. False if the key is not set, or the key is set + * as an array or string (not a value). + * @error Invalid Handle. */ native bool GetTrieValue(Handle map, const char[] key, any &value); /** * Retrieves an array in a Map. * - * @param map Map Handle. - * @param key Key string. - * @param array Buffer to store array. - * @param max_size Maximum size of array buffer. - * @param size Optional parameter to store the number of elements written to the buffer. - * @return True on success. False if the key is not set, or the key is set - * as a value or string (not an array). - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @param array Buffer to store array. + * @param max_size Maximum size of array buffer. + * @param size Optional parameter to store the number of elements written to the buffer. + * @return True on success. False if the key is not set, or the key is set + * as a value or string (not an array). + * @error Invalid Handle. */ native bool GetTrieArray(Handle map, const char[] key, any[] array, int max_size, int &size=0); /** * Retrieves a string in a Map. * - * @param map Map Handle. - * @param key Key string. - * @param value Buffer to store value. - * @param max_size Maximum size of string buffer. - * @param size Optional parameter to store the number of bytes written to the buffer. - * @return True on success. False if the key is not set, or the key is set - * as a value or array (not a string). - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @param value Buffer to store value. + * @param max_size Maximum size of string buffer. + * @param size Optional parameter to store the number of bytes written to the buffer. + * @return True on success. False if the key is not set, or the key is set + * as a value or array (not a string). + * @error Invalid Handle. */ native bool GetTrieString(Handle map, const char[] key, char[] value, int max_size, int &size=0); /** * Removes a key entry from a Map. * - * @param map Map Handle. - * @param key Key string. - * @return True on success, false if the value was never set. - * @error Invalid Handle. + * @param map Map Handle. + * @param key Key string. + * @return True on success, false if the value was never set. + * @error Invalid Handle. */ native bool RemoveFromTrie(Handle map, const char[] key); /** * Clears all entries from a Map. * - * @param map Map Handle. - * @error Invalid Handle. + * @param map Map Handle. + * @error Invalid Handle. */ native void ClearTrie(Handle map); /** * Retrieves the number of elements in a map. * - * @param map Map Handle. - * @return Number of elements in the trie. - * @error Invalid Handle. + * @param map Map Handle. + * @return Number of elements in the trie. + * @error Invalid Handle. */ native int GetTrieSize(Handle map); @@ -276,9 +278,9 @@ native int GetTrieSize(Handle map); * Creates a snapshot of all keys in the map. If the map is changed after this * call, the changes are not reflected in the snapshot. Keys are not sorted. * - * @param map Map Handle. - * @return New Map Snapshot Handle, which must be closed via CloseHandle(). - * @error Invalid Handle. + * @param map Map Handle. + * @return New Map Snapshot Handle, which must be closed via CloseHandle(). + * @error Invalid Handle. */ native Handle CreateTrieSnapshot(Handle map); @@ -287,9 +289,9 @@ native Handle CreateTrieSnapshot(Handle map); * different from the size of the map, since the map can change after the * snapshot of its keys was taken. * - * @param snapshot Map snapshot. - * @return Number of keys. - * @error Invalid Handle. + * @param snapshot Map snapshot. + * @return Number of keys. + * @error Invalid Handle. */ native int TrieSnapshotLength(Handle snapshot); @@ -297,21 +299,21 @@ native int TrieSnapshotLength(Handle snapshot); * Returns the buffer size required to store a given key. That is, it returns * the length of the key plus one. * - * @param snapshot Map snapshot. - * @param index Key index (starting from 0). - * @return Buffer size required to store the key string. - * @error Invalid Handle or index out of range. + * @param snapshot Map snapshot. + * @param index Key index (starting from 0). + * @return Buffer size required to store the key string. + * @error Invalid Handle or index out of range. */ native int TrieSnapshotKeyBufferSize(Handle snapshot, int index); /** * Retrieves the key string of a given key in a map snapshot. * - * @param snapshot Map snapshot. - * @param index Key index (starting from 0). - * @param buffer String buffer. - * @param maxlength Maximum buffer length. - * @return Number of bytes written to the buffer. - * @error Invalid Handle or index out of range. + * @param snapshot Map snapshot. + * @param index Key index (starting from 0). + * @param buffer String buffer. + * @param maxlength Maximum buffer length. + * @return Number of bytes written to the buffer. + * @error Invalid Handle or index out of range. */ native int GetTrieSnapshotKey(Handle snapshot, int index, char[] buffer, int maxlength); diff --git a/env/include/banning.inc b/env/include/banning.inc index 51a8022..e22f641 100644 --- a/env/include/banning.inc +++ b/env/include/banning.inc @@ -35,24 +35,24 @@ #endif #define _banning_included -#define BANFLAG_AUTO (1<<0) /**< Auto-detects whether to ban by steamid or IP */ -#define BANFLAG_IP (1<<1) /**< Always ban by IP address */ -#define BANFLAG_AUTHID (1<<2) /**< Always ban by authstring (for BanIdentity) if possible */ -#define BANFLAG_NOKICK (1<<3) /**< Does not kick the client */ +#define BANFLAG_AUTO (1<<0) /**< Auto-detects whether to ban by steamid or IP */ +#define BANFLAG_IP (1<<1) /**< Always ban by IP address */ +#define BANFLAG_AUTHID (1<<2) /**< Always ban by authstring (for BanIdentity) if possible */ +#define BANFLAG_NOKICK (1<<3) /**< Does not kick the client */ /** * Called for calls to BanClient() with a non-empty command. * - * @param client Client being banned. - * @param time Time the client is being banned for (0 = permanent). - * @param flags One if AUTHID or IP will be enabled. If AUTO is also - * enabled, it means Core autodetected which to use. - * @param reason Reason passed via BanClient(). - * @param kick_message Kick message passed via BanClient(). - * @param command Command string to identify the ban source. - * @param source Source value passed via BanClient(). - * @return Plugin_Handled to block the actual server banning. - * Kicking will still occur. + * @param client Client being banned. + * @param time Time the client is being banned for (0 = permanent). + * @param flags One if AUTHID or IP will be enabled. If AUTO is also + * enabled, it means Core autodetected which to use. + * @param reason Reason passed via BanClient(). + * @param kick_message Kick message passed via BanClient(). + * @param command Command string to identify the ban source. + * @param source Source value passed via BanClient(). + * @return Plugin_Handled to block the actual server banning. + * Kicking will still occur. */ forward Action OnBanClient(int client, int time, @@ -65,13 +65,13 @@ forward Action OnBanClient(int client, /** * Called for calls to BanIdentity() with a non-empty command. * - * @param identity Identity string being banned (authstring or ip). - * @param time Time the client is being banned for (0 = permanent). - * @param flags Ban flags (only IP or AUTHID are valid here). - * @param reason Reason passed via BanIdentity(). - * @param command Command string to identify the ban source. - * @param source Source value passed via BanIdentity(). - * @return Plugin_Handled to block the actual server banning. + * @param identity Identity string being banned (authstring or ip). + * @param time Time the client is being banned for (0 = permanent). + * @param flags Ban flags (only IP or AUTHID are valid here). + * @param reason Reason passed via BanIdentity(). + * @param command Command string to identify the ban source. + * @param source Source value passed via BanIdentity(). + * @return Plugin_Handled to block the actual server banning. */ forward Action OnBanIdentity(const char[] identity, int time, @@ -83,11 +83,11 @@ forward Action OnBanIdentity(const char[] identity, /** * Called for calls to RemoveBan() with a non-empty command. * - * @param identity Identity string being banned (authstring or ip). - * @param flags Ban flags (only IP or AUTHID are valid here). - * @param command Command string to identify the ban source. - * @param source Source value passed via BanIdentity(). - * @return Plugin_Handled to block the actual server banning. + * @param identity Identity string being banned (authstring or ip). + * @param flags Ban flags (only IP or AUTHID are valid here). + * @param command Command string to identify the ban source. + * @param source Source value passed via BanIdentity(). + * @return Plugin_Handled to block the actual unbanning. */ forward Action OnRemoveBan(const char[] identity, int flags, @@ -97,19 +97,19 @@ forward Action OnRemoveBan(const char[] identity, /** * Bans a client. * - * @param client Client being banned. - * @param time Time (in minutes) to ban (0 = permanent). - * @param flags Flags for controlling the ban mechanism. If AUTHID - * is set and no AUTHID is available, the ban will fail - * unless AUTO is also flagged. - * @param reason Reason to ban the client for. - * @param kick_message Message to display to the user when kicking. - * @param command Command string to identify the source. If this is left - * empty, then the OnBanClient forward will not be called. - * @param source A source value that could be interpreted as a player - * index of any sort (not actually checked by Core). - * @return True on success, false on failure. - * @error Invalid client index or client not in game. + * @param client Client being banned. + * @param time Time (in minutes) to ban (0 = permanent). + * @param flags Flags for controlling the ban mechanism. If AUTHID + * is set and no AUTHID is available, the ban will fail + * unless AUTO is also flagged. + * @param reason Reason to ban the client for. + * @param kick_message Message to display to the user when kicking. + * @param command Command string to identify the source. If this is left + * empty, then the OnBanClient forward will not be called. + * @param source A source value that could be interpreted as a player + * index of any sort (not actually checked by Core). + * @return True on success, false on failure. + * @error Invalid client index or client not in game. */ native bool BanClient(int client, int time, @@ -122,15 +122,15 @@ native bool BanClient(int client, /** * Bans an identity (either an IP address or auth string). * - * @param identity String to ban (ip or authstring). - * @param time Time to ban for (0 = permanent). - * @param flags Flags (only IP and AUTHID are valid flags here). - * @param reason Ban reason string. - * @param command Command string to identify the source. If this is left - * empty, then the OnBanIdentity forward will not be called. - * @param source A source value that could be interpreted as a player - * index of any sort (not actually checked by Core). - * @return True on success, false on failure. + * @param identity String to ban (ip or authstring). + * @param time Time to ban for (0 = permanent). + * @param flags Flags (only IP and AUTHID are valid flags here). + * @param reason Ban reason string. + * @param command Command string to identify the source. If this is left + * empty, then the OnBanIdentity forward will not be called. + * @param source A source value that could be interpreted as a player + * index of any sort (not actually checked by Core). + * @return True on success, false on failure. */ native bool BanIdentity(const char[] identity, int time, @@ -142,13 +142,13 @@ native bool BanIdentity(const char[] identity, /** * Removes a ban that was written to the server (either in memory or on disk). * - * @param identity String to unban (ip or authstring). - * @param flags Flags (only IP and AUTHID are valid flags here). - * @param command Command string to identify the source. If this is left - * empty, then OnRemoveBan will not be called. - * @param source A source value that could be interpreted as a player - * index of any sort (not actually checked by Core). - * @return True on success, false on failure. + * @param identity String to unban (ip or authstring). + * @param flags Flags (only IP and AUTHID are valid flags here). + * @param command Command string to identify the source. If this is left + * empty, then OnRemoveBan will not be called. + * @param source A source value that could be interpreted as a player + * index of any sort (not actually checked by Core). + * @return True on success, false on failure. */ native bool RemoveBan(const char[] identity, int flags, diff --git a/env/include/basecomm.inc b/env/include/basecomm.inc index 7e5ee2c..7b7a4c7 100644 --- a/env/include/basecomm.inc +++ b/env/include/basecomm.inc @@ -38,50 +38,50 @@ /** * Called when a client is muted or unmuted * - * @param client Client index - * @param muteState True if client was muted, false otherwise + * @param client Client index + * @param muteState True if client was muted, false otherwise */ - forward void BaseComm_OnClientMute(int client, bool muteState); +forward void BaseComm_OnClientMute(int client, bool muteState); /** * Called when a client is gagged or ungagged * - * @param client Client index - * @param gagState True if client was gaged, false otherwise + * @param client Client index + * @param gagState True if client was gaged, false otherwise */ - forward void BaseComm_OnClientGag(int client, bool gagState); +forward void BaseComm_OnClientGag(int client, bool gagState); /** * Returns whether or not a client is gagged * - * @param client Client index. - * @return True if client is gagged, false otherwise. + * @param client Client index. + * @return True if client is gagged, false otherwise. */ native bool BaseComm_IsClientGagged(int client); /** * Returns whether or not a client is muted * - * @param client Client index. - * @return True if client is muted, false otherwise. + * @param client Client index. + * @return True if client is muted, false otherwise. */ native bool BaseComm_IsClientMuted(int client); /** * Sets a client's gag state * - * @param client Client index. - * @param gagState True to gag client, false to ungag. - * @return True if this caused a change in gag state, false otherwise. + * @param client Client index. + * @param gagState True to gag client, false to ungag. + * @return True if this caused a change in gag state, false otherwise. */ native bool BaseComm_SetClientGag(int client, bool gagState); /** * Sets a client's mute state * - * @param client Client index. - * @param muteState True to mute client, false to unmute. - * @return True if this caused a change in mute state, false otherwise. + * @param client Client index. + * @param muteState True to mute client, false to unmute. + * @return True if this caused a change in mute state, false otherwise. */ native bool BaseComm_SetClientMute(int client, bool muteState); diff --git a/env/include/bitbuffer.inc b/env/include/bitbuffer.inc index 60a3fe9..635958b 100644 --- a/env/include/bitbuffer.inc +++ b/env/include/bitbuffer.inc @@ -200,72 +200,72 @@ methodmap BfRead < Handle /** * Writes a single bit to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param bit Bit to write (true for 1, false for 0). - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param bit Bit to write (true for 1, false for 0). + * @error Invalid or incorrect Handle. */ native void BfWriteBool(Handle bf, bool bit); /** * Writes a byte to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param byte Byte to write (value will be written as 8bit). - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param byte Byte to write (value will be written as 8bit). + * @error Invalid or incorrect Handle. */ native void BfWriteByte(Handle bf, int byte); /** * Writes a byte to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param chr Character to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param chr Character to write. + * @error Invalid or incorrect Handle. */ native void BfWriteChar(Handle bf, int chr); /** * Writes a 16bit integer to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param num Integer to write (value will be written as 16bit). - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param num Integer to write (value will be written as 16bit). + * @error Invalid or incorrect Handle. */ native void BfWriteShort(Handle bf, int num); /** * Writes a 16bit unsigned integer to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param num Integer to write (value will be written as 16bit). - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param num Integer to write (value will be written as 16bit). + * @error Invalid or incorrect Handle. */ native void BfWriteWord(Handle bf, int num); /** * Writes a normal integer to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param num Integer to write (value will be written as 32bit). - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param num Integer to write (value will be written as 32bit). + * @error Invalid or incorrect Handle. */ native void BfWriteNum(Handle bf, int num); /** * Writes a floating point number to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param num Number to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param num Number to write. + * @error Invalid or incorrect Handle. */ native void BfWriteFloat(Handle bf, float num); /** * Writes a string to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param string Text string to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param string Text string to write. + * @error Invalid or incorrect Handle. */ native void BfWriteString(Handle bf, const char[] string); @@ -273,134 +273,134 @@ native void BfWriteString(Handle bf, const char[] string); * Writes an entity to a writable bitbuffer (bf_write). * @note This is a wrapper around BfWriteShort(). * - * @param bf bf_write handle to write to. - * @param ent Entity index to write. - * @error Invalid or incorrect Handle, or invalid entity. + * @param bf bf_write handle to write to. + * @param ent Entity index to write. + * @error Invalid or incorrect Handle, or invalid entity. */ native void BfWriteEntity(Handle bf, int ent); /** * Writes a bit angle to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param angle Angle to write. - * @param numBits Optional number of bits to use. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param angle Angle to write. + * @param numBits Optional number of bits to use. + * @error Invalid or incorrect Handle. */ native void BfWriteAngle(Handle bf, float angle, int numBits=8); /** * Writes a coordinate to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param coord Coordinate to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param coord Coordinate to write. + * @error Invalid or incorrect Handle. */ native void BfWriteCoord(Handle bf, float coord); /** * Writes a 3D vector of coordinates to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param coord Coordinate array to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param coord Coordinate array to write. + * @error Invalid or incorrect Handle. */ native void BfWriteVecCoord(Handle bf, float coord[3]); /** * Writes a 3D normal vector to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param vec Vector to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param vec Vector to write. + * @error Invalid or incorrect Handle. */ native void BfWriteVecNormal(Handle bf, float vec[3]); /** * Writes a 3D angle vector to a writable bitbuffer (bf_write). * - * @param bf bf_write handle to write to. - * @param angles Angle vector to write. - * @error Invalid or incorrect Handle. + * @param bf bf_write handle to write to. + * @param angles Angle vector to write. + * @error Invalid or incorrect Handle. */ native void BfWriteAngles(Handle bf, float angles[3]); /** * Reads a single bit from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Bit value read. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Bit value read. + * @error Invalid or incorrect Handle. */ native bool BfReadBool(Handle bf); /** * Reads a byte from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Byte value read (read as 8bit). - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Byte value read (read as 8bit). + * @error Invalid or incorrect Handle. */ native int BfReadByte(Handle bf); /** * Reads a character from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Character value read. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Character value read. + * @error Invalid or incorrect Handle. */ native int BfReadChar(Handle bf); /** * Reads a 16bit integer from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Integer value read (read as 16bit). - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Integer value read (read as 16bit). + * @error Invalid or incorrect Handle. */ native int BfReadShort(Handle bf); /** * Reads a 16bit unsigned integer from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Integer value read (read as 16bit). - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Integer value read (read as 16bit). + * @error Invalid or incorrect Handle. */ native int BfReadWord(Handle bf); /** * Reads a normal integer to a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Integer value read (read as 32bit). - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Integer value read (read as 32bit). + * @error Invalid or incorrect Handle. */ native int BfReadNum(Handle bf); /** * Reads a floating point number from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Floating point value read. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Floating point value read. + * @error Invalid or incorrect Handle. */ native float BfReadFloat(Handle bf); /** * Reads a string from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param line If true the buffer will be copied until it reaches a '\n' or a null terminator. - * @return Number of bytes written to the buffer. If the bitbuffer stream overflowed, - * that is, had no terminator before the end of the stream, then a negative - * number will be returned equal to the number of characters written to the - * buffer minus 1. The buffer will be null terminated regardless of the - * return value. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param line If true the buffer will be copied until it reaches a '\n' or a null terminator. + * @return Number of bytes written to the buffer. If the bitbuffer stream overflowed, + * that is, had no terminator before the end of the stream, then a negative + * number will be returned equal to the number of characters written to the + * buffer minus 1. The buffer will be null terminated regardless of the + * return value. + * @error Invalid or incorrect Handle. */ native int BfReadString(Handle bf, char[] buffer, int maxlength, bool line=false); @@ -408,63 +408,63 @@ native int BfReadString(Handle bf, char[] buffer, int maxlength, bool line=false * Reads an entity from a readable bitbuffer (bf_read). * @note This is a wrapper around BfReadShort(). * - * @param bf bf_read handle to read from. - * @return Entity index read. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Entity index read. + * @error Invalid or incorrect Handle. */ native int BfReadEntity(Handle bf); /** * Reads a bit angle from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @param numBits Optional number of bits to use. - * @return Angle read. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @param numBits Optional number of bits to use. + * @return Angle read. + * @error Invalid or incorrect Handle. */ native float BfReadAngle(Handle bf, int numBits=8); /** * Reads a coordinate from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Coordinate read. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Coordinate read. + * @error Invalid or incorrect Handle. */ native float BfReadCoord(Handle bf); /** * Reads a 3D vector of coordinates from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @param coord Destination coordinate array. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @param coord Destination coordinate array. + * @error Invalid or incorrect Handle. */ native void BfReadVecCoord(Handle bf, float coord[3]); /** * Reads a 3D normal vector from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @param vec Destination vector array. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @param vec Destination vector array. + * @error Invalid or incorrect Handle. */ native void BfReadVecNormal(Handle bf, float vec[3]); /** * Reads a 3D angle vector from a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @param angles Destination angle vector. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @param angles Destination angle vector. + * @error Invalid or incorrect Handle. */ native void BfReadAngles(Handle bf, float angles[3]); /** * Returns the number of bytes left in a readable bitbuffer (bf_read). * - * @param bf bf_read handle to read from. - * @return Number of bytes left unread. - * @error Invalid or incorrect Handle. + * @param bf bf_read handle to read from. + * @return Number of bytes left unread. + * @error Invalid or incorrect Handle. */ native int BfGetNumBytesLeft(Handle bf); diff --git a/env/include/clientprefs.inc b/env/include/clientprefs.inc index a5de7b0..218d033 100644 --- a/env/include/clientprefs.inc +++ b/env/include/clientprefs.inc @@ -40,9 +40,9 @@ */ enum CookieAccess { - CookieAccess_Public, /**< Visible and Changeable by users */ - CookieAccess_Protected, /**< Read only to users */ - CookieAccess_Private, /**< Completely hidden cookie */ + CookieAccess_Public, /**< Visible and Changeable by users */ + CookieAccess_Protected, /**< Read only to users */ + CookieAccess_Private /**< Completely hidden cookie */ }; /** @@ -50,10 +50,10 @@ enum CookieAccess */ enum CookieMenu { - CookieMenu_YesNo, /**< Yes/No menu with "yes"/"no" results saved into the cookie */ - CookieMenu_YesNo_Int, /**< Yes/No menu with 1/0 saved into the cookie */ - CookieMenu_OnOff, /**< On/Off menu with "on"/"off" results saved into the cookie */ - CookieMenu_OnOff_Int, /**< On/Off menu with 1/0 saved into the cookie */ + CookieMenu_YesNo, /**< Yes/No menu with "yes"/"no" results saved into the cookie */ + CookieMenu_YesNo_Int, /**< Yes/No menu with 1/0 saved into the cookie */ + CookieMenu_OnOff, /**< On/Off menu with "on"/"off" results saved into the cookie */ + CookieMenu_OnOff_Int /**< On/Off menu with 1/0 saved into the cookie */ }; enum CookieMenuAction @@ -71,98 +71,17 @@ enum CookieMenuAction * * INPUT : Client index and any data if available. */ - CookieMenuAction_SelectOption = 1, + CookieMenuAction_SelectOption = 1 }; -/** - * Note: - * - * A successful return value/result on any client prefs native only guarantees that the local cache has been updated. - * Database connection problems can still prevent the data from being permanently saved. Connection problems will be logged as - * errors by the clientprefs extension. - */ - -/** - * Creates a new Client preference cookie. - * - * Handles returned by RegClientCookie can be closed via CloseHandle() when - * no longer needed. - * - * @param name Name of the new preference cookie. - * @param description Optional description of the preference cookie. - * @param access What CookieAccess level to assign to this cookie. - * @return A handle to the newly created cookie. If the cookie already - * exists, a handle to it will still be returned. - * @error Cookie name is blank. - */ -native Handle RegClientCookie(const char[] name, const char[] description, CookieAccess access); - -/** - * Searches for a Client preference cookie. - * - * Handles returned by FindClientCookie can be closed via CloseHandle() when - * no longer needed. - * - * @param name Name of cookie to find. - * @return A handle to the cookie if it is found. INVALID_HANDLE otherwise. - */ -native Handle FindClientCookie(const char[] name); - -/** - * Set the value of a Client preference cookie. - * - * @param client Client index. - * @param cookie Client preference cookie handle. - * @param value String value to set. - * @error Invalid cookie handle or invalid client index. - */ -native void SetClientCookie(int client, Handle cookie, const char[] value); - -/** - * Retrieve the value of a Client preference cookie. - * - * @param client Client index. - * @param cookie Client preference cookie handle. - * @param buffer Copyback buffer for value. - * @param maxlen Maximum length of the buffer. - * @error Invalid cookie handle or invalid client index. - */ -native void GetClientCookie(int client, Handle cookie, char[] buffer, int maxlen); - -/** - * Sets the value of a Client preference cookie based on an authID string. - * - * @param authID String Auth/STEAM ID of player to set. - * @param cookie Client preference cookie handle. - * @param value String value to set. - * @error Invalid cookie handle. - */ -native void SetAuthIdCookie(const char[] authID, Handle cookie, const char[] value); - -/** - * Checks if a clients cookies have been loaded from the database. - * - * @param client Client index. - * @return True if loaded, false otherwise. - * @error Invalid client index. - */ -native bool AreClientCookiesCached(int client); - -/** - * Called once a client's saved cookies have been loaded from the database. - * - * @param client Client index. - */ -forward void OnClientCookiesCached(int client); - /** * Cookie Menu Callback prototype * - * @param client Client index. - * @param action CookieMenuAction being performed. - * @param info Info data passed. - * @param buffer Outbut buffer. - * @param maxlen Max length of the output buffer. + * @param client Client index. + * @param action CookieMenuAction being performed. + * @param info Info data passed. + * @param buffer Outbut buffer. + * @param maxlen Max length of the output buffer. */ typedef CookieMenuHandler = function void ( int client, @@ -172,17 +91,169 @@ typedef CookieMenuHandler = function void ( int maxlen ); +/** + * Note: + * + * A successful return value/result on any client prefs native only guarantees that the local cache has been updated. + * Database connection problems can still prevent the data from being permanently saved. Connection problems will be logged as + * errors by the clientprefs extension. + */ + +methodmap Cookie < Handle { + // Creates a new Client preference cookie. + // + // Handles returned can be closed via CloseHandle() when + // no longer needed. + // + // @param name Name of the new preference cookie. + // @param description Optional description of the preference cookie. + // @param access What CookieAccess level to assign to this cookie. + // @return A handle to the newly created cookie. If the cookie already + // exists, a handle to it will still be returned. + // @error Cookie name is blank. + public native Cookie(const char[] name, const char[] description, CookieAccess access); + + // Searches for a Client preference cookie. + // + // Handles returned by Cookie.Find can be closed via CloseHandle() when + // no longer needed. + // + // @param name Name of cookie to find. + // @return A handle to the cookie if it is found. INVALID_HANDLE otherwise. + public static native Cookie Find(const char[] name); + + // Set the value of a Client preference cookie. + // + // @param client Client index. + // @param value String value to set. + // @error Invalid cookie handle or invalid client index. + public native void Set(int client, const char[] value); + + // Retrieve the value of a Client preference cookie. + // + // @param client Client index. + // @param buffer Copyback buffer for value. + // @param maxlen Maximum length of the buffer. + // @error Invalid cookie handle or invalid client index. + public native void Get(int client, char[] buffer, int maxlen); + + // Sets the value of a Client preference cookie based on an authID string. + // + // @param authID String Auth/STEAM ID of player to set. + // @param value String value to set. + // @error Invalid cookie handle. + public native void SetByAuthId(const char[] authID, const char[] value); + + // Add a new prefab item to the client cookie settings menu. + // + // Note: This handles everything automatically and does not require a callback + // + // @param type A CookieMenu prefab menu type. + // @param display Text to show on the menu. + // @param handler Optional handler callback for translations and output on selection + // @param info Info data to pass to the callback. + // @error Invalid cookie handle. + public native void SetPrefabMenu(CookieMenu type, const char[] display, CookieMenuHandler handler=INVALID_FUNCTION, any info=0); + + // Returns the last updated timestamp for a client cookie + // + // @param client Client index. + // @return Last updated timestamp. + public native int GetClientTime(int client); + + // Returns the access level of a cookie + // + // @return CookieAccess access level. + // @error Invalid cookie handle. + property CookieAccess AccessLevel { + public native get(); + } +}; + +/** + * Creates a new Client preference cookie. + * + * Handles returned by RegClientCookie can be closed via CloseHandle() when + * no longer needed. + * + * @param name Name of the new preference cookie. + * @param description Optional description of the preference cookie. + * @param access What CookieAccess level to assign to this cookie. + * @return A handle to the newly created cookie. If the cookie already + * exists, a handle to it will still be returned. + * @error Cookie name is blank. + */ +native Handle RegClientCookie(const char[] name, const char[] description, CookieAccess access); + +/** + * Searches for a Client preference cookie. + * + * Handles returned by FindClientCookie can be closed via CloseHandle() when + * no longer needed. + * + * @param name Name of cookie to find. + * @return A handle to the cookie if it is found. INVALID_HANDLE otherwise. + */ +native Handle FindClientCookie(const char[] name); + +/** + * Set the value of a Client preference cookie. + * + * @param client Client index. + * @param cookie Client preference cookie handle. + * @param value String value to set. + * @error Invalid cookie handle or invalid client index. + */ +native void SetClientCookie(int client, Handle cookie, const char[] value); + +/** + * Retrieve the value of a Client preference cookie. + * + * @param client Client index. + * @param cookie Client preference cookie handle. + * @param buffer Copyback buffer for value. + * @param maxlen Maximum length of the buffer. + * @error Invalid cookie handle or invalid client index. + */ +native void GetClientCookie(int client, Handle cookie, char[] buffer, int maxlen); + +/** + * Sets the value of a Client preference cookie based on an authID string. + * + * @param authID String Auth/STEAM ID of player to set. + * @param cookie Client preference cookie handle. + * @param value String value to set. + * @error Invalid cookie handle. + */ +native void SetAuthIdCookie(const char[] authID, Handle cookie, const char[] value); + +/** + * Checks if a clients cookies have been loaded from the database. + * + * @param client Client index. + * @return True if loaded, false otherwise. + * @error Invalid client index. + */ +native bool AreClientCookiesCached(int client); + +/** + * Called once a client's saved cookies have been loaded from the database. + * + * @param client Client index. + */ +forward void OnClientCookiesCached(int client); + /** * Add a new prefab item to the client cookie settings menu. * * Note: This handles everything automatically and does not require a callback * - * @param cookie Client preference cookie handle. - * @param type A CookieMenu prefab menu type. - * @param display Text to show on the menu. - * @param handler Optional handler callback for translations and output on selection - * @param info Info data to pass to the callback. - * @error Invalid cookie handle. + * @param cookie Client preference cookie handle. + * @param type A CookieMenu prefab menu type. + * @param display Text to show on the menu. + * @param handler Optional handler callback for translations and output on selection + * @param info Info data to pass to the callback. + * @error Invalid cookie handle. */ native void SetCookiePrefabMenu(Handle cookie, CookieMenu type, const char[] display, CookieMenuHandler handler=INVALID_FUNCTION, any info=0); @@ -191,37 +262,37 @@ native void SetCookiePrefabMenu(Handle cookie, CookieMenu type, const char[] dis * * Note: This only adds the top level menu item. You need to handle any submenus from the callback. * - * @param handler A MenuHandler callback function. - * @param info Data to pass to the callback. - * @param display Text to show on the menu. - * @error Invalid cookie handle. + * @param handler A MenuHandler callback function. + * @param info Data to pass to the callback. + * @param display Text to show on the menu. + * @error Invalid cookie handle. */ native void SetCookieMenuItem(CookieMenuHandler handler, any info, const char[] display); /** * Displays the settings menu to a client. * - * @param client Client index. + * @param client Client index. */ native void ShowCookieMenu(int client); /** * Gets a cookie iterator. Must be freed with CloseHandle(). * - * @return A new cookie iterator. + * @return A new cookie iterator. */ native Handle GetCookieIterator(); /** * Reads a cookie iterator, then advances to the next cookie if any. * - * @param iter Cookie iterator Handle. - * @param name Name buffer. - * @param nameLen Name buffer size. - * @param access Access level of the cookie. - * @param desc Cookie description buffer. - * @param descLen Cookie description buffer size. - * @return True on success, false if there are no more commands. + * @param iter Cookie iterator Handle. + * @param name Name buffer. + * @param nameLen Name buffer size. + * @param access Access level of the cookie. + * @param desc Cookie description buffer. + * @param descLen Cookie description buffer size. + * @return True on success, false if there are no more commands. */ native bool ReadCookieIterator(Handle iter, char[] name, @@ -229,22 +300,22 @@ native bool ReadCookieIterator(Handle iter, CookieAccess &access, char[] desc="", int descLen=0); - + /** * Returns the access level of a cookie * - * @param cookie Client preference cookie handle. - * @return CookieAccess access level. - * @error Invalid cookie handle. + * @param cookie Client preference cookie handle. + * @return CookieAccess access level. + * @error Invalid cookie handle. */ native CookieAccess GetCookieAccess(Handle cookie); /** * Returns the last updated timestamp for a client cookie * - * @param client Client index. - * @param cookie Cookie handle. - * @return Last updated timestamp. + * @param client Client index. + * @param cookie Cookie handle. + * @return Last updated timestamp. */ native int GetClientCookieTime(int client, Handle cookie); @@ -270,6 +341,7 @@ public void __ext_cprefs_SetNTVOptional() MarkNativeAsOptional("FindClientCookie"); MarkNativeAsOptional("SetClientCookie"); MarkNativeAsOptional("GetClientCookie"); + MarkNativeAsOptional("SetAuthIdCookie"); MarkNativeAsOptional("AreClientCookiesCached"); MarkNativeAsOptional("SetCookiePrefabMenu"); MarkNativeAsOptional("SetCookieMenuItem"); @@ -278,5 +350,14 @@ public void __ext_cprefs_SetNTVOptional() MarkNativeAsOptional("ReadCookieIterator"); MarkNativeAsOptional("GetCookieAccess"); MarkNativeAsOptional("GetClientCookieTime"); + + MarkNativeAsOptional("Cookie.Cookie"); + MarkNativeAsOptional("Cookie.Find"); + MarkNativeAsOptional("Cookie.Set"); + MarkNativeAsOptional("Cookie.Get"); + MarkNativeAsOptional("Cookie.SetByAuthId"); + MarkNativeAsOptional("Cookie.SetPrefabMenu"); + MarkNativeAsOptional("Cookie.GetClientTime"); + MarkNativeAsOptional("Cookie.AccessLevel.get"); } #endif diff --git a/env/include/clients.inc b/env/include/clients.inc index a237906..895c5aa 100644 --- a/env/include/clients.inc +++ b/env/include/clients.inc @@ -40,9 +40,9 @@ */ enum NetFlow { - NetFlow_Outgoing = 0, /**< Outgoing traffic */ - NetFlow_Incoming, /**< Incoming traffic */ - NetFlow_Both, /**< Both values added together */ + NetFlow_Outgoing = 0, /**< Outgoing traffic */ + NetFlow_Incoming, /**< Incoming traffic */ + NetFlow_Both /**< Both values added together */ }; /** @@ -61,7 +61,7 @@ enum AuthIdType // The following are only available on games that support Steam authentication. AuthId_Steam2, /**< Steam2 rendered format, ex "STEAM_1:1:4153990" */ AuthId_Steam3, /**< Steam3 rendered format, ex "[U:1:8307981]" */ - AuthId_SteamID64, /**< A SteamID64 (uint64) as a String, ex "76561197968573709" */ + AuthId_SteamID64 /**< A SteamID64 (uint64) as a String, ex "76561197968573709" */ }; /** @@ -69,10 +69,10 @@ enum AuthIdType * MAXPLAYERS is a hardcoded value as an upper limit. MaxClients changes based on the server. */ -#define MAXPLAYERS 65 /**< Maximum number of players SourceMod supports */ -#define MAX_NAME_LENGTH 32 /**< Maximum buffer required to store a client name */ +#define MAXPLAYERS 65 /**< Maximum number of players SourceMod supports */ +#define MAX_NAME_LENGTH 128 /**< Maximum buffer required to store a client name */ -public const int MaxClients; /**< Maximum number of players the server supports (dynamic) */ +public const int MaxClients; /**< Maximum number of players the server supports (dynamic) */ /** * Called on client connection. If you return true, the client will be allowed in the server. @@ -83,17 +83,17 @@ public const int MaxClients; /**< Maximum number of players the server supports * to the string buffer, it is not defined which plugin's string will be shown to the client, * but it is guaranteed one of them will. * - * @param client Client index. - * @param rejectmsg Buffer to store the rejection message when the connection is refused. - * @param maxlen Maximum number of characters for rejection buffer. - * @return True to validate client's connection, false to refuse it. + * @param client Client index. + * @param rejectmsg Buffer to store the rejection message when the connection is refused. + * @param maxlen Maximum number of characters for rejection buffer. + * @return True to validate client's connection, false to refuse it. */ forward bool OnClientConnect(int client, char[] rejectmsg, int maxlen); /** * Called once a client successfully connects. This callback is paired with OnClientDisconnect. * - * @param client Client index. + * @param client Client index. */ forward void OnClientConnected(int client); @@ -108,21 +108,21 @@ forward void OnClientConnected(int client); * GetClientCount() will include clients as they are passed through this * function, as clients are already in game at this point. * - * @param client Client index. + * @param client Client index. */ forward void OnClientPutInServer(int client); /** * Called when a client is disconnecting from the server. * - * @param client Client index. + * @param client Client index. */ forward void OnClientDisconnect(int client); /** * Called when a client is disconnected from the server. * - * @param client Client index. + * @param client Client index. */ forward void OnClientDisconnect_Post(int client); @@ -132,39 +132,39 @@ forward void OnClientDisconnect_Post(int client); * As of SourceMod 1.3, the client is guaranteed to be in-game. * Use command listeners (console.inc) for more advanced hooks. * - * @param client Client index. - * @param args Number of arguments. - * @return Plugin_Handled blocks the command from being sent, - * and Plugin_Continue resumes normal functionality. + * @param client Client index. + * @param args Number of arguments. + * @return Plugin_Handled blocks the command from being sent, + * and Plugin_Continue resumes normal functionality. */ forward Action OnClientCommand(int client, int args); /** * Called when a client is sending a KeyValues command. * - * @param client Client index. - * @param kv Editable KeyValues data to be sent as the command. - * (This handle should not be stored and will be closed - * after this forward completes.) - * @return Plugin_Handled blocks the command from being sent, - * and Plugin_Continue resumes normal functionality. + * @param client Client index. + * @param kv Editable KeyValues data to be sent as the command. + * (This handle should not be stored and will be closed + * after this forward completes.) + * @return Plugin_Handled blocks the command from being sent, + * and Plugin_Continue resumes normal functionality. */ forward Action OnClientCommandKeyValues(int client, KeyValues kv); /** * Called after a client has sent a KeyValues command. * - * @param client Client index. - * @param kv KeyValues data sent as the command. - * (This handle should not be stored and will be closed - * after this forward completes.) + * @param client Client index. + * @param kv KeyValues data sent as the command. + * (This handle should not be stored and will be closed + * after this forward completes.) */ forward void OnClientCommandKeyValues_Post(int client, KeyValues kv); /** * Called whenever the client's settings are changed. * - * @param client Client index. + * @param client Client index. */ forward void OnClientSettingsChanged(int client); @@ -175,8 +175,8 @@ forward void OnClientSettingsChanged(int client); * * This is called by bots, but the ID will be "BOT". * - * @param client Client index. - * @param auth Client Steam2 id, if available, else engine auth id. + * @param client Client index. + * @param auth Client Steam2 id, if available, else engine auth id. */ forward void OnClientAuthorized(int client, const char[] auth); @@ -193,8 +193,8 @@ forward void OnClientAuthorized(int client, const char[] auth); * This callback is guaranteed to occur on all clients, and always * after each OnClientPutInServer() call. * - * @param client Client index. - * @return Plugin_Handled to block admin checks. + * @param client Client index. + * @return Plugin_Handled to block admin checks. */ forward Action OnClientPreAdminCheck(int client); @@ -210,7 +210,7 @@ forward Action OnClientPreAdminCheck(int client); * * See OnClientPostAdminCheck() for more information. * - * @param client Client index. + * @param client Client index. */ forward void OnClientPostAdminFilter(int client); @@ -221,12 +221,12 @@ forward void OnClientPostAdminFilter(int client); * This callback is guaranteed to occur on all clients, and always * after each OnClientPutInServer() call. * - * @param client Client index. + * @param client Client index. */ forward void OnClientPostAdminCheck(int client); /** - * This function will be deprecated in a future release. Use the MaxClients variable instead. + * This function is deprecated. Use the MaxClients variable instead. * * Returns the maximum number of clients allowed on the server. This may * return 0 if called before OnMapStart(), and thus should not be called @@ -236,8 +236,10 @@ forward void OnClientPostAdminCheck(int client); * SourceTV or TF2's arena mode. Use the "MaxClients" dynamic variable documented at the * top of this file. * - * @return Maximum number of clients allowed. + * @return Maximum number of clients allowed. + * @deprecated Use MaxClients variable instead. */ +#pragma deprecated Use MaxClients variable instead. native int GetMaxClients(); /** @@ -251,52 +253,53 @@ native int GetMaxClients(); * You should not globally cache the value to GetMaxHumanPlayers() because it can change across * game modes. You may still cache it locally. * - * @return Maximum number of humans allowed. + * @return Maximum number of humans allowed. */ native int GetMaxHumanPlayers(); /** * Returns the client count put in the server. * - * @param inGameOnly If false connecting players are also counted. - * @return Client count in the server. + * @param inGameOnly If false connecting players are also counted. + * @return Client count in the server. */ native int GetClientCount(bool inGameOnly=true); /** * Returns the client's name. * - * @param client Player index. - * @param name Buffer to store the client's name. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @return True on success, false otherwise. - * @error If the client is not connected an error will be thrown. + * @param client Player index. + * @param name Buffer to store the client's name. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @return True on success, false otherwise. + * @error If the client is not connected an error will be thrown. */ native bool GetClientName(int client, char[] name, int maxlen); /** * Retrieves a client's IP address. * - * @param client Player index. - * @param ip Buffer to store the client's ip address. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @param remport Remove client's port from the ip string (true by default). - * @return True on success, false otherwise. - * @error If the client is not connected or the index is invalid. + * @param client Player index. + * @param ip Buffer to store the client's ip address. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @param remport Remove client's port from the ip string (true by default). + * @return True on success, false otherwise. + * @error If the client is not connected or the index is invalid. */ native bool GetClientIP(int client, char[] ip, int maxlen, bool remport=true); /** * Retrieves a client's authentication string (SteamID). * - * @param client Player index. - * @param auth Buffer to store the client's auth string. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @param validate Check backend validation status. - * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, - * You WILL KNOW if you need to use this, MOST WILL NOT. - * @return True on success, false otherwise. - * @error If the client is not connected or the index is invalid. + * @param client Player index. + * @param auth Buffer to store the client's auth string. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @param validate Check backend validation status. + * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, + * You WILL KNOW if you need to use this, MOST WILL NOT. + * @return True on success, false otherwise. + * @error If the client is not connected or the index is invalid. + * @deprecated Use GetClientAuthId */ #pragma deprecated Use GetClientAuthId native bool GetClientAuthString(int client, char[] auth, int maxlen, bool validate=true); @@ -304,27 +307,28 @@ native bool GetClientAuthString(int client, char[] auth, int maxlen, bool valida /** * Retrieves a client's authentication string (SteamID). * - * @param client Player index. - * @param authType Auth id type and format to use. - * @param auth Buffer to store the client's auth id. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @param validate Check backend validation status. - * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, - * You WILL KNOW if you need to use this, MOST WILL NOT. - * @return True on success, false otherwise. - * @error If the client is not connected or the index is invalid. + * @param client Player index. + * @param authType Auth id type and format to use. + * @param auth Buffer to store the client's auth id. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @param validate Check backend validation status. + * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, + * You WILL KNOW if you need to use this, MOST WILL NOT. + * @return True on success, false otherwise. + * @error If the client is not connected or the index is invalid. */ native bool GetClientAuthId(int client, AuthIdType authType, char[] auth, int maxlen, bool validate=true); /** - * Returns the client's Steam account ID. + * Returns the client's Steam account ID, a number uniquely identifying a given Steam account. + * This number is the basis for the various display SteamID forms, see the AuthIdType enum for examples. * - * @param client Client Index. - * @param validate Check backend validation status. - * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, - * You WILL KNOW if you need to use this, MOST WILL NOT. - * @return Steam account ID or 0 if not available. - * @error If the client is not connected or the index is invalid. + * @param client Client Index. + * @param validate Check backend validation status. + * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES, + * You WILL KNOW if you need to use this, MOST WILL NOT. + * @return Steam account ID or 0 if not available. + * @error If the client is not connected or the index is invalid. */ native int GetSteamAccountID(int client, bool validate=true); @@ -332,26 +336,26 @@ native int GetSteamAccountID(int client, bool validate=true); * Retrieves a client's user id, which is an index incremented for every client * that joins the server. * - * @param client Player index. - * @return User id of the client. - * @error If the client is not connected or the index is invalid. + * @param client Player index. + * @return User id of the client. + * @error If the client is not connected or the index is invalid. */ native int GetClientUserId(int client); /** * Returns if a certain player is connected. * - * @param client Player index. - * @return True if player is connected to the server, false otherwise. + * @param client Player index. + * @return True if player is connected to the server, false otherwise. */ native bool IsClientConnected(int client); /** * Returns if a certain player has entered the game. * - * @param client Player index (index does not have to be connected). - * @return True if player has entered the game, false otherwise. - * @error Invalid client index. + * @param client Player index (index does not have to be connected). + * @return True if player has entered the game, false otherwise. + * @error Invalid client index. */ native bool IsClientInGame(int client); @@ -359,15 +363,15 @@ native bool IsClientInGame(int client); * Returns if a client is in the "kick queue" (i.e. the client will be kicked * shortly and thus they should not appear as valid). * - * @param client Player index (must be connected). - * @return True if in the kick queue, false otherwise. - * @error Invalid client index. + * @param client Player index (must be connected). + * @return True if in the kick queue, false otherwise. + * @error Invalid client index. */ native bool IsClientInKickQueue(int client); /** * Backwards compatibility stock - use IsClientInGame - * @deprecated Renamed to IsClientInGame + * @deprecated Renamed to IsClientInGame */ #pragma deprecated Use IsClientInGame() instead stock bool IsPlayerInGame(int client) @@ -378,40 +382,40 @@ stock bool IsPlayerInGame(int client) /** * Returns if a certain player has been authenticated. * - * @param client Player index. - * @return True if player has been authenticated, false otherwise. + * @param client Player index. + * @return True if player has been authenticated, false otherwise. */ native bool IsClientAuthorized(int client); /** * Returns if a certain player is a fake client. * - * @param client Player index. - * @return True if player is a fake client, false otherwise. + * @param client Player index. + * @return True if player is a fake client, false otherwise. */ native bool IsFakeClient(int client); /** * Returns if a certain player is the SourceTV bot. * - * @param client Player index. - * @return True if player is the SourceTV bot, false otherwise. + * @param client Player index. + * @return True if player is the SourceTV bot, false otherwise. */ native bool IsClientSourceTV(int client); /** * Returns if a certain player is the Replay bot. * - * @param client Player index. - * @return True if player is the Replay bot, false otherwise. + * @param client Player index. + * @return True if player is the Replay bot, false otherwise. */ native bool IsClientReplay(int client); /** * Returns if a certain player is an observer/spectator. * - * @param client Player index. - * @return True if player is an observer, false otherwise. + * @param client Player index. + * @return True if player is an observer, false otherwise. */ native bool IsClientObserver(int client); @@ -420,49 +424,49 @@ native bool IsClientObserver(int client); * * Note: This function was originally in SDKTools and was moved to core. * - * @param client Player's index. - * @return True if the client is alive, false otherwise. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @return True if the client is alive, false otherwise. + * @error Invalid client index, client not in game, or no mod support. */ native bool IsPlayerAlive(int client); /** * Retrieves values from client replicated keys. * - * @param client Player's index. - * @param key Key string. - * @param value Buffer to store value. - * @param maxlen Maximum length of valve (UTF-8 safe). - * @return True on success, false otherwise. - * @error Invalid client index, or client not connected. + * @param client Player's index. + * @param key Key string. + * @param value Buffer to store value. + * @param maxlen Maximum length of valve (UTF-8 safe). + * @return True on success, false otherwise. + * @error Invalid client index, or client not connected. */ native bool GetClientInfo(int client, const char[] key, char[] value, int maxlen); /** * Retrieves a client's team index. * - * @param client Player's index. - * @return Team index the client is on (mod specific). - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @return Team index the client is on (mod specific). + * @error Invalid client index, client not in game, or no mod support. */ native int GetClientTeam(int client); /** * Sets a client's AdminId. * - * @param client Player's index. - * @param id AdminId to set. INVALID_ADMIN_ID removes admin permissions. - * @param temp True if the id should be freed on disconnect. - * @error Invalid client index, client not connected, or bogus AdminId. + * @param client Player's index. + * @param id AdminId to set. INVALID_ADMIN_ID removes admin permissions. + * @param temp True if the id should be freed on disconnect. + * @error Invalid client index, client not connected, or bogus AdminId. */ native void SetUserAdmin(int client, AdminId id, bool temp=false); /** * Retrieves a client's AdminId. * - * @param client Player's index. - * @return AdminId of the client, or INVALID_ADMIN_ID if none. - * @error Invalid client index, or client not connected. + * @param client Player's index. + * @return AdminId of the client, or INVALID_ADMIN_ID if none. + * @error Invalid client index, or client not connected. */ native AdminId GetUserAdmin(int client); @@ -470,9 +474,9 @@ native AdminId GetUserAdmin(int client); * Sets access flags on a client. If the client is not an admin, * a temporary, anonymous AdminId is given. * - * @param client Player's index. - * @param ... Flags to set on the client. - * @error Invalid client index, or client not connected. + * @param client Player's index. + * @param ... Flags to set on the client. + * @error Invalid client index, or client not connected. */ native void AddUserFlags(int client, AdminFlag ...); @@ -480,9 +484,9 @@ native void AddUserFlags(int client, AdminFlag ...); * Removes flags from a client. If the client is not an admin, * this has no effect. * - * @param client Player's index. - * @param ... Flags to remove from the client. - * @error Invalid client index, or client not connected. + * @param client Player's index. + * @param ... Flags to remove from the client. + * @error Invalid client index, or client not connected. */ native void RemoveUserFlags(int client, AdminFlag ...); @@ -490,8 +494,8 @@ native void RemoveUserFlags(int client, AdminFlag ...); * Sets access flags on a client using bits instead of flags. If the * client is not an admin, and flags not 0, a temporary, anonymous AdminId is given. * - * @param client Player's index. - * @param flags Bitstring of flags to set on client. + * @param client Player's index. + * @param flags Bitstring of flags to set on client. */ native void SetUserFlagBits(int client, int flags); @@ -499,9 +503,9 @@ native void SetUserFlagBits(int client, int flags); * Returns client access flags. If the client is not an admin, * the result is always 0. * - * @param client Player's index. - * @return Flags - * @error Invalid client index, or client not connected. + * @param client Player's index. + * @return Flags + * @error Invalid client index, or client not connected. */ native int GetUserFlagBits(int client); @@ -509,10 +513,10 @@ native int GetUserFlagBits(int client); * Returns whether a user can target another user. * This is a helper function for CanAdminTarget. * - * @param client Player's index. - * @param target Target player's index. - * @return True if target is targettable by the player, false otherwise. - * @error Invalid or unconnected player indexers. + * @param client Player's index. + * @param target Target player's index. + * @return True if target is targettable by the player, false otherwise. + * @error Invalid or unconnected player indexers. */ native bool CanUserTarget(int client, int target); @@ -522,9 +526,9 @@ native bool CanUserTarget(int client, int target); * * Note: This function is based on the internal cache only. * - * @param client Client index. - * @return True if access was changed, false if it did not. - * @error Invalid client index or client not in-game AND authorized. + * @param client Client index. + * @return True if access was changed, false if it did not. + * @error Invalid client index or client not in-game AND authorized. */ native bool RunAdminCacheChecks(int client); @@ -534,215 +538,224 @@ native bool RunAdminCacheChecks(int client); * * Note: This must be sent even if no admin id was assigned. * - * @param client Client index. - * @error Invalid client index or client not in-game AND authorized. + * @param client Client index. + * @error Invalid client index or client not in-game AND authorized. */ native void NotifyPostAdminCheck(int client); /** * Creates a fake client. * - * @param name Name to use. - * @return Client index on success, 0 otherwise. + * @param name Name to use. + * @return Client index on success, 0 otherwise. */ native int CreateFakeClient(const char[] name); /** * Sets a convar value on a fake client. * - * @param client Client index. - * @param cvar ConVar name. - * @param value ConVar value. - * @error Invalid client index, client not connected, - * or client not a fake client. + * @param client Client index. + * @param cvar ConVar name. + * @param value ConVar value. + * @error Invalid client index, client not connected, + * or client not a fake client. */ native void SetFakeClientConVar(int client, const char[] cvar, const char[] value); /** * Returns the client's health. * - * @param client Player's index. - * @return Health value. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @return Health value. + * @error Invalid client index, client not in game, or no mod support. */ native int GetClientHealth(int client); /** * Returns the client's model name. * - * @param client Player's index. - * @param model Buffer to store the client's model name. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param model Buffer to store the client's model name. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientModel(int client, char[] model, int maxlen); /** * Returns the client's weapon name. * - * @param client Player's index. - * @param weapon Buffer to store the client's weapon name. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param weapon Buffer to store the client's weapon name. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientWeapon(int client, char[] weapon, int maxlen); /** * Returns the client's max size vector. * - * @param client Player's index. - * @param vec Destination vector to store the client's max size. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param vec Destination vector to store the client's max size. + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientMaxs(int client, float vec[3]); /** * Returns the client's min size vector. * - * @param client Player's index. - * @param vec Destination vector to store the client's min size. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param vec Destination vector to store the client's min size. + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientMins(int client, float vec[3]); /** * Returns the client's position angle. * - * @param client Player's index. - * @param ang Destination vector to store the client's position angle. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param ang Destination vector to store the client's position angle. + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientAbsAngles(int client, float ang[3]); /** * Returns the client's origin vector. * - * @param client Player's index. - * @param vec Destination vector to store the client's origin vector. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param vec Destination vector to store the client's origin vector. + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientAbsOrigin(int client, float vec[3]); /** * Returns the client's armor. * - * @param client Player's index. - * @return Armor value. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @return Armor value. + * @error Invalid client index, client not in game, or no mod support. */ native int GetClientArmor(int client); /** * Returns the client's death count. * - * @param client Player's index. - * @return Death count. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @return Death count. + * @error Invalid client index, client not in game, or no mod support. */ native int GetClientDeaths(int client); /** * Returns the client's frag count. * - * @param client Player's index. - * @return Frag count. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @return Frag count. + * @error Invalid client index, client not in game, or no mod support. */ native int GetClientFrags(int client); /** * Returns the client's send data rate in bytes/sec. * - * @param client Player's index. - * @return Data rate. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @return Data rate. + * @error Invalid client index, client not connected, or fake client. */ native int GetClientDataRate(int client); /** * Returns if a client is timing out * - * @param client Player's index. - * @return True if client is timing out, false otherwise. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @return True if client is timing out, false otherwise. + * @error Invalid client index, client not connected, or fake client. */ native bool IsClientTimingOut(int client); /** * Returns the client's connection time in seconds. * - * @param client Player's index. - * @return Connection time. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @return Connection time. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientTime(int client); /** * Returns the client's current latency (RTT), more accurate than GetAvgLatency but jittering. * - * @param client Player's index. - * @param flow Traffic flowing direction. - * @return Latency, or -1 if network info is not available. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @param flow Traffic flowing direction. + * @return Latency, or -1 if network info is not available. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientLatency(int client, NetFlow flow); /** * Returns the client's average packet latency in seconds. * - * @param client Player's index. - * @param flow Traffic flowing direction. - * @return Latency, or -1 if network info is not available. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @param flow Traffic flowing direction. + * @return Latency, or -1 if network info is not available. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientAvgLatency(int client, NetFlow flow); /** * Returns the client's average packet loss, values go from 0 to 1 (for percentages). * - * @param client Player's index. - * @param flow Traffic flowing direction. - * @return Average packet loss, or -1 if network info is not available. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @param flow Traffic flowing direction. + * @return Average packet loss, or -1 if network info is not available. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientAvgLoss(int client, NetFlow flow); /** * Returns the client's average packet choke, values go from 0 to 1 (for percentages). * - * @param client Player's index. - * @param flow Traffic flowing direction. - * @return Average packet loss, or -1 if network info is not available. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @param flow Traffic flowing direction. + * @return Average packet loss, or -1 if network info is not available. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientAvgChoke(int client, NetFlow flow); /** * Returns the client's data flow in bytes/sec. * - * @param client Player's index. - * @param flow Traffic flowing direction. - * @return Data flow. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @param flow Traffic flowing direction. + * @return Data flow. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientAvgData(int client, NetFlow flow); /** * Returns the client's average packet frequency in packets/sec. * - * @param client Player's index. - * @param flow Traffic flowing direction. - * @return Packet frequency. - * @error Invalid client index, client not connected, or fake client. + * @param client Player's index. + * @param flow Traffic flowing direction. + * @return Packet frequency. + * @error Invalid client index, client not connected, or fake client. */ native float GetClientAvgPackets(int client, NetFlow flow); +/** + * Returns the client's baseserver IClient pointer. + * + * @param client Player's index. + * @return IClient address. + * @error Invalid client index, client not connected, or fake client. + */ +native Address GetClientIClient(int client); + /** * Translates an userid index to the real player index. * - * @param userid Userid value. - * @return Client value. - * @error Returns 0 if invalid userid. + * @param userid Userid value. + * @return Client value. + * @error Returns 0 if invalid userid. */ native int GetClientOfUserId(int userid); @@ -758,11 +771,11 @@ native int GetClientOfUserId(int userid); * * Note: IsClientInKickQueue() will return true before the kick occurs. * - * @param client Client index. - * @param format Optional formatting rules for disconnect reason. + * @param client Client index. + * @param format Optional formatting rules for disconnect reason. * Note that a period is automatically appended to the string by the engine. - * @param ... Variable number of format parameters. - * @error Invalid client index, or client not connected. + * @param ... Variable number of format parameters. + * @error Invalid client index, or client not connected. */ native void KickClient(int client, const char[] format="", any ...); @@ -773,11 +786,11 @@ native void KickClient(int client, const char[] format="", any ...); * doubt, create a short (0.1 second) timer to kick the client in the next * available frame. * - * @param client Client index. - * @param format Optional formatting rules for disconnect reason. + * @param client Client index. + * @param format Optional formatting rules for disconnect reason. * Note that a period is automatically appended to the string by the engine. - * @param ... Variable number of format parameters. - * @error Invalid client index, or client not connected. + * @param ... Variable number of format parameters. + * @error Invalid client index, or client not connected. */ native void KickClientEx(int client, const char[] format="", any ...); @@ -785,26 +798,26 @@ native void KickClientEx(int client, const char[] format="", any ...); * Changes a client's team through the mod's generic team changing function. * On CS:S, this will kill the player. * - * @param client Client index. - * @param team Mod-specific team index. - * @error Invalid client index, client not connected, or lack of - * mod support. + * @param client Client index. + * @param team Mod-specific team index. + * @error Invalid client index, client not connected, or lack of + * mod support. */ native void ChangeClientTeam(int client, int team); /** * Returns the clients unique serial identifier. * - * @param client Client index. - * @return Serial number. - * @error Invalid client index, or client not connected. + * @param client Client index. + * @return Serial number. + * @error Invalid client index, or client not connected. */ native int GetClientSerial(int client); /** * Returns the client index by its serial number. * - * @param serial Serial number. - * @return Client index, or 0 for invalid serial. + * @param serial Serial number. + * @return Client index, or 0 for invalid serial. */ native int GetClientFromSerial(int serial); diff --git a/env/include/commandfilters.inc b/env/include/commandfilters.inc index 1047885..9ba8d34 100644 --- a/env/include/commandfilters.inc +++ b/env/include/commandfilters.inc @@ -35,23 +35,23 @@ #endif #define _commandfilters_included -#define MAX_TARGET_LENGTH 64 +#define MAX_TARGET_LENGTH 64 -#define COMMAND_FILTER_ALIVE (1<<0) /**< Only allow alive players */ -#define COMMAND_FILTER_DEAD (1<<1) /**< Only filter dead players */ -#define COMMAND_FILTER_CONNECTED (1<<2) /**< Allow players not fully in-game */ -#define COMMAND_FILTER_NO_IMMUNITY (1<<3) /**< Ignore immunity rules */ -#define COMMAND_FILTER_NO_MULTI (1<<4) /**< Do not allow multiple target patterns */ -#define COMMAND_FILTER_NO_BOTS (1<<5) /**< Do not allow bots to be targetted */ +#define COMMAND_FILTER_ALIVE (1<<0) /**< Only allow alive players */ +#define COMMAND_FILTER_DEAD (1<<1) /**< Only filter dead players */ +#define COMMAND_FILTER_CONNECTED (1<<2) /**< Allow players not fully in-game */ +#define COMMAND_FILTER_NO_IMMUNITY (1<<3) /**< Ignore immunity rules */ +#define COMMAND_FILTER_NO_MULTI (1<<4) /**< Do not allow multiple target patterns */ +#define COMMAND_FILTER_NO_BOTS (1<<5) /**< Do not allow bots to be targetted */ -#define COMMAND_TARGET_NONE 0 /**< No target was found */ -#define COMMAND_TARGET_NOT_ALIVE -1 /**< Single client is not alive */ -#define COMMAND_TARGET_NOT_DEAD -2 /**< Single client is not dead */ -#define COMMAND_TARGET_NOT_IN_GAME -3 /**< Single client is not in game */ -#define COMMAND_TARGET_IMMUNE -4 /**< Single client is immune */ -#define COMMAND_TARGET_EMPTY_FILTER -5 /**< A multi-filter (such as @all) had no targets */ -#define COMMAND_TARGET_NOT_HUMAN -6 /**< Target was not human */ -#define COMMAND_TARGET_AMBIGUOUS -7 /**< Partial name had too many targets */ +#define COMMAND_TARGET_NONE 0 /**< No target was found */ +#define COMMAND_TARGET_NOT_ALIVE -1 /**< Single client is not alive */ +#define COMMAND_TARGET_NOT_DEAD -2 /**< Single client is not dead */ +#define COMMAND_TARGET_NOT_IN_GAME -3 /**< Single client is not in game */ +#define COMMAND_TARGET_IMMUNE -4 /**< Single client is immune */ +#define COMMAND_TARGET_EMPTY_FILTER -5 /**< A multi-filter (such as @all) had no targets */ +#define COMMAND_TARGET_NOT_HUMAN -6 /**< Target was not human */ +#define COMMAND_TARGET_AMBIGUOUS -7 /**< Partial name had too many targets */ /** * Processes a generic command target string, and resolves it to a list @@ -61,28 +61,28 @@ * as that file is guaranteed to contain all of the translatable phrases that * ProcessTargetString() will return. * - * @param pattern Pattern to find clients against. - * @param admin Admin performing the action, or 0 if the server. - * @param targets Array to hold targets. - * @param max_targets Maximum size of the targets array. - * @param filter_flags Filter flags. - * @param target_name Buffer to store the target name. - * @param tn_maxlength Maximum length of the target name buffer. - * @param tn_is_ml OUTPUT: Will be true if the target name buffer is an ML phrase, - * false if it is a normal string. - * @return If a multi-target pattern was used, the number of clients found - * is returned. If a single-target pattern was used, 1 is returned - * if one valid client is found. Otherwise, a COMMAND_TARGET reason - * for failure is returned. + * @param pattern Pattern to find clients against. + * @param admin Admin performing the action, or 0 if the server. + * @param targets Array to hold targets. + * @param max_targets Maximum size of the targets array. + * @param filter_flags Filter flags. + * @param target_name Buffer to store the target name. + * @param tn_maxlength Maximum length of the target name buffer. + * @param tn_is_ml OUTPUT: Will be true if the target name buffer is an ML phrase, + * false if it is a normal string. + * @return If a multi-target pattern was used, the number of clients found + * is returned. If a single-target pattern was used, 1 is returned + * if one valid client is found. Otherwise, a COMMAND_TARGET reason + * for failure is returned. */ native int ProcessTargetString(const char[] pattern, - int admin, - int[] targets, - int max_targets, - int filter_flags, - char[] target_name, - int tn_maxlength, - bool &tn_is_ml); + int admin, + int[] targets, + int max_targets, + int filter_flags, + char[] target_name, + int tn_maxlength, + bool &tn_is_ml); /** @@ -109,8 +109,8 @@ native void GetLastProcessTargetString(char[] pattern, * * Note: The translation phrases are found in common.phrases.txt. * - * @param client Client index, or 0 for server. - * @param reason COMMAND_TARGET reason. + * @param client Client index, or 0 for server. + * @param reason COMMAND_TARGET reason. */ stock void ReplyToTargetError(int client, int reason, bool dynamic=true) { @@ -179,6 +179,8 @@ stock void ReplyToTargetError(int client, int reason, bool dynamic=true) } } +#define FEATURECAP_MULTITARGETFILTER_CLIENTPARAM "SourceMod MultiTargetFilter ClientParam" + /** * Adds clients to a multi-target filter. * @@ -186,8 +188,15 @@ stock void ReplyToTargetError(int client, int reason, bool dynamic=true) * @param clients Array to fill with unique, valid client indexes. * @param client Client that triggered this filter. * @return True if pattern was recognized, false otherwise. + * + * @note To see if the client param is available, use FeatureType_Capability and FEATURECAP_MULTITARGETFILTER_CLIENTPARAM. */ -typedef MultiTargetFilter = function bool (const char[] pattern, Handle clients, int client); +typeset MultiTargetFilter { + function bool (const char[] pattern, Handle clients); + function bool (const char[] pattern, ArrayList clients); + function bool (const char[] pattern, Handle clients, int client); + function bool (const char[] pattern, ArrayList clients, int client); +} /** * Adds a multi-target filter function for ProcessTargetString(). diff --git a/env/include/commandline.inc b/env/include/commandline.inc index 5ff7d22..33e4a13 100644 --- a/env/include/commandline.inc +++ b/env/include/commandline.inc @@ -31,56 +31,56 @@ */ #if defined _commandline_included_ - #endinput + #endinput #endif #define _commandline_included_ /** * Gets the full command line the server was launched with. * - * @param commandLine Buffer to store the command line in. - * @param maxlen Maximum length of the command line buffer. - * @return True if the command line is valid; otherwise, false. - * @error No command line available, or no mod support. + * @param commandLine Buffer to store the command line in. + * @param maxlen Maximum length of the command line buffer. + * @return True if the command line is valid; otherwise, false. + * @error No command line available, or no mod support. */ native bool GetCommandLine(char[] commandLine, int maxlen); /** * Gets the value of a command line parameter the server was launched with. * - * @param param The command line parameter to get the value of. - * @param value Buffer to store the parameter value in. - * @param maxlen Maximum length of the value buffer. - * @param defValue The default value to return if the parameter wasn't specified. - * @error No command line available, or no mod support. + * @param param The command line parameter to get the value of. + * @param value Buffer to store the parameter value in. + * @param maxlen Maximum length of the value buffer. + * @param defValue The default value to return if the parameter wasn't specified. + * @error No command line available, or no mod support. */ native void GetCommandLineParam(const char[] param, char[] value, int maxlen, const char[] defValue=""); /** * Gets the value of a command line parameter the server was launched with. * - * @param param The command line parameter to get the value of. - * @param defValue The default value to return if the parameter wasn't specified. - * @return The integer value of the command line parameter value. - * @error No command line available, or no mod support. + * @param param The command line parameter to get the value of. + * @param defValue The default value to return if the parameter wasn't specified. + * @return The integer value of the command line parameter value. + * @error No command line available, or no mod support. */ native int GetCommandLineParamInt(const char[] param, int defValue=0); /** * Gets the value of a command line parameter the server was launched with. * - * @param param The command line parameter to get the value of. - * @param defValue The default value to return if the parameter wasn't specified. - * @return The floating point value of the command line parameter value. - * @error No command line available, or no mod support. + * @param param The command line parameter to get the value of. + * @param defValue The default value to return if the parameter wasn't specified. + * @return The floating point value of the command line parameter value. + * @error No command line available, or no mod support. */ native float GetCommandLineParamFloat(const char[] param, float defValue=0.0); /** * Determines if a specific command line parameter is present. * - * @param param The command line parameter to test. - * @return True if the command line parameter is specified; otherwise, false. - * @error No command line available, or no mod support. + * @param param The command line parameter to test. + * @return True if the command line parameter is specified; otherwise, false. + * @error No command line available, or no mod support. */ native bool FindCommandLineParam(const char[] param); diff --git a/env/include/console.inc b/env/include/console.inc index 63f5897..88aba3e 100644 --- a/env/include/console.inc +++ b/env/include/console.inc @@ -35,14 +35,14 @@ #endif #define _console_included -#define INVALID_FCVAR_FLAGS (-1) +#define INVALID_FCVAR_FLAGS (-1) /** * Console variable query helper values. */ enum QueryCookie { - QUERYCOOKIE_FAILED = 0, + QUERYCOOKIE_FAILED = 0 }; /** @@ -51,7 +51,7 @@ enum QueryCookie enum ReplySource { SM_REPLY_TO_CONSOLE = 0, - SM_REPLY_TO_CHAT = 1, + SM_REPLY_TO_CHAT = 1 }; /** @@ -65,25 +65,25 @@ enum ReplySource #define FCVAR_LAUNCHER (1<<1) // Same value as FCVAR_DEVELOPMENTONLY, which is what most usages of this were intending to use. -#define FCVAR_NONE 0 // The default, no flags at all -#define FCVAR_UNREGISTERED (1<<0) // If this is set, don't add to linked list, etc. -#define FCVAR_DEVELOPMENTONLY (1<<1) // Hidden in released products. Flag is removed automatically if ALLOW_DEVELOPMENT_CVARS is defined. (OB+) -#define FCVAR_GAMEDLL (1<<2) // Defined by the game DLL. -#define FCVAR_CLIENTDLL (1<<3) // Defined by the client DLL. -#define FCVAR_MATERIAL_SYSTEM (1<<4) // Defined by the material system. (EP1-only) -#define FCVAR_HIDDEN (1<<4) // Hidden. Doesn't appear in find or autocomplete. Like DEVELOPMENTONLY, but can't be compiled out.1 (OB+) -#define FCVAR_PROTECTED (1<<5) // It's a server cvar, but we don't send the data since it's a password, etc. +#define FCVAR_NONE 0 // The default, no flags at all +#define FCVAR_UNREGISTERED (1<<0) // If this is set, don't add to linked list, etc. +#define FCVAR_DEVELOPMENTONLY (1<<1) // Hidden in released products. Flag is removed automatically if ALLOW_DEVELOPMENT_CVARS is defined. (OB+) +#define FCVAR_GAMEDLL (1<<2) // Defined by the game DLL. +#define FCVAR_CLIENTDLL (1<<3) // Defined by the client DLL. +#define FCVAR_MATERIAL_SYSTEM (1<<4) // Defined by the material system. (EP1-only) +#define FCVAR_HIDDEN (1<<4) // Hidden. Doesn't appear in find or autocomplete. Like DEVELOPMENTONLY, but can't be compiled out.1 (OB+) +#define FCVAR_PROTECTED (1<<5) // It's a server cvar, but we don't send the data since it's a password, etc. // Sends 1 if it's not bland/zero, 0 otherwise as value. -#define FCVAR_SPONLY (1<<6) // This cvar cannot be changed by clients connected to a multiplayer server. -#define FCVAR_ARCHIVE (1<<7) // Set to cause it to be saved to vars.rc -#define FCVAR_NOTIFY (1<<8) // Notifies players when changed. -#define FCVAR_USERINFO (1<<9) // Changes the client's info string. -#define FCVAR_PRINTABLEONLY (1<<10) // This cvar's string cannot contain unprintable characters (e.g., used for player name, etc.) -#define FCVAR_UNLOGGED (1<<11) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log -#define FCVAR_NEVER_AS_STRING (1<<12) // Never try to print that cvar. -#define FCVAR_REPLICATED (1<<13) // Server setting enforced on clients. -#define FCVAR_CHEAT (1<<14) // Only useable in singleplayer / debug / multiplayer & sv_cheats -#define FCVAR_SS (1<<15) // causes varnameN where N 2 through max splitscreen slots for mod to be autogenerated (L4D+) +#define FCVAR_SPONLY (1<<6) // This cvar cannot be changed by clients connected to a multiplayer server. +#define FCVAR_ARCHIVE (1<<7) // Set to cause it to be saved to vars.rc +#define FCVAR_NOTIFY (1<<8) // Notifies players when changed. +#define FCVAR_USERINFO (1<<9) // Changes the client's info string. +#define FCVAR_PRINTABLEONLY (1<<10) // This cvar's string cannot contain unprintable characters (e.g., used for player name, etc.) +#define FCVAR_UNLOGGED (1<<11) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log +#define FCVAR_NEVER_AS_STRING (1<<12) // Never try to print that cvar. +#define FCVAR_REPLICATED (1<<13) // Server setting enforced on clients. +#define FCVAR_CHEAT (1<<14) // Only useable in singleplayer / debug / multiplayer & sv_cheats +#define FCVAR_SS (1<<15) // causes varnameN where N 2 through max splitscreen slots for mod to be autogenerated (L4D+) #define FCVAR_DEMO (1<<16) // Record this cvar when starting a demo file. #define FCVAR_DONTRECORD (1<<17) // Don't record these command in demo files. #define FCVAR_SS_ADDED (1<<18) // This is one of the "added" FCVAR_SS variables for the splitscreen players (L4D+) @@ -109,8 +109,8 @@ enum ReplySource /** * Executes a server command as if it were on the server console (or RCON) * - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ native void ServerCommand(const char[] format, any ...); @@ -123,18 +123,18 @@ native void ServerCommand(const char[] format, any ...); * the response. * Also, on L4D2 this will not print the command output to the server console. * - * @param buffer String to store command result into. - * @param maxlen Length of buffer. - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param buffer String to store command result into. + * @param maxlen Length of buffer. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ native void ServerCommandEx(char[] buffer, int maxlen, const char[] format, any ...); /** * Inserts a server command at the beginning of the server command buffer. * - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ native void InsertServerCommand(const char[] format, any ...); @@ -147,10 +147,10 @@ native void ServerExecute(); * Executes a client command. Note that this will not work on clients unless * they have cl_restrict_server_commands set to 0. * - * @param client Index of the client. - * @param fmt Format of the client command. - * @param ... Format parameters - * @error Invalid client index, or client not connected. + * @param client Index of the client. + * @param fmt Format of the client command. + * @param ... Format parameters + * @error Invalid client index, or client not connected. */ native void ClientCommand(int client, const char[] fmt, any ...); @@ -163,10 +163,10 @@ native void ClientCommand(int client, const char[] fmt, any ...); * a hook where this matters (for example, a "say" hook), you should use * FakeClientCommandEx() instead. * - * @param client Index of the client. - * @param fmt Format of the client command. - * @param ... Format parameters - * @error Invalid client index, or client not connected. + * @param client Index of the client. + * @param fmt Format of the client command. + * @param ... Format parameters + * @error Invalid client index, or client not connected. */ native void FakeClientCommand(int client, const char[] fmt, any ...); @@ -175,59 +175,81 @@ native void FakeClientCommand(int client, const char[] fmt, any ...); * execution of the client command is delayed by one frame to prevent any * re-entrancy issues that might surface with FakeClientCommand(). * - * @param client Index of the client. - * @param fmt Format of the client command. - * @param ... Format parameters - * @error Invalid client index, or client not connected. + * @param client Index of the client. + * @param fmt Format of the client command. + * @param ... Format parameters + * @error Invalid client index, or client not connected. */ native void FakeClientCommandEx(int client, const char[] fmt, any ...); /** * Executes a KeyValues client command on the server without being networked. * - * @param client Index of the client. - * @param kv KeyValues data to be sent. - * @error Invalid client index, client not connected, - * or unsupported on current game. + * @param client Index of the client. + * @param kv KeyValues data to be sent. + * @error Invalid client index, client not connected, + * or unsupported on current game. */ native void FakeClientCommandKeyValues(int client, KeyValues kv); /** * Sends a message to the server console. * - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ native void PrintToServer(const char[] format, any ...); /** * Sends a message to a client's console. * - * @param client Client index. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @error If the client is not connected an error will be thrown. + * @param client Client index. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @error If the client is not connected an error will be thrown. */ native void PrintToConsole(int client, const char[] format, any ...); + /** - * Reples to a message in a command. + * Sends a message to every client's console. + * + * @param format Formatting rules. + * @param ... Variable number of format parameters. + */ +stock void PrintToConsoleAll(const char[] format, any ...) +{ + char buffer[254]; + + for (int i = 1; i <= MaxClients; i++) + { + if (IsClientInGame(i)) + { + SetGlobalTransTarget(i); + VFormat(buffer, sizeof(buffer), format, 2); + PrintToConsole(i, "%s", buffer); + } + } +} + +/** + * Replies to a message in a command. * * A client index of 0 will use PrintToServer(). * If the command was from the console, PrintToConsole() is used. * If the command was from chat, PrintToChat() is used. * - * @param client Client index, or 0 for server. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @error If the client is not connected or invalid. + * @param client Client index, or 0 for server. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @error If the client is not connected or invalid. */ native void ReplyToCommand(int client, const char[] format, any ...); /** * Returns the current reply source of a command. * - * @return ReplySource value. + * @return ReplySource value. */ native ReplySource GetCmdReplySource(); @@ -237,8 +259,8 @@ native ReplySource GetCmdReplySource(); * Only use this if you know what you are doing. You should save the old value * and restore it once you are done. * - * @param source New ReplySource value. - * @return Old ReplySource value. + * @param source New ReplySource value. + * @return Old ReplySource value. */ native ReplySource SetCmdReplySource(ReplySource source); @@ -247,7 +269,7 @@ native ReplySource SetCmdReplySource(ReplySource source); * * This function is only meaningful inside say or say_team hooks. * - * @return True if a chat trigger, false otherwise. + * @return True if a chat trigger, false otherwise. */ native bool IsChatTrigger(); @@ -257,10 +279,10 @@ native bool IsChatTrigger(); * in their chat text, except for the originating client, who receives * the message based on the current ReplySource. * - * @param client Client index doing the action, or 0 for server. - * @param tag Tag to prepend to the message. - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param client Client index doing the action, or 0 for server. + * @param tag Tag to prepend to the message. + * @param format Formatting rules. + * @param ... Variable number of format parameters. * @error */ native void ShowActivity2(int client, const char[] tag, const char[] format, any ...); @@ -274,9 +296,9 @@ native void ShowActivity2(int client, const char[] tag, const char[] format, any * for these cases, then this function will suffice. Otherwise, * ShowActivity2() is slightly more useful. * - * @param client Client index doing the action, or 0 for server. - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param client Client index doing the action, or 0 for server. + * @param format Formatting rules. + * @param ... Variable number of format parameters. * @error */ native void ShowActivity(int client, const char[] format, any ...); @@ -285,10 +307,10 @@ native void ShowActivity(int client, const char[] format, any ...); * Same as ShowActivity(), except the tag parameter is used instead of * "[SM] " (note that you must supply any spacing). * - * @param client Client index doing the action, or 0 for server. - * @param tag Tag to display with. - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param client Client index doing the action, or 0 for server. + * @param tag Tag to display with. + * @param format Formatting rules. + * @param ... Variable number of format parameters. * @error */ native void ShowActivityEx(int client, const char[] tag, const char[] format, any ...); @@ -314,9 +336,9 @@ native bool FormatActivitySource(int client, int target, const char[] namebuf, i /** * Called when a server-only command is invoked. * - * @param args Number of arguments that were in the argument string. - * @return An Action value. Not handling the command - * means that Source will report it as "not found." + * @param args Number of arguments that were in the argument string. + * @return An Action value. Not handling the command + * means that Source will report it as "not found." */ typedef SrvCmd = function Action (int args); @@ -325,21 +347,21 @@ typedef SrvCmd = function Action (int args); * * Server commands are case sensitive. * - * @param cmd Name of the command to hook or create. - * @param callback A function to use as a callback for when the command is invoked. - * @param description Optional description to use for command creation. - * @param flags Optional flags to use for command creation. - * @error Command name is the same as an existing convar. + * @param cmd Name of the command to hook or create. + * @param callback A function to use as a callback for when the command is invoked. + * @param description Optional description to use for command creation. + * @param flags Optional flags to use for command creation. + * @error Command name is the same as an existing convar. */ native void RegServerCmd(const char[] cmd, SrvCmd callback, const char[] description="", int flags=0); /** * Called when a generic console command is invoked. * - * @param client Index of the client, or 0 from the server. - * @param args Number of arguments that were in the argument string. - * @return An Action value. Not handling the command - * means that Source will report it as "not found." + * @param client Index of the client, or 0 from the server. + * @param args Number of arguments that were in the argument string. + * @return An Action value. Not handling the command + * means that Source will report it as "not found." */ typedef ConCmd = function Action (int client, int args); @@ -350,11 +372,11 @@ typedef ConCmd = function Action (int client, int args); * a client may enter the command in any case. SourceMod corrects for this automatically, * and you should only hook the "real" version of the command. * - * @param cmd Name of the command to hook or create. - * @param callback A function to use as a callback for when the command is invoked. - * @param description Optional description to use for command creation. - * @param flags Optional flags to use for command creation. - * @error Command name is the same as an existing convar. + * @param cmd Name of the command to hook or create. + * @param callback A function to use as a callback for when the command is invoked. + * @param description Optional description to use for command creation. + * @param flags Optional flags to use for command creation. + * @error Command name is the same as an existing convar. */ native void RegConsoleCmd(const char[] cmd, ConCmd callback, const char[] description="", int flags=0); @@ -365,14 +387,14 @@ native void RegConsoleCmd(const char[] cmd, ConCmd callback, const char[] descri * * Admin commands are case sensitive from both the client and server. * - * @param cmd String containing command to register. - * @param callback A function to use as a callback for when the command is invoked. - * @param adminflags Administrative flags (bitstring) to use for permissions. - * @param description Optional description to use for help. - * @param group String containing the command group to use. If empty, - * the plugin's filename will be used instead. - * @param flags Optional console flags. - * @error Command name is the same as an existing convar. + * @param cmd String containing command to register. + * @param callback A function to use as a callback for when the command is invoked. + * @param adminflags Administrative flags (bitstring) to use for permissions. + * @param description Optional description to use for help. + * @param group String containing the command group to use. If empty, + * the plugin's filename will be used instead. + * @param flags Optional console flags. + * @error Command name is the same as an existing convar. */ native void RegAdminCmd(const char[] cmd, ConCmd callback, @@ -392,7 +414,7 @@ native bool IsCommandCallback(); * Returns the number of arguments from the current console or server command. * @note Unlike the HL2 engine call, this does not include the command itself. * - * @return Number of arguments to the current command. + * @return Number of arguments to the current command. */ native int GetCmdArgs(); @@ -401,10 +423,10 @@ native int GetCmdArgs(); * server command. * @note Argument indexes start at 1; 0 retrieves the command name. * - * @param argnum Argument number to retrieve. - * @param buffer Buffer to use for storing the string. - * @param maxlength Maximum length of the buffer. - * @return Length of string written to buffer. + * @param argnum Argument number to retrieve. + * @param buffer Buffer to use for storing the string. + * @param maxlength Maximum length of the buffer. + * @return Length of string written to buffer. */ native int GetCmdArg(int argnum, char[] buffer, int maxlength); @@ -412,16 +434,62 @@ native int GetCmdArg(int argnum, char[] buffer, int maxlength); * Retrieves the entire command argument string in one lump from the current * console or server command. * - * @param buffer Buffer to use for storing the string. - * @param maxlength Maximum length of the buffer. - * @return Length of string written to buffer. + * @param buffer Buffer to use for storing the string. + * @param maxlength Maximum length of the buffer. + * @return Length of string written to buffer. */ native int GetCmdArgString(char[] buffer, int maxlength); +methodmap CommandIterator < Handle { + // Creates a new CommandIterator. Must be freed with delete or + // CloseHandle(). + // + // The CommandIterator can be used to iterate commands created by + // SourceMod plugins and allows inspection of properties associated + // with the command. + // + // @return New CommandIterator Handle. + public native CommandIterator(); + + // Determines if there is a next command. If one is found, the + // iterator is advanced to it. + // + // @return true if found and iterator is advanced. + public native bool Next(); + + // Retrieves the command's description. + // + // @param buffer Buffer to copy to. + // @param maxlen Maximum size of the buffer. + // @error Invalid iterator position. + public native void GetDescription(char[] buffer, int maxlen); + + // Retrieves the command's name. + // + // @param buffer Buffer to copy to. + // @param maxlen Maximum size of the buffer. + // @error Invalid iterator position. + public native void GetName(char[] buffer, int maxlen); + + // Retrieves the plugin handle of the command's creator + // + // @error Invalid iterator position. + property Handle Plugin { + public native get(); + } + + // Retrieves the command's default flags + // + // @error Invalid iterator position. + property int Flags { + public native get(); + } +} + /** * Gets a command iterator. Must be freed with CloseHandle(). * - * @return A new command iterator. + * @return A new command iterator. */ native Handle GetCommandIterator(); @@ -429,13 +497,13 @@ native Handle GetCommandIterator(); * Reads a command iterator, then advances to the next command if any. * Only SourceMod specific commands are returned. * - * @param iter Command iterator Handle. - * @param name Name buffer. - * @param nameLen Name buffer size. - * @param eflags Effective default flags of a command. - * @param desc Command description buffer. - * @param descLen Command description buffer size. - * @return True on success, false if there are no more commands. + * @param iter Command iterator Handle. + * @param name Name buffer. + * @param nameLen Name buffer size. + * @param eflags Effective default flags of a command. + * @param desc Command description buffer. + * @param descLen Command description buffer size. + * @return True on success, false if there are no more commands. */ native bool ReadCommandIterator(Handle iter, char[] name, @@ -450,16 +518,16 @@ native bool ReadCommandIterator(Handle iter, * commands. This feature essentially allows you to create custom * flags using the override system. * - * @param client Client index. - * @param command Command name. If the command is not found, the default - * flags are used. - * @param flags Flag string to use as a default, if the command or override - * is not found. - * @param override_only If true, SourceMod will not attempt to find a matching - * command, and it will only use the default flags specified. - * Otherwise, SourceMod will ignore the default flags if - * there is a matching admin command. - * @return True if the client has access, false otherwise. + * @param client Client index. + * @param command Command name. If the command is not found, the default + * flags are used. + * @param flags Flag string to use as a default, if the command or override + * is not found. + * @param override_only If true, SourceMod will not attempt to find a matching + * command, and it will only use the default flags specified. + * Otherwise, SourceMod will ignore the default flags if + * there is a matching admin command. + * @return True if the client has access, false otherwise. */ native bool CheckCommandAccess(int client, const char[] command, @@ -472,16 +540,16 @@ native bool CheckCommandAccess(int client, * commands. This feature essentially allows you to create custom flags * using the override system. * - * @param id AdminId of the admin. - * @param command Command name. If the command is not found, the default - * flags are used. - * @param flags Flag string to use as a default, if the command or override - * is not found. - * @param override_only If true, SourceMod will not attempt to find a matching - * command, and it will only use the default flags specified. - * Otherwise, SourceMod will ignore the default flags if - * there is a matching admin command. - * @return True if the admin has access, false otherwise. + * @param id AdminId of the admin. + * @param command Command name. If the command is not found, the default + * flags are used. + * @param flags Flag string to use as a default, if the command or override + * is not found. + * @param override_only If true, SourceMod will not attempt to find a matching + * command, and it will only use the default flags specified. + * Otherwise, SourceMod will ignore the default flags if + * there is a matching admin command. + * @return True if the admin has access, false otherwise. */ native bool CheckAccess(AdminId id, const char[] command, @@ -491,18 +559,18 @@ native bool CheckAccess(AdminId id, /** * Returns the bitstring of flags of a command. * - * @param name Name of the command. - * @return A bitstring containing the FCVAR_* flags that are enabled - * or INVALID_FCVAR_FLAGS if command not found. + * @param name Name of the command. + * @return A bitstring containing the FCVAR_* flags that are enabled + * or INVALID_FCVAR_FLAGS if command not found. */ native int GetCommandFlags(const char[] name); /** * Sets the bitstring of flags of a command. * - * @param name Name of the command. - * @param flags A bitstring containing the FCVAR_* flags to enable. - * @return True on success, otherwise false. + * @param name Name of the command. + * @param flags A bitstring containing the FCVAR_* flags to enable. + * @return True on success, otherwise false. */ native bool SetCommandFlags(const char[] name, int flags); @@ -511,38 +579,38 @@ native bool SetCommandFlags(const char[] name, int flags); * ConCommands. If a Handle is returned, the next entry must be read * via FindNextConCommand(). The order of the list is undefined. * - * @param buffer Buffer to store entry name. - * @param max_size Maximum size of the buffer. - * @param isCommand Variable to store whether the entry is a command. - * If it is not a command, it is a ConVar. - * @param flags Variable to store entry flags. - * @param description Buffer to store the description, empty if no description present. - * @param descrmax_size Maximum size of the description buffer. - * @return On success, a ConCmdIter Handle is returned, which - * can be read via FindNextConCommand(), and must be - * closed via CloseHandle(). Additionally, the output - * parameters will be filled with information of the - * first ConCommandBase entry. - * On failure, INVALID_HANDLE is returned, and the - * contents of outputs is undefined. + * @param buffer Buffer to store entry name. + * @param max_size Maximum size of the buffer. + * @param isCommand Variable to store whether the entry is a command. + * If it is not a command, it is a ConVar. + * @param flags Variable to store entry flags. + * @param description Buffer to store the description, empty if no description present. + * @param descrmax_size Maximum size of the description buffer. + * @return On success, a ConCmdIter Handle is returned, which + can be read via FindNextConCommand(), and must be + closed via CloseHandle(). Additionally, the output + parameters will be filled with information of the + first ConCommandBase entry. + On failure, INVALID_HANDLE is returned, and the + contents of outputs is undefined. */ native Handle FindFirstConCommand(char[] buffer, int max_size, bool &isCommand, int &flags=0, char[] description="", int descrmax_size=0); /** * Reads the next entry in a ConCommandBase iterator. * - * @param search ConCmdIter Handle to search. - * @param buffer Buffer to store entry name. - * @param max_size Maximum size of the buffer. - * @param isCommand Variable to store whether the entry is a command. - * If it is not a command, it is a ConVar. - * @param flags Variable to store entry flags. - * @param description Buffer to store the description, empty if no description present. - * @param descrmax_size Maximum size of the description buffer. - * @return On success, the outputs are filled, the iterator is - * advanced to the next entry, and true is returned. - * If no more entries exist, false is returned, and the - * contents of outputs is undefined. + * @param search ConCmdIter Handle to search. + * @param buffer Buffer to store entry name. + * @param max_size Maximum size of the buffer. + * @param isCommand Variable to store whether the entry is a command. + If it is not a command, it is a ConVar. + * @param flags Variable to store entry flags. + * @param description Buffer to store the description, empty if no description present. + * @param descrmax_size Maximum size of the description buffer. + * @return On success, the outputs are filled, the iterator is + advanced to the next entry, and true is returned. + If no more entries exist, false is returned, and the + contents of outputs is undefined. */ native bool FindNextConCommand(Handle search, char[] buffer, int max_size, bool &isCommand, int &flags=0, char[] description="", int descrmax_size=0); @@ -553,14 +621,14 @@ native bool FindNextConCommand(Handle search, char[] buffer, int max_size, bool * Note: Tags are automatically removed when a plugin unloads. * Note: Currently, this function does nothing because of bugs in the Valve master. * - * @param tag Tag string to append. + * @param tag Tag string to append. */ native void AddServerTag(const char[] tag); /** * Removes a tag previously added by the calling plugin. * - * @param tag Tag string to remove. + * @param tag Tag string to remove. */ native void RemoveServerTag(const char[] tag); @@ -586,7 +654,7 @@ native void RemoveServerTag(const char[] tag); * @param command Command name, lower case. To get name as typed, use * GetCmdArg() and specify argument 0. * @param argc Argument count. - * @return Action to take (see extended notes above). + * @return Action to take (see extended notes above). */ typedef CommandListener = function Action (int client, const char[] command, int argc); @@ -604,7 +672,7 @@ typedef CommandListener = function Action (int client, const char[] command, int * FEATURECAP_COMMANDLISTENER. * * @param callback Callback. - * @param command Command, or if not specified, a global listener. + * @param command Command, or if not specified, a global listener. * The command is case insensitive. * @return True if this feature is available on the current game, * false otherwise. @@ -614,18 +682,18 @@ native bool AddCommandListener(CommandListener callback, const char[] command="" /** * Removes a previously added command listener, in reverse order of being added. * - * @param callback Callback. - * @param command Command, or if not specified, a global listener. + * @param callback Callback. + * @param command Command, or if not specified, a global listener. * The command is case insensitive. - * @error Callback has no active listeners. + * @error Callback has no active listeners. */ native void RemoveCommandListener(CommandListener callback, const char[] command=""); /** * Returns true if the supplied command exists. * - * @param command Command to find. - * @return True if command is found, false otherwise. + * @param command Command to find. + * @return True if command is found, false otherwise. */ stock bool CommandExists(const char[] command) { @@ -634,20 +702,20 @@ stock bool CommandExists(const char[] command) /** * Global listener for the chat commands. * - * @param client Client index. - * @param command Command name. - * @param sArgs Chat argument string. + * @param client Client index. + * @param command Command name. + * @param sArgs Chat argument string. * - * @return An Action value. Returning Plugin_Handled bypasses the game function call. - Returning Plugin_Stop bypasses the post hook as well as the game function. + * @return An Action value. Returning Plugin_Handled bypasses the game function call. + * Returning Plugin_Stop bypasses the post hook as well as the game function. */ forward Action OnClientSayCommand(int client, const char[] command, const char[] sArgs); /** * Global post listener for the chat commands. * - * @param client Client index. - * @param command Command name. - * @param sArgs Chat argument string. + * @param client Client index. + * @param command Command name. + * @param sArgs Chat argument string. */ forward void OnClientSayCommand_Post(int client, const char[] command, const char[] sArgs); diff --git a/env/include/convars.inc b/env/include/convars.inc index 6896ce1..7bc9f77 100644 --- a/env/include/convars.inc +++ b/env/include/convars.inc @@ -31,7 +31,7 @@ */ #if defined _convars_included - #endinput + #endinput #endif #define _convars_included @@ -49,31 +49,35 @@ enum ConVarBounds */ enum ConVarQueryResult { - ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */ - ConVarQuery_NotFound, //< Client convar was not found. */ - ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */ - ConVarQuery_Protected //< Client convar was found, but it is protected. The server cannot retrieve its value. */ + ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */ + ConVarQuery_NotFound, //< Client convar was not found. */ + ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */ + ConVarQuery_Protected //< Client convar was found, but it is protected. The server cannot retrieve its value. */ }; -// Called when a console variable's value is changed. -// -// @param convar Handle to the convar that was changed. -// @param oldValue String containing the value of the convar before it was changed. -// @param newValue String containing the new value of the convar. +/** + * Called when a console variable's value is changed. + * + * @param convar Handle to the convar that was changed. + * @param oldValue String containing the value of the convar before it was changed. + * @param newValue String containing the new value of the convar. + */ typedef ConVarChanged = function void (ConVar convar, const char[] oldValue, const char[] newValue); -// Creates a new console variable. -// -// @param name Name of new convar. -// @param defaultValue String containing the default value of new convar. -// @param description Optional description of the convar. -// @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details. -// @param hasMin Optional boolean that determines if the convar has a minimum value. -// @param min Minimum floating point value that the convar can have if hasMin is true. -// @param hasMax Optional boolean that determines if the convar has a maximum value. -// @param max Maximum floating point value that the convar can have if hasMax is true. -// @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned. -// @error Convar name is blank or is the same as an existing console command. +/** + * Creates a new console variable. + * + * @param name Name of new convar. + * @param defaultValue String containing the default value of new convar. + * @param description Optional description of the convar. + * @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details. + * @param hasMin Optional boolean that determines if the convar has a minimum value. + * @param min Minimum floating point value that the convar can have if hasMin is true. + * @param hasMax Optional boolean that determines if the convar has a maximum value. + * @param max Maximum floating point value that the convar can have if hasMax is true. + * @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned. + * @error Convar name is blank or is the same as an existing console command. + */ native ConVar CreateConVar( const char[] name, const char[] defaultValue, @@ -82,10 +86,12 @@ native ConVar CreateConVar( bool hasMin=false, float min=0.0, bool hasMax=false, float max=0.0); -// Searches for a console variable. -// -// @param name Name of convar to find. -// @return A ConVar object if found; null otherwise. +/** + * Searches for a console variable. + * + * @param name Name of convar to find. + * @return A ConVar object if found; null otherwise. + */ native ConVar FindConVar(const char[] name); // A ConVar is a configurable, named setting in the srcds console. @@ -242,27 +248,27 @@ methodmap ConVar < Handle /** * Creates a hook for when a console variable's value is changed. * - * @param convar Handle to the convar. - * @param callback An OnConVarChanged function pointer. - * @error Invalid or corrupt Handle or invalid callback function. + * @param convar Handle to the convar. + * @param callback An OnConVarChanged function pointer. + * @error Invalid or corrupt Handle or invalid callback function. */ native void HookConVarChange(Handle convar, ConVarChanged callback); /** * Removes a hook for when a console variable's value is changed. * - * @param convar Handle to the convar. - * @param callback An OnConVarChanged function pointer. - * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar. + * @param convar Handle to the convar. + * @param callback An OnConVarChanged function pointer. + * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar. */ native void UnhookConVarChange(Handle convar, ConVarChanged callback); /** * Returns the boolean value of a console variable. * - * @param convar Handle to the convar. - * @return The boolean value of the convar. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @return The boolean value of the convar. + * @error Invalid or corrupt Handle. */ native bool GetConVarBool(Handle convar); @@ -272,23 +278,23 @@ native bool GetConVarBool(Handle convar); * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. * - * @param convar Handle to the convar. - * @param value New boolean value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param value New boolean value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. */ native void SetConVarBool(Handle convar, bool value, bool replicate=false, bool notify=false); /** * Returns the integer value of a console variable. * - * @param convar Handle to the convar. - * @return The integer value of the convar. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @return The integer value of the convar. + * @error Invalid or corrupt Handle. */ native int GetConVarInt(Handle convar); @@ -298,23 +304,23 @@ native int GetConVarInt(Handle convar); * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. * - * @param convar Handle to the convar. - * @param value New integer value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param value New integer value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. */ native void SetConVarInt(Handle convar, int value, bool replicate=false, bool notify=false); /** * Returns the floating point value of a console variable. * - * @param convar Handle to the convar. - * @return The floating point value of the convar. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @return The floating point value of the convar. + * @error Invalid or corrupt Handle. */ native float GetConVarFloat(Handle convar); @@ -324,24 +330,24 @@ native float GetConVarFloat(Handle convar); * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. * - * @param convar Handle to the convar. - * @param value New floating point value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param value New floating point value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. */ native void SetConVarFloat(Handle convar, float value, bool replicate=false, bool notify=false); /** * Retrieves the string value of a console variable. * - * @param convar Handle to the convar. - * @param value Buffer to store the value of the convar. - * @param maxlength Maximum length of string buffer. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param value Buffer to store the value of the convar. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. */ native void GetConVarString(Handle convar, char[] value, int maxlength); @@ -351,14 +357,14 @@ native void GetConVarString(Handle convar, char[] value, int maxlength); * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. * - * @param convar Handle to the convar. - * @param value New string value. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param value New string value. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. */ native void SetConVarString(Handle convar, const char[] value, bool replicate=false, bool notify=false); @@ -368,85 +374,85 @@ native void SetConVarString(Handle convar, const char[] value, bool replicate=fa * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and * Episode 1 engines. Newer engines automatically do these things when the convar value is changed. * - * @param convar Handle to the convar. - * @param replicate If set to true, the new convar value will be set on all clients. - * This will only work if the convar has the FCVAR_REPLICATED flag - * and actually exists on clients. - * @param notify If set to true, clients will be notified that the convar has changed. - * This will only work if the convar has the FCVAR_NOTIFY flag. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param replicate If set to true, the new convar value will be set on all clients. + * This will only work if the convar has the FCVAR_REPLICATED flag + * and actually exists on clients. + * @param notify If set to true, clients will be notified that the convar has changed. + * This will only work if the convar has the FCVAR_NOTIFY flag. + * @error Invalid or corrupt Handle. */ native void ResetConVar(Handle convar, bool replicate=false, bool notify=false); /** * Retrieves the default string value of a console variable. * - * @param convar Handle to the convar. - * @param value Buffer to store the default value of the convar. - * @param maxlength Maximum length of string buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param value Buffer to store the default value of the convar. + * @param maxlength Maximum length of string buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid or corrupt Handle. */ native int GetConVarDefault(Handle convar, char[] value, int maxlength); /** * Returns the bitstring of flags on a console variable. * - * @param convar Handle to the convar. - * @return A bitstring containing the FCVAR_* flags that are enabled. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @return A bitstring containing the FCVAR_* flags that are enabled. + * @error Invalid or corrupt Handle. */ native int GetConVarFlags(Handle convar); /** * Sets the bitstring of flags on a console variable. * - * @param convar Handle to the convar. - * @param flags A bitstring containing the FCVAR_* flags to enable. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param flags A bitstring containing the FCVAR_* flags to enable. + * @error Invalid or corrupt Handle. */ native void SetConVarFlags(Handle convar, int flags); /** * Retrieves the specified bound of a console variable. * - * @param convar Handle to the convar. - * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. - * @param value By-reference cell to store the specified floating point bound value. - * @return True if the convar has the specified bound set, false otherwise. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper. + * @param value By-reference cell to store the specified floating point bound value. + * @return True if the convar has the specified bound set, false otherwise. + * @error Invalid or corrupt Handle. */ native bool GetConVarBounds(Handle convar, ConVarBounds type, float &value); /** * Sets the specified bound of a console variable. * - * @param convar Handle to the convar. - * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper - * @param set If set to true, convar will use specified bound. If false, bound will be removed. - * @param value Floating point value to use as the specified bound. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper + * @param set If set to true, convar will use specified bound. If false, bound will be removed. + * @param value Floating point value to use as the specified bound. + * @error Invalid or corrupt Handle. */ native void SetConVarBounds(Handle convar, ConVarBounds type, bool set, float value=0.0); /** * Retrieves the name of a console variable. * - * @param convar Handle to the convar. - * @param name Buffer to store the name of the convar. - * @param maxlength Maximum length of string buffer. - * @error Invalid or corrupt Handle. + * @param convar Handle to the convar. + * @param name Buffer to store the name of the convar. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. */ native void GetConVarName(Handle convar, char[] name, int maxlength); /** * Replicates a convar value to a specific client. This does not change the actual convar value. * - * @param client Client index - * @param convar ConVar handle - * @param value String value to send - * @return True on success, false on failure - * @error Invalid client index, client not in game, or client is fake + * @param client Client index + * @param convar ConVar handle + * @param value String value to send + * @return True on success, false on failure + * @error Invalid client index, client not in game, or client is fake */ native bool SendConVarValue(int client, Handle convar, const char[] value); @@ -454,43 +460,43 @@ typeset ConVarQueryFinished { // Called when a query to retrieve a client's console variable has finished. // - // @param cookie Unique identifier of query. - // @param client Player index. - // @param result Result of query that tells one whether or not query was successful. - // See ConVarQueryResult enum for more details. - // @param convarName Name of client convar that was queried. - // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. - // @param value Value that was passed when query was started. + // @param cookie Unique identifier of query. + // @param client Player index. + // @param result Result of query that tells one whether or not query was successful. + // See ConVarQueryResult enum for more details. + // @param convarName Name of client convar that was queried. + // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. + // @param value Value that was passed when query was started. function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue, any value); // Called when a query to retrieve a client's console variable has finished. // - // @param cookie Unique identifier of query. - // @param client Player index. - // @param result Result of query that tells one whether or not query was successful. - // See ConVarQueryResult enum for more details. - // @param convarName Name of client convar that was queried. - // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. + // @param cookie Unique identifier of query. + // @param client Player index. + // @param result Result of query that tells one whether or not query was successful. + // See ConVarQueryResult enum for more details. + // @param convarName Name of client convar that was queried. + // @param convarValue Value of client convar that was queried if successful. This will be "" if it was not. function void (QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue); }; /** * Starts a query to retrieve the value of a client's console variable. * - * @param client Player index. - * @param cvarName Name of client convar to query. - * @param callback A function to use as a callback when the query has finished. - * @param value Optional value to pass to the callback function. - * @return A cookie that uniquely identifies the query. - * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot. + * @param client Player index. + * @param cvarName Name of client convar to query. + * @param callback A function to use as a callback when the query has finished. + * @param value Optional value to pass to the callback function. + * @return A cookie that uniquely identifies the query. + * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot. */ native QueryCookie QueryClientConVar(int client, const char[] cvarName, ConVarQueryFinished callback, any value=0); /** * Returns true if the supplied character is valid in a ConVar name. * - * @param c Character to validate. - * @return True is valid for ConVars, false otherwise + * @param c Character to validate. + * @return True is valid for ConVars, false otherwise */ stock bool IsValidConVarChar(int c) { diff --git a/env/include/core.inc b/env/include/core.inc index 5d6c704..7174212 100644 --- a/env/include/core.inc +++ b/env/include/core.inc @@ -38,7 +38,7 @@ #include /** If this gets changed, you need to update Core's check. */ -#define SOURCEMOD_PLUGINAPI_VERSION 5 +#define SOURCEMOD_PLUGINAPI_VERSION 5 struct PlVers { @@ -53,10 +53,10 @@ struct PlVers */ enum Action { - Plugin_Continue = 0, /**< Continue with the original action */ - Plugin_Changed = 1, /**< Inputs or outputs have been overridden with new values */ - Plugin_Handled = 3, /**< Handle the action at the end (don't call it) */ - Plugin_Stop = 4, /**< Immediately stop the hook chain and handle the original */ + Plugin_Continue = 0, /**< Continue with the original action */ + Plugin_Changed = 1, /**< Inputs or outputs have been overridden with new values */ + Plugin_Handled = 3, /**< Handle the action at the end (don't call it) */ + Plugin_Stop = 4 /**< Immediately stop the hook chain and handle the original */ }; /** @@ -82,17 +82,17 @@ public PlVers __version = */ enum PluginStatus { - Plugin_Running=0, /**< Plugin is running */ + Plugin_Running=0, /**< Plugin is running */ /* All states below are "temporarily" unexecutable */ - Plugin_Paused, /**< Plugin is loaded but paused */ - Plugin_Error, /**< Plugin is loaded but errored/locked */ + Plugin_Paused, /**< Plugin is loaded but paused */ + Plugin_Error, /**< Plugin is loaded but errored/locked */ /* All states below do not have all natives */ - Plugin_Loaded, /**< Plugin has passed loading and can be finalized */ - Plugin_Failed, /**< Plugin has a fatal failure */ - Plugin_Created, /**< Plugin is created but not initialized */ - Plugin_Uncompiled, /**< Plugin is not yet compiled by the JIT */ - Plugin_BadLoad, /**< Plugin failed to load */ - Plugin_Evicted /**< Plugin was unloaded due to an error */ + Plugin_Loaded, /**< Plugin has passed loading and can be finalized */ + Plugin_Failed, /**< Plugin has a fatal failure */ + Plugin_Created, /**< Plugin is created but not initialized */ + Plugin_Uncompiled, /**< Plugin is not yet compiled by the JIT */ + Plugin_BadLoad, /**< Plugin failed to load */ + Plugin_Evicted /**< Plugin was unloaded due to an error */ }; /** @@ -112,11 +112,11 @@ enum PluginStatus */ enum PluginInfo { - PlInfo_Name, /**< Plugin name */ - PlInfo_Author, /**< Plugin author */ - PlInfo_Description, /**< Plugin description */ - PlInfo_Version, /**< Plugin version */ - PlInfo_URL, /**< Plugin URL */ + PlInfo_Name, /**< Plugin name */ + PlInfo_Author, /**< Plugin author */ + PlInfo_Description, /**< Plugin description */ + PlInfo_Version, /**< Plugin version */ + PlInfo_URL /**< Plugin URL */ }; /** @@ -124,10 +124,10 @@ enum PluginInfo */ struct Extension { - public const char[] name; /**< Short name */ - public const char[] file; /**< Default file name */ - public bool autoload; /**< Whether or not to auto-load */ - public bool required; /**< Whether or not to require */ + public const char[] name; /**< Short name */ + public const char[] file; /**< Default file name */ + public bool autoload; /**< Whether or not to auto-load */ + public bool required; /**< Whether or not to require */ }; /** @@ -135,13 +135,29 @@ struct Extension */ struct SharedPlugin { - public const char[] name; /**< Short name */ - public const char[] file; /**< File name */ - public bool required; /**< Whether or not to require */ + public const char[] name; /**< Short name */ + public const char[] file; /**< File name */ + public bool required; /**< Whether or not to require */ }; -public float NULL_VECTOR[3]; /**< Pass this into certain functions to act as a C++ NULL */ -public const char NULL_STRING[1]; /**< pass this into certain functions to act as a C++ NULL */ +public float NULL_VECTOR[3]; /**< Pass this into certain functions to act as a C++ NULL */ +public const char NULL_STRING[1]; /**< pass this into certain functions to act as a C++ NULL */ + +/** + * Check if the given vector is the NULL_VECTOR. + * + * @param vec The vector to test. + * @return True if NULL_VECTOR, false otherwise. + */ +native bool IsNullVector(const float vec[3]); + +/** + * Check if the given string is the NULL_STRING. + * + * @param str The string to test. + * @return True if NULL_STRING, false otherwise. + */ +native bool IsNullString(const char[] str); /** * Horrible compatibility shim. @@ -161,7 +177,7 @@ native int VerifyCoreVersion(); * or otherwise non-existent, the plugin will still work. Calling * removed natives results in a run-time error. * - * @param name Native name. + * @param name Native name. */ native void MarkNativeAsOptional(const char[] name); @@ -171,7 +187,7 @@ public void __ext_core_SetNTVOptional() MarkNativeAsOptional("RequireFeature"); MarkNativeAsOptional("AddCommandListener"); MarkNativeAsOptional("RemoveCommandListener"); - + MarkNativeAsOptional("BfWriteBool"); MarkNativeAsOptional("BfWriteByte"); MarkNativeAsOptional("BfWriteChar"); @@ -230,8 +246,8 @@ public void __ext_core_SetNTVOptional() MarkNativeAsOptional("BfRead.ReadVecCoord"); MarkNativeAsOptional("BfRead.ReadVecNormal"); MarkNativeAsOptional("BfRead.ReadAngles"); - MarkNativeAsOptional("BfRead.GetNumBytesLeft"); - + MarkNativeAsOptional("BfRead.BytesLeft.get"); + MarkNativeAsOptional("PbReadInt"); MarkNativeAsOptional("PbReadFloat"); MarkNativeAsOptional("PbReadBool"); @@ -263,6 +279,7 @@ public void __ext_core_SetNTVOptional() MarkNativeAsOptional("PbAddMessage"); MarkNativeAsOptional("Protobuf.ReadInt"); + MarkNativeAsOptional("Protobuf.ReadInt64"); MarkNativeAsOptional("Protobuf.ReadFloat"); MarkNativeAsOptional("Protobuf.ReadBool"); MarkNativeAsOptional("Protobuf.ReadString"); @@ -272,6 +289,7 @@ public void __ext_core_SetNTVOptional() MarkNativeAsOptional("Protobuf.ReadVector2D"); MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount"); MarkNativeAsOptional("Protobuf.SetInt"); + MarkNativeAsOptional("Protobuf.SetInt64"); MarkNativeAsOptional("Protobuf.SetFloat"); MarkNativeAsOptional("Protobuf.SetBool"); MarkNativeAsOptional("Protobuf.SetString"); @@ -280,6 +298,7 @@ public void __ext_core_SetNTVOptional() MarkNativeAsOptional("Protobuf.SetVector"); MarkNativeAsOptional("Protobuf.SetVector2D"); MarkNativeAsOptional("Protobuf.AddInt"); + MarkNativeAsOptional("Protobuf.AddInt64"); MarkNativeAsOptional("Protobuf.AddFloat"); MarkNativeAsOptional("Protobuf.AddBool"); MarkNativeAsOptional("Protobuf.AddString"); diff --git a/env/include/cstrike.inc b/env/include/cstrike.inc index c13915e..19e3387 100644 --- a/env/include/cstrike.inc +++ b/env/include/cstrike.inc @@ -31,22 +31,22 @@ */ #if defined _cstrike_included - #endinput + #endinput #endif #define _cstrike_included -#define CS_TEAM_NONE 0 /**< No team yet. */ -#define CS_TEAM_SPECTATOR 1 /**< Spectators. */ -#define CS_TEAM_T 2 /**< Terrorists. */ -#define CS_TEAM_CT 3 /**< Counter-Terrorists. */ +#define CS_TEAM_NONE 0 /**< No team yet. */ +#define CS_TEAM_SPECTATOR 1 /**< Spectators. */ +#define CS_TEAM_T 2 /**< Terrorists. */ +#define CS_TEAM_CT 3 /**< Counter-Terrorists. */ -#define CS_SLOT_PRIMARY 0 /**< Primary weapon slot. */ -#define CS_SLOT_SECONDARY 1 /**< Secondary weapon slot. */ -#define CS_SLOT_KNIFE 2 /**< Knife slot. */ -#define CS_SLOT_GRENADE 3 /**< Grenade slot (will only return one grenade). */ -#define CS_SLOT_C4 4 /**< C4 slot. */ +#define CS_SLOT_PRIMARY 0 /**< Primary weapon slot. */ +#define CS_SLOT_SECONDARY 1 /**< Secondary weapon slot. */ +#define CS_SLOT_KNIFE 2 /**< Knife slot. */ +#define CS_SLOT_GRENADE 3 /**< Grenade slot (will only return one grenade). */ +#define CS_SLOT_C4 4 /**< C4 slot. */ -#define CS_DMG_HEADSHOT (1 << 30) /**< Headshot */ +#define CS_DMG_HEADSHOT (1 << 30) /**< Headshot */ enum CSRoundEndReason { @@ -70,8 +70,8 @@ enum CSRoundEndReason // The below only exist on CS:GO CSRoundEnd_TerroristsSurrender, /**< Terrorists Surrender */ CSRoundEnd_CTSurrender, /**< CTs Surrender */ - CSRoundEnd_TerroristsPlanted, /**< Terrorists Planted the bomb */ - CSRoundEnd_CTsReachedHostage, /**< CTs Reached the hostage */ + CSRoundEnd_TerroristsPlanted, /**< Terrorists Planted the bomb */ + CSRoundEnd_CTsReachedHostage /**< CTs Reached the hostage */ }; enum CSWeaponID @@ -109,7 +109,7 @@ enum CSWeaponID CSWeapon_SHIELD, CSWeapon_KEVLAR, CSWeapon_ASSAULTSUIT, - CSWeapon_NIGHTVISION, + CSWeapon_NIGHTVISION, //Anything below is CS:GO ONLY CSWeapon_GALILAR, CSWeapon_BIZON, CSWeapon_MAG7, @@ -130,7 +130,46 @@ enum CSWeaponID CSWeapon_MOLOTOV, CSWeapon_DECOY, CSWeapon_INCGRENADE, - CSWeapon_DEFUSER + CSWeapon_DEFUSER, + CSWeapon_HEAVYASSAULTSUIT, + //The rest are actual item definition indexes for CS:GO + CSWeapon_CUTTERS = 56, + CSWeapon_HEALTHSHOT = 57, + CSWeapon_KNIFE_T = 59, + CSWeapon_M4A1_SILENCER = 60, + CSWeapon_USP_SILENCER = 61, + CSWeapon_CZ75A = 63, + CSWeapon_REVOLVER = 64, + CSWeapon_TAGGRENADE = 68, + CSWeapon_FISTS = 69, + CSWeapon_BREACHCHARGE = 70, + CSWeapon_TABLET = 72, + CSWeapon_MELEE = 74, + CSWeapon_AXE = 75, + CSWeapon_HAMMER = 76, + CSWeapon_SPANNER = 78, + CSWeapon_KNIFE_GHOST = 80, + CSWeapon_FIREBOMB = 81, + CSWeapon_DIVERSION = 82, + CSWeapon_FRAGGRENADE = 83, + CSWeapon_SNOWBALL = 84, + CSWeapon_BUMPMINE = 85, + CSWeapon_MAX_WEAPONS_NO_KNIFES, // Max without the knife item defs, useful when treating all knives as a regular knife. + CSWeapon_BAYONET = 500, + CSWeapon_KNIFE_FLIP = 505, + CSWeapon_KNIFE_GUT = 506, + CSWeapon_KNIFE_KARAMBIT = 507, + CSWeapon_KNIFE_M9_BAYONET = 508, + CSWeapon_KNIFE_TATICAL = 509, + CSWeapon_KNIFE_FALCHION = 512, + CSWeapon_KNIFE_SURVIVAL_BOWIE = 514, + CSWeapon_KNIFE_BUTTERFLY = 515, + CSWeapon_KNIFE_PUSH = 516, + CSWeapon_KNIFE_URSUS = 519, + CSWeapon_KNIFE_GYPSY_JACKKNIFE = 520, + CSWeapon_KNIFE_STILETTO = 522, + CSWeapon_KNIFE_WIDOWMAKER = 523, + CSWeapon_MAX_WEAPONS //THIS MUST BE LAST, EASY WAY TO CREATE LOOPS. When looping, do CS_IsValidWeaponID(i), to check. }; /** @@ -138,8 +177,8 @@ enum CSWeaponID * Return Plugin_Continue to allow the purchase or return a * higher action to deny. * - * @param client Client index - * @param weapon User input for weapon name + * @param client Client index + * @param weapon User input for weapon name */ forward Action CS_OnBuyCommand(int client, const char[] weapon); @@ -148,8 +187,8 @@ forward Action CS_OnBuyCommand(int client, const char[] weapon); * Return Plugin_Continue to allow the call or return a * higher action to block. * - * @param client Client index - * @param weaponIndex Weapon index + * @param client Client index + * @param weaponIndex Weapon index */ forward Action CS_OnCSWeaponDrop(int client, int weaponIndex); @@ -160,11 +199,11 @@ forward Action CS_OnCSWeaponDrop(int client, int weaponIndex); * * @note This can be called multiple times per weapon purchase * - * @param client Client index - * @param weapon Weapon classname - * @param price Buffer param for the price of the weapon + * @param client Client index + * @param weapon Weapon classname + * @param price Buffer param for the price of the weapon * - * @note Not all "weapons" call GetWeaponPrice. Example: c4, knife, vest, vest helmet, night vision. + * @note Not all "weapons" call GetWeaponPrice. Example: c4, knife, vest, vest helmet, night vision. */ forward Action CS_OnGetWeaponPrice(int client, const char[] weapon, int &price); @@ -174,171 +213,173 @@ forward Action CS_OnGetWeaponPrice(int client, const char[] weapon, int &price); * using the given delay and reason, or return Plugin_Handled or a higher * action to block TerminateRound from firing. * - * @param delay Time (in seconds) until new round starts - * @param reason Reason for round end + * @param delay Time (in seconds) until new round starts + * @param reason Reason for round end */ forward Action CS_OnTerminateRound(float &delay, CSRoundEndReason &reason); /** * Respawns a player. * - * @param client Player's index. - * @error Invalid client index, client not in game. + * @param client Player's index. + * @error Invalid client index, client not in game. */ native void CS_RespawnPlayer(int client); /** * Switches the player's team. * - * @param client Player's index. - * @param team Team index. - * @error Invalid client index, client not in game. + * @param client Player's index. + * @param team Team index. + * @error Invalid client index, client not in game. */ native void CS_SwitchTeam(int client, int team); /** * Forces a player to drop or toss their weapon * - * @param client Player's index. - * @param weaponIndex Index of weapon to drop. - * @param toss True to toss weapon (with velocity) or false to just drop weapon - * @param blockhook Set to true to stop the corresponding CS_OnCSWeaponDrop - * - * @error Invalid client index, client not in game, or invalid weapon index. + * @param client Player's index. + * @param weaponIndex Index of weapon to drop. + * @param toss True to toss weapon (with velocity) or false to just drop weapon + * @param blockhook Set to true to stop the corresponding CS_OnCSWeaponDrop + * @error Invalid client index, client not in game, or invalid weapon index. */ native void CS_DropWeapon(int client, int weaponIndex, bool toss, bool blockhook = false); /** * Forces round to end with a reason * - * @param delay Time (in seconds) to delay before new round starts - * @param reason Reason for the round ending - * @param blockhook Set to true to stop the corresponding CS_OnTerminateRound - * forward from being called. + * @param delay Time (in seconds) to delay before new round starts + * @param reason Reason for the round ending + * @param blockhook Set to true to stop the corresponding CS_OnTerminateRound + * forward from being called. */ native void CS_TerminateRound(float delay, CSRoundEndReason reason, bool blockhook = false); /** * Gets a weapon name from a weapon alias * - * @param alias Weapons alias to get weapon name for. - * @param weapon Buffer to store weapons name - * @param size Size of buffer to store the weapons name. + * @param alias Weapons alias to get weapon name for. + * @param weapon Buffer to store weapons name + * @param size Size of buffer to store the weapons name. * - * @note Will set the buffer to the original alias if it is not an alias to a weapon. + * @note Will set the buffer to the original alias if it is not an alias to a weapon. */ native void CS_GetTranslatedWeaponAlias(const char[] alias, char[] weapon, int size); /** * Gets a weapon's price * - * @param client Client to check weapon price for. - * @param id Weapon id for the weapon to check - * @param defaultprice Set to true to get defaultprice. - * @return Returns price of the weapon (even if modified) + * @param client Client to check weapon price for. + * @param id Weapon id for the weapon to check + * @param defaultprice Set to true to get defaultprice. + * @return Returns price of the weapon (even if modified) + * @error Invalid client, failing to get weapon info, or failing to get price offset. * - * @error Invalid client, failing to get weapon info, or failing to get price offset. - * @note c4, knife and shield will always return 0. vest, vest helmet and night vision will always return default price. + * @note c4, knife and shield will always return 0. vest, vest helmet and night vision will always return default price. */ native int CS_GetWeaponPrice(int client, CSWeaponID id, bool defaultprice = false); /** * Gets a clients clan tag - * @param client Client index to get clan tag for. - * @param buffer Buffer to store clients clan tag in. - * @param size Size of the buffer. - * @return Number of non-null bytes written. * - * @error Invalid client. + * @param client Client index to get clan tag for. + * @param buffer Buffer to store clients clan tag in. + * @param size Size of the buffer. + * @return Number of non-null bytes written. + * @error Invalid client. */ native int CS_GetClientClanTag(int client, char[] buffer, int size); /** * Sets a clients clan tag - * @param client Client index to set clan tag for. - * @param tag Tag to set clients clan tag as. * - * @error Invalid client. + * @param client Client index to set clan tag for. + * @param tag Tag to set clients clan tag as. + * @error Invalid client. */ native void CS_SetClientClanTag(int client, const char[] tag); /** * Gets a team's score - * @param team Team index to get score for. - * @return Returns the internal team score. * - * @error Invalid team index. + * @param team Team index to get score for. + * @return Returns the internal team score. + * @error Invalid team index. */ native int CS_GetTeamScore(int team); /** * Sets a team's score - * @param team Team index to set score for. - * @param value Value to set teams score as. * - * @error Invalid team index. - * @note This will update the scoreboard only after the scoreboard update function is called. Use SetTeamScore plus this to update the scoreboard instantly and save values correctly. + * @param team Team index to set score for. + * @param value Value to set teams score as. + * @error Invalid team index. + * + * @note This will update the scoreboard only after the scoreboard update function is called. + * Use SetTeamScore plus this to update the scoreboard instantly and save values correctly. */ native void CS_SetTeamScore(int team, int value); /** * Gets a client's mvp count - * @param client Client index to get mvp count of. - * @return Returns the client's internal MVP count. * - * @error Invalid client. + * @param client Client index to get mvp count of. + * @return Returns the client's internal MVP count. + * @error Invalid client. */ native int CS_GetMVPCount(int client); /** * Sets a client's mvp count - * @param client Client index to set mvp count for. - * @param value Value to set client's mvp count as. * - * @error Invalid client. + * @param client Client index to set mvp count for. + * @param value Value to set client's mvp count as. + * @error Invalid client. */ native void CS_SetMVPCount(int client, int value); /** * Gets a client's contribution score (CS:GO only) - * @param client Client index to get score of. - * @return Returns the client's score. * - * @error Invalid client. + * @param client Client index to get score of. + * @return Returns the client's score. + * @error Invalid client. */ native int CS_GetClientContributionScore(int client); /** * Sets a client's contribution score (CS:GO only) - * @param client Client index to set score for. - * @param value Value to set client's score as. * - * @error Invalid client. + * @param client Client index to set score for. + * @param value Value to set client's score as. + * @error Invalid client. */ native void CS_SetClientContributionScore(int client, int value); /** * Gets a client's assists (CS:GO only) - * @param client Client index to get assists of. - * @return Returns the client's assists. * - * @error Invalid client. + * @param client Client index to get assists of. + * @return Returns the client's assists. + * @error Invalid client. */ native int CS_GetClientAssists(int client); /** * Sets a client's assists (CS:GO only) - * @param client Client index to set assists for. - * @param value Value to set client's assists as. * - * @error Invalid client. + * @param client Client index to set assists for. + * @param value Value to set client's assists as. + * @error Invalid client. */ native void CS_SetClientAssists(int client, int value); /** * Gets a weaponID from a alias - * @param alias Weapon alias to attempt to get an id for. - * @return Returns a weapon id or 0 if failed to find a match. + * + * @param alias Weapon alias to attempt to get an id for. + * @return Returns a weapon id or 0 if failed to find a match. * * @note For best results use CS_GetTranslatedWeaponAlias on the weapon name before passing it. */ @@ -346,30 +387,54 @@ native CSWeaponID CS_AliasToWeaponID(const char[] alias); /** * Gets a alias from a weaponID - * @param weaponID WeaponID to get alias for. - * @param destination Destination string to hold the weapon alias. - * @param len Length of the destination array. - * @return Returns number of cells written. + * + * @param weaponID WeaponID to get alias for. + * @param destination Destination string to hold the weapon alias. + * @param len Length of the destination array. + * @return Returns number of cells written. */ native int CS_WeaponIDToAlias(CSWeaponID weaponID, char[] destination, int len); /** * Returns weather a WeaponID is valid on the current mod (css or csgo) - * @param weaponID WeaponID to check - * @return Returns true if its a valid WeaponID false otherwise. * - * @note This will return false always for CSWeapon_NONE + * @param weaponID WeaponID to check + * @return Returns true if its a valid WeaponID false otherwise. + * + * @note This will return false always for CSWeapon_NONE. Should only be called after OnMapStart since weapon info isnt intialized before. */ native bool CS_IsValidWeaponID(CSWeaponID id); /** * Sets a player's model based on their current class * - * @param client Player's index. - * @error Invalid client index, client not in game. + * @param client Player's index. + * @error Invalid client index, client not in game. */ native void CS_UpdateClientModel(int client); +/** + * Returns a CSWeaponID equivalent based on the item definition index. + * + * @param iDefIndex Definition index to get the CSWeaponID value for. + * @return Returns CSWeaponID value for the definition index. + * @error Invalid definition index. + * + * @note In most cases the id will be the item definition index. Works for CS:GO ONLY. + */ +native CSWeaponID CS_ItemDefIndexToID(int iDefIndex); + +/** + * Returns a item definition index equivalent based on the CSWeaponID. + * + * @param id CSWeaponID to get the item definition for. + * @return Returns item definition index value for the weapon id. + * @error Invalid weapon id. + * + * @note In most cases the item deinition index will be the id. Works for CS:GO ONLY. + */ +native int CS_WeaponIDToItemDefIndex(CSWeaponID id); + /** * Do not edit below this line! */ @@ -408,5 +473,7 @@ public void __ext_cstrike_SetNTVOptional() MarkNativeAsOptional("CS_WeaponIDToAlias"); MarkNativeAsOptional("CS_IsValidWeaponID"); MarkNativeAsOptional("CS_UpdateClientModel"); + MarkNativeAsOptional("CS_ItemDefIndexToID"); + MarkNativeAsOptional("CS_WeaponIDToItemDefIndex"); } #endif diff --git a/env/include/datapack.inc b/env/include/datapack.inc index a8c0b64..07fe0b2 100644 --- a/env/include/datapack.inc +++ b/env/include/datapack.inc @@ -39,7 +39,7 @@ /** * Opaque handle to a datapack position. */ - enum DataPackPos: {}; +enum DataPackPos: {}; // A DataPack allows serializing multiple variables into a single stream. methodmap DataPack < Handle @@ -49,55 +49,59 @@ methodmap DataPack < Handle // Packs a normal cell into a data pack. // - // @param cell Cell to add. - public native void WriteCell(any cell); + // @param cell Cell to add. + // @param insert Determines whether mid-pack writes will insert instead of overwrite. + public native void WriteCell(any cell, bool insert = false); // Packs a float into a data pack. // - // @param val Float to add. - public native void WriteFloat(float val); + // @param val Float to add. + // @param insert Determines whether mid-pack writes will insert instead of overwrite. + public native void WriteFloat(float val, bool insert = false); // Packs a string into a data pack. // - // @param str String to add. - public native void WriteString(const char[] str); + // @param str String to add. + // @param insert Determines whether mid-pack writes will insert instead of overwrite. + public native void WriteString(const char[] str, bool insert = false); // Packs a function pointer into a data pack. // - // @param fktptr Function pointer to add. - public native void WriteFunction(Function fktptr); + // @param fktptr Function pointer to add. + // @param insert Determines whether mid-pack writes will insert instead of overwrite. + public native void WriteFunction(Function fktptr, bool insert = false); // Reads a cell from a data pack. // - // @param pack Handle to the data pack. + // @param pack Handle to the data pack. public native any ReadCell(); // Reads a float from a data pack. // - // @param pack Handle to the data pack. + // @param pack Handle to the data pack. public native float ReadFloat(); // Reads a string from a data pack. // - // @param buffer Destination string buffer. - // @param maxlen Maximum length of output string buffer. + // @param buffer Destination string buffer. + // @param maxlen Maximum length of output string buffer. public native void ReadString(char[] buffer, int maxlen); // Reads a function pointer from a data pack. // - // @return Function pointer. + // @return Function pointer. public native Function ReadFunction(); // Resets the position in a data pack. // - // @param clear If true, clears the contained data. + // @param clear If true, clears the contained data. public native void Reset(bool clear=false); // Returns whether or not a specified number of bytes from the data pack // position to the end can be read. // - // @param bytes Number of bytes to simulate reading. - public native bool IsReadable(); + // @param unused Unused variable. Exists for backwards compatability. + public native bool IsReadable(int unused = 0); // The read or write position in a data pack. property DataPackPos Position { @@ -109,117 +113,117 @@ methodmap DataPack < Handle /** * Creates a new data pack. * - * @return A Handle to the data pack. Must be closed with CloseHandle(). + * @return A Handle to the data pack. Must be closed with CloseHandle(). */ native DataPack CreateDataPack(); /** * Packs a normal cell into a data pack. * - * @param pack Handle to the data pack. - * @param cell Cell to add. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @param cell Cell to add. + * @error Invalid handle. */ native void WritePackCell(Handle pack, any cell); /** * Packs a float into a data pack. * - * @param pack Handle to the data pack. - * @param val Float to add. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @param val Float to add. + * @error Invalid handle. */ native void WritePackFloat(Handle pack, float val); /** * Packs a string into a data pack. * - * @param pack Handle to the data pack. - * @param str String to add. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @param str String to add. + * @error Invalid handle. */ native void WritePackString(Handle pack, const char[] str); /** * Packs a function pointer into a data pack. * - * @param pack Handle to the data pack. - * @param fktptr Function pointer to add. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @param fktptr Function pointer to add. + * @error Invalid handle. */ native void WritePackFunction(Handle pack, Function fktptr); /** * Reads a cell from a data pack. * - * @param pack Handle to the data pack. - * @return Cell value. - * @error Invalid handle, or bounds error. + * @param pack Handle to the data pack. + * @return Cell value. + * @error Invalid handle, or bounds error. */ native any ReadPackCell(Handle pack); /** * Reads a float from a data pack. * - * @param pack Handle to the data pack. - * @return Float value. - * @error Invalid handle, or bounds error. + * @param pack Handle to the data pack. + * @return Float value. + * @error Invalid handle, or bounds error. */ native float ReadPackFloat(Handle pack); /** * Reads a string from a data pack. * - * @param pack Handle to the data pack. - * @param buffer Destination string buffer. - * @param maxlen Maximum length of output string buffer. - * @error Invalid handle, or bounds error. + * @param pack Handle to the data pack. + * @param buffer Destination string buffer. + * @param maxlen Maximum length of output string buffer. + * @error Invalid handle, or bounds error. */ native void ReadPackString(Handle pack, char[] buffer, int maxlen); /** * Reads a function pointer from a data pack. * - * @param pack Handle to the data pack. - * @return Function pointer. - * @error Invalid handle, or bounds error. + * @param pack Handle to the data pack. + * @return Function pointer. + * @error Invalid handle, or bounds error. */ native Function ReadPackFunction(Handle pack); /** * Resets the position in a data pack. * - * @param pack Handle to the data pack. - * @param clear If true, clears the contained data. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @param clear If true, clears the contained data. + * @error Invalid handle. */ native void ResetPack(Handle pack, bool clear=false); /** * Returns the read or write position in a data pack. * - * @param pack Handle to the data pack. - * @return Position in the data pack, only usable with calls to SetPackPosition. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @return Position in the data pack, only usable with calls to SetPackPosition. + * @error Invalid handle. */ native DataPackPos GetPackPosition(Handle pack); /** * Sets the read/write position in a data pack. * - * @param pack Handle to the data pack. - * @param position New position to set. Must have been previously retrieved from a call to GetPackPosition. - * @error Invalid handle, or position is beyond the pack bounds. + * @param pack Handle to the data pack. + * @param position New position to set. Must have been previously retrieved from a call to GetPackPosition. + * @error Invalid handle, or position is beyond the pack bounds. */ native void SetPackPosition(Handle pack, DataPackPos position); /** * Returns whether or not a specified number of bytes from the data pack - * position to the end can be read. + * position to the end can be read. * - * @param pack Handle to the data pack. - * @param bytes Number of bytes to simulate reading. - * @return True if can be read, false otherwise. - * @error Invalid handle. + * @param pack Handle to the data pack. + * @param bytes Number of bytes to simulate reading. + * @return True if can be read, false otherwise. + * @error Invalid handle. */ native bool IsPackReadable(Handle pack, int bytes); diff --git a/env/include/dbi.inc b/env/include/dbi.inc index 7c86954..e43a23c 100644 --- a/env/include/dbi.inc +++ b/env/include/dbi.inc @@ -40,10 +40,10 @@ */ enum DBResult { - DBVal_Error = 0, /**< Column number/field is invalid. */ - DBVal_TypeMismatch = 1, /**< You cannot retrieve this data with this type. */ - DBVal_Null = 2, /**< Field has no data (NULL) */ - DBVal_Data = 3, /**< Field has data */ + DBVal_Error = 0, /**< Column number/field is invalid. */ + DBVal_TypeMismatch = 1, /**< You cannot retrieve this data with this type. */ + DBVal_Null = 2, /**< Field has no data (NULL) */ + DBVal_Data = 3 /**< Field has data */ }; /** @@ -51,9 +51,9 @@ enum DBResult */ enum DBBindType { - DBBind_Int = 0, /**< Bind an integer. */ - DBBind_Float = 1, /**< Bind a float. */ - DBBind_String = 2, /**< Bind a string. */ + DBBind_Int = 0, /**< Bind an integer. */ + DBBind_Float = 1, /**< Bind a float. */ + DBBind_String = 2 /**< Bind a string. */ }; /** @@ -61,9 +61,9 @@ enum DBBindType */ enum DBPriority { - DBPrio_High = 0, /**< High priority. */ - DBPrio_Normal = 1, /**< Normal priority. */ - DBPrio_Low = 2, /**< Low priority. */ + DBPrio_High = 0, /**< High priority. */ + DBPrio_Normal = 1, /**< Normal priority. */ + DBPrio_Low = 2 /**< Low priority. */ }; // A Driver represents a database backend, currently MySQL or SQLite. @@ -192,8 +192,7 @@ methodmap DBResultSet < Handle // @return Number of bytes written. // @error Invalid field index, invalid type conversion requested // from the database, or no current result set. - public native int FetchString(int field, char[] buffer, int maxlength, - DBResult &result=DBVal_Error); + public native int FetchString(int field, char[] buffer, int maxlength, DBResult &result=DBVal_Error); // Fetches a float from a field in the current row of a result set. // If the result is NULL, a value of 0.0 will be returned. A NULL @@ -257,14 +256,16 @@ typeset SQLTxnSuccess function void (Database db, any data, int numQueries, DBResultSet[] results, any[] queryData); } -// Callback for a failed transaction. -// -// @param db Database handle. -// @param data Data value passed to SQL_ExecuteTransaction(). -// @param numQueries Number of queries executed in the transaction. -// @param error Error message. -// @param failIndex Index of the query that failed, or -1 if something else. -// @param queryData An array of each data value passed to SQL_AddQuery(). +/** + * Callback for a failed transaction. + * + * @param db Database handle. + * @param data Data value passed to SQL_ExecuteTransaction(). + * @param numQueries Number of queries executed in the transaction. + * @param error Error message. + * @param failIndex Index of the query that failed, or -1 if something else. + * @param queryData An array of each data value passed to SQL_AddQuery(). + */ typedef SQLTxnFailure = function void (Database db, any data, int numQueries, const char[] error, int failIndex, any[] queryData); // A Transaction is a collection of SQL statements that must all execute @@ -315,23 +316,27 @@ methodmap DBStatement < Handle public native void BindString(int param, const char[] value, bool copy); }; -// Callback for receiving asynchronous database connections. -// -// @param db Handle to the database connection. -// @param error Error string if there was an error. The error could be -// empty even if an error condition exists, so it is important -// to check the actual Handle value instead. -// @param data Data passed in via the original threaded invocation. +/** + * Callback for receiving asynchronous database connections. + * + * @param db Handle to the database connection. + * @param error Error string if there was an error. The error could be + * empty even if an error condition exists, so it is important + * to check the actual Handle value instead. + * @param data Data passed in via the original threaded invocation. + */ typedef SQLConnectCallback = function void (Database db, const char[] error, any data); -// Callback for receiving asynchronous database query results. -// -// @param db Cloned handle to the database connection. -// @param results Result object, or null on failure. -// @param error Error string if there was an error. The error could be -// empty even if an error condition exists, so it is important -// to check the actual results value instead. -// @param data Data passed in via the original threaded invocation. +/** + * Callback for receiving asynchronous database query results. + * + * @param db Cloned handle to the database connection. + * @param results Result object, or null on failure. + * @param error Error string if there was an error. The error could be + * empty even if an error condition exists, so it is important + * to check the actual results value instead. + * @param data Data passed in via the original threaded invocation. + */ typedef SQLQueryCallback = function void (Database db, DBResultSet results, const char[] error, any data); // A Database represents a live connection to a database, either over the @@ -340,9 +345,9 @@ methodmap Database < Handle { // Connects to a database asynchronously, so the game thread is not blocked. // - // @param callback Callback. If no driver was found, the owner is null. - // @param name Database configuration name. - // @param data Extra data value to pass to the callback. + // @param callback Callback. If no driver was found, the owner is null. + // @param name Database configuration name. + // @param data Extra data value to pass to the callback. public static native void Connect(SQLConnectCallback callback, const char[] name="default", any data=0); // Returns the driver for this database connection. @@ -372,14 +377,24 @@ methodmap Database < Handle // encloses the string in ''. While drivers tend to allow " instead, the string // may be not be escaped (for example, on SQLite)! // - // @param string String to quote. - // @param buffer Buffer to store quoted string in. - // @param maxlength Maximum length of the buffer. - // @param written Optionally returns the number of bytes written. - // @return True on success, false if buffer is not big enough. - // The buffer must be at least 2*strlen(string)+1. + // @param string String to quote. + // @param buffer Buffer to store quoted string in. + // @param maxlength Maximum length of the buffer. + // @param written Optionally returns the number of bytes written. + // @return True on success, false if buffer is not big enough. + // The buffer must be at least 2*strlen(string)+1. public native bool Escape(const char[] string, char[] buffer, int maxlength, int &written=0); + // Formats a string according to the SourceMod format rules (see documentation). + // All format specifiers are escaped (see SQL_EscapeString) unless the '!' flag is used. + // + // @param buffer Destination string buffer. + // @param maxlength Maximum length of output string buffer. + // @param format Formatting rules. + // @param ... Variable number of format parameters. + // @return Number of cells written. + public native int Format(const char[] buffer, int maxlength, const char[] format, any ...); + // Returns whether a database is the same connection as another database. public native bool IsSameConnection(Database other); @@ -405,11 +420,11 @@ methodmap Database < Handle // automatically closed. When the transaction completes, the optional // callback is invoked. // - // @param txn A transaction handle. - // @param onSuccess An optional callback to receive a successful transaction. - // @param onError An optional callback to receive an error message. - // @param data An optional value to pass to callbacks. - // @param prio Priority queue to use. + // @param txn A transaction handle. + // @param onSuccess An optional callback to receive a successful transaction. + // @param onError An optional callback to receive an error message. + // @param data An optional value to pass to callbacks. + // @param prio Priority queue to use. public native void Execute(Transaction txn, SQLTxnSuccess onSuccess = INVALID_FUNCTION, SQLTxnFailure onError = INVALID_FUNCTION, @@ -420,24 +435,24 @@ methodmap Database < Handle /** * Creates an SQL connection from a named configuration. * - * @param confname Named configuration. - * @param persistent True to re-use a previous persistent connection if - * possible, false otherwise. - * @param error Error buffer. - * @param maxlength Maximum length of the error buffer. - * @return A database connection Handle, or INVALID_HANDLE on failure. + * @param confname Named configuration. + * @param persistent True to re-use a previous persistent connection if + * possible, false otherwise. + * @param error Error buffer. + * @param maxlength Maximum length of the error buffer. + * @return A database connection Handle, or INVALID_HANDLE on failure. */ native Database SQL_Connect(const char[] confname, bool persistent, char[] error, int maxlength); /** * Creates a default SQL connection. * - * @param error Error buffer. - * @param maxlength Maximum length of the error buffer. - * @param persistent True to re-use a previous persistent connection - * if possible, false otherwise. - * @return A database connection Handle, or INVALID_HANDLE on failure. - * On failure the error buffer will be filled with a message. + * @param error Error buffer. + * @param maxlength Maximum length of the error buffer. + * @param persistent True to re-use a previous persistent connection + * if possible, false otherwise. + * @return A database connection Handle, or INVALID_HANDLE on failure. + * On failure the error buffer will be filled with a message. */ stock Database SQL_DefConnect(char[] error, int maxlength, bool persistent=true) { @@ -456,19 +471,19 @@ stock Database SQL_DefConnect(char[] error, int maxlength, bool persistent=true) * In general it is discouraged to use this function. Connections should go through * databases.cfg for greatest flexibility on behalf of users. * - * @param keyvalues Key/value pairs from a KeyValues handle, describing the connection. - * @param error Error buffer. - * @param maxlength Maximum length of the error buffer. - * @param persistent True to re-use a previous persistent connection if - * possible, false otherwise. - * @return A database connection Handle, or INVALID_HANDLE on failure. - * On failure the error buffer will be filled with a message. - * @error Invalid KeyValues handle. + * @param keyvalues Key/value pairs from a KeyValues handle, describing the connection. + * @param error Error buffer. + * @param maxlength Maximum length of the error buffer. + * @param persistent True to re-use a previous persistent connection if + * possible, false otherwise. + * @return A database connection Handle, or INVALID_HANDLE on failure. + * On failure the error buffer will be filled with a message. + * @error Invalid KeyValues handle. */ native Database SQL_ConnectCustom(Handle keyvalues, - char[] error, - int maxlength, - bool persistent); + char[] error, + int maxlength, + bool persistent); /** * Grabs a handle to an SQLite database, creating one if it does not exist. @@ -479,15 +494,13 @@ native Database SQL_ConnectCustom(Handle keyvalues, * As a precaution, you should always create some sort of unique prefix to your table names so * there are no conflicts, and you should never drop or modify tables that you do not own. * - * @param database Database name. - * @param error Error buffer. - * @param maxlength Maximum length of the error buffer. - * @return A database connection Handle, or INVALID_HANDLE on failure. - * On failure the error buffer will be filled with a message. + * @param database Database name. + * @param error Error buffer. + * @param maxlength Maximum length of the error buffer. + * @return A database connection Handle, or INVALID_HANDLE on failure. + * On failure the error buffer will be filled with a message. */ -stock Database SQLite_UseDatabase(const char[] database, - char[] error, - int maxlength) +stock Database SQLite_UseDatabase(const char[] database, char[] error, int maxlength) { KeyValues kv = new KeyValues(""); kv.SetString("driver", "sqlite"); @@ -502,6 +515,7 @@ stock Database SQLite_UseDatabase(const char[] database, /** * This function is deprecated. Use SQL_ConnectCustom or SQLite_UseDatabase instead. + * @deprecated */ #pragma deprecated Use SQL_ConnectCustom instead. native Handle SQL_ConnectEx(Handle driver, @@ -518,8 +532,8 @@ native Handle SQL_ConnectEx(Handle driver, /** * Returns if a named configuration is present in databases.cfg. * - * @param name Configuration name. - * @return True if it exists, false otherwise. + * @param name Configuration name. + * @return True if it exists, false otherwise. */ native bool SQL_CheckConfig(const char[] name); @@ -529,19 +543,19 @@ native bool SQL_CheckConfig(const char[] name); * If the driver is not found, SourceMod will attempt * to load an extension named dbi..ext.[dll|so]. * - * @param name Driver identification string, or an empty - * string to return the default driver. - * @return Driver Handle, or INVALID_HANDLE on failure. + * @param name Driver identification string, or an empty + * string to return the default driver. + * @return Driver Handle, or INVALID_HANDLE on failure. */ native Handle SQL_GetDriver(const char[] name=""); /** * Reads the driver of an opened database. * - * @param database Database Handle. - * @param ident Option buffer to store the identification string. - * @param ident_length Maximum length of the buffer. - * @return Driver Handle. + * @param database Database Handle. + * @param ident Option buffer to store the identification string. + * @param ident_length Maximum length of the buffer. + * @return Driver Handle. */ native Handle SQL_ReadDriver(Handle database, char[] ident="", int ident_length=0); @@ -550,10 +564,10 @@ native Handle SQL_ReadDriver(Handle database, char[] ident="", int ident_length= * * Example: "mysql", "sqlite" * - * @param driver Driver Handle, or INVALID_HANDLE for the default driver. - * @param ident Identification string buffer. - * @param maxlength Maximum length of the buffer. - * @error Invalid Handle other than INVALID_HANDLE. + * @param driver Driver Handle, or INVALID_HANDLE for the default driver. + * @param ident Identification string buffer. + * @param maxlength Maximum length of the buffer. + * @error Invalid Handle other than INVALID_HANDLE. */ native void SQL_GetDriverIdent(Handle driver, char[] ident, int maxlength); @@ -562,10 +576,10 @@ native void SQL_GetDriverIdent(Handle driver, char[] ident, int maxlength); * * Example: "MySQL", "SQLite" * - * @param driver Driver Handle, or INVALID_HANDLE for the default driver. - * @param product Product string buffer. - * @param maxlength Maximum length of the buffer. - * @error Invalid Handle other than INVALID_HANDLE. + * @param driver Driver Handle, or INVALID_HANDLE for the default driver. + * @param product Product string buffer. + * @param maxlength Maximum length of the buffer. + * @error Invalid Handle other than INVALID_HANDLE. */ native void SQL_GetDriverProduct(Handle driver, char[] product, int maxlength); @@ -584,29 +598,29 @@ native bool SQL_SetCharset(Handle database, const char[] charset); /** * Returns the number of affected rows from the last query. * - * @param hndl A database OR statement Handle. - * @return Number of rows affected by the last query. - * @error Invalid database or statement Handle. + * @param hndl A database OR statement Handle. + * @return Number of rows affected by the last query. + * @error Invalid database or statement Handle. */ native int SQL_GetAffectedRows(Handle hndl); /** * Returns the last query's insertion id. * - * @param hndl A database, query, OR statement Handle. - * @return Last query's insertion id. - * @error Invalid database, query, or statement Handle. + * @param hndl A database, query, OR statement Handle. + * @return Last query's insertion id. + * @error Invalid database, query, or statement Handle. */ native int SQL_GetInsertId(Handle hndl); /** * Returns the error reported by the last query. * - * @param hndl A database, query, OR statement Handle. - * @param error Error buffer. - * @param maxlength Maximum length of the buffer. - * @return True if there was an error, false otherwise. - * @error Invalid database, query, or statement Handle. + * @param hndl A database, query, OR statement Handle. + * @param error Error buffer. + * @param maxlength Maximum length of the buffer. + * @return True if there was an error, false otherwise. + * @error Invalid database, query, or statement Handle. */ native bool SQL_GetError(Handle hndl, char[] error, int maxlength); @@ -624,14 +638,14 @@ native bool SQL_GetError(Handle hndl, char[] error, int maxlength); * encloses the string in ''. While drivers tend to allow " instead, the string * may be not be escaped (for example, on SQLite)! * - * @param database A database Handle. - * @param string String to quote. - * @param buffer Buffer to store quoted string in. - * @param maxlength Maximum length of the buffer. - * @param written Optionally returns the number of bytes written. - * @return True on success, false if buffer is not big enough. - * The buffer must be at least 2*strlen(string)+1. - * @error Invalid database or statement Handle. + * @param database A database Handle. + * @param string String to quote. + * @param buffer Buffer to store quoted string in. + * @param maxlength Maximum length of the buffer. + * @param written Optionally returns the number of bytes written. + * @return True on success, false if buffer is not big enough. + * The buffer must be at least 2*strlen(string)+1. + * @error Invalid database or statement Handle. */ native bool SQL_EscapeString(Handle database, const char[] string, @@ -640,9 +654,23 @@ native bool SQL_EscapeString(Handle database, int &written=0); /** - * This is a backwards compatibility stock. You should use SQL_EscapeString() - * instead, as this function will probably be deprecated in SourceMod 1.1. + * Formats a string according to the SourceMod format rules (see documentation). + * All format specifiers are escaped (see SQL_EscapeString) unless the '!' flag is used. + * + * @param database A database Handle. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @return Number of cells written. */ +native int SQL_FormatQuery(Handle database, const char[] buffer, int maxlength, const char[] format, any ...); + +/** + * This function is deprecated. Use SQL_EscapeString instead. + * @deprecated + */ +#pragma deprecated Use SQL_EscapeString instead. stock bool SQL_QuoteString(Handle database, const char[] string, char[] buffer, @@ -655,14 +683,14 @@ stock bool SQL_QuoteString(Handle database, /** * Executes a query and ignores the result set. * - * @param database A database Handle. - * @param query Query string. - * @param len Optional parameter to specify the query length, in - * bytes. This can be used to send binary queries that - * have a premature terminator. - * @return True if query succeeded, false otherwise. Use - * SQL_GetError to find the last error. - * @error Invalid database Handle. + * @param database A database Handle. + * @param query Query string. + * @param len Optional parameter to specify the query length, in + * bytes. This can be used to send binary queries that + * have a premature terminator. + * @return True if query succeeded, false otherwise. Use + * SQL_GetError to find the last error. + * @error Invalid database Handle. */ native bool SQL_FastQuery(Handle database, const char[] query, int len=-1); @@ -670,14 +698,14 @@ native bool SQL_FastQuery(Handle database, const char[] query, int len=-1); * Executes a simple query and returns a new query Handle for * receiving the results. * - * @param database A database Handle. - * @param query Query string. - * @param len Optional parameter to specify the query length, in - * bytes. This can be used to send binary queries that - * have a premature terminator. - * @return A new Query Handle on success, INVALID_HANDLE - * otherwise. The Handle must be freed with CloseHandle(). - * @error Invalid database Handle. + * @param database A database Handle. + * @param query Query string. + * @param len Optional parameter to specify the query length, in + * bytes. This can be used to send binary queries that + * have a premature terminator. + * @return A new Query Handle on success, INVALID_HANDLE + * otherwise. The Handle must be freed with CloseHandle(). + * @error Invalid database Handle. */ native DBResultSet SQL_Query(Handle database, const char[] query, int len=-1); @@ -689,13 +717,13 @@ native DBResultSet SQL_Query(Handle database, const char[] query, int len=-1); * * Statement handles will work in any function that accepts a Query handle. * - * @param database A database Handle. - * @param query Query string. - * @param error Error buffer. - * @param maxlength Maximum size of the error buffer. - * @return A new statement Handle on success, INVALID_HANDLE - * otherwise. The Handle must be freed with CloseHandle(). - * @error Invalid database Handle. + * @param database A database Handle. + * @param query Query string. + * @param error Error buffer. + * @param maxlength Maximum size of the error buffer. + * @return A new statement Handle on success, INVALID_HANDLE + * otherwise. The Handle must be freed with CloseHandle(). + * @error Invalid database Handle. */ native DBStatement SQL_PrepareQuery(Handle database, const char[] query, char[] error, int maxlength); @@ -707,9 +735,9 @@ native DBStatement SQL_PrepareQuery(Handle database, const char[] query, char[] * query. If this is the case, all result sets must be processed before * another query is made. * - * @param query A query Handle. - * @return True if there was another result set, false otherwise. - * @error Invalid query Handle. + * @param query A query Handle. + * @return True if there was another result set, false otherwise. + * @error Invalid query Handle. */ native bool SQL_FetchMoreResults(Handle query); @@ -718,50 +746,50 @@ native bool SQL_FetchMoreResults(Handle query); * return true even if 0 results were returned, but false * on queries like UPDATE, INSERT, or DELETE. * - * @param query A query (or statement) Handle. - * @return True if there is a result set, false otherwise. - * @error Invalid query Handle. + * @param query A query (or statement) Handle. + * @return True if there is a result set, false otherwise. + * @error Invalid query Handle. */ native bool SQL_HasResultSet(Handle query); /** * Retrieves the number of rows in the last result set. * - * @param query A query (or statement) Handle. - * @return Number of rows in the current result set. - * @error Invalid query Handle. + * @param query A query (or statement) Handle. + * @return Number of rows in the current result set. + * @error Invalid query Handle. */ native int SQL_GetRowCount(Handle query); /** * Retrieves the number of fields in the last result set. * - * @param query A query (or statement) Handle. - * @return Number of fields in the current result set. - * @error Invalid query Handle. + * @param query A query (or statement) Handle. + * @return Number of fields in the current result set. + * @error Invalid query Handle. */ native int SQL_GetFieldCount(Handle query); /** * Retrieves the name of a field by index. * - * @param query A query (or statement) Handle. - * @param field Field number (starting from 0). - * @param name Name buffer. - * @param maxlength Maximum length of the name buffer. - * @error Invalid query Handle, invalid field index, or - * no current result set. + * @param query A query (or statement) Handle. + * @param field Field number (starting from 0). + * @param name Name buffer. + * @param maxlength Maximum length of the name buffer. + * @error Invalid query Handle, invalid field index, or + * no current result set. */ native void SQL_FieldNumToName(Handle query, int field, char[] name, int maxlength); /** * Retrieves a field index by name. * - * @param query A query (or statement) Handle. - * @param name Name of the field (case sensitive). - * @param field Variable to store field index in. - * @return True if found, false if not found. - * @error Invalid query Handle or no current result set. + * @param query A query (or statement) Handle. + * @param name Name of the field (case sensitive). + * @param field Variable to store field index in. + * @return True if found, false if not found. + * @error Invalid query Handle or no current result set. */ native bool SQL_FieldNameToNum(Handle query, const char[] name, int &field); @@ -772,27 +800,27 @@ native bool SQL_FieldNameToNum(Handle query, const char[] name, int &field); * If this function fails, SQL_MoreResults() can be used to * tell if there was an error or the result set is finished. * - * @param query A query (or statement) Handle. - * @return True if a row was fetched, false otherwise. - * @error Invalid query Handle. + * @param query A query (or statement) Handle. + * @return True if a row was fetched, false otherwise. + * @error Invalid query Handle. */ native bool SQL_FetchRow(Handle query); /** * Returns if there are more rows. * - * @param query A query (or statement) Handle. - * @return True if there are more rows, false otherwise. - * @error Invalid query Handle. + * @param query A query (or statement) Handle. + * @return True if there are more rows, false otherwise. + * @error Invalid query Handle. */ native bool SQL_MoreRows(Handle query); /** * Rewinds a result set back to the first result. * - * @param query A query (or statement) Handle. - * @return True on success, false otherwise. - * @error Invalid query Handle or no current result set. + * @param query A query (or statement) Handle. + * @return True on success, false otherwise. + * @error Invalid query Handle or no current result set. */ native bool SQL_Rewind(Handle query); @@ -801,15 +829,15 @@ native bool SQL_Rewind(Handle query); * If the result is NULL, an empty string will be returned. A NULL * check can be done with the result parameter, or SQL_IsFieldNull(). * - * @param query A query (or statement) Handle. - * @param field The field index (starting from 0). - * @param buffer String buffer. - * @param maxlength Maximum size of the string buffer. - * @param result Optional variable to store the status of the return value. - * @return Number of bytes written. - * @error Invalid query Handle or field index, invalid - * type conversion requested from the database, - * or no current result set. + * @param query A query (or statement) Handle. + * @param field The field index (starting from 0). + * @param buffer String buffer. + * @param maxlength Maximum size of the string buffer. + * @param result Optional variable to store the status of the return value. + * @return Number of bytes written. + * @error Invalid query Handle or field index, invalid + * type conversion requested from the database, + * or no current result set. */ native int SQL_FetchString(Handle query, int field, char[] buffer, int maxlength, DBResult &result=DBVal_Error); @@ -818,13 +846,13 @@ native int SQL_FetchString(Handle query, int field, char[] buffer, int maxlength * If the result is NULL, a value of 0.0 will be returned. A NULL * check can be done with the result parameter, or SQL_IsFieldNull(). * - * @param query A query (or statement) Handle. - * @param field The field index (starting from 0). - * @param result Optional variable to store the status of the return value. - * @return A float value. - * @error Invalid query Handle or field index, invalid - * type conversion requested from the database, - * or no current result set. + * @param query A query (or statement) Handle. + * @param field The field index (starting from 0). + * @param result Optional variable to store the status of the return value. + * @return A float value. + * @error Invalid query Handle or field index, invalid + * type conversion requested from the database, + * or no current result set. */ native float SQL_FetchFloat(Handle query, int field, DBResult &result=DBVal_Error); @@ -833,13 +861,13 @@ native float SQL_FetchFloat(Handle query, int field, DBResult &result=DBVal_Erro * If the result is NULL, a value of 0 will be returned. A NULL * check can be done with the result parameter, or SQL_IsFieldNull(). * - * @param query A query (or statement) Handle. - * @param field The field index (starting from 0). - * @param result Optional variable to store the status of the return value. - * @return An integer value. - * @error Invalid query Handle or field index, invalid - * type conversion requested from the database, - * or no current result set. + * @param query A query (or statement) Handle. + * @param field The field index (starting from 0). + * @param result Optional variable to store the status of the return value. + * @return An integer value. + * @error Invalid query Handle or field index, invalid + * type conversion requested from the database, + * or no current result set. */ native int SQL_FetchInt(Handle query, int field, DBResult &result=DBVal_Error); @@ -847,11 +875,11 @@ native int SQL_FetchInt(Handle query, int field, DBResult &result=DBVal_Error); * Returns whether a field's data in the current row of a result set is * NULL or not. NULL is an SQL type which means "no data." * - * @param query A query (or statement) Handle. - * @param field The field index (starting from 0). - * @return True if data is NULL, false otherwise. - * @error Invalid query Handle or field index, or no - * current result set. + * @param query A query (or statement) Handle. + * @param field The field index (starting from 0). + * @return True if data is NULL, false otherwise. + * @error Invalid query Handle or field index, or no + * current result set. */ native bool SQL_IsFieldNull(Handle query, int field); @@ -861,59 +889,59 @@ native bool SQL_IsFieldNull(Handle query, int field); * bytes to use. Note that the return value does not include the null * terminator. * - * @param query A query (or statement) Handle. - * @param field The field index (starting from 0). - * @return Number of bytes for the field's data size. - * @error Invalid query Handle or field index or no - * current result set. + * @param query A query (or statement) Handle. + * @param field The field index (starting from 0). + * @return Number of bytes for the field's data size. + * @error Invalid query Handle or field index or no + * current result set. */ native int SQL_FetchSize(Handle query, int field); /** * Binds a parameter in a prepared statement to a given integer value. * - * @param statement A statement (prepared query) Handle. - * @param param The parameter index (starting from 0). - * @param number The number to bind. - * @param signed True to bind the number as signed, false to - * bind it as unsigned. - * @error Invalid statement Handle or parameter index, or - * SQL error. + * @param statement A statement (prepared query) Handle. + * @param param The parameter index (starting from 0). + * @param number The number to bind. + * @param signed True to bind the number as signed, false to + * bind it as unsigned. + * @error Invalid statement Handle or parameter index, or + * SQL error. */ native void SQL_BindParamInt(Handle statement, int param, int number, bool signed=true); /** * Binds a parameter in a prepared statement to a given float value. * - * @param statement A statement (prepared query) Handle. - * @param param The parameter index (starting from 0). - * @param value The float number to bind. - * @error Invalid statement Handle or parameter index, or - * SQL error. + * @param statement A statement (prepared query) Handle. + * @param param The parameter index (starting from 0). + * @param value The float number to bind. + * @error Invalid statement Handle or parameter index, or + * SQL error. */ native void SQL_BindParamFloat(Handle statement, int param, float value); /** * Binds a parameter in a prepared statement to a given string value. * - * @param statement A statement (prepared query) Handle. - * @param param The parameter index (starting from 0). - * @param value The string to bind. - * @param copy Whether or not SourceMod should copy the value - * locally if necessary. If the string contents - * won't change before calling SQL_Execute(), this - * can be set to false for optimization. - * @error Invalid statement Handle or parameter index, or - * SQL error. + * @param statement A statement (prepared query) Handle. + * @param param The parameter index (starting from 0). + * @param value The string to bind. + * @param copy Whether or not SourceMod should copy the value + * locally if necessary. If the string contents + * won't change before calling SQL_Execute(), this + * can be set to false for optimization. + * @error Invalid statement Handle or parameter index, or + * SQL error. */ native void SQL_BindParamString(Handle statement, int param, const char[] value, bool copy); /** * Executes a prepared statement. All parameters must be bound beforehand. * - * @param statement A statement (prepared query) Handle. - * @return True on success, false on failure. - * @error Invalid statement Handle. + * @param statement A statement (prepared query) Handle. + * @return True on success, false on failure. + * @error Invalid statement Handle. */ native bool SQL_Execute(Handle statement); @@ -931,38 +959,40 @@ native bool SQL_Execute(Handle statement); * If the lock cannot be acquired, the main thread will pause until the * threaded operation has concluded. * - * @param database A database Handle. - * @error Invalid database Handle. + * @param database A database Handle. + * @error Invalid database Handle. */ native void SQL_LockDatabase(Handle database); /** * Unlocks a database so threading operations may continue. * - * @param database A database Handle. - * @error Invalid database Handle. + * @param database A database Handle. + * @error Invalid database Handle. */ native void SQL_UnlockDatabase(Handle database); -// General callback for threaded SQL stuff. -// -// @param owner Parent object of the Handle (or INVALID_HANDLE if none). -// @param hndl Handle to the child object (or INVALID_HANDLE if none). -// @param error Error string if there was an error. The error could be -// empty even if an error condition exists, so it is important -// to check the actual Handle value instead. -// @param data Data passed in via the original threaded invocation. +/** + * General callback for threaded SQL stuff. + * + * @param owner Parent object of the Handle (or INVALID_HANDLE if none). + * @param hndl Handle to the child object (or INVALID_HANDLE if none). + * @param error Error string if there was an error. The error could be + * empty even if an error condition exists, so it is important + * to check the actual Handle value instead. + * @param data Data passed in via the original threaded invocation. + */ typedef SQLTCallback = function void (Handle owner, Handle hndl, const char[] error, any data); /** * Tells whether two database handles both point to the same database * connection. * - * @param hndl1 First database Handle. - * @param hndl2 Second database Handle. - * @return True if the Handles point to the same - * connection, false otherwise. - * @error Invalid Handle. + * @param hndl1 First database Handle. + * @param hndl2 Second database Handle. + * @return True if the Handles point to the same + * connection, false otherwise. + * @error Invalid Handle. */ native bool SQL_IsSameConnection(Handle hndl1, Handle hndl2); @@ -974,10 +1004,10 @@ native bool SQL_IsSameConnection(Handle hndl1, Handle hndl2); * don't (or you mix threaded/non-threaded queries), you should see * SQL_LockDatabase(). * - * @param callback Callback; new Handle will be in hndl, owner is the driver. - * If no driver was found, the owner is INVALID_HANDLE. - * @param name Database name. - * @param data Extra data value to pass to the callback. + * @param callback Callback; new Handle will be in hndl, owner is the driver. + * If no driver was found, the owner is INVALID_HANDLE. + * @param name Database name. + * @param data Extra data value to pass to the callback. */ native void SQL_TConnect(SQLTCallback callback, const char[] name="default", any data=0); @@ -992,13 +1022,13 @@ native void SQL_TConnect(SQLTCallback callback, const char[] name="default", any * The query Handle returned through the callback is temporary and destroyed * at the end of the callback. If you need to hold onto it, use CloneHandle(). * - * @param database A database Handle. - * @param callback Callback; database is in "owner" and the query Handle - * is passed in "hndl". - * @param query Query string. - * @param data Extra data value to pass to the callback. - * @param prio Priority queue to use. - * @error Invalid database Handle. + * @param database A database Handle. + * @param callback Callback; database is in "owner" and the query Handle + * is passed in "hndl". + * @param query Query string. + * @param data Extra data value to pass to the callback. + * @param prio Priority queue to use. + * @error Invalid database Handle. */ native void SQL_TQuery(Handle database, SQLTCallback callback, const char[] query, any data=0, DBPriority prio=DBPrio_Normal); @@ -1015,7 +1045,7 @@ native Transaction SQL_CreateTransaction(); * * @param txn A transaction handle. * @param query Query string. - * @param data Extra data value to pass to the final callback. + * @param data Extra data value to pass to the final callback. * @return The index of the query in the transaction's query list. * @error Invalid transaction handle. */ diff --git a/env/include/entity.inc b/env/include/entity.inc index 1dde579..a0f9116 100644 --- a/env/include/entity.inc +++ b/env/include/entity.inc @@ -40,38 +40,39 @@ */ enum PropType { - Prop_Send = 0, /**< This property is networked. */ - Prop_Data = 1, /**< This property is for save game data fields. */ + Prop_Send = 0, /**< This property is networked. */ + Prop_Data = 1 /**< This property is for save game data fields. */ }; /** * @section For more information on these, see the HL2SDK (public/edict.h) */ -#define FL_EDICT_CHANGED (1<<0) /**< Game DLL sets this when the entity state changes - Mutually exclusive with FL_EDICT_PARTIAL_CHANGE. */ -#define FL_EDICT_FREE (1<<1) /**< this edict if free for reuse */ -#define FL_EDICT_FULL (1<<2) /**< this is a full server entity */ -#define FL_EDICT_FULLCHECK (0<<0) /**< call ShouldTransmit() each time, this is a fake flag */ -#define FL_EDICT_ALWAYS (1<<3) /**< always transmit this entity */ -#define FL_EDICT_DONTSEND (1<<4) /**< don't transmit this entity */ -#define FL_EDICT_PVSCHECK (1<<5) /**< always transmit entity, but cull against PVS */ -#define FL_EDICT_PENDING_DORMANT_CHECK (1<<6) -#define FL_EDICT_DIRTY_PVS_INFORMATION (1<<7) -#define FL_FULL_EDICT_CHANGED (1<<8) +#define FL_EDICT_CHANGED (1<<0) /**< Game DLL sets this when the entity state changes + Mutually exclusive with FL_EDICT_PARTIAL_CHANGE. */ +#define FL_EDICT_FREE (1<<1) /**< this edict if free for reuse */ +#define FL_EDICT_FULL (1<<2) /**< this is a full server entity */ +#define FL_EDICT_FULLCHECK (0<<0) /**< call ShouldTransmit() each time, this is a fake flag */ +#define FL_EDICT_ALWAYS (1<<3) /**< always transmit this entity */ +#define FL_EDICT_DONTSEND (1<<4) /**< don't transmit this entity */ +#define FL_EDICT_PVSCHECK (1<<5) /**< always transmit entity, but cull against PVS */ +#define FL_EDICT_PENDING_DORMANT_CHECK (1<<6) +#define FL_EDICT_DIRTY_PVS_INFORMATION (1<<7) +#define FL_FULL_EDICT_CHANGED (1<<8) enum PropFieldType { - PropField_Unsupported, /**< The type is unsupported. */ - PropField_Integer, /**< Valid for SendProp and Data fields */ - PropField_Float, /**< Valid for SendProp and Data fields */ - PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */ - PropField_Vector, /**< Valid for SendProp and Data fields */ - PropField_String, /**< Valid for SendProp and Data fields */ - PropField_String_T, /**< Valid for Data fields. Read only. - Note that the size of a string_t is dynamic, and - thus FindDataMapOffs() will return the constant size - of the string_t container (which is 32 bits right now). - */ + PropField_Unsupported, /**< The type is unsupported. */ + PropField_Integer, /**< Valid for SendProp and Data fields */ + PropField_Float, /**< Valid for SendProp and Data fields */ + PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */ + PropField_Vector, /**< Valid for SendProp and Data fields */ + PropField_String, /**< Valid for SendProp and Data fields */ + PropField_String_T, /**< Valid for Data fields. Read only. + Note that the size of a string_t is dynamic, and + thus FindDataMapOffs() will return the constant size + of the string_t container (which is 32 bits right now). */ + PropField_Variant /**< Valid for Data fields only Type is not known at the field level, + (for this call), but dependent on current field value. */ }; /** @@ -85,7 +86,7 @@ enum PropFieldType * networked entities (maximum edicts), rather than total * maximum entities. * - * @return Maximum number of networked entities. + * @return Maximum number of networked entities. */ native int GetMaxEntities(); @@ -96,7 +97,7 @@ native int GetMaxEntities(); * of networked entities (current edicts), rather than total * count of current entities. * - * @return Number of entities in the server. + * @return Number of entities in the server. */ native int GetEntityCount(); @@ -104,67 +105,75 @@ native int GetEntityCount(); * Returns whether or not an entity is valid. Returns false * if there is no matching CBaseEntity for this entity index. * - * @param entity Index of the entity. - * @return True if valid, false otherwise. + * @param entity Index of the entity. + * @return True if valid, false otherwise. */ native bool IsValidEntity(int entity); /** * Returns whether or not an edict index is valid. * - * @param edict Index of the edict. - * @return True if valid, false otherwise. + * @param edict Index of the edict. + * @return True if valid, false otherwise. */ native bool IsValidEdict(int edict); /** * Returns whether or not an entity has a valid networkable edict. * - * @param edict Index of the entity. - * @return True if networkable, false if invalid or not networkable. + * @param entity Index of the entity. + * @return True if networkable, false if invalid or not networkable. */ -native bool IsEntNetworkable(int entiy); +native bool IsEntNetworkable(int entity); /** * Creates a new edict (the basis of a networkable entity) * - * @return Index of the edict, 0 on failure. + * @return Index of the edict, 0 on failure. */ native int CreateEdict(); /** * Removes an edict from the world. * - * @param edict Index of the edict. - * @error Invalid edict index. + * @param edict Index of the edict. + * @error Invalid edict index. */ native void RemoveEdict(int edict); +/** + * Marks an entity for deletion. + * + * @param entity Index of the entity. + * @error Invalid entity index. + */ +native void RemoveEntity(int entity); + /** * Returns the flags on an edict. These are not the same as entity flags. * - * @param edict Index of the entity. - * @return Edict flags. - * @error Invalid edict index. + * @param edict Index of the entity. + * @return Edict flags. + * @error Invalid edict index. */ native int GetEdictFlags(int edict); /** * Sets the flags on an edict. These are not the same as entity flags. * - * @param edict Index of the entity. - * @param flags Flags to set. - * @error Invalid edict index. + * @param edict Index of the entity. + * @param flags Flags to set. + * @error Invalid edict index. */ native void SetEdictFlags(int edict, int flags); /** * Retrieves an edict classname. * - * @param edict Index of the entity. - * @param clsname Buffer to store the classname. - * @param maxlength Maximum length of the buffer. - * @return True on success, false if there is no classname set. + * @param edict Index of the entity. + * @param clsname Buffer to store the classname. + * @param maxlength Maximum length of the buffer. + * @return True on success, false if there is no classname set. */ native bool GetEdictClassname(int edict, char[] clsname, int maxlength); @@ -172,11 +181,11 @@ native bool GetEdictClassname(int edict, char[] clsname, int maxlength); * Retrieves an entity's networkable serverclass name. * This is not the same as the classname and is used for networkable state changes. * - * @param edict Index of the entity. - * @param clsname Buffer to store the serverclass name. - * @param maxlength Maximum length of the buffer. - * @return True on success, false if the edict is not networkable. - * @error Invalid edict index. + * @param edict Index of the entity. + * @param clsname Buffer to store the serverclass name. + * @param maxlength Maximum length of the buffer. + * @return True on success, false if the edict is not networkable. + * @error Invalid edict index. */ native bool GetEntityNetClass(int edict, char[] clsname, int maxlength); @@ -206,10 +215,10 @@ native bool GetEntityNetClass(int edict, char[] clsname, int maxlength); * and wish for it to be immediately changed over the network. By default this * is not done for offset setting functions. * - * @param edict Index to the edict. - * @param offset Offset to mark as changed. If 0, - * the entire edict is marked as changed. - * @error Invalid entity or offset out of bounds. + * @param edict Index to the edict. + * @param offset Offset to mark as changed. If 0, + * the entire edict is marked as changed. + * @error Invalid entity or offset out of bounds. */ native void ChangeEdictState(int edict, int offset = 0); @@ -217,11 +226,11 @@ native void ChangeEdictState(int edict, int offset = 0); * Peeks into an entity's object data and retrieves the integer value at * the given offset. * - * @param entity Edict index. - * @param offset Offset to use. - * @param size Number of bytes to read (valid values are 1, 2, or 4). - * @return Value at the given memory location. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param size Number of bytes to read (valid values are 1, 2, or 4). + * @return Value at the given memory location. + * @error Invalid entity or offset out of reasonable bounds. */ native int GetEntData(int entity, int offset, int size=4); @@ -229,12 +238,12 @@ native int GetEntData(int entity, int offset, int size=4); * Peeks into an entity's object data and sets the integer value at * the given offset. * - * @param entity Edict index. - * @param offset Offset to use. - * @param value Value to set. - * @param size Number of bytes to write (valid values are 1, 2, or 4). - * @param changeState If true, change will be sent over the network. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param value Value to set. + * @param size Number of bytes to write (valid values are 1, 2, or 4). + * @param changeState If true, change will be sent over the network. + * @error Invalid entity or offset out of reasonable bounds. */ native void SetEntData(int entity, int offset, any value, int size=4, bool changeState=false); @@ -242,10 +251,10 @@ native void SetEntData(int entity, int offset, any value, int size=4, bool chang * Peeks into an entity's object data and retrieves the float value at * the given offset. * - * @param entity Edict index. - * @param offset Offset to use. - * @return Value at the given memory location. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @return Value at the given memory location. + * @error Invalid entity or offset out of reasonable bounds. */ native float GetEntDataFloat(int entity, int offset); @@ -253,11 +262,11 @@ native float GetEntDataFloat(int entity, int offset); * Peeks into an entity's object data and sets the float value at * the given offset. * - * @param entity Edict index. - * @param offset Offset to use. - * @param value Value to set. - * @param changeState If true, change will be sent over the network. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param value Value to set. + * @param changeState If true, change will be sent over the network. + * @error Invalid entity or offset out of reasonable bounds. */ native void SetEntDataFloat(int entity, int offset, float value, bool changeState=false); @@ -271,10 +280,11 @@ native void SetEntDataFloat(int entity, int offset, float value, bool changeStat * Note: This function makes no attempt to validate the returned * entity, and in fact, it could be garbage or completely unexpected. * - * @param entity Edict index. - * @param offset Offset to use. - * @return Entity index at the given location, or 0 if none. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @return Entity index at the given location, or 0 if none. + * @error Invalid entity or offset out of reasonable bounds. + * @deprecated Use GetEntDataEnt2() instead. */ #pragma deprecated Use GetEntDataEnt2() instead. native int GetEntDataEnt(int entity, int offset); @@ -287,11 +297,12 @@ native int GetEntDataEnt(int entity, int offset); * 0 is also the world entity index. Thus, a property cannot * be set to the world entity using this native. * - * @param entity Edict index. - * @param offset Offset to use. - * @param other Entity index to set, or 0 to clear. - * @param changeState If true, change will be sent over the network. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param other Entity index to set, or 0 to clear. + * @param changeState If true, change will be sent over the network. + * @error Invalid entity or offset out of reasonable bounds. + * @deprecated Use SetEntDataEnt2() instead. */ #pragma deprecated Use SetEntDataEnt2() instead. native void SetEntDataEnt(int entity, int offset, int other, bool changeState=false); @@ -304,11 +315,11 @@ native void SetEntDataEnt(int entity, int offset, int other, bool changeState=fa * handles" (which usually looks like m_h* in properties). These * are not SourceMod Handles, but internal Source structures. * - * @param entity Edict index. - * @param offset Offset to use. - * @return Entity index at the given location. If there is no entity, - * or the stored entity is invalid, then -1 is returned. - * @error Invalid input entity, or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @return Entity index at the given location. If there is no entity, + * or the stored entity is invalid, then -1 is returned. + * @error Invalid input entity, or offset out of reasonable bounds. */ native int GetEntDataEnt2(int entity, int offset); @@ -320,11 +331,11 @@ native int GetEntDataEnt2(int entity, int offset); * handles" (which usually looks like m_h* in properties). These * are not SourceMod Handles, but internal Source structures. * - * @param entity Edict index. - * @param offset Offset to use. - * @param other Entity index to set, or -1 to clear. - * @param changeState If true, change will be sent over the network. - * @error Invalid input entity, or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param other Entity index to set, or -1 to clear. + * @param changeState If true, change will be sent over the network. + * @error Invalid input entity, or offset out of reasonable bounds. */ native void SetEntDataEnt2(int entity, int offset, int other, bool changeState=false); @@ -332,12 +343,12 @@ native void SetEntDataEnt2(int entity, int offset, int other, bool changeState=f * Peeks into an entity's object data and retrieves the vector at the * given offset. * @note Both a Vector and a QAngle are three floats. This is a - * convenience function and will work with both types. + * convenience function and will work with both types. * - * @param entity Edict index. - * @param offset Offset to use. - * @param vec Vector buffer to store data in. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param vec Vector buffer to store data in. + * @error Invalid entity or offset out of reasonable bounds. */ native void GetEntDataVector(int entity, int offset, float vec[3]); @@ -345,13 +356,13 @@ native void GetEntDataVector(int entity, int offset, float vec[3]); * Peeks into an entity's object data and sets the vector at the given * offset. * @note Both a Vector and a QAngle are three floats. This is a - * convenience function and will work with both types. + * convenience function and will work with both types. * - * @param entity Edict index. - * @param offset Offset to use. - * @param vec Vector to set. - * @param changeState If true, change will be sent over the network. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param vec Vector to set. + * @param changeState If true, change will be sent over the network. + * @error Invalid entity or offset out of reasonable bounds. */ native void SetEntDataVector(int entity, int offset, const float vec[3], bool changeState=false); @@ -359,12 +370,12 @@ native void SetEntDataVector(int entity, int offset, const float vec[3], bool ch * Peeks into an entity's object data and retrieves the string at * the given offset. * - * @param entity Edict index. - * @param offset Offset to use. - * @param buffer Destination string buffer. - * @param maxlen Maximum length of output string buffer. - * @return Number of non-null bytes written. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param buffer Destination string buffer. + * @param maxlen Maximum length of output string buffer. + * @return Number of non-null bytes written. + * @error Invalid entity or offset out of reasonable bounds. */ native int GetEntDataString(int entity, int offset, char[] buffer, int maxlen); @@ -372,13 +383,13 @@ native int GetEntDataString(int entity, int offset, char[] buffer, int maxlen); * Peeks into an entity's object data and sets the string at * the given offset. * - * @param entity Edict index. - * @param offset Offset to use. - * @param buffer String to set. - * @param maxlen Maximum length of bytes to write. - * @param changeState If true, change will be sent over the network. - * @return Number of non-null bytes written. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Edict index. + * @param offset Offset to use. + * @param buffer String to set. + * @param maxlen Maximum length of bytes to write. + * @param changeState If true, change will be sent over the network. + * @return Number of non-null bytes written. + * @error Invalid entity or offset out of reasonable bounds. */ native int SetEntDataString(int entity, int offset, const char[] buffer, int maxlen, bool changeState=false); @@ -396,9 +407,10 @@ native int SetEntDataString(int entity, int offset, const char[] buffer, int max * should use FindSendPropInfo() instead. An example of such a property is * CTFPlayer::DT_LocalPlayer.m_nDisguiseClass on Team Fortress. * - * @param cls Classname. - * @param prop Property name. - * @return An offset, or -1 on failure. + * @param cls Classname. + * @param prop Property name. + * @return An offset, or -1 on failure. + * @deprecated Use FindSendPropInfo instead, or HasEntProp if you just want to check for existence. */ #pragma deprecated Use FindSendPropInfo instead, or HasEntProp if you just want to check for existence. native int FindSendPropOffs(const char[] cls, const char[] prop); @@ -407,18 +419,18 @@ native int FindSendPropOffs(const char[] cls, const char[] prop); * Given a ServerClass name, finds a networkable send property offset. * This information is cached for future calls. * - * @param cls Classname. - * @param prop Property name. - * @param type Optional parameter to store the type. - * @param num_bits Optional parameter to store the number of bits the field - * uses, if applicable (otherwise 0 is stored). The number - * of bits varies for integers and floats, and is always 0 - * for strings. - * @param local_offset Optional parameter to store the local offset, as - * FindSendPropOffs() would return. - * @return On success, returns an absolutely computed offset. - * If no offset is available, 0 is returned. - * If the property is not found, -1 is returned. + * @param cls Classname. + * @param prop Property name. + * @param type Optional parameter to store the type. + * @param num_bits Optional parameter to store the number of bits the field + * uses, if applicable (otherwise 0 is stored). The number + * of bits varies for integers and floats, and is always 0 + * for strings. + * @param local_offset Optional parameter to store the local offset, as + * FindSendPropOffs() would return. + * @return On success, returns an absolutely computed offset. + * If no offset is available, 0 is returned. + * If the property is not found, -1 is returned. */ native int FindSendPropInfo(const char[] cls, const char[] prop, @@ -430,13 +442,14 @@ native int FindSendPropInfo(const char[] cls, * Given an entity, finds a datamap property offset. * This information is cached for future calls. * - * @param entity Entity index. - * @param prop Property name. - * @param type Optional parameter to store the type. - * @param num_bits Optional parameter to store the number of bits the field - * uses. The bit count will either be 1 (for boolean) or - * divisible by 8 (including 0 if unknown). - * @return An offset, or -1 on failure. + * @param entity Entity index. + * @param prop Property name. + * @param type Optional parameter to store the type. + * @param num_bits Optional parameter to store the number of bits the field + * uses. The bit count will either be 1 (for boolean) or + * divisible by 8 (including 0 if unknown). + * @return An offset, or -1 on failure. + * @deprecated Use FindDataMapInfo instead, or HasEntProp if you just want to check for existence. */ #pragma deprecated Use FindDataMapInfo instead, or HasEntProp if you just want to check for existence. native int FindDataMapOffs(int entity, @@ -448,15 +461,15 @@ native int FindDataMapOffs(int entity, * Given an entity, finds a nested datamap property offset. * This information is cached for future calls. * - * @param entity Entity index. - * @param prop Property name. - * @param type Optional parameter to store the type. - * @param num_bits Optional parameter to store the number of bits the field - * uses. The bit count will either be 1 (for boolean) or - * divisible by 8 (including 0 if unknown). - * @param local_offset Optional parameter to store the local offset, as - * FindDataMapOffs() would return. - * @return An offset, or -1 on failure. + * @param entity Entity index. + * @param prop Property name. + * @param type Optional parameter to store the type. + * @param num_bits Optional parameter to store the number of bits the field + * uses. The bit count will either be 1 (for boolean) or + * divisible by 8 (including 0 if unknown). + * @param local_offset Optional parameter to store the local offset, as + * FindDataMapOffs() would return. + * @return An offset, or -1 on failure. */ native int FindDataMapInfo(int entity, const char[] prop, @@ -467,12 +480,12 @@ native int FindDataMapInfo(int entity, /** * Wrapper function for finding a send property for a particular entity. * - * @param ent Entity index. - * @param prop Property name. - * @param actual Defaults to false for backwards compatibility. - * If true, the newer FindSendPropInfo() function - * is used instead. - * @return An offset, or -1 on failure. + * @param ent Entity index. + * @param prop Property name. + * @param actual Defaults to false for backwards compatibility. + * If true, the newer FindSendPropInfo() function + * is used instead. + * @return An offset, or -1 on failure. */ stock int GetEntSendPropOffs(int ent, const char[] prop, bool actual=false) { @@ -489,32 +502,35 @@ stock int GetEntSendPropOffs(int ent, const char[] prop, bool actual=false) if (actual) { return offset; - } else { - return local; } + + return local; } /** * Checks if an entity property exists on an entity. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @return Whether the property exists on the entity. - * @error Invalid entity. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @return Whether the property exists on the entity. + * @error Invalid entity. */ stock bool HasEntProp(int entity, PropType type, const char[] prop) { - if (type == Prop_Data) { + if (type == Prop_Data) + { return (FindDataMapInfo(entity, prop) != -1); } - if (type != Prop_Send) { + if (type != Prop_Send) + { return false; } char cls[64]; - if (!GetEntityNetClass(entity, cls, sizeof(cls))) { + if (!GetEntityNetClass(entity, cls, sizeof(cls))) + { return false; } @@ -527,15 +543,15 @@ stock bool HasEntProp(int entity, PropType type, const char[] prop) * This function is considered safer and more robust over GetEntData, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param size Number of bytes to write (valid values are 1, 2, or 4). - * This value is auto-detected, and the size parameter is - * only used as a fallback in case detection fails. - * @param element Element # (starting from 0) if property is an array. - * @return Value at the given property offset. - * @error Invalid entity or property not found. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param size Number of bytes to write (valid values are 1, 2, or 4). + * This value is auto-detected, and the size parameter is + * only used as a fallback in case detection fails. + * @param element Element # (starting from 0) if property is an array. + * @return Value at the given property offset. + * @error Invalid entity or property not found. */ native int GetEntProp(int entity, PropType type, const char[] prop, int size=4, int element=0); @@ -545,15 +561,15 @@ native int GetEntProp(int entity, PropType type, const char[] prop, int size=4, * This function is considered safer and more robust over SetEntData, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param value Value to set. - * @param size Number of bytes to write (valid values are 1, 2, or 4). - * This value is auto-detected, and the size parameter is - * only used as a fallback in case detection fails. - * @param element Element # (starting from 0) if property is an array. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param value Value to set. + * @param size Number of bytes to write (valid values are 1, 2, or 4). + * This value is auto-detected, and the size parameter is + * only used as a fallback in case detection fails. + * @param element Element # (starting from 0) if property is an array. + * @error Invalid entity or offset out of reasonable bounds. */ native void SetEntProp(int entity, PropType type, const char[] prop, any value, int size=4, int element=0); @@ -563,12 +579,12 @@ native void SetEntProp(int entity, PropType type, const char[] prop, any value, * This function is considered safer and more robust over GetEntDataFloat, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param element Element # (starting from 0) if property is an array. - * @return Value at the given property offset. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param element Element # (starting from 0) if property is an array. + * @return Value at the given property offset. + * @error Invalid entity or offset out of reasonable bounds. */ native float GetEntPropFloat(int entity, PropType type, const char[] prop, int element=0); @@ -578,12 +594,12 @@ native float GetEntPropFloat(int entity, PropType type, const char[] prop, int e * This function is considered safer and more robust over SetEntDataFloat, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param value Value to set. - * @param element Element # (starting from 0) if property is an array. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param value Value to set. + * @param element Element # (starting from 0) if property is an array. + * @error Invalid entity or offset out of reasonable bounds. */ native void SetEntPropFloat(int entity, PropType type, const char[] prop, float value, int element=0); @@ -593,14 +609,14 @@ native void SetEntPropFloat(int entity, PropType type, const char[] prop, float * This function is considered safer and more robust over GetEntDataEnt*, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param element Element # (starting from 0) if property is an array. - * @return Entity index at the given property. - * If there is no entity, or the entity is not valid, - * then -1 is returned. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param element Element # (starting from 0) if property is an array. + * @return Entity index at the given property. + * If there is no entity, or the entity is not valid, + * then -1 is returned. + * @error Invalid entity or offset out of reasonable bounds. */ native int GetEntPropEnt(int entity, PropType type, const char[] prop, int element=0); @@ -610,12 +626,12 @@ native int GetEntPropEnt(int entity, PropType type, const char[] prop, int eleme * This function is considered safer and more robust over SetEntDataEnt*, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param other Entity index to set, or -1 to unset. - * @param element Element # (starting from 0) if property is an array. - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param other Entity index to set, or -1 to unset. + * @param element Element # (starting from 0) if property is an array. + * @error Invalid entity or offset out of reasonable bounds. */ native void SetEntPropEnt(int entity, PropType type, const char[] prop, int other, int element=0); @@ -625,13 +641,13 @@ native void SetEntPropEnt(int entity, PropType type, const char[] prop, int othe * This function is considered safer and more robust over GetEntDataVector, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param vec Vector buffer to store data in. - * @param element Element # (starting from 0) if property is an array. - * @error Invalid entity, property not found, or property not - * actually a vector data type. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param vec Vector buffer to store data in. + * @param element Element # (starting from 0) if property is an array. + * @error Invalid entity, property not found, or property not + * actually a vector data type. */ native void GetEntPropVector(int entity, PropType type, const char[] prop, float vec[3], int element=0); @@ -641,84 +657,86 @@ native void GetEntPropVector(int entity, PropType type, const char[] prop, float * This function is considered safer and more robust over SetEntDataVector, * because it performs strict offset checking and typing rules. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @param vec Vector to set. - * @param element Element # (starting from 0) if property is an array. - * @error Invalid entity, property not found, or property not - * actually a vector data type. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @param vec Vector to set. + * @param element Element # (starting from 0) if property is an array. + * @error Invalid entity, property not found, or property not + * actually a vector data type. */ native void SetEntPropVector(int entity, PropType type, const char[] prop, const float vec[3], int element=0); /** * Gets a network property as a string. * - * @param entity Edict index. - * @param type Property type. - * @param prop Property to use. - * @param buffer Destination string buffer. - * @param maxlen Maximum length of output string buffer. - * @param element Element # (starting from 0) if property is an array. - * @return Number of non-null bytes written. - * @error Invalid entity, offset out of reasonable bounds, or property is not a valid string. + * @param entity Edict index. + * @param type Property type. + * @param prop Property to use. + * @param buffer Destination string buffer. + * @param maxlen Maximum length of output string buffer. + * @param element Element # (starting from 0) if property is an array. + * @return Number of non-null bytes written. + * @error Invalid entity, offset out of reasonable bounds, or property is not a valid string. */ native int GetEntPropString(int entity, PropType type, const char[] prop, char[] buffer, int maxlen, int element=0); /** * Sets a network property as a string. * - * @param entity Edict index. - * @param type Property type. - * @param prop Property to use. - * @param buffer String to set. - * @param element Element # (starting from 0) if property is an array. - * @return Number of non-null bytes written. - * @error Invalid entity, offset out of reasonable bounds, or property is not a valid string. + * @param entity Edict index. + * @param type Property type. + * @param prop Property to use. + * @param buffer String to set. + * @param element Element # (starting from 0) if property is an array. + * @return Number of non-null bytes written. + * @error Invalid entity, offset out of reasonable bounds, or property is not a valid string. */ native int SetEntPropString(int entity, PropType type, const char[] prop, const char[] buffer, int element=0); /** * Retrieves the count of values that an entity property's array can store. * - * @param entity Entity/edict index. - * @param type Property type. - * @param prop Property name. - * @return Size of array (in elements) or 1 if property is not an array. - * @error Invalid entity or property not found. + * @param entity Entity/edict index. + * @param type Property type. + * @param prop Property name. + * @return Size of array (in elements) or 1 if property is not an array. + * @error Invalid entity or property not found. */ native int GetEntPropArraySize(int entity, PropType type, const char[] prop); /** * Copies an array of cells from an entity at a given offset. * - * @param entity Entity index. - * @param offset Offset to use. - * @param array Array to read into. - * @param arraySize Number of values to read. - * @param dataSize Size of each value in bytes (1, 2, or 4). - * @error Invalid entity or offset out of reasonable bounds. + * @param entity Entity index. + * @param offset Offset to use. + * @param array Array to read into. + * @param arraySize Number of values to read. + * @param dataSize Size of each value in bytes (1, 2, or 4). + * @error Invalid entity or offset out of reasonable bounds. */ stock void GetEntDataArray(int entity, int offset, int[] array, int arraySize, int dataSize=4) { - for (int i=0; i(GetEntProp(entity, Prop_Data, datamap)); } /** * Sets an entity's movetype. * - * @param entity Entity index. - * @param mt Movetype, see enum above. - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @param mt Movetype, see enum above. + * @error Invalid entity index, or lack of mod compliance. */ stock void SetEntityMoveType(int entity, MoveType mt) { static bool gotconfig = false; static char datamap[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_MoveType", datamap, sizeof(datamap)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_MoveType", datamap, sizeof(datamap)); + delete gc; + if (!exists) { strcopy(datamap, sizeof(datamap), "m_MoveType"); } - + gotconfig = true; } - + SetEntProp(entity, Prop_Data, datamap, mt); } /** * Gets an entity's render mode. * - * @param entity Entity index. - * @return RenderMode value. - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @return RenderMode value. + * @error Invalid entity index, or lack of mod compliance. */ stock RenderMode GetEntityRenderMode(int entity) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_nRenderMode", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_nRenderMode", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_nRenderMode"); } - + gotconfig = true; } - + return view_as(GetEntProp(entity, Prop_Send, prop, 1)); } /** * Sets an entity's render mode. * - * @param entity Entity index. - * @param mode RenderMode value. - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @param mode RenderMode value. + * @error Invalid entity index, or lack of mod compliance. */ stock void SetEntityRenderMode(int entity, RenderMode mode) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_nRenderMode", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_nRenderMode", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_nRenderMode"); } - + gotconfig = true; } - + SetEntProp(entity, Prop_Send, prop, mode, 1); } /** * Gets an entity's render Fx. * - * @param entity Entity index. - * @return RenderFx value. - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @return RenderFx value. + * @error Invalid entity index, or lack of mod compliance. */ stock RenderFx GetEntityRenderFx(int entity) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_nRenderFX", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_nRenderFX", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_nRenderFX"); } - + gotconfig = true; } - + return view_as(GetEntProp(entity, Prop_Send, prop, 1)); } /** * Sets an entity's render Fx. * - * @param entity Entity index. - * @param fx RenderFx value. - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @param fx RenderFx value. + * @error Invalid entity index, or lack of mod compliance. */ stock void SetEntityRenderFx(int entity, RenderFx fx) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_nRenderFX", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_nRenderFX", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_nRenderFX"); } - + gotconfig = true; } - + SetEntProp(entity, Prop_Send, prop, fx, 1); } /** * Gets an entity's color. * - * @param entity Entity index. - * @param r Amount of red (0-255) - * @param g Amount of green (0-255) - * @param b Amount of blue (0-255) - * @param a Amount of alpha (0-255) - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @param r Amount of red (0-255) + * @param g Amount of green (0-255) + * @param b Amount of blue (0-255) + * @param a Amount of alpha (0-255) + * @error Invalid entity index, or lack of mod compliance. */ stock void GetEntityRenderColor(int entity, int &r, int &g, int &b, int &a) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_clrRender", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_clrRender", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_clrRender"); } - + gotconfig = true; } - + int offset = GetEntSendPropOffs(entity, prop); - + if (offset <= 0) { ThrowError("GetEntityRenderColor not supported by this mod"); } - + r = GetEntData(entity, offset, 1); g = GetEntData(entity, offset + 1, 1); b = GetEntData(entity, offset + 2, 1); @@ -411,39 +411,39 @@ stock void GetEntityRenderColor(int entity, int &r, int &g, int &b, int &a) /** * Sets an entity's color. * - * @param entity Entity index - * @param r Amount of red (0-255) - * @param g Amount of green (0-255) - * @param b Amount of blue (0-255) - * @param a Amount of alpha (0-255) - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index + * @param r Amount of red (0-255) + * @param g Amount of green (0-255) + * @param b Amount of blue (0-255) + * @param a Amount of alpha (0-255) + * @error Invalid entity index, or lack of mod compliance. */ stock void SetEntityRenderColor(int entity, int r=255, int g=255, int b=255, int a=255) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_clrRender", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_clrRender", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_clrRender"); } - + gotconfig = true; } - + int offset = GetEntSendPropOffs(entity, prop); - + if (offset <= 0) { ThrowError("SetEntityRenderColor not supported by this mod"); } - + SetEntData(entity, offset, r, 1, true); SetEntData(entity, offset + 1, g, 1, true); SetEntData(entity, offset + 2, b, 1, true); @@ -454,104 +454,104 @@ stock void SetEntityRenderColor(int entity, int r=255, int g=255, int b=255, int * Gets an entity's gravity. * * @param entity Entity index. - * @return Entity's m_flGravity value. - * @error Invalid entity index, or lack of mod compliance. + * @return Entity's m_flGravity value. + * @error Invalid entity index, or lack of mod compliance. */ stock float GetEntityGravity(int entity) { static bool gotconfig = false; static char datamap[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_flGravity", datamap, sizeof(datamap)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_flGravity", datamap, sizeof(datamap)); + delete gc; + if (!exists) { strcopy(datamap, sizeof(datamap), "m_flGravity"); } - + gotconfig = true; } - + return GetEntPropFloat(entity, Prop_Data, datamap); } /** * Sets an entity's gravity. * - * @param entity Entity index. - * @param amount Gravity to set (default = 1.0, half = 0.5, double = 2.0). - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @param amount Gravity to set (default = 1.0, half = 0.5, double = 2.0). + * @error Invalid entity index, or lack of mod compliance. */ stock void SetEntityGravity(int entity, float amount) { static bool gotconfig = false; static char datamap[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_flGravity", datamap, sizeof(datamap)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_flGravity", datamap, sizeof(datamap)); + delete gc; + if (!exists) { strcopy(datamap, sizeof(datamap), "m_flGravity"); } - + gotconfig = true; } - + SetEntPropFloat(entity, Prop_Data, datamap, amount); } /** * Sets an entity's health * - * @param entity Entity index. - * @param amount Health amount. - * @error Invalid entity index, or lack of mod compliance. + * @param entity Entity index. + * @param amount Health amount. + * @error Invalid entity index, or lack of mod compliance. */ stock void SetEntityHealth(int entity, int amount) { static bool gotconfig = false; static char prop[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_iHealth", prop, sizeof(prop)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_iHealth", prop, sizeof(prop)); + delete gc; + if (!exists) { strcopy(prop, sizeof(prop), "m_iHealth"); } - + gotconfig = true; } - + char cls[64]; PropFieldType type; int offset; - + if (!GetEntityNetClass(entity, cls, sizeof(cls))) { ThrowError("SetEntityHealth not supported by this mod: Could not get serverclass name"); return; } - + offset = FindSendPropInfo(cls, prop, type); - + if (offset <= 0) { ThrowError("SetEntityHealth not supported by this mod"); return; } - + /* Dark Messiah uses a float for the health instead an integer */ if (type == PropField_Float) { @@ -566,29 +566,29 @@ stock void SetEntityHealth(int entity, int amount) /** * Get's a users current pressed buttons * - * @param client Client index - * @return Bitsum of buttons - * @error Invalid client index, client not in game, - * or lack of mod compliance. + * @param client Client index + * @return Bitsum of buttons + * @error Invalid client index, client not in game, + * or lack of mod compliance. */ stock int GetClientButtons(int client) { static bool gotconfig = false; static char datamap[32]; - + if (!gotconfig) { - Handle gc = LoadGameConfigFile("core.games"); - bool exists = GameConfGetKeyValue(gc, "m_nButtons", datamap, sizeof(datamap)); - CloseHandle(gc); - + GameData gc = new GameData("core.games"); + bool exists = gc.GetKeyValue("m_nButtons", datamap, sizeof(datamap)); + delete gc; + if (!exists) { strcopy(datamap, sizeof(datamap), "m_nButtons"); } - + gotconfig = true; } - + return GetEntProp(client, Prop_Data, datamap); } diff --git a/env/include/events.inc b/env/include/events.inc index dea14a3..6bba666 100644 --- a/env/include/events.inc +++ b/env/include/events.inc @@ -40,9 +40,9 @@ */ enum EventHookMode { - EventHookMode_Pre, //< Hook callback fired before event is fired */ - EventHookMode_Post, //< Hook callback fired after event is fired */ - EventHookMode_PostNoCopy //< Hook callback fired after event is fired, but event data won't be copied */ + EventHookMode_Pre, //< Hook callback fired before event is fired */ + EventHookMode_Post, //< Hook callback fired after event is fired */ + EventHookMode_PostNoCopy //< Hook callback fired after event is fired, but event data won't be copied */ }; /** @@ -52,20 +52,22 @@ typeset EventHook { // Called when a game event is fired. // - // @param event Handle to event. This could be INVALID_HANDLE if every plugin hooking - // this event has set the hook mode EventHookMode_PostNoCopy. - // @param name String containing the name of the event. - // @param dontBroadcast True if event was not broadcast to clients, false otherwise. - // @return Ignored for post hooks. Plugin_Handled will block event if hooked as pre. + // @param event Handle to event. This could be INVALID_HANDLE if every plugin hooking + // this event has set the hook mode EventHookMode_PostNoCopy. + // @param name String containing the name of the event. + // @param dontBroadcast True if event was not broadcast to clients, false otherwise. + // May not correspond to the real value. Use the property BroadcastDisabled. + // @return Ignored for post hooks. Plugin_Handled will block event if hooked as pre. /// function Action (Event event, const char[] name, bool dontBroadcast); + // // Called when a game event is fired. // - // @param event Handle to event. This could be INVALID_HANDLE if every plugin hooking - // this event has set the hook mode EventHookMode_PostNoCopy. - // @param name String containing the name of the event. - // @param dontBroadcast True if event was not broadcast to clients, false otherwise. + // @param event Handle to event. This could be INVALID_HANDLE if every plugin hooking + // this event has set the hook mode EventHookMode_PostNoCopy. + // @param name String containing the name of the event. + // @param dontBroadcast True if event was not broadcast to clients, false otherwise. /// function void (Event event, const char[] name, bool dontBroadcast); }; @@ -83,7 +85,7 @@ methodmap Event < Handle // // Unlike Fire, this function DOES NOT close the event Handle. // - // @param client Index of client to receive the event.. + // @param client Index of client to receive the event.. public native void FireToClient(int client); // Cancels a previously created game event that has not been fired. This @@ -160,37 +162,38 @@ methodmap Event < Handle // or HookEventEx callbacks. property bool BroadcastDisabled { public native set(bool dontBroadcast); + public native get(); } } /** * Creates a hook for when a game event is fired. * - * @param name Name of event. - * @param callback An EventHook function pointer. - * @param mode Optional EventHookMode determining the type of hook. - * @error Invalid event name or invalid callback function. + * @param name Name of event. + * @param callback An EventHook function pointer. + * @param mode Optional EventHookMode determining the type of hook. + * @error Invalid event name or invalid callback function. */ native void HookEvent(const char[] name, EventHook callback, EventHookMode mode=EventHookMode_Post); /** * Creates a hook for when a game event is fired. * - * @param name Name of event. - * @param callback An EventHook function pointer. - * @param mode Optional EventHookMode determining the type of hook. - * @return True if event exists and was hooked successfully, false otherwise. - * @error Invalid callback function. + * @param name Name of event. + * @param callback An EventHook function pointer. + * @param mode Optional EventHookMode determining the type of hook. + * @return True if event exists and was hooked successfully, false otherwise. + * @error Invalid callback function. */ native bool HookEventEx(const char[] name, EventHook callback, EventHookMode mode=EventHookMode_Post); /** * Removes a hook for when a game event is fired. * - * @param name Name of event. - * @param callback An EventHook function pointer. - * @param mode Optional EventHookMode determining the type of hook. - * @error Invalid callback function or no active hook for specified event. + * @param name Name of event. + * @param callback An EventHook function pointer. + * @param mode Optional EventHookMode determining the type of hook. + * @error Invalid callback function or no active hook for specified event. */ native void UnhookEvent(const char[] name, EventHook callback, EventHookMode mode=EventHookMode_Post); @@ -200,11 +203,11 @@ native void UnhookEvent(const char[] name, EventHook callback, EventHookMode mod * The Handle should not be closed via CloseHandle(). It must be closed via * event.Fire() or event.Cancel(). * - * @param name Name of event. - * @param force If set to true, this forces the event to be created even if it's not being hooked. - * Note that this will not force it if the event doesn't exist at all. - * @return Handle to event. INVALID_HANDLE is returned if the event doesn't exist or isn't - being hooked (unless force is true). + * @param name Name of event. + * @param force If set to true, this forces the event to be created even if it's not being hooked. + * Note that this will not force it if the event doesn't exist at all. + * @return Handle to event. INVALID_HANDLE is returned if the event doesn't exist or isn't + * being hooked (unless force is true). */ native Event CreateEvent(const char[] name, bool force=false); @@ -213,49 +216,49 @@ native Event CreateEvent(const char[] name, bool force=false); * * This function closes the event Handle after completing. * - * @param event Handle to the event. - * @param dontBroadcast Optional boolean that determines if event should be broadcast to clients. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param dontBroadcast Optional boolean that determines if event should be broadcast to clients. + * @error Invalid or corrupt Handle. */ native void FireEvent(Handle event, bool dontBroadcast=false); /** * Cancels a previously created game event that has not been fired. * - * @param event Handled to the event. - * @error Invalid or corrupt Handle. + * @param event Handled to the event. + * @error Invalid or corrupt Handle. */ native void CancelCreatedEvent(Handle event); /** * Returns the boolean value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param defValue Optional default value to use if the key is not found. - * @return The boolean value of the specified event key. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param defValue Optional default value to use if the key is not found. + * @return The boolean value of the specified event key. + * @error Invalid or corrupt Handle. */ native bool GetEventBool(Handle event, const char[] key, bool defValue=false); /** * Sets the boolean value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param value New boolean value. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param value New boolean value. + * @error Invalid or corrupt Handle. */ native void SetEventBool(Handle event, const char[] key, bool value); /** * Returns the integer value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param defValue Optional default value to use if the key is not found. - * @return The integer value of the specified event key. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param defValue Optional default value to use if the key is not found. + * @return The integer value of the specified event key. + * @error Invalid or corrupt Handle. */ native int GetEventInt(Handle event, const char[] key, int defValue=0); @@ -267,63 +270,63 @@ native int GetEventInt(Handle event, const char[] key, int defValue=0); * integers, and only refer to how much data will actually be sent * over the network (if applicable). * - * @param event Handle to the event. - * @param key Name of event key. - * @param value New integer value. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param value New integer value. + * @error Invalid or corrupt Handle. */ native void SetEventInt(Handle event, const char[] key, int value); /** * Returns the floating point value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param defValue Optional default value to use if the key is not found. - * @return The floating point value of the specified event key. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param defValue Optional default value to use if the key is not found. + * @return The floating point value of the specified event key. + * @error Invalid or corrupt Handle. */ native float GetEventFloat(Handle event, const char[] key, float defValue=0.0); /** * Sets the floating point value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param value New floating point value. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param value New floating point value. + * @error Invalid or corrupt Handle. */ native void SetEventFloat(Handle event, const char[] key, float value); /** * Retrieves the string value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param value Buffer to store the value of the specified event key. - * @param maxlength Maximum length of string buffer. - * @param defValue Optional default value to use if the key is not found. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param value Buffer to store the value of the specified event key. + * @param maxlength Maximum length of string buffer. + * @param defValue Optional default value to use if the key is not found. + * @error Invalid or corrupt Handle. */ native void GetEventString(Handle event, const char[] key, char[] value, int maxlength, const char[] defvalue=""); /** * Sets the string value of a game event's key. * - * @param event Handle to the event. - * @param key Name of event key. - * @param value New string value. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param key Name of event key. + * @param value New string value. + * @error Invalid or corrupt Handle. */ native void SetEventString(Handle event, const char[] key, const char[] value); /** * Retrieves the name of a game event. * - * @param event Handle to the event. - * @param name Buffer to store the name of the event. - * @param maxlength Maximum length of string buffer. - * @error Invalid or corrupt Handle. + * @param event Handle to the event. + * @param name Buffer to store the name of the event. + * @param maxlength Maximum length of string buffer. + * @error Invalid or corrupt Handle. */ native void GetEventName(Handle event, char[] name, int maxlength); diff --git a/env/include/files.inc b/env/include/files.inc index 8f6d227..fd292ba 100644 --- a/env/include/files.inc +++ b/env/include/files.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -39,13 +39,13 @@ * @global All paths in SourceMod natives are relative to the mod folder * unless otherwise noted. * - * Most functions in SourceMod (at least, ones that deal with direct + * Most functions in SourceMod (at least, ones that deal with direct * file manipulation) will support an alternate path specification. * - * If the path starts with the string "file://" and the PathType is - * not relative, then the "file://" portion is stripped off, and the - * rest of the path is used without any modification (except for - * correcting slashes). This can be used to override the path + * If the path starts with the string "file://" and the PathType is + * not relative, then the "file://" portion is stripped off, and the + * rest of the path is used without any modification (except for + * correcting slashes). This can be used to override the path * builder to supply alternate absolute paths. Examples: * * file://C:/Temp/file.txt @@ -57,9 +57,9 @@ */ enum FileType { - FileType_Unknown = 0, /* Unknown file type (device/socket) */ - FileType_Directory = 1, /* File is a directory */ - FileType_File = 2, /* File is a file */ + FileType_Unknown = 0, /* Unknown file type (device/socket) */ + FileType_Directory = 1, /* File is a directory */ + FileType_File = 2 /* File is a file */ }; /** @@ -67,23 +67,23 @@ enum FileType */ enum FileTimeMode { - FileTime_LastAccess = 0, /* Last access (does not work on FAT) */ - FileTime_Created = 1, /* Creation (does not work on FAT) */ - FileTime_LastChange = 2, /* Last modification */ + FileTime_LastAccess = 0, /* Last access (does not work on FAT) */ + FileTime_Created = 1, /* Creation (does not work on FAT) */ + FileTime_LastChange = 2 /* Last modification */ }; -#define PLATFORM_MAX_PATH 256 /**< Maximum path length. */ +#define PLATFORM_MAX_PATH 256 /**< Maximum path length. */ -#define SEEK_SET 0 /**< Seek from start. */ -#define SEEK_CUR 1 /**< Seek from current position. */ -#define SEEK_END 2 /**< Seek from end position. */ +#define SEEK_SET 0 /**< Seek from start. */ +#define SEEK_CUR 1 /**< Seek from current position. */ +#define SEEK_END 2 /**< Seek from end position. */ /** * Path types. */ enum PathType { - Path_SM, /**< SourceMod root folder */ + Path_SM, /**< SourceMod root folder */ }; // A DirectoryListing iterates over the contents of a directory. To obtain a @@ -92,9 +92,9 @@ methodmap DirectoryListing < Handle { // Reads the current directory entry as a local filename, then moves to the // next file. - // + // // Note: Both the '.' and '..' automatic directory entries will be retrieved. - // + // // @param buffer String buffer to hold directory name. // @param maxlength Maximum size of string buffer. // @param type Optional variable to store the file type. @@ -104,24 +104,24 @@ methodmap DirectoryListing < Handle // A File object can be obtained by calling OpenFile(). File objects should be // closed with delete or Close(). Note that, "delete file" does not -// actually a file, it just closes it. +// actually delete the file, it just closes the handle. methodmap File < Handle { - // Close the file handle. This is the same as using CloseHandle) or delete. + // Close the file handle. This is the same as using CloseHandle() or delete. public void Close() { CloseHandle(this); } // Reads a line of text from a file. - // + // // @param buffer String buffer to hold the line. - // @param maxlength Maximum size of string buffer. + // @param maxlength Maximum size of string buffer. // @return True on success, false otherwise. public native bool ReadLine(char[] buffer, int maxlength); // Reads binary data from a file. - // - // @param items Array to store each item read. + // + // @param items Array to store each item read. // @param num_items Number of items to read into the array. // @param size Size of each element, in bytes, to be read. // Valid sizes are 1, 2, or 4. @@ -129,40 +129,40 @@ methodmap File < Handle public native int Read(int[] items, int num_items, int size); // Reads a UTF8 or ANSI string from a file. - // + // // @param buffer Buffer to store the string. // @param max_size Maximum size of the string buffer. - // @param read_count If -1, reads until a null terminator is encountered in - // the file. Otherwise, read_count bytes are read - // into the buffer provided. In this case the buffer - // is not explicitly null terminated, and the buffer + // @param read_count If -1, reads until a null terminator is encountered in + // the file. Otherwise, read_count bytes are read + // into the buffer provided. In this case the buffer + // is not explicitly null terminated, and the buffer // will contain any null terminators read from the file. - // @return Number of characters written to the buffer, or -1 + // @return Number of characters written to the buffer, or -1 // if an error was encountered. // @error read_count > max_size. public native int ReadString(char[] buffer, int max_size, int read_count=-1); // Writes binary data to a file. // - // @param items Array of items to write. The data is read directly. - // That is, in 1 or 2-byte mode, the lower byte(s) in - // each cell are used directly, rather than performing + // @param items Array of items to write. The data is read directly. + // That is, in 1 or 2-byte mode, the lower byte(s) in + // each cell are used directly, rather than performing // any casts from a 4-byte number to a smaller number. // @param num_items Number of items in the array. - // @param size Size of each item in the array in bytes. + // @param size Size of each item in the array in bytes. // Valid sizes are 1, 2, or 4. // @return True on success, false on error. public native bool Write(const int[] items, int num_items, int size); // Writes a binary string to a file. - // + // // @param buffer String to write. // @param term True to append NUL terminator, false otherwise. // @return True on success, false on error. public native bool WriteString(const char[] buffer, bool term); // Writes a line of text to a text file. A newline is automatically appended. - // + // // @param hndl Handle to the file. // @param format Formatting rules. // @param ... Variable number of format parameters. @@ -222,7 +222,7 @@ methodmap File < Handle public native bool WriteInt32(int data); // Tests if the end of file has been reached. - // + // // @return True if end of file has been reached, false otherwise. public native bool EndOfFile(); @@ -233,6 +233,13 @@ methodmap File < Handle // @return True on success, false otherwise. public native bool Seek(int position, int where); + // Flushes a file's buffered output; any buffered output + // is immediately written to the file. + // + // @return True on success or use_valve_fs specified with OpenFile, + // otherwise false on failure. + public native bool Flush(); + // Get the current position in the file; returns -1 on failure. property int Position { public native get(); @@ -240,16 +247,16 @@ methodmap File < Handle } /** - * Builds a path relative to the SourceMod folder. This should be used instead of - * directly referencing addons/sourcemod, in case users change the name of their + * Builds a path relative to the SourceMod folder. This should be used instead of + * directly referencing addons/sourcemod, in case users change the name of their * folder layout. * - * @param type Type of path to build as the base. - * @param buffer Buffer to store the path. - * @param maxlength Maximum length of buffer. - * @param fmt Format string. - * @param ... Format arguments. - * @return Number of bytes written to buffer (not including null terminator). + * @param type Type of path to build as the base. + * @param buffer Buffer to store the path. + * @param maxlength Maximum length of buffer. + * @param fmt Format string. + * @param ... Format arguments. + * @return Number of bytes written to buffer (not including null terminator). */ native int BuildPath(PathType type, char[] buffer, int maxlength, const char[] fmt, any ...); @@ -260,13 +267,13 @@ native int BuildPath(PathType type, char[] buffer, int maxlength, const char[] f * @note Directories Handles can be cloned. * @note OpenDirectory() supports the "file://" notation. * - * @param path Path to open. + * @param path Path to open. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to find files existing in any of * the Valve search paths, rather than solely files * existing directly in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return A Handle to the directory, null on error. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return A Handle to the directory, null on error. */ native DirectoryListing OpenDirectory(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); @@ -275,13 +282,13 @@ native DirectoryListing OpenDirectory(const char[] path, bool use_valve_fs=false * * @note Contents of buffers are undefined when returning false. * @note Both the '.' and '..' automatic directory entries will be retrieved for Windows and Linux. - * - * @param dir Handle to a directory. - * @param buffer String buffer to hold directory name. - * @param maxlength Maximum size of string buffer. - * @param type Optional variable to store the file type. - * @return True on success, false if there are no more files to read. - * @error Invalid or corrupt Handle. + * + * @param dir Handle to a directory. + * @param buffer String buffer to hold directory name. + * @param maxlength Maximum size of string buffer. + * @param type Optional variable to store the file type. + * @return True on success, false if there are no more files to read. + * @error Invalid or corrupt Handle. */ native bool ReadDirEntry(Handle dir, char[] buffer, int maxlength, FileType &type=FileType_Unknown); @@ -310,227 +317,229 @@ native bool ReadDirEntry(Handle dir, char[] buffer, int maxlength, FileType &typ * Example: "rb" opens a binary file for writing; "at" opens a text file for * appending. * - * @param file File to open. - * @param mode Open mode. + * @param file File to open. + * @param mode Open mode. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to find files existing in valve - * search paths, rather than solely files existing directly - * in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return A File handle, or null if the file could not be opened. + * search paths, rather than solely files existing directly + * in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return A File handle, or null if the file could not be opened. */ native File OpenFile(const char[] file, const char[] mode, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Deletes a file. * - * @param path Path of the file to delete. + * @param path Path of the file to delete. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to delete files existing in the Valve * search path, rather than solely files existing directly - * in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return True on success, false on failure or if file not immediately removed. + * in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return True on success, false on failure or if file not immediately removed. */ native bool DeleteFile(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="DEFAULT_WRITE_PATH"); /** * Reads a line from a text file. * - * @param hndl Handle to the file. - * @param buffer String buffer to hold the line. - * @param maxlength Maximum size of string buffer. - * @return True on success, false otherwise. + * @param hndl Handle to the file. + * @param buffer String buffer to hold the line. + * @param maxlength Maximum size of string buffer. + * @return True on success, false otherwise. */ native bool ReadFileLine(Handle hndl, char[] buffer, int maxlength); /** * Reads binary data from a file. * - * @param hndl Handle to the file. - * @param items Array to store each item read. - * @param num_items Number of items to read into the array. - * @param size Size of each element, in bytes, to be read. - * Valid sizes are 1, 2, or 4. - * @return Number of elements read, or -1 on error. + * @param hndl Handle to the file. + * @param items Array to store each item read. + * @param num_items Number of items to read into the array. + * @param size Size of each element, in bytes, to be read. + * Valid sizes are 1, 2, or 4. + * @return Number of elements read, or -1 on error. */ native int ReadFile(Handle hndl, int[] items, int num_items, int size); /** * Reads a UTF8 or ANSI string from a file. * - * @param hndl Handle to the file. - * @param buffer Buffer to store the string. - * @param max_size Maximum size of the string buffer. - * @param read_count If -1, reads until a null terminator is encountered in - * the file. Otherwise, read_count bytes are read - * into the buffer provided. In this case the buffer - * is not explicitly null terminated, and the buffer - * will contain any null terminators read from the file. - * @return Number of characters written to the buffer, or -1 - * if an error was encountered. - * @error Invalid Handle, or read_count > max_size. + * @param hndl Handle to the file. + * @param buffer Buffer to store the string. + * @param max_size Maximum size of the string buffer. + * @param read_count If -1, reads until a null terminator is encountered in + * the file. Otherwise, read_count bytes are read + * into the buffer provided. In this case the buffer + * is not explicitly null terminated, and the buffer + * will contain any null terminators read from the file. + * @return Number of characters written to the buffer, or -1 + * if an error was encountered. + * @error Invalid Handle, or read_count > max_size. */ native int ReadFileString(Handle hndl, char[] buffer, int max_size, int read_count=-1); /** * Writes binary data to a file. * - * @param hndl Handle to the file. - * @param items Array of items to write. The data is read directly. - * That is, in 1 or 2-byte mode, the lower byte(s) in - * each cell are used directly, rather than performing - * any casts from a 4-byte number to a smaller number. - * @param num_items Number of items in the array. - * @param size Size of each item in the array in bytes. - * Valid sizes are 1, 2, or 4. - * @return True on success, false on error. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param items Array of items to write. The data is read directly. + * That is, in 1 or 2-byte mode, the lower byte(s) in + * each cell are used directly, rather than performing + * any casts from a 4-byte number to a smaller number. + * @param num_items Number of items in the array. + * @param size Size of each item in the array in bytes. + * Valid sizes are 1, 2, or 4. + * @return True on success, false on error. + * @error Invalid Handle. */ native bool WriteFile(Handle hndl, const int[] items, int num_items, int size); /** * Writes a binary string to a file. * - * @param hndl Handle to the file. - * @param buffer String to write. - * @param term True to append NUL terminator, false otherwise. - * @return True on success, false on error. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param buffer String to write. + * @param term True to append NUL terminator, false otherwise. + * @return True on success, false on error. + * @error Invalid Handle. */ native bool WriteFileString(Handle hndl, const char[] buffer, bool term); /** * Writes a line of text to a text file. A newline is automatically appended. * - * @param hndl Handle to the file. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @return True on success, false otherwise. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool WriteFileLine(Handle hndl, const char[] format, any ...); /** * Reads a single binary cell from a file. * - * @param hndl Handle to the file. - * @param data Variable to store the data read. - * @param size Size of the data to read in bytes. Valid - * sizes are 1, 2, or 4 bytes. - * @return Number of elements read (max 1), or -1 on error. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param data Variable to store the data read. + * @param size Size of the data to read in bytes. Valid + * sizes are 1, 2, or 4 bytes. + * @return Number of elements read (max 1), or -1 on error. + * @error Invalid Handle. */ stock int ReadFileCell(Handle hndl, int &data, int size) { int ret; int array[1]; - + if ((ret = ReadFile(hndl, array, 1, size)) == 1) + { data = array[0]; - + } + return ret; } /** * Writes a single binary cell to a file. * - * @param hndl Handle to the file. - * @param data Cell to write to the file. - * @param size Size of the data to read in bytes. Valid - * sizes are 1, 2, or 4 bytes. If the size - * is less than 4 bytes, the data is truncated - * rather than casted. That is, only the lower - * bits will be read. - * @return True on success, false on error. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param data Cell to write to the file. + * @param size Size of the data to read in bytes. Valid + * sizes are 1, 2, or 4 bytes. If the size + * is less than 4 bytes, the data is truncated + * rather than casted. That is, only the lower + * bits will be read. + * @return True on success, false on error. + * @error Invalid Handle. */ stock bool WriteFileCell(Handle hndl, int data, int size) { int array[1]; - array[0] = data; + return WriteFile(hndl, array, 1, size); } - + /** * Tests if the end of file has been reached. * - * @param file Handle to the file. - * @return True if end of file has been reached, false otherwise. - * @error Invalid Handle. + * @param file Handle to the file. + * @return True if end of file has been reached, false otherwise. + * @error Invalid Handle. */ native bool IsEndOfFile(Handle file); /** * Sets the file position indicator. * - * @param file Handle to the file. - * @param position Position relative to what is specified in whence. - * @param where SEEK_ constant value of where to see from. - * @return True on success, false otherwise. - * @error Invalid Handle. + * @param file Handle to the file. + * @param position Position relative to what is specified in whence. + * @param where SEEK_ constant value of where to see from. + * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool FileSeek(Handle file, int position, int where); /** * Get current position in the file. * - * @param file Handle to the file. - * @return Value for the file position indicator. - * @error Invalid Handle. + * @param file Handle to the file. + * @return Value for the file position indicator. + * @error Invalid Handle. */ native int FilePosition(Handle file); /** * Checks if a file exists. * - * @param path Path to the file. - * @param use_valve_fs If true, the Valve file system will be used instead. - * This can be used to find files existing in any of - * the Valve search paths, rather than solely files - * existing directly in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return True if the file exists, false otherwise. + * @param path Path to the file. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to find files existing in any of + * the Valve search paths, rather than solely files + * existing directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return True if the file exists, false otherwise. */ native bool FileExists(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Renames a file. * - * @param newpath New path to the file. - * @param oldpath Path to the existing file. + * @param newpath New path to the file. + * @param oldpath Path to the existing file. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to rename files in the game's * Valve search paths, rather than directly in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return True on success or use_valve_fs specified, false otherwise. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return True on success or use_valve_fs specified, false otherwise. */ native bool RenameFile(const char[] newpath, const char[] oldpath, bool use_valve_fs=false, const char[] valve_path_id="DEFAULT_WRITE_PATH"); /** * Checks if a directory exists. * - * @param path Path to the directory. + * @param path Path to the directory. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to find files existing in any of * the Valve search paths, rather than solely files * existing directly in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return True if the directory exists, false otherwise. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return True if the directory exists, false otherwise. */ native bool DirExists(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); /** * Get the file size in bytes. * - * @param path Path to the file. - * @param use_valve_fs If true, the Valve file system will be used instead. - * This can be used to find files existing in any of - * the Valve search paths, rather than solely files - * existing directly in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. - * @return File size in bytes, -1 if file not found. + * @param path Path to the file. + * @param use_valve_fs If true, the Valve file system will be used instead. + * This can be used to find files existing in any of + * the Valve search paths, rather than solely files + * existing directly in the gamedir. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for all search paths. + * @return File size in bytes, -1 if file not found. */ native int FileSize(const char[] path, bool use_valve_fs=false, const char[] valve_path_id="GAME"); @@ -538,8 +547,8 @@ native int FileSize(const char[] path, bool use_valve_fs=false, const char[] val * Flushes a file's buffered output; any buffered output * is immediately written to the file. * - * @param file Handle to the file. - * @return True on success or use_valve_fs specified with OpenFile, + * @param file Handle to the file. + * @return True on success or use_valve_fs specified with OpenFile, * otherwise false on failure. */ native bool FlushFile(Handle file); @@ -548,71 +557,72 @@ native bool FlushFile(Handle file); * Removes a directory. * @note On most Operating Systems you cannot remove a directory which has files inside it. * - * @param path Path to the directory. - * @return True on success, false otherwise. + * @param path Path to the directory. + * @return True on success, false otherwise. */ native bool RemoveDir(const char[] path); -#define FPERM_U_READ 0x0100 /* User can read. */ -#define FPERM_U_WRITE 0x0080 /* User can write. */ -#define FPERM_U_EXEC 0x0040 /* User can exec. */ -#define FPERM_G_READ 0x0020 /* Group can read. */ -#define FPERM_G_WRITE 0x0010 /* Group can write. */ -#define FPERM_G_EXEC 0x0008 /* Group can exec. */ -#define FPERM_O_READ 0x0004 /* Anyone can read. */ -#define FPERM_O_WRITE 0x0002 /* Anyone can write. */ -#define FPERM_O_EXEC 0x0001 /* Anyone can exec. */ +#define FPERM_U_READ 0x0100 /* User can read. */ +#define FPERM_U_WRITE 0x0080 /* User can write. */ +#define FPERM_U_EXEC 0x0040 /* User can exec. */ +#define FPERM_G_READ 0x0020 /* Group can read. */ +#define FPERM_G_WRITE 0x0010 /* Group can write. */ +#define FPERM_G_EXEC 0x0008 /* Group can exec. */ +#define FPERM_O_READ 0x0004 /* Anyone can read. */ +#define FPERM_O_WRITE 0x0002 /* Anyone can write. */ +#define FPERM_O_EXEC 0x0001 /* Anyone can exec. */ /** * Creates a directory. * - * @param path Path to create. - * @param mode Permissions (default is o=rx,g=rx,u=rwx). Note that folders must have - * the execute bit set on Linux. On Windows, the mode is ignored. + * @param path Path to create. + * @param mode Permissions (default is o=rx,g=rx,u=rwx). Note that folders must have + * the execute bit set on Linux. On Windows, the mode is ignored. * @param use_valve_fs If true, the Valve file system will be used instead. * This can be used to create folders in the game's * Valve search paths, rather than directly in the gamedir. - * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for default. + * @param valve_path_id If use_valve_fs, a search path from gameinfo or NULL_STRING for default. * In this case, mode is ignored. + * @return True on success, false otherwise. */ native bool CreateDirectory(const char[] path, int mode, bool use_valve_fs=false, const char[] valve_path_id="DEFAULT_WRITE_PATH"); /** * Changes a file or directories permissions. * - * @param path Path to the file. - * @param mode Permissions to set. - * @return True on success, false otherwise. + * @param path Path to the file. + * @param mode Permissions to set. + * @return True on success, false otherwise. */ native bool SetFilePermissions(const char[] path, int mode); /** * Returns a file timestamp as a unix timestamp. * - * @param file File name. - * @param tmode Time mode. - * @return Time value, or -1 on failure. + * @param file File name. + * @param tmode Time mode. + * @return Time value, or -1 on failure. */ native int GetFileTime(const char[] file, FileTimeMode tmode); /** - * Same as LogToFile(), except uses an open file Handle. The file must + * Same as LogToFile(), except uses an open file Handle. The file must * be opened in text appending mode. * - * @param hndl Handle to the file. - * @param message Message format. - * @param ... Message format parameters. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param message Message format. + * @param ... Message format parameters. + * @error Invalid Handle. */ native void LogToOpenFile(Handle hndl, const char[] message, any ...); /** - * Same as LogToFileEx(), except uses an open file Handle. The file must + * Same as LogToFileEx(), except uses an open file Handle. The file must * be opened in text appending mode. * - * @param hndl Handle to the file. - * @param message Message format. - * @param ... Message format parameters. - * @error Invalid Handle. + * @param hndl Handle to the file. + * @param message Message format. + * @param ... Message format parameters. + * @error Invalid Handle. */ native void LogToOpenFileEx(Handle hndl, const char[] message, any ...); diff --git a/env/include/float.inc b/env/include/float.inc index b6bbd34..8005e05 100644 --- a/env/include/float.inc +++ b/env/include/float.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _float_included #endinput #endif @@ -39,8 +39,8 @@ /** * Converts an integer into a floating point value. * - * @param value Integer to convert. - * @return Floating point value. + * @param value Integer to convert. + * @return Floating point value. */ native float float(int value); #endif @@ -48,85 +48,101 @@ native float float(int value); /** * Multiplies two floats together. * - * @param oper1 First value. - * @param oper2 Second value. - * @return oper1*oper2. + * Note: This native is internal implementation. For multiplication use the '*' operator. + * + * @param oper1 First value. + * @param oper2 Second value. + * @return oper1*oper2. + * @deprecated This native is internal implementation. For multiplication use the '*' operator. */ +#pragma deprecated This native is internal implementation. For multiplication use the '*' operator. native float FloatMul(float oper1, float oper2); /** * Divides the dividend by the divisor. * - * @param dividend First value. - * @param divisor Second value. - * @return dividend/divisor. + * Note: This native is internal implementation. For division use the '/' operator. + * + * @param dividend First value. + * @param divisor Second value. + * @return dividend/divisor. + * @deprecated This native is internal implementation. For division use the '/' operator. */ +#pragma deprecated This native is internal implementation. For division use the '/' operator. native float FloatDiv(float dividend, float divisor); /** * Adds two floats together. * - * @param oper1 First value. - * @param oper2 Second value. - * @return oper1+oper2. + * Note: This native is internal implementation. For addition use the '+' operator. + * + * @param oper1 First value. + * @param oper2 Second value. + * @return oper1+oper2. + * @deprecated This native is internal implementation. For addition use the '+' operator. */ +#pragma deprecated This native is internal implementation. For addition use the '+' operator. native float FloatAdd(float oper1, float oper2); /** * Subtracts oper2 from oper1. * - * @param oper1 First value. - * @param oper2 Second value. - * @return oper1-oper2. + * Note: This native is internal implementation. For subtraction use the '-' operator. + * + * @param oper1 First value. + * @param oper2 Second value. + * @return oper1-oper2. + * @deprecated This native is internal implementation. For subtraction use the '-' operator. */ +#pragma deprecated This native is internal implementation. For subtraction use the '-' operator. native float FloatSub(float oper1, float oper2); /** * Returns the decimal part of a float. * - * @param value Input value. - * @return Decimal part. + * @param value Input value. + * @return Decimal part. */ native float FloatFraction(float value); /** * Rounds a float to the closest integer to zero. * - * @param value Input value to be rounded. - * @return Rounded value. + * @param value Input value to be rounded. + * @return Rounded value. */ native int RoundToZero(float value); /** * Rounds a float to the next highest integer value. * - * @param value Input value to be rounded. - * @return Rounded value. + * @param value Input value to be rounded. + * @return Rounded value. */ native int RoundToCeil(float value); /** * Rounds a float to the next lowest integer value. * - * @param value Input value to be rounded. - * @return Rounded value. + * @param value Input value to be rounded. + * @return Rounded value. */ native int RoundToFloor(float value); /** * Standard IEEE rounding. * - * @param value Input value to be rounded. - * @return Rounded value. + * @param value Input value to be rounded. + * @return Rounded value. */ native int RoundToNearest(float value); /** * Compares two floats. * - * @param fOne First value. - * @param fTwo Second value. - * @return Returns 1 if the first argument is greater than the second argument. + * @param fOne First value. + * @param fTwo Second value. + * @return Returns 1 if the first argument is greater than the second argument. * Returns -1 if the first argument is smaller than the second argument. * Returns 0 if both arguments are equal. */ @@ -135,107 +151,107 @@ native int FloatCompare(float fOne, float fTwo); /** * Returns the square root of the input value, equivalent to floatpower(value, 0.5). * - * @param value Input value. - * @return Square root of the value. + * @param value Input value. + * @return Square root of the value. */ native float SquareRoot(float value); /** * Returns the value raised to the power of the exponent. * - * @param value Value to be raised. - * @param exponent Value to raise the base. - * @return value^exponent. + * @param value Value to be raised. + * @param exponent Value to raise the base. + * @return value^exponent. */ native float Pow(float value, float exponent); /** * Returns the value of raising the input by e. * - * @param value Input value. - * @return exp(value). + * @param value Input value. + * @return exp(value). */ native float Exponential(float value); /** * Returns the logarithm of any base specified. * - * @param value Input value. - * @param base Logarithm base to use, default is 10. - * @return log(value)/log(base). + * @param value Input value. + * @param base Logarithm base to use, default is 10. + * @return log(value)/log(base). */ native float Logarithm(float value, float base=10.0); /** * Returns the sine of the argument. * - * @param value Input value in radians. - * @return sin(value). + * @param value Input value in radians. + * @return sin(value). */ native float Sine(float value); /** * Returns the cosine of the argument. * - * @param value Input value in radians. - * @return cos(value). + * @param value Input value in radians. + * @return cos(value). */ native float Cosine(float value); /** * Returns the tangent of the argument. * - * @param value Input value in radians. - * @return tan(value). + * @param value Input value in radians. + * @return tan(value). */ native float Tangent(float value); /** * Returns an absolute value. * - * @param value Input value. - * @return Absolute value of the input. + * @param value Input value. + * @return Absolute value of the input. */ native float FloatAbs(float value); /** * Returns the arctangent of the input value. * - * @param angle Input value. - * @return atan(value) in radians. + * @param angle Input value. + * @return atan(value) in radians. */ native float ArcTangent(float angle); /** * Returns the arccosine of the input value. * - * @param angle Input value. - * @return acos(value) in radians. + * @param angle Input value. + * @return acos(value) in radians. */ native float ArcCosine(float angle); /** * Returns the arcsine of the input value. * - * @param angle Input value. - * @return asin(value) in radians. + * @param angle Input value. + * @return asin(value) in radians. */ native float ArcSine(float angle); /** * Returns the arctangent2 of the input values. * - * @param x Horizontal value. - * @param y Vertical value. - * @return atan2(value) in radians. + * @param x Horizontal value. + * @param y Vertical value. + * @return atan2(value) in radians. */ native float ArcTangent2(float x, float y); /** * Rounds a floating point number using the "round to nearest" algorithm. * - * @param value Floating point value to round. - * @return The value rounded to the nearest integer. + * @param value Floating point value to round. + * @return The value rounded to the nearest integer. */ stock int RoundFloat(float value) { @@ -248,6 +264,12 @@ stock int RoundFloat(float value) #if !defined __sourcepawn2__ #pragma rational Float +// Internal aliases for backwards compatability. +native float __FLOAT_MUL__(float a, float b) = FloatMul; +native float __FLOAT_DIV__(float a, float b) = FloatDiv; +native float __FLOAT_ADD__(float a, float b) = FloatAdd; +native float __FLOAT_SUB__(float a, float b) = FloatSub; + native bool __FLOAT_GT__(float a, float b); native bool __FLOAT_GE__(float a, float b); native bool __FLOAT_LT__(float a, float b); @@ -280,37 +302,39 @@ stock float operator--(float oper) stock float operator-(float oper) { - return oper^view_as(cellmin); /* IEEE values are sign/magnitude */ + return oper^view_as(cellmin); /* IEEE values are sign/magnitude */ } +// The stocks below are int->float converting versions of the above natives. + stock float operator*(float oper1, int oper2) { - return FloatMul(oper1, float(oper2)); /* "*" is commutative */ + return __FLOAT_MUL__(oper1, float(oper2)); /* "*" is commutative */ } stock float operator/(float oper1, int oper2) { - return FloatDiv(oper1, float(oper2)); + return __FLOAT_DIV__(oper1, float(oper2)); } stock float operator/(int oper1, float oper2) { - return FloatDiv(float(oper1), oper2); + return __FLOAT_DIV__(float(oper1), oper2); } stock float operator+(float oper1, int oper2) { - return FloatAdd(oper1, float(oper2)); /* "+" is commutative */ + return __FLOAT_ADD__(oper1, float(oper2)); /* "+" is commutative */ } stock float operator-(float oper1, int oper2) { - return FloatSub(oper1, float(oper2)); + return __FLOAT_SUB__(oper1, float(oper2)); } stock float operator-(int oper1, float oper2) { - return FloatSub(float(oper1), oper2); + return __FLOAT_SUB__(float(oper1), oper2); } stock bool operator==(float oper1, int oper2) @@ -376,8 +400,8 @@ forward operator%(int oper1, float oper2); /** * Converts degrees to radians. * - * @param angle Degrees. - * @return Radians. + * @param angle Degrees. + * @return Radians. */ stock float DegToRad(float angle) { @@ -385,10 +409,10 @@ stock float DegToRad(float angle) } /** - * Converts degrees to radians. + * Converts radians to degrees. * - * @param angle Radians. - * @return Degrees. + * @param angle Radians. + * @return Degrees. */ stock float RadToDeg(float angle) { @@ -400,7 +424,7 @@ stock float RadToDeg(float angle) * * Note: Uniform random number streams are seeded automatically per-plugin. * - * @return Random integer. + * @return Random integer. */ native int GetURandomInt(); @@ -409,7 +433,7 @@ native int GetURandomInt(); * * Note: Uniform random number streams are seeded automatically per-plugin. * - * @return Uniform random floating-point number. + * @return Uniform random floating-point number. */ native float GetURandomFloat(); @@ -417,8 +441,8 @@ native float GetURandomFloat(); * Seeds a plugin's uniform random number stream. This is done automatically, * so normally it is totally unnecessary to call this. * - * @param seeds Array of numbers to use as seeding data. - * @param numSeeds Number of seeds in the seeds array. + * @param seeds Array of numbers to use as seeding data. + * @param numSeeds Number of seeds in the seeds array. */ native void SetURandomSeed(const int[] seeds, int numSeeds); diff --git a/env/include/functions.inc b/env/include/functions.inc index 17f8813..b82935f 100644 --- a/env/include/functions.inc +++ b/env/include/functions.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,27 +29,27 @@ * * Version: $Id$ */ - + #if defined _functions_included #endinput #endif #define _functions_included - -#define SP_PARAMFLAG_BYREF (1<<0) /**< Internal use only. */ + +#define SP_PARAMFLAG_BYREF (1<<0) /**< Internal use only. */ /** * Describes the various ways to pass parameters to functions or forwards. */ enum ParamType { - Param_Any = 0, /**< Any data type can be pushed */ - Param_Cell = (1<<1), /**< Only basic cells can be pushed */ - Param_Float = (2<<1), /**< Only floats can be pushed */ - Param_String = (3<<1)|SP_PARAMFLAG_BYREF, /**< Only strings can be pushed */ - Param_Array = (4<<1)|SP_PARAMFLAG_BYREF, /**< Only arrays can be pushed */ - Param_VarArgs = (5<<1), /**< Same as "..." in plugins, anything can be pushed, but it will always be byref */ - Param_CellByRef = (1<<1)|SP_PARAMFLAG_BYREF, /**< Only a cell by reference can be pushed */ - Param_FloatByRef = (2<<1)|SP_PARAMFLAG_BYREF /**< Only a float by reference can be pushed */ + Param_Any = 0, /**< Any data type can be pushed */ + Param_Cell = (1<<1), /**< Only basic cells can be pushed */ + Param_Float = (2<<1), /**< Only floats can be pushed */ + Param_String = (3<<1)|SP_PARAMFLAG_BYREF, /**< Only strings can be pushed */ + Param_Array = (4<<1)|SP_PARAMFLAG_BYREF, /**< Only arrays can be pushed */ + Param_VarArgs = (5<<1), /**< Same as "..." in plugins, anything can be pushed, but it will always be byref */ + Param_CellByRef = (1<<1)|SP_PARAMFLAG_BYREF, /**< Only a cell by reference can be pushed */ + Param_FloatByRef = (2<<1)|SP_PARAMFLAG_BYREF /**< Only a float by reference can be pushed */ }; /** @@ -57,21 +57,21 @@ enum ParamType */ enum ExecType { - ET_Ignore = 0, /**< Ignore all return values, return 0 */ - ET_Single = 1, /**< Only return the last exec, ignore all others */ - ET_Event = 2, /**< Acts as an event with the Actions defined in core.inc, no mid-Stops allowed, returns highest */ - ET_Hook = 3 /**< Acts as a hook with the Actions defined in core.inc, mid-Stops allowed, returns highest */ + ET_Ignore = 0, /**< Ignore all return values, return 0 */ + ET_Single = 1, /**< Only return the last exec, ignore all others */ + ET_Event = 2, /**< Acts as an event with the Actions defined in core.inc, no mid-Stops allowed, returns highest */ + ET_Hook = 3 /**< Acts as a hook with the Actions defined in core.inc, mid-Stops allowed, returns highest */ }; /** * @section Flags that are used with Call_PushArrayEx() and Call_PushStringEx() */ - -#define SM_PARAM_COPYBACK (1<<0) /**< Copy an array/reference back after call */ -#define SM_PARAM_STRING_UTF8 (1<<0) /**< String should be UTF-8 handled */ -#define SM_PARAM_STRING_COPY (1<<1) /**< String should be copied into the plugin */ -#define SM_PARAM_STRING_BINARY (1<<2) /**< Treat the string as a binary string */ +#define SM_PARAM_COPYBACK (1<<0) /**< Copy an array/reference back after call */ + +#define SM_PARAM_STRING_UTF8 (1<<0) /**< String should be UTF-8 handled */ +#define SM_PARAM_STRING_COPY (1<<1) /**< String should be copied into the plugin */ +#define SM_PARAM_STRING_BINARY (1<<2) /**< Treat the string as a binary string */ /** * @endsection @@ -80,45 +80,113 @@ enum ExecType /** * @section Error codes */ -#define SP_ERROR_NONE 0 /**< No error occurred */ -#define SP_ERROR_FILE_FORMAT 1 /**< File format unrecognized */ -#define SP_ERROR_DECOMPRESSOR 2 /**< A decompressor was not found */ -#define SP_ERROR_HEAPLOW 3 /**< Not enough space left on the heap */ -#define SP_ERROR_PARAM 4 /**< Invalid parameter or parameter type */ -#define SP_ERROR_INVALID_ADDRESS 5 /**< A memory address was not valid */ -#define SP_ERROR_NOT_FOUND 6 /**< The object in question was not found */ -#define SP_ERROR_INDEX 7 /**< Invalid index parameter */ -#define SP_ERROR_STACKLOW 8 /**< Not enough space left on the stack */ -#define SP_ERROR_NOTDEBUGGING 9 /**< Debug mode was not on or debug section not found */ -#define SP_ERROR_INVALID_INSTRUCTION 10 /**< Invalid instruction was encountered */ -#define SP_ERROR_MEMACCESS 11 /**< Invalid memory access */ -#define SP_ERROR_STACKMIN 12 /**< Stack went beyond its minimum value */ -#define SP_ERROR_HEAPMIN 13 /**< Heap went beyond its minimum value */ -#define SP_ERROR_DIVIDE_BY_ZERO 14 /**< Division by zero */ -#define SP_ERROR_ARRAY_BOUNDS 15 /**< Array index is out of bounds */ -#define SP_ERROR_INSTRUCTION_PARAM 16 /**< Instruction had an invalid parameter */ -#define SP_ERROR_STACKLEAK 17 /**< A native leaked an item on the stack */ -#define SP_ERROR_HEAPLEAK 18 /**< A native leaked an item on the heap */ -#define SP_ERROR_ARRAY_TOO_BIG 19 /**< A dynamic array is too big */ -#define SP_ERROR_TRACKER_BOUNDS 20 /**< Tracker stack is out of bounds */ -#define SP_ERROR_INVALID_NATIVE 21 /**< Native was pending or invalid */ -#define SP_ERROR_PARAMS_MAX 22 /**< Maximum number of parameters reached */ -#define SP_ERROR_NATIVE 23 /**< Error originates from a native */ -#define SP_ERROR_NOT_RUNNABLE 24 /**< Function or plugin is not runnable */ -#define SP_ERROR_ABORTED 25 /**< Function call was aborted */ +#define SP_ERROR_NONE 0 /**< No error occurred */ +#define SP_ERROR_FILE_FORMAT 1 /**< File format unrecognized */ +#define SP_ERROR_DECOMPRESSOR 2 /**< A decompressor was not found */ +#define SP_ERROR_HEAPLOW 3 /**< Not enough space left on the heap */ +#define SP_ERROR_PARAM 4 /**< Invalid parameter or parameter type */ +#define SP_ERROR_INVALID_ADDRESS 5 /**< A memory address was not valid */ +#define SP_ERROR_NOT_FOUND 6 /**< The object in question was not found */ +#define SP_ERROR_INDEX 7 /**< Invalid index parameter */ +#define SP_ERROR_STACKLOW 8 /**< Not enough space left on the stack */ +#define SP_ERROR_NOTDEBUGGING 9 /**< Debug mode was not on or debug section not found */ +#define SP_ERROR_INVALID_INSTRUCTION 10 /**< Invalid instruction was encountered */ +#define SP_ERROR_MEMACCESS 11 /**< Invalid memory access */ +#define SP_ERROR_STACKMIN 12 /**< Stack went beyond its minimum value */ +#define SP_ERROR_HEAPMIN 13 /**< Heap went beyond its minimum value */ +#define SP_ERROR_DIVIDE_BY_ZERO 14 /**< Division by zero */ +#define SP_ERROR_ARRAY_BOUNDS 15 /**< Array index is out of bounds */ +#define SP_ERROR_INSTRUCTION_PARAM 16 /**< Instruction had an invalid parameter */ +#define SP_ERROR_STACKLEAK 17 /**< A native leaked an item on the stack */ +#define SP_ERROR_HEAPLEAK 18 /**< A native leaked an item on the heap */ +#define SP_ERROR_ARRAY_TOO_BIG 19 /**< A dynamic array is too big */ +#define SP_ERROR_TRACKER_BOUNDS 20 /**< Tracker stack is out of bounds */ +#define SP_ERROR_INVALID_NATIVE 21 /**< Native was pending or invalid */ +#define SP_ERROR_PARAMS_MAX 22 /**< Maximum number of parameters reached */ +#define SP_ERROR_NATIVE 23 /**< Error originates from a native */ +#define SP_ERROR_NOT_RUNNABLE 24 /**< Function or plugin is not runnable */ +#define SP_ERROR_ABORTED 25 /**< Function call was aborted */ /** * @endsection */ +methodmap GlobalForward < Handle { + // Creates a global forward. + // + // @note The name used to create the forward is used as its public function in all target plugins. + // @note This is ideal for global, static forwards that are never changed. + // @note Global forwards cannot be cloned. + // @note Use CloseHandle() to destroy these. + // + // @param name Name of public function to use in forward. + // @param type Execution type to be used. + // @param ... Variable number of parameter types (up to 32). + // @return Handle to new global forward. + // @error More than 32 paramater types passed. + public native GlobalForward(const char[] name, ExecType type, ParamType ...); + + // Returns the number of functions in a global or private forward's call list. + property int FunctionCount { + public native get(); + } +}; + +methodmap PrivateForward < GlobalForward { + // Creates a private forward. + // + // @note No functions are automatically added. Use AddToForward() to do this. + // @note Private forwards can be cloned. + // @note Use CloseHandle() to destroy these. + // + // @param type Execution type to be used. + // @param ... Variable number of parameter types (up to 32). + // @return Handle to new private forward. + // @error More than 32 paramater types passed. + public native PrivateForward(ExecType type, ParamType ...); + + // Adds a function to a private forward's call list. + // + // @note Cannot be used during an incomplete call. + // + // @param plugin Handle of the plugin that contains the function. + // Pass INVALID_HANDLE to specify the calling plugin. + // @param func Function to add to forward. + // @return True on success, false otherwise. + // @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function. + public native bool AddFunction(Handle plugin, Function func); + + // Removes a function from a private forward's call list. + // + // @note Only removes one instance. + // @note Functions will be removed automatically if their parent plugin is unloaded. + // + // @param plugin Handle of the plugin that contains the function. + // Pass INVALID_HANDLE to specify the calling plugin. + // @param func Function to remove from forward. + // @return True on success, false otherwise. + // @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function. + public native bool RemoveFunction(Handle plugin, Function func); + + // Removes all instances of a plugin from a private forward's call list. + // + // @note Functions will be removed automatically if their parent plugin is unloaded. + // + // @param plugin Handle of the plugin to remove instances of. + // Pass INVALID_HANDLE to specify the calling plugin. + // @return Number of functions removed from forward. + // @error Invalid or corrupt private forward handle or invalid or corrupt plugin handle. + public native int RemoveAllFunctions(Handle plugin); +}; + /** - * Gets a function id from a function name. + * Gets a function id from a function name. * - * @param plugin Handle of the plugin that contains the function. - Pass INVALID_HANDLE to search in the calling plugin. - * @param name Name of the function. - * @return Function id or INVALID_FUNCTION if not found. - * @error Invalid or corrupt plugin handle. + * @param plugin Handle of the plugin that contains the function. + * Pass INVALID_HANDLE to search in the calling plugin. + * @param name Name of the function. + * @return Function id or INVALID_FUNCTION if not found. + * @error Invalid or corrupt plugin handle. */ native Function GetFunctionByName(Handle plugin, const char[] name); @@ -130,13 +198,13 @@ native Function GetFunctionByName(Handle plugin, const char[] name); * @note Global forwards cannot be cloned. * @note Use CloseHandle() to destroy these. * - * @param name Name of public function to use in forward. - * @param type Execution type to be used. - * @param ... Variable number of parameter types (up to 32). - * @return Handle to new global forward. - * @error More than 32 paramater types passed. + * @param name Name of public function to use in forward. + * @param type Execution type to be used. + * @param ... Variable number of parameter types (up to 32). + * @return Handle to new global forward. + * @error More than 32 paramater types passed. */ -native Handle CreateGlobalForward(const char[] name, ExecType type, ParamType ...); +native GlobalForward CreateGlobalForward(const char[] name, ExecType type, ParamType ...); /** * Creates a private forward. @@ -145,19 +213,19 @@ native Handle CreateGlobalForward(const char[] name, ExecType type, ParamType .. * @note Private forwards can be cloned. * @note Use CloseHandle() to destroy these. * - * @param type Execution type to be used. - * @param ... Variable number of parameter types (up to 32). - * @return Handle to new private forward. - * @error More than 32 paramater types passed. + * @param type Execution type to be used. + * @param ... Variable number of parameter types (up to 32). + * @return Handle to new private forward. + * @error More than 32 paramater types passed. */ -native Handle CreateForward(ExecType type, ParamType ...); +native PrivateForward CreateForward(ExecType type, ParamType ...); /** * Returns the number of functions in a global or private forward's call list. * - * @param fwd Handle to global or private forward. - * @return Number of functions in forward. - * @error Invalid or corrupt forward handle. + * @param fwd Handle to global or private forward. + * @return Number of functions in forward. + * @error Invalid or corrupt forward handle. */ native int GetForwardFunctionCount(Handle fwd); @@ -166,12 +234,12 @@ native int GetForwardFunctionCount(Handle fwd); * * @note Cannot be used during an incomplete call. * - * @param fwd Handle to private forward. - * @param plugin Handle of the plugin that contains the function. - * Pass INVALID_HANDLE to specify the calling plugin. - * @param func Function to add to forward. - * @return True on success, false otherwise. - * @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function. + * @param fwd Handle to private forward. + * @param plugin Handle of the plugin that contains the function. + * Pass INVALID_HANDLE to specify the calling plugin. + * @param func Function to add to forward. + * @return True on success, false otherwise. + * @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function. */ native bool AddToForward(Handle fwd, Handle plugin, Function func); @@ -181,12 +249,12 @@ native bool AddToForward(Handle fwd, Handle plugin, Function func); * @note Only removes one instance. * @note Functions will be removed automatically if their parent plugin is unloaded. * - * @param fwd Handle to private forward. - * @param plugin Handle of the plugin that contains the function. - * Pass INVALID_HANDLE to specify the calling plugin. - * @param func Function to remove from forward. - * @return True on success, false otherwise. - * @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function. + * @param fwd Handle to private forward. + * @param plugin Handle of the plugin that contains the function. + * Pass INVALID_HANDLE to specify the calling plugin. + * @param func Function to remove from forward. + * @return True on success, false otherwise. + * @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function. */ native bool RemoveFromForward(Handle fwd, Handle plugin, Function func); @@ -195,11 +263,11 @@ native bool RemoveFromForward(Handle fwd, Handle plugin, Function func); * * @note Functions will be removed automatically if their parent plugin is unloaded. * - * @param fwd Handle to private forward. - * @param plugin Handle of the plugin to remove instances of. - * Pass INVALID_HANDLE to specify the calling plugin. - * @return Number of functions removed from forward. - * @error Invalid or corrupt private forward handle or invalid or corrupt plugin handle. + * @param fwd Handle to private forward. + * @param plugin Handle of the plugin to remove instances of. + * Pass INVALID_HANDLE to specify the calling plugin. + * @return Number of functions removed from forward. + * @error Invalid or corrupt private forward handle or invalid or corrupt plugin handle. */ native int RemoveAllFromForward(Handle fwd, Handle plugin); @@ -208,8 +276,8 @@ native int RemoveAllFromForward(Handle fwd, Handle plugin); * * @note Cannot be used during an incomplete call. * - * @param fwd Handle to global or private forward. - * @error Invalid or corrupt forward handle or called before another call has completed. + * @param fwd Handle to global or private forward. + * @error Invalid or corrupt forward handle or called before another call has completed. */ native void Call_StartForward(Handle fwd); @@ -218,20 +286,31 @@ native void Call_StartForward(Handle fwd); * * @note Cannot be used during an incomplete call. * - * @param plugin Handle of the plugin that contains the function. - * Pass INVALID_HANDLE to specify the calling plugin. - * @param func Function to call. - * @error Invalid or corrupt plugin handle, invalid function, or called before another call has completed. + * @param plugin Handle of the plugin that contains the function. + * Pass INVALID_HANDLE to specify the calling plugin. + * @param func Function to call. + * @error Invalid or corrupt plugin handle, invalid function, or called before another call has completed. */ native void Call_StartFunction(Handle plugin, Function func); +/** + * Starts a call to a native. + * + * @note Cannot be used during an incomplete call. + * + * @param name Name of the native. + * @return True on success, false otherwise. + * @error Invalid function, or called before another call has completed. + */ +native bool Call_StartNative(const char[] name); + /** * Pushes a cell onto the current call. * * @note Cannot be used before a call has been started. * - * @param value Cell value to push. - * @error Called before a call has been started. + * @param value Cell value to push. + * @error Called before a call has been started. */ native void Call_PushCell(any value); @@ -240,8 +319,8 @@ native void Call_PushCell(any value); * * @note Cannot be used before a call has been started. * - * @param value Cell reference to push. - * @error Called before a call has been started. + * @param value Cell reference to push. + * @error Called before a call has been started. */ native void Call_PushCellRef(any &value); @@ -250,8 +329,8 @@ native void Call_PushCellRef(any &value); * * @note Cannot be used before a call has been started. * - * @param value Floating point value to push. - * @error Called before a call has been started. + * @param value Floating point value to push. + * @error Called before a call has been started. */ native void Call_PushFloat(float value); @@ -260,8 +339,8 @@ native void Call_PushFloat(float value); * * @note Cannot be used before a call has been started. * - * @param value Floating point reference to push. - * @error Called before a call has been started. + * @param value Floating point reference to push. + * @error Called before a call has been started. */ native void Call_PushFloatRef(float &value); @@ -271,9 +350,9 @@ native void Call_PushFloatRef(float &value); * @note Changes to array are not copied back to caller. Use PushArrayEx() to do this. * @note Cannot be used before a call has been started. * - * @param value Array to push. - * @param size Size of array. - * @error Called before a call has been started. + * @param value Array to push. + * @param size Size of array. + * @error Called before a call has been started. */ native void Call_PushArray(const any[] value, int size); @@ -282,22 +361,32 @@ native void Call_PushArray(const any[] value, int size); * * @note Cannot be used before a call has been started. * - * @param value Array to push. - * @param size Size of array. - * @param cpflags Whether or not changes should be copied back to the input array. - * See SP_PARAM_* constants for details. - * @error Called before a call has been started. + * @param value Array to push. + * @param size Size of array. + * @param cpflags Whether or not changes should be copied back to the input array. + * See SP_PARAM_* constants for details. + * @error Called before a call has been started. */ native void Call_PushArrayEx(any[] value, int size, int cpflags); +/** + * Pushes the NULL_VECTOR onto the current call. + * @see IsNullVector + * + * @note Cannot be used before a call has been started. + * + * @error Called before a call has been started. + */ +native void Call_PushNullVector(); + /** * Pushes a string onto the current call. * * @note Changes to string are not copied back to caller. Use PushStringEx() to do this. * @note Cannot be used before a call has been started. * - * @param value String to push. - * @error Called before a call has been started. + * @param value String to push. + * @error Called before a call has been started. */ native void Call_PushString(const char[] value); @@ -306,113 +395,154 @@ native void Call_PushString(const char[] value); * * @note Cannot be used before a call has been started. * - * @param value String to push. - * @param length Length of string buffer. - * @param szflags Flags determining how string should be handled. - * See SM_PARAM_STRING_* constants for details. - * The default (0) is to push ASCII. - * @param cpflags Whether or not changes should be copied back to the input array. - * See SM_PARAM_* constants for details. - * @error Called before a call has been started. + * @param value String to push. + * @param length Length of string buffer. + * @param szflags Flags determining how string should be handled. + * See SM_PARAM_STRING_* constants for details. + * The default (0) is to push ASCII. + * @param cpflags Whether or not changes should be copied back to the input array. + * See SM_PARAM_* constants for details. + * @error Called before a call has been started. */ native void Call_PushStringEx(char[] value, int length, int szflags, int cpflags); +/** + * Pushes the NULL_STRING onto the current call. + * @see IsNullString + * + * @note Cannot be used before a call has been started. + * + * @error Called before a call has been started. + */ +native void Call_PushNullString(); + /** * Completes a call to a function or forward's call list. * * @note Cannot be used before a call has been started. * - * @param result Return value of function or forward's call list. + * @param result Return value of function or forward's call list. + * @return SP_ERROR_NONE on success, any other integer on failure. + * @error Called before a call has been started. + */ +native int Call_Finish(any &result=0); + +/** + * Completes a call to a function or forward's call list. + * Catches exceptions thrown by the native. + * + * @note Cannot be used before a call has been started. + * + * @param result Return value of function or forward's call list. + * @param exception Buffer to store the exception in. + * @param maxlength Maximum length of the buffer. * @return SP_ERROR_NONE on success, any other integer on failure. * @error Called before a call has been started. */ -native int Call_Finish(any &result=0); +native int Call_FinishEx(any &result=0, char[] exception, int maxlength); /** * Cancels a call to a function or forward's call list. * * @note Cannot be used before a call has been started. - * - * @error Called before a call has been started. + * + * @error Called before a call has been started. */ native void Call_Cancel(); -/** - * Defines a native function. - * - * It is not necessary to validate the parameter count - * - * @param plugin Handle of the calling plugin. - * @param numParams Number of parameters passed to the native. - * @return Value for the native call to return. - */ -typedef NativeCall = function int (Handle plugin, int numParams); +typeset NativeCall +{ + /** + * Defines a native function. + * + * It is not necessary to validate the parameter count + * + * @param plugin Handle of the calling plugin. + * @param numParams Number of parameters passed to the native. + * @return Value for the native call to return. + */ + function int (Handle plugin, int numParams); + + /** + * Defines a native function. + * + * It is not necessary to validate the parameter count + * + * @param plugin Handle of the calling plugin. + * @param numParams Number of parameters passed to the native. + * @return Value for the native call to return. + */ + function any (Handle plugin, int numParams); +} /** - * Creates a dynamic native. This should only be called in AskPluginLoad(), or + * Creates a dynamic native. This should only be called in AskPluginLoad(), or * else you risk not having your native shared with other plugins. * - * @param name Name of the dynamic native; must be unique among - * all other registered dynamic natives. - * @param func Function to use as the dynamic native. + * @param name Name of the dynamic native; must be unique among + * all other registered dynamic natives. + * @param func Function to use as the dynamic native. */ native void CreateNative(const char[] name, NativeCall func); /** * Throws an error in the calling plugin of a native, instead of your own plugin. * - * @param error Error code to use. - * @param fmt Error message format. - * @param ... Format arguments. + * @param error Error code to use. + * @param fmt Error message format. + * @param ... Format arguments. */ native int ThrowNativeError(int error, const char[] fmt, any ...); /** - * Retrieves the string length from a native parameter string. This is useful + * Retrieves the string length from a native parameter string. This is useful for * fetching the entire string using dynamic arrays. + * * @note If this function succeeds, Get/SetNativeString will also succeed. * - * @param param Parameter number, starting from 1. - * @param length Stores the length of the string. - * @return SP_ERROR_NONE on success, any other integer on failure. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @param length Stores the length of the string. + * @return SP_ERROR_NONE on success, any other integer on failure. + * @error Invalid parameter number or calling from a non-native function. */ native int GetNativeStringLength(int param, int &length); /** * Retrieves a string from a native parameter. + * * @note Output conditions are undefined on failure. * - * @param param Parameter number, starting from 1. - * @param buffer Buffer to store the string in. - * @param maxlength Maximum length of the buffer. - * @param bytes Optionally store the number of bytes written. - * @return SP_ERROR_NONE on success, any other integer on failure. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @param buffer Buffer to store the string in. + * @param maxlength Maximum length of the buffer. + * @param bytes Optionally store the number of bytes written. + * @return SP_ERROR_NONE on success, any other integer on failure. + * @error Invalid parameter number or calling from a non-native function. */ native int GetNativeString(int param, char[] buffer, int maxlength, int &bytes=0); /** * Sets a string in a native parameter. + * * @note Output conditions are undefined on failure. * - * @param param Parameter number, starting from 1. - * @param source Source string to use. - * @param maxlength Maximum number of bytes to write. - * @param utf8 If false, string will not be written - * with UTF8 safety. - * @param bytes Optionally store the number of bytes written. - * @return SP_ERROR_NONE on success, any other integer on failure. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @param source Source string to use. + * @param maxlength Maximum number of bytes to write. + * @param utf8 If false, string will not be written + * with UTF8 safety. + * @param bytes Optionally store the number of bytes written. + * @return SP_ERROR_NONE on success, any other integer on failure. + * @error Invalid parameter number or calling from a non-native function. */ native int SetNativeString(int param, const char[] source, int maxlength, bool utf8=true, int &bytes=0); /** * Gets a cell from a native parameter. * - * @param param Parameter number, starting from 1. - * @return Cell value at the parameter number. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @return Cell value at the parameter number. + * @error Invalid parameter number or calling from a non-native function. */ native any GetNativeCell(int param); @@ -428,62 +558,78 @@ native Function GetNativeFunction(int param); /** * Gets a cell from a native parameter, by reference. * - * @param param Parameter number, starting from 1. - * @return Cell value at the parameter number. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @return Cell value at the parameter number. + * @error Invalid parameter number or calling from a non-native function. */ native any GetNativeCellRef(int param); /** * Sets a cell from a native parameter, by reference. * - * @param param Parameter number, starting from 1. - * @param value Cell value at the parameter number to set by reference. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @param value Cell value at the parameter number to set by reference. + * @error Invalid parameter number or calling from a non-native function. */ native void SetNativeCellRef(int param, any value); /** * Gets an array from a native parameter (always by reference). * - * @param param Parameter number, starting from 1. - * @param local Local array to copy into. - * @param size Maximum size of local array. - * @return SP_ERROR_NONE on success, anything else on failure. - * @error Invalid parameter number or calling from a non-native function. + * @param param Parameter number, starting from 1. + * @param local Local array to copy into. + * @param size Maximum size of local array. + * @return SP_ERROR_NONE on success, anything else on failure. + * @error Invalid parameter number or calling from a non-native function. */ native int GetNativeArray(int param, any[] local, int size); /** * Copies a local array into a native parameter array (always by reference). - * - * @param param Parameter number, starting from 1. - * @param local Local array to copy from. - * @param size Size of the local array to copy. - * @return SP_ERROR_NONE on success, anything else on failure. - * @error Invalid parameter number or calling from a non-native function. + * + * @param param Parameter number, starting from 1. + * @param local Local array to copy from. + * @param size Size of the local array to copy. + * @return SP_ERROR_NONE on success, anything else on failure. + * @error Invalid parameter number or calling from a non-native function. */ native int SetNativeArray(int param, const any[] local, int size); +/** + * Check if the native parameter is the NULL_VECTOR. + * + * @param param Parameter number, starting from 1. + * @return True if NULL_VECTOR, false otherwise. + */ +native bool IsNativeParamNullVector(int param); + +/** + * Check if the native parameter is the NULL_STRING. + * + * @param param Parameter number, starting from 1. + * @return True if NULL_STRING, false otherwise. + */ +native bool IsNativeParamNullString(int param); + /** * Formats a string using parameters from a native. * * @note All parameter indexes start at 1. * @note If the input and output buffers overlap, the contents - * of the output buffer at the end is undefined. + * of the output buffer at the end is undefined. * - * @param out_param Output parameter number to write to. If 0, out_string is used. - * @param fmt_param Format parameter number. If 0, fmt_string is used. - * @param vararg_param First variable parameter number. - * @param out_len Output string buffer maximum length (always required). - * @param written Optionally stores the number of bytes written. - * @param out_string Output string buffer to use if out_param is not used. - * @param fmt_string Format string to use if fmt_param is not used. - * @return SP_ERROR_NONE on success, anything else on failure. + * @param out_param Output parameter number to write to. If 0, out_string is used. + * @param fmt_param Format parameter number. If 0, fmt_string is used. + * @param vararg_param First variable parameter number. + * @param out_len Output string buffer maximum length (always required). + * @param written Optionally stores the number of bytes written. + * @param out_string Output string buffer to use if out_param is not used. + * @param fmt_string Format string to use if fmt_param is not used. + * @return SP_ERROR_NONE on success, anything else on failure. */ -native int FormatNativeString(int out_param, - int fmt_param, - int vararg_param, +native int FormatNativeString(int out_param, + int fmt_param, + int vararg_param, int out_len, int &written=0, char[] out_string="", @@ -492,14 +638,17 @@ native int FormatNativeString(int out_param, /** * Defines a RequestFrame Callback. * - * @param data Data passed to the RequestFrame native. + * @param data Data passed to the RequestFrame native. */ -typedef RequestFrameCallback = function void (any data); +typeset RequestFrameCallback { + function void (); + function void (any data); +} /** * Creates a single use Next Frame hook. * - * @param Function Function to call on the next frame. - * @param data Value to be passed on the invocation of the Function. + * @param Function Function to call on the next frame. + * @param data Value to be passed on the invocation of the Function. */ native void RequestFrame(RequestFrameCallback Function, any data=0); diff --git a/env/include/geoip.inc b/env/include/geoip.inc index 7906977..be6653d 100644 --- a/env/include/geoip.inc +++ b/env/include/geoip.inc @@ -31,7 +31,7 @@ */ #if defined _geoip_included - #endinput + #endinput #endif #define _geoip_included @@ -44,28 +44,28 @@ /** * Gets the two character country code from an IP address. (US, CA, etc) * - * @param ip Ip to determine the country code. - * @param ccode Destination string buffer to store the code. - * @return True on success, false if no country found. + * @param ip Ip to determine the country code. + * @param ccode Destination string buffer to store the code. + * @return True on success, false if no country found. */ native bool GeoipCode2(const char[] ip, char ccode[3]); /** * Gets the three character country code from an IP address. (USA, CAN, etc) * - * @param ip Ip to determine the country code. - * @param ccode Destination string buffer to store the code. - * @return True on success, false if no country found. + * @param ip Ip to determine the country code. + * @param ccode Destination string buffer to store the code. + * @return True on success, false if no country found. */ native bool GeoipCode3(const char[] ip, char ccode[4]); /** * Gets the full country name. (max length of output string is 45) * - * @param ip Ip to determine the country code. - * @param name Destination string buffer to store the country name. - * @param maxlength Maximum length of output string buffer. - * @return True on success, false if no country found. + * @param ip Ip to determine the country code. + * @param name Destination string buffer to store the country name. + * @param maxlength Maximum length of output string buffer. + * @return True on success, false if no country found. */ native bool GeoipCountry(const char[] ip, char[] name, int maxlength); diff --git a/env/include/halflife.inc b/env/include/halflife.inc index b7bae22..783e807 100644 --- a/env/include/halflife.inc +++ b/env/include/halflife.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -35,60 +35,61 @@ #endif #define _halflife_included -#define SOURCE_SDK_UNKNOWN 0 /**< Could not determine the engine version */ -#define SOURCE_SDK_ORIGINAL 10 /**< Original Source engine (still used by "The Ship") */ -#define SOURCE_SDK_DARKMESSIAH 15 /**< Modified version of original engine used by Dark Messiah (no SDK) */ -#define SOURCE_SDK_EPISODE1 20 /**< SDK+Engine released after Episode 1 */ -#define SOURCE_SDK_EPISODE2 30 /**< SDK+Engine released after Episode 2/Orange Box */ -#define SOURCE_SDK_BLOODYGOODTIME 32 /**< Modified version of ep2 engine used by Bloody Good Time (no SDK) */ -#define SOURCE_SDK_EYE 33 /**< Modified version of ep2 engine used by E.Y.E Divine Cybermancy (no SDK) */ -#define SOURCE_SDK_CSS 34 /**< Sometime-older version of Source 2009 SDK+Engine, used for Counter-Strike: Source */ -#define SOURCE_SDK_EPISODE2VALVE 35 /**< SDK+Engine released after Episode 2/Orange Box, "Source 2009" or "Source MP" */ -#define SOURCE_SDK_LEFT4DEAD 40 /**< Engine released after Left 4 Dead (no SDK yet) */ -#define SOURCE_SDK_LEFT4DEAD2 50 /**< Engine released after Left 4 Dead 2 (no SDK yet) */ -#define SOURCE_SDK_ALIENSWARM 60 /**< SDK+Engine released after Alien Swarm */ -#define SOURCE_SDK_CSGO 80 /**< Engine released after CS:GO (no SDK yet) */ -#define SOURCE_SDK_DOTA 90 /**< Engine released after Dota 2 (no SDK) */ +#define SOURCE_SDK_UNKNOWN 0 /**< Could not determine the engine version */ +#define SOURCE_SDK_ORIGINAL 10 /**< Original Source engine (still used by "The Ship") */ +#define SOURCE_SDK_DARKMESSIAH 15 /**< Modified version of original engine used by Dark Messiah (no SDK) */ +#define SOURCE_SDK_EPISODE1 20 /**< SDK+Engine released after Episode 1 */ +#define SOURCE_SDK_EPISODE2 30 /**< SDK+Engine released after Episode 2/Orange Box */ +#define SOURCE_SDK_BLOODYGOODTIME 32 /**< Modified version of ep2 engine used by Bloody Good Time (no SDK) */ +#define SOURCE_SDK_EYE 33 /**< Modified version of ep2 engine used by E.Y.E Divine Cybermancy (no SDK) */ +#define SOURCE_SDK_CSS 34 /**< Sometime-older version of Source 2009 SDK+Engine, used for Counter-Strike: Source */ +#define SOURCE_SDK_EPISODE2VALVE 35 /**< SDK+Engine released after Episode 2/Orange Box, "Source 2009" or "Source MP" */ +#define SOURCE_SDK_LEFT4DEAD 40 /**< Engine released after Left 4 Dead (no SDK yet) */ +#define SOURCE_SDK_LEFT4DEAD2 50 /**< Engine released after Left 4 Dead 2 (no SDK yet) */ +#define SOURCE_SDK_ALIENSWARM 60 /**< SDK+Engine released after Alien Swarm */ +#define SOURCE_SDK_CSGO 80 /**< Engine released after CS:GO (no SDK yet) */ +#define SOURCE_SDK_DOTA 90 /**< Engine released after Dota 2 (no SDK) */ -#define MOTDPANEL_TYPE_TEXT 0 /**< Treat msg as plain text */ -#define MOTDPANEL_TYPE_INDEX 1 /**< Msg is auto determined by the engine */ -#define MOTDPANEL_TYPE_URL 2 /**< Treat msg as an URL link */ -#define MOTDPANEL_TYPE_FILE 3 /**< Treat msg as a filename to be opened */ +#define MOTDPANEL_TYPE_TEXT 0 /**< Treat msg as plain text */ +#define MOTDPANEL_TYPE_INDEX 1 /**< Msg is auto determined by the engine */ +#define MOTDPANEL_TYPE_URL 2 /**< Treat msg as an URL link */ +#define MOTDPANEL_TYPE_FILE 3 /**< Treat msg as a filename to be opened */ enum DialogType { - DialogType_Msg = 0, /**< just an on screen message */ - DialogType_Menu, /**< an options menu */ - DialogType_Text, /**< a richtext dialog */ - DialogType_Entry, /**< an entry box */ - DialogType_AskConnect /**< ask the client to connect to a specified IP */ + DialogType_Msg = 0, /**< just an on screen message */ + DialogType_Menu, /**< an options menu */ + DialogType_Text, /**< a richtext dialog */ + DialogType_Entry, /**< an entry box */ + DialogType_AskConnect /**< ask the client to connect to a specified IP */ }; enum EngineVersion { - Engine_Unknown, /**< Could not determine the engine version */ - Engine_Original, /**< Original Source Engine (used by The Ship) */ - Engine_SourceSDK2006, /**< Episode 1 Source Engine (second major SDK) */ - Engine_SourceSDK2007, /**< Orange Box Source Engine (third major SDK) */ - Engine_Left4Dead, /**< Left 4 Dead */ - Engine_DarkMessiah, /**< Dark Messiah Multiplayer (based on original engine) */ - Engine_Left4Dead2 = 7, /**< Left 4 Dead 2 */ - Engine_AlienSwarm, /**< Alien Swarm (and Alien Swarm SDK) */ - Engine_BloodyGoodTime, /**< Bloody Good Time */ - Engine_EYE, /**< E.Y.E Divine Cybermancy */ - Engine_Portal2, /**< Portal 2 */ - Engine_CSGO, /**< Counter-Strike: Global Offensive */ - Engine_CSS, /**< Counter-Strike: Source */ - Engine_DOTA, /**< Dota 2 */ - Engine_HL2DM, /**< Half-Life 2 Deathmatch */ - Engine_DODS, /**< Day of Defeat: Source */ - Engine_TF2, /**< Team Fortress 2 */ - Engine_NuclearDawn, /**< Nuclear Dawn */ - Engine_SDK2013, /**< Source SDK 2013 */ - Engine_Blade, /**< Blade Symphony */ - Engine_Insurgency, /**< Insurgency (2013 Retail version)*/ - Engine_Contagion, /**< Contagion */ - Engine_BlackMesa, /**< Black Mesa Multiplayer */ + Engine_Unknown, /**< Could not determine the engine version */ + Engine_Original, /**< Original Source Engine (used by The Ship) */ + Engine_SourceSDK2006, /**< Episode 1 Source Engine (second major SDK) */ + Engine_SourceSDK2007, /**< Orange Box Source Engine (third major SDK) */ + Engine_Left4Dead, /**< Left 4 Dead */ + Engine_DarkMessiah, /**< Dark Messiah Multiplayer (based on original engine) */ + Engine_Left4Dead2 = 7, /**< Left 4 Dead 2 */ + Engine_AlienSwarm, /**< Alien Swarm (and Alien Swarm SDK) */ + Engine_BloodyGoodTime, /**< Bloody Good Time */ + Engine_EYE, /**< E.Y.E Divine Cybermancy */ + Engine_Portal2, /**< Portal 2 */ + Engine_CSGO, /**< Counter-Strike: Global Offensive */ + Engine_CSS, /**< Counter-Strike: Source */ + Engine_DOTA, /**< Dota 2 */ + Engine_HL2DM, /**< Half-Life 2 Deathmatch */ + Engine_DODS, /**< Day of Defeat: Source */ + Engine_TF2, /**< Team Fortress 2 */ + Engine_NuclearDawn, /**< Nuclear Dawn */ + Engine_SDK2013, /**< Source SDK 2013 */ + Engine_Blade, /**< Blade Symphony */ + Engine_Insurgency, /**< Insurgency (2013 Retail version)*/ + Engine_Contagion, /**< Contagion */ + Engine_BlackMesa, /**< Black Mesa Multiplayer */ + Engine_DOI /**< Day of Infamy */ }; enum FindMapResult @@ -115,226 +116,234 @@ enum FindMapResult /** * Logs a generic message to the HL2 logs. * - * @param format String format. - * @param ... Format arguments. + * @param format String format. + * @param ... Format arguments. */ native void LogToGame(const char[] format, any ...); /** * Sets the seed value for the global Half-Life 2 Random Stream. * - * @param seed Seed value. + * @param seed Seed value. */ native void SetRandomSeed(int seed); /** * Returns a random floating point number from the Half-Life 2 Random Stream. * - * @param fMin Minimum random bound. - * @param fMax Maximum random bound. - * @return A random number between (inclusive) fMin and fMax. + * @param fMin Minimum random bound. + * @param fMax Maximum random bound. + * @return A random number between (inclusive) fMin and fMax. */ native float GetRandomFloat(float fMin=0.0, float fMax=1.0); /** * Returns a random number from the Half-Life 2 Random Stream. * - * @param nmin Minimum random bound. - * @param nmax Maximum random bound. - * @return A random number between (inclusive) nmin and nmax. + * @param nmin Minimum random bound. + * @param nmax Maximum random bound. + * @return A random number between (inclusive) nmin and nmax. */ native int GetRandomInt(int nmin, int nmax); /** * Returns whether a map is valid or not. - * - * @param map Map name, excluding .bsp extension. - * @return True if valid, false otherwise. + * + * @param map Map name, excluding .bsp extension. + * @return True if valid, false otherwise. */ native bool IsMapValid(const char[] map); /** * Returns whether a full or partial map name is found or can be resolved - * - * @param map Map name (usually same as map path relative to maps/ dir, - * excluding .bsp extension). - * @param foundmap Resolved map name. If the return is FindMap_FuzzyMatch - * or FindMap_NonCanonical the buffer will be the full path. - * @param maxlen Maximum length to write to map var. - * @return Result of the find operation. Not all result types are supported on all games. + * + * @param map Map name (usually same as map path relative to maps/ dir, + * excluding .bsp extension). + * @param foundmap Resolved map name. If the return is FindMap_FuzzyMatch + * or FindMap_NonCanonical the buffer will be the full path. + * @param maxlen Maximum length to write to map var. + * @return Result of the find operation. Not all result types are supported on all games. */ native FindMapResult FindMap(const char[] map, char[] foundmap, int maxlen); /** * Get the display name of a workshop map. - * + * * Note: You do not need to call FindMap first. This native will call FindMap internally. - * - * @param map Map name (usually same as map path relative to maps/ dir, - * excluding .bsp extension). - * @param displayName Map's display name, i.e. cp_mymapname or de_mymapname. - * If FindMap returns FindMap_PossiblyAvailable or FindMap_NotFound, - * the map cannot be resolved and this native will return false, - * but displayName will be a copy of map. - * @param maxlen Maximum length to write to displayName var. - * @return true if FindMap returns FindMap_Found, FindMap_FuzzyMatch, or - * FindMap_NonCanonical. - * false if FindMap returns FindMap_PossiblyAvailable or FindMap_NotFound. + * + * @param map Map name (usually same as map path relative to maps/ dir, + * excluding .bsp extension). + * @param displayName Map's display name, i.e. cp_mymapname or de_mymapname. + * If FindMap returns FindMap_PossiblyAvailable or FindMap_NotFound, + * the map cannot be resolved and this native will return false, + * but displayName will be a copy of map. + * @param maxlen Maximum length to write to displayName var. + * @return true if FindMap returns FindMap_Found, FindMap_FuzzyMatch, or + * FindMap_NonCanonical. + * false if FindMap returns FindMap_PossiblyAvailable or FindMap_NotFound. */ native bool GetMapDisplayName(const char[] map, char[] displayName, int maxlen); /** * Returns whether the server is dedicated. * - * @return True if dedicated, false otherwise. + * @return True if dedicated, false otherwise. */ native bool IsDedicatedServer(); /** * Returns a high-precision time value for profiling the engine. * - * @return A floating point time value. + * @return A floating point time value. */ native float GetEngineTime(); -/** +/** * Returns the game time based on the game tick. * - * @return Game tick time. + * @return Game tick time. */ native float GetGameTime(); -/** +/** * Returns the game's internal tick count. * - * @return Game tick count. + * @return Game tick count. */ native int GetGameTickCount(); +/** + * Returns the time the Game took processing the last frame. + * + * @return Game frame time. + */ +native float GetGameFrameTime(); + /** * Returns the game description from the mod. * - * @param buffer Buffer to store the description. - * @param maxlength Maximum size of the buffer. - * @param original If true, retrieves the original game description, - * ignoring any potential hooks from plugins. - * @return Number of bytes written to the buffer (UTF-8 safe). + * @param buffer Buffer to store the description. + * @param maxlength Maximum size of the buffer. + * @param original If true, retrieves the original game description, + * ignoring any potential hooks from plugins. + * @return Number of bytes written to the buffer (UTF-8 safe). */ native int GetGameDescription(char[] buffer, int maxlength, bool original=false); /** * Returns the name of the game's directory. * - * @param buffer Buffer to store the directory name. - * @param maxlength Maximum size of the buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). + * @param buffer Buffer to store the directory name. + * @param maxlength Maximum size of the buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). */ native int GetGameFolderName(char[] buffer, int maxlength); /** * Returns the current map name. * - * @param buffer Buffer to store map name. - * @param maxlength Maximum length of buffer. - * @return Number of bytes written (UTF-8 safe). + * @param buffer Buffer to store map name. + * @param maxlength Maximum length of buffer. + * @return Number of bytes written (UTF-8 safe). */ native int GetCurrentMap(char[] buffer, int maxlength); /** * Precaches a given model. * - * @param model Name of the model to precache. - * @param preload If preload is true the file will be precached before level startup. - * @return Returns the model index, 0 for error. + * @param model Name of the model to precache. + * @param preload If preload is true the file will be precached before level startup. + * @return Returns the model index, 0 for error. */ native int PrecacheModel(const char[] model, bool preload=false); /** * Precaches a given sentence file. * - * @param file Name of the sentence file to precache. - * @param preload If preload is true the file will be precached before level startup. - * @return Returns a sentence file index. + * @param file Name of the sentence file to precache. + * @param preload If preload is true the file will be precached before level startup. + * @return Returns a sentence file index. */ native int PrecacheSentenceFile(const char[] file, bool preload=false); /** * Precaches a given decal. * - * @param decal Name of the decal to precache. - * @param preload If preload is true the file will be precached before level startup. - * @return Returns a decal index. + * @param decal Name of the decal to precache. + * @param preload If preload is true the file will be precached before level startup. + * @return Returns a decal index. */ native int PrecacheDecal(const char[] decal, bool preload=false); /** * Precaches a given generic file. * - * @param generic Name of the generic file to precache. - * @param preload If preload is true the file will be precached before level startup. - * @return Returns a generic file index. + * @param generic Name of the generic file to precache. + * @param preload If preload is true the file will be precached before level startup. + * @return Returns a generic file index. */ native int PrecacheGeneric(const char[] generic, bool preload=false); /** * Returns if a given model is precached. * - * @param model Name of the model to check. - * @return True if precached, false otherwise. + * @param model Name of the model to check. + * @return True if precached, false otherwise. */ native bool IsModelPrecached(const char[] model); /** * Returns if a given decal is precached. * - * @param decal Name of the decal to check. - * @return True if precached, false otherwise. + * @param decal Name of the decal to check. + * @return True if precached, false otherwise. */ native bool IsDecalPrecached(const char[] decal); /** * Returns if a given generic file is precached. * - * @param generic Name of the generic file to check. - * @return True if precached, false otherwise. + * @param generic Name of the generic file to check. + * @return True if precached, false otherwise. */ native bool IsGenericPrecached(const char[] generic); /** * Precaches a given sound. * - * @param sound Name of the sound to precache. - * @param preload If preload is true the file will be precached before level startup. - * @return True if successfully precached, false otherwise. + * @param sound Name of the sound to precache. + * @param preload If preload is true the file will be precached before level startup. + * @return True if successfully precached, false otherwise. */ native bool PrecacheSound(const char[] sound, bool preload=false); /** * Returns if a given sound is precached. * - * @param sound Name of the sound to check. - * @return True if precached, false otherwise. + * @param sound Name of the sound to check. + * @return True if precached, false otherwise. */ native bool IsSoundPrecached(const char[] sound); /** * Creates different types of ingame messages. * - * @param client Index of the client. - * @param kv KeyValues handle to set the menu keys and options. (Check iserverplugin.h for more information). - * @param type Message type to display ingame. - * @error Invalid client index, or client not connected. + * @param client Index of the client. + * @param kv KeyValues handle to set the menu keys and options. (Check iserverplugin.h for more information). + * @param type Message type to display ingame. + * @error Invalid client index, or client not connected. */ native void CreateDialog(int client, Handle kv, DialogType type); /** - * Guesses the SDK version a mod was compiled against. If nothing + * Guesses the SDK version a mod was compiled against. If nothing * specific is known about the game, the engine version is used instead. * - * The return values are guaranteed to increase chronologically (that is, + * The return values are guaranteed to increase chronologically (that is, * a later release will have a higher value). * - * @return SOURCE_SDK version code. + * @return SOURCE_SDK version code. + * @deprecated See GetEngineVersion() */ #pragma deprecated See GetEngineVersion() native int GuessSDKVersion(); @@ -345,30 +354,30 @@ native int GuessSDKVersion(); * The engine version values are not guaranteed to be in any particular order, * and should only be compared by (in)equality. * - * @return An EngineVersion value. + * @return An EngineVersion value. */ native EngineVersion GetEngineVersion(); /** * Prints a message to a specific client in the chat area. * - * @param client Client index. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @error If the client is not connected an error will be thrown. + * @param client Client index. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @error If the client is not connected an error will be thrown. */ native void PrintToChat(int client, const char[] format, any ...); /** * Prints a message to all clients in the chat area. * - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ stock void PrintToChatAll(const char[] format, any ...) { char buffer[254]; - + for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) @@ -383,18 +392,18 @@ stock void PrintToChatAll(const char[] format, any ...) /** * Prints a message to a specific client in the center of the screen. * - * @param client Client index. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @error If the client is not connected an error will be thrown. + * @param client Client index. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @error If the client is not connected an error will be thrown. */ native void PrintCenterText(int client, const char[] format, any ...); /** * Prints a message to all clients in the center of the screen. * - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ stock void PrintCenterTextAll(const char[] format, any ...) { @@ -414,23 +423,23 @@ stock void PrintCenterTextAll(const char[] format, any ...) /** * Prints a message to a specific client with a hint box. * - * @param client Client index. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @error If the client is not connected an error will be thrown. + * @param client Client index. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @error If the client is not connected an error will be thrown. */ native void PrintHintText(int client, const char[] format, any ...); /** * Prints a message to all clients with a hint box. * - * @param format Formatting rules. - * @param ... Variable number of format parameters. + * @param format Formatting rules. + * @param ... Variable number of format parameters. */ stock void PrintHintTextToAll(const char[] format, any ...) { char buffer[254]; - + for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i)) @@ -445,130 +454,130 @@ stock void PrintHintTextToAll(const char[] format, any ...) /** * Shows a VGUI panel to a specific client. * - * @param client Client index. - * @param name Panel type name (Check viewport_panel_names.h to see a list of - * some panel names). - * @param Kv KeyValues handle with all the data for the panel setup (Depends - * on the panel type and may be unused). - * @param show True to show the panel, or false to remove it from the client screen. - * @error If the client is not connected an error will be thrown. + * @param client Client index. + * @param name Panel type name (Check viewport_panel_names.h to see a list of + * some panel names). + * @param Kv KeyValues handle with all the data for the panel setup (Depends + * on the panel type and may be unused). + * @param show True to show the panel, or false to remove it from the client screen. + * @error If the client is not connected an error will be thrown. */ native void ShowVGUIPanel(int client, const char[] name, Handle Kv=INVALID_HANDLE, bool show=true); /** - * Creates a HUD synchronization object. This object is used to automatically assign and - * re-use channels for a set of messages. + * Creates a HUD synchronization object. This object is used to automatically assign and + * re-use channels for a set of messages. * - * The HUD has a hardcoded number of channels (usually 6) for displaying - * text. You can use any channel for any area of the screen. Text on - * different channels can overlap, but text on the same channel will + * The HUD has a hardcoded number of channels (usually 6) for displaying + * text. You can use any channel for any area of the screen. Text on + * different channels can overlap, but text on the same channel will * erase the old text first. This overlapping and overwriting gets problematic. * - * A HUD synchronization object automatically selects channels for you based on + * A HUD synchronization object automatically selects channels for you based on * the following heuristics: - * - If channel X was last used by the object, and hasn't been modified again, + * - If channel X was last used by the object, and hasn't been modified again, * channel X gets re-used. * - Otherwise, a new channel is chosen based on the least-recently-used channel. * - * This ensures that if you display text on a sync object, that the previous text - * displayed on it will always be cleared first. This is because your new text - * will either overwrite the old text on the same channel, or because another + * This ensures that if you display text on a sync object, that the previous text + * displayed on it will always be cleared first. This is because your new text + * will either overwrite the old text on the same channel, or because another * channel has already erased your text. * - * Note that messages can still overlap if they are on different synchronization + * Note that messages can still overlap if they are on different synchronization * objects, or they are displayed to manual channels. * - * These are particularly useful for displaying repeating or refreshing HUD text, in - * addition to displaying multiple message sets in one area of the screen (for example, - * center-say messages that may pop up randomly that you don't want to overlap each + * These are particularly useful for displaying repeating or refreshing HUD text, in + * addition to displaying multiple message sets in one area of the screen (for example, + * center-say messages that may pop up randomly that you don't want to overlap each * other). * - * @return New HUD synchronization object. - * The Handle can be closed with CloseHandle(). - * If HUD text is not supported on this mod, then - * INVALID_HANDLE is returned. + * @return New HUD synchronization object. + * The Handle can be closed with CloseHandle(). + * If HUD text is not supported on this mod, then + * INVALID_HANDLE is returned. */ native Handle CreateHudSynchronizer(); /** - * Sets the HUD parameters for drawing text. These parameters are stored - * globally, although nothing other than this function and SetHudTextParamsEx + * Sets the HUD parameters for drawing text. These parameters are stored + * globally, although nothing other than this function and SetHudTextParamsEx * modify them. * - * You must call this function before drawing text. If you are drawing - * text to multiple clients, you can set the parameters once, since - * they won't be modified. However, as soon as you pass control back + * You must call this function before drawing text. If you are drawing + * text to multiple clients, you can set the parameters once, since + * they won't be modified. However, as soon as you pass control back * to other plugins, you must reset the parameters next time you draw. * - * @param x x coordinate, from 0 to 1. -1.0 is the center. - * @param y y coordinate, from 0 to 1. -1.0 is the center. - * @param holdTime Number of seconds to hold the text. - * @param r Red color value. - * @param g Green color value. - * @param b Blue color value. - * @param a Alpha transparency value. - * @param effect 0/1 causes the text to fade in and fade out. - * 2 causes the text to flash[?]. - * @param fxTime Duration of chosen effect (may not apply to all effects). - * @param fadeIn Number of seconds to spend fading in. - * @param fadeOut Number of seconds to spend fading out. + * @param x x coordinate, from 0 to 1. -1.0 is the center. + * @param y y coordinate, from 0 to 1. -1.0 is the center. + * @param holdTime Number of seconds to hold the text. + * @param r Red color value. + * @param g Green color value. + * @param b Blue color value. + * @param a Alpha transparency value. + * @param effect 0/1 causes the text to fade in and fade out. + * 2 causes the text to flash[?]. + * @param fxTime Duration of chosen effect (may not apply to all effects). + * @param fadeIn Number of seconds to spend fading in. + * @param fadeOut Number of seconds to spend fading out. */ native void SetHudTextParams(float x, float y, float holdTime, int r, int g, int b, int a, int effect = 0, float fxTime=6.0, float fadeIn=0.1, float fadeOut=0.2); - + /** - * Sets the HUD parameters for drawing text. These parameters are stored + * Sets the HUD parameters for drawing text. These parameters are stored * globally, although nothing other than this function and SetHudTextParams * modify them. * - * This is the same as SetHudTextParams(), except it lets you set the alternate - * color for when effects require it. + * This is the same as SetHudTextParams(), except it lets you set the alternate + * color for when effects require it. * - * @param x x coordinate, from 0 to 1. -1.0 is the center. - * @param y y coordinate, from 0 to 1. -1.0 is the center. - * @param holdTime Number of seconds to hold the text. - * @param color1 First color set, array values being [red, green, blue, alpha] - * @param color2 Second color set, array values being [red, green, blue, alpha] - * @param effect 0/1 causes the text to fade in and fade out. - * 2 causes the text to flash[?]. - * @param fxTime Duration of chosen effect (may not apply to all effects). - * @param fadeIn Number of seconds to spend fading in. - * @param fadeOut Number of seconds to spend fading out. + * @param x x coordinate, from 0 to 1. -1.0 is the center. + * @param y y coordinate, from 0 to 1. -1.0 is the center. + * @param holdTime Number of seconds to hold the text. + * @param color1 First color set, array values being [red, green, blue, alpha] + * @param color2 Second color set, array values being [red, green, blue, alpha] + * @param effect 0/1 causes the text to fade in and fade out. + * 2 causes the text to flash[?]. + * @param fxTime Duration of chosen effect (may not apply to all effects). + * @param fadeIn Number of seconds to spend fading in. + * @param fadeOut Number of seconds to spend fading out. */ -native void SetHudTextParamsEx(float x, float y, float holdTime, int color1[4], - int color2[4]={255,255,255,0}, int effect = 0, float fxTime=6.0, +native void SetHudTextParamsEx(float x, float y, float holdTime, int color1[4], + int color2[4]={255,255,255,0}, int effect = 0, float fxTime=6.0, float fadeIn=0.1, float fadeOut=0.2); /** - * Shows a synchronized HUD message to a client. + * Shows a synchronized HUD message to a client. * * As of this writing, only TF, HL2MP, and SourceForts support HUD Text. * - * @param client Client index to send the message to. - * @param sync Synchronization object. - * @param message Message text or formatting rules. - * @param ... Message formatting parameters. - * @return -1 on failure, anything else on success. - * This function fails if the mod does not support it. - * @error Client not in-game, or sync object not valid. + * @param client Client index to send the message to. + * @param sync Synchronization object. + * @param message Message text or formatting rules. + * @param ... Message formatting parameters. + * @return -1 on failure, anything else on success. + * This function fails if the mod does not support it. + * @error Client not in-game, or sync object not valid. */ native int ShowSyncHudText(int client, Handle sync, const char[] message, any ...); /** - * Clears the text on a synchronized HUD channel. + * Clears the text on a synchronized HUD channel. * - * This is not the same as sending "" because it guarantees that it won't - * overwrite text on another channel. For example, consider the scenario: + * This is not the same as sending "" because it guarantees that it won't + * overwrite text on another channel. For example, consider the scenario: * * 1. Your synchronized message goes to channel 3. * 2. Someone else's non-synchronized message goes to channel 3. * - * If you were to simply send "" on your synchronized message, + * If you were to simply send "" on your synchronized message, * then someone else's text could be overwritten. * - * @param client Client index to send the message to. - * @param sync Synchronization object. - * @error Client not in-game, or sync object not valid. + * @param client Client index to send the message to. + * @param sync Synchronization object. + * @error Client not in-game, or sync object not valid. */ native void ClearSyncHud(int client, Handle sync); @@ -576,30 +585,30 @@ native void ClearSyncHud(int client, Handle sync); * Shows a HUD message to a client on the given channel. * * As of this writing, only TF, HL2MP, and SourceForts support HUD Text. - * - * @param client Client index to send the message to. - * @param channel A channel number. - * If -1, then a channel will automatically be selected - * based on the least-recently-used channel. If the - * channel is any other number, it will be modulo'd with - * the channel count to get a final channel number. - * @param message Message text or formatting rules. - * @param ... Message formatting parameters. - * @return -1 on failure (lack of mod support). - * Any other return value is the channel number that was - * used to render the text. + * + * @param client Client index to send the message to. + * @param channel A channel number. + * If -1, then a channel will automatically be selected + * based on the least-recently-used channel. If the + * channel is any other number, it will be modulo'd with + * the channel count to get a final channel number. + * @param message Message text or formatting rules. + * @param ... Message formatting parameters. + * @return -1 on failure (lack of mod support). + * Any other return value is the channel number that was + * used to render the text. */ native int ShowHudText(int client, int channel, const char[] message, any ...); /** * Shows a MOTD panel to a specific client. * - * @param client Client index. - * @param title Title of the panel (printed on the top border of the window). - * @param msg Contents of the panel, it can be treated as an url, filename or plain text - * depending on the type parameter (WARNING: msg has to be 192 bytes maximum!) - * @param type Determines the way to treat the message body of the panel. - * @error If the client is not connected an error will be thrown. + * @param client Client index. + * @param title Title of the panel (printed on the top border of the window). + * @param msg Contents of the panel, it can be treated as an url, filename or plain text + * depending on the type parameter (WARNING: msg has to be 192 bytes maximum!) + * @param type Determines the way to treat the message body of the panel. + * @error If the client is not connected an error will be thrown. */ stock void ShowMOTDPanel(int client, const char[] title, const char[] msg, int type=MOTDPANEL_TYPE_INDEX) { @@ -617,10 +626,10 @@ stock void ShowMOTDPanel(int client, const char[] title, const char[] msg, int t /** * Displays a panel asking the client to connect to a specified IP. * - * @param client Client index. - * @param time Duration to hold the panel on the client's screen. - * @param ip Destination IP. - * @param password Password to connect to the destination IP. The client will be able to see this. + * @param client Client index. + * @param time Duration to hold the panel on the client's screen. + * @param ip Destination IP. + * @param password Password to connect to the destination IP. The client will be able to see this. */ stock void DisplayAskConnectBox(int client, float time, const char[] ip, const char[] password = "") { @@ -637,42 +646,41 @@ stock void DisplayAskConnectBox(int client, float time, const char[] ip, const c /** * Converts an entity index into a serial encoded entity reference. * - * @param entity Entity index. - * @return Entity reference. + * @param entity Entity index. + * @return Entity reference. */ native int EntIndexToEntRef(int entity); /** * Retrieves the entity index from a reference. * - * @param ref Entity reference. - * @return Entity index. + * @param ref Entity reference. + * @return Entity index. */ native int EntRefToEntIndex(int ref); /** * Converts a reference into a backwards compatible version. * - * @param ref Entity reference. - * @return Bcompat reference. + * @param ref Entity reference. + * @return Bcompat reference. */ native int MakeCompatEntRef(int ref); - enum ClientRangeType { RangeType_Visibility = 0, - RangeType_Audibility, + RangeType_Audibility } /** * Find clients that are potentially in range of a position. * - * @param origin Coordinates from which to test range. - * @param rangeType Range type to use for filtering clients. - * @param clients Array to which found client indexes will be written. - * @param size Maximum size of clients array. - * @return Number of client indexes written to clients array. + * @param origin Coordinates from which to test range. + * @param rangeType Range type to use for filtering clients. + * @param clients Array to which found client indexes will be written. + * @param size Maximum size of clients array. + * @return Number of client indexes written to clients array. */ native int GetClientsInRange(float origin[3], ClientRangeType rangeType, int[] clients, int size); @@ -682,17 +690,17 @@ native int GetClientsInRange(float origin[3], ClientRangeType rangeType, int[] c * Note: If called before server is connected to Steam, auth id * will be invalid ([I:0:1], 1, etc.) * - * @param authType Auth id type and format to use. - * (Only AuthId_Steam3 and AuthId_SteamID64 are supported) - * @param auth Buffer to store the server's auth id. - * @param maxlen Maximum length of string buffer (includes NULL terminator). - * @error Invalid AuthIdType given. + * @param authType Auth id type and format to use. + * (Only AuthId_Steam3 and AuthId_SteamID64 are supported) + * @param auth Buffer to store the server's auth id. + * @param maxlen Maximum length of string buffer (includes NULL terminator). + * @error Invalid AuthIdType given. */ native void GetServerAuthId(AuthIdType authType, char[] auth, int maxlen); /** * Returns the server's Steam account ID. * - * @return Steam account ID or 0 if not available. + * @return Steam account ID or 0 if not available. */ native int GetServerSteamAccountId(); diff --git a/env/include/handles.inc b/env/include/handles.inc index 57763b8..a6f7ebe 100644 --- a/env/include/handles.inc +++ b/env/include/handles.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -40,19 +40,19 @@ */ enum Handle // Tag disables introducing "Handle" as a symbol. { - INVALID_HANDLE = 0, + INVALID_HANDLE = 0 }; /** - * Closes a Handle. If the handle has multiple copies open, + * Closes a Handle. If the handle has multiple copies open, * it is not destroyed unless all copies are closed. - * + * * @note Closing a Handle has a different meaning for each Handle type. Make * sure you read the documentation on whatever provided the Handle. * - * @param hndl Handle to close. - * @error Invalid handles will cause a run time error. + * @param hndl Handle to close. + * @error Invalid handles will cause a run time error. */ native void CloseHandle(Handle hndl); @@ -60,38 +60,39 @@ native void CloseHandle(Handle hndl); * Clones a Handle. When passing handles in between plugins, caching handles * can result in accidental invalidation when one plugin releases the Handle, or is its owner * is unloaded from memory. To prevent this, the Handle may be "cloned" with a new owner. - * - * @note Usually, you will be cloning Handles for other plugins. This means that if you clone - * the Handle without specifying the new owner, it will assume the identity of your original calling - * plugin, which is not very useful. You should either specify that the receiving plugin should - * clone the handle on its own, or you should explicitly clone the Handle using the receiving plugin's - * identity Handle. * - * @param hndl Handle to clone/duplicate. - * @param plugin Optional Handle to another plugin to mark as the new owner. - * If no owner is passed, the owner becomes the calling plugin. - * @return Handle on success, INVALID_HANDLE if not cloneable. - * @error Invalid handles will cause a run time error. + * @note Usually, you will be cloning Handles for other plugins. This means that if you clone + * the Handle without specifying the new owner, it will assume the identity of your original + * calling plugin, which is not very useful. You should either specify that the receiving + * plugin should clone the handle on its own, or you should explicitly clone the Handle + * using the receiving plugin's identity Handle. + * + * @param hndl Handle to clone/duplicate. + * @param plugin Optional Handle to another plugin to mark as the new owner. + * If no owner is passed, the owner becomes the calling plugin. + * @return Handle on success, INVALID_HANDLE if not cloneable. + * @error Invalid handles will cause a run time error. */ native Handle CloneHandle(Handle hndl, Handle plugin=INVALID_HANDLE); using __intrinsics__.Handle; /** - * Do not use this function. Returns if a Handle and its contents - * are readable, whereas INVALID_HANDLE only checks for the absence + * Do not use this function. Returns if a Handle and its contents + * are readable, whereas INVALID_HANDLE only checks for the absence * of a Handle. * - * This function is intended only for tests where the validity of a - * Handle can absolutely not be known. + * This function is intended only for tests where the validity of a + * Handle can absolutely not be known. * - * Do not use this to check the return values of functions, or to - * check if timers should be closed (except in very rare cases). - * This function is for very specific usage and using it for general + * Do not use this to check the return values of functions, or to + * check if timers should be closed (except in very rare cases). + * This function is for very specific usage and using it for general * purpose routines can and will hide very subtle bugs. * - * @param hndl Handle to test for validity. - * @return True if handle is valid, false otherwise. + * @param hndl Handle to test for validity. + * @return True if handle is valid, false otherwise. + * @deprecated Do not use this function. */ #pragma deprecated Do not use this function. native bool IsValidHandle(Handle hndl); diff --git a/env/include/helpers.inc b/env/include/helpers.inc index 34614f1..0996372 100644 --- a/env/include/helpers.inc +++ b/env/include/helpers.inc @@ -36,38 +36,26 @@ #define _helpers_included /** - * Formats a user's info as log text. This is usually not needed because - * %L can be used to auto-format client information into a string. + * This function is deprecated. Use the %L format specifier instead. + * + * Formats a user's info as log text. * - * @param client Client index. - * @param buffer Buffer for text. - * @param maxlength Maximum length of text. + * @param client Client index. + * @param buffer Buffer for text. + * @param maxlength Maximum length of text. + * @deprecated Use the %L format specifier instead. */ +#pragma deprecated Use the %L format specifier instead. stock void FormatUserLogText(int client, char[] buffer, int maxlength) { - char auth[32]; - char name[MAX_NAME_LENGTH]; - - int userid = GetClientUserId(client); - if (!GetClientAuthString(client, auth, sizeof(auth))) - { - strcopy(auth, sizeof(auth), "UNKNOWN"); - } - if (!GetClientName(client, name, sizeof(name))) - { - strcopy(name, sizeof(name), "UNKNOWN"); - } - - /** Currently, no team stuff ... */ - - Format(buffer, maxlength, "\"%s<%d><%s><>\"", name, userid, auth); + FormatEx(buffer, maxlength, "\"%L\"", client); } /** * Returns plugin handle from plugin filename. * - * @param filename Filename of the plugin to search for. - * @return Handle to plugin if found, INVALID_HANDLE otherwise. + * @param filename Filename of the plugin to search for. + * @return Handle to plugin if found, INVALID_HANDLE otherwise. */ stock Handle FindPluginByFile(const char[] filename) { @@ -94,7 +82,7 @@ stock Handle FindPluginByFile(const char[] filename) } /** - * @deprecated Use FindTarget() or ProcessTargetString(). + * @deprecated Use FindTarget() or ProcessTargetString(). */ #pragma deprecated Use FindTarget() or ProcessTargetString() stock int SearchForClients(const char[] pattern, int[] clients, int maxClients) @@ -102,24 +90,34 @@ stock int SearchForClients(const char[] pattern, int[] clients, int maxClients) int total = 0; if (maxClients == 0) + { return 0; + } - if (pattern[0] == '#') { + if (pattern[0] == '#') + { int input = StringToInt(pattern[1]); if (!input) { char name[MAX_NAME_LENGTH]; - for (int i=1; i<=MaxClients; i++) { + for (int i=1; i<=MaxClients; i++) + { if (!IsClientInGame(i)) + { continue; + } GetClientName(i, name, sizeof(name)); - if (strcmp(name, pattern, false) == 0) { + if (strcmp(name, pattern, false) == 0) + { clients[0] = i; return 1; } } - } else { + } + else + { int client = GetClientOfUserId(input); - if (client) { + if (client) + { clients[0] = client; return 1; } @@ -130,12 +128,18 @@ stock int SearchForClients(const char[] pattern, int[] clients, int maxClients) for (int i=1; i<=MaxClients; i++) { if (!IsClientInGame(i)) + { continue; + } + GetClientName(i, name, sizeof(name)); - if (StrContains(name, pattern, false) != -1) { + if (StrContains(name, pattern, false) != -1) + { clients[total++] = i; if (total >= maxClients) + { break; + } } } @@ -146,11 +150,11 @@ stock int SearchForClients(const char[] pattern, int[] clients, int maxClients) * Wraps ProcessTargetString() and handles producing error messages for * bad targets. * - * @param client Client who issued command - * @param target Client's target argument - * @param nobots Optional. Set to true if bots should NOT be targetted - * @param immunity Optional. Set to false to ignore target immunity. - * @return Index of target client, or -1 on error. + * @param client Client who issued command + * @param target Client's target argument + * @param nobots Optional. Set to true if bots should NOT be targetted + * @param immunity Optional. Set to false to ignore target immunity. + * @return Index of target client, or -1 on error. */ stock int FindTarget(int client, const char[] target, bool nobots = false, bool immunity = true) { @@ -163,6 +167,7 @@ stock int FindTarget(int client, const char[] target, bool nobots = false, bool { flags |= COMMAND_FILTER_NO_BOTS; } + if (!immunity) { flags |= COMMAND_FILTER_NO_IMMUNITY; @@ -180,11 +185,9 @@ stock int FindTarget(int client, const char[] target, bool nobots = false, bool { return target_list[0]; } - else - { - ReplyToTargetError(client, target_count); - return -1; - } + + ReplyToTargetError(client, target_count); + return -1; } /** @@ -197,83 +200,84 @@ stock int FindTarget(int client, const char[] target, bool nobots = false, bool * parameter is used to store a timestamp of the file. If specified, the file will only be reloaded if it * has changed. * - * @param array Valid array handle, should be created with CreateArray(33) or larger. - * @param fileTime Variable containing the "last changed" time of the file. Used to avoid needless reloading. - * @param fileCvar CVAR set to the file to be loaded. Optional. - * @return Number of maps loaded or 0 if in error. + * @param array Valid array handle, should be created with CreateArray(33) or larger. + * @param fileTime Variable containing the "last changed" time of the file. Used to avoid needless reloading. + * @param fileCvar CVAR set to the file to be loaded. Optional. + * @return Number of maps loaded or 0 if in error. + * @deprecated Use ReadMapList() instead. */ #pragma deprecated Use ReadMapList() instead. - stock int LoadMaps(Handle array, int &fileTime = 0, Handle fileCvar = INVALID_HANDLE) - { - char mapPath[256], mapFile[64]; - bool fileFound = false; - - if (fileCvar != INVALID_HANDLE) - { - GetConVarString(fileCvar, mapFile, 64); - BuildPath(Path_SM, mapPath, sizeof(mapPath), mapFile); - fileFound = FileExists(mapPath); - } +stock int LoadMaps(Handle array, int &fileTime = 0, Handle fileCvar = INVALID_HANDLE) +{ + char mapPath[256], mapFile[64]; + bool fileFound = false; + + if (fileCvar != INVALID_HANDLE) + { + GetConVarString(fileCvar, mapFile, 64); + BuildPath(Path_SM, mapPath, sizeof(mapPath), mapFile); + fileFound = FileExists(mapPath); + } - if (!fileFound) - { - Handle mapCycleFile = FindConVar("mapcyclefile"); - GetConVarString(mapCycleFile, mapPath, sizeof(mapPath)); - fileFound = FileExists(mapPath); - } - - if (!fileFound) - { - LogError("Failed to find a file to load maps from. No maps loaded."); - ClearArray(array); - - return 0; - } + if (!fileFound) + { + Handle mapCycleFile = FindConVar("mapcyclefile"); + GetConVarString(mapCycleFile, mapPath, sizeof(mapPath)); + fileFound = FileExists(mapPath); + } + + if (!fileFound) + { + LogError("Failed to find a file to load maps from. No maps loaded."); + ClearArray(array); + + return 0; + } - // If the file hasn't changed, there's no reason to reload - // all of the maps. - int newTime = GetFileTime(mapPath, FileTime_LastChange); - if (fileTime == newTime) - { - return GetArraySize(array); - } - - fileTime = newTime; - - ClearArray(array); + // If the file hasn't changed, there's no reason to reload + // all of the maps. + int newTime = GetFileTime(mapPath, FileTime_LastChange); + if (fileTime == newTime) + { + return GetArraySize(array); + } + + fileTime = newTime; + + ClearArray(array); - File file = OpenFile(mapPath, "rt"); - if (!file) { - LogError("Could not open file: %s", mapPath); - return 0; - } + File file = OpenFile(mapPath, "rt"); + if (!file) { + LogError("Could not open file: %s", mapPath); + return 0; + } LogMessage("Loading maps from file: %s", mapPath); int len; - char buffer[64]; - while (!file.EndOfFile() && file.ReadLine(buffer, sizeof(buffer))) - { - TrimString(buffer); + char buffer[64]; + while (!file.EndOfFile() && file.ReadLine(buffer, sizeof(buffer))) + { + TrimString(buffer); - if ((len = StrContains(buffer, ".bsp", false)) != -1) - { - buffer[len] = '\0'; - } + if ((len = StrContains(buffer, ".bsp", false)) != -1) + { + buffer[len] = '\0'; + } - if (buffer[0] == '\0' || !IsValidConVarChar(buffer[0]) || !IsMapValid(buffer)) - { - continue; - } - - if (FindStringInArray(array, buffer) != -1) - { - continue; - } + if (buffer[0] == '\0' || !IsValidConVarChar(buffer[0]) || !IsMapValid(buffer)) + { + continue; + } + + if (FindStringInArray(array, buffer) != -1) + { + continue; + } - PushArrayString(array, buffer); - } + PushArrayString(array, buffer); + } file.Close(); - return GetArraySize(array); + return GetArraySize(array); } diff --git a/env/include/keyvalues.inc b/env/include/keyvalues.inc index e60fed6..7318507 100644 --- a/env/include/keyvalues.inc +++ b/env/include/keyvalues.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _keyvalues_included #endinput #endif @@ -40,23 +40,23 @@ */ enum KvDataTypes { - KvData_None = 0, /**< Type could not be identified, or no type */ - KvData_String, /**< String value */ - KvData_Int, /**< Integer value */ - KvData_Float, /**< Floating point value */ - KvData_Ptr, /**< Pointer value (sometimes called "long") */ - KvData_WString, /**< Wide string value */ - KvData_Color, /**< Color value */ - KvData_UInt64, /**< Large integer value */ + KvData_None = 0, /**< Type could not be identified, or no type */ + KvData_String, /**< String value */ + KvData_Int, /**< Integer value */ + KvData_Float, /**< Floating point value */ + KvData_Ptr, /**< Pointer value (sometimes called "long") */ + KvData_WString, /**< Wide string value */ + KvData_Color, /**< Color value */ + KvData_UInt64, /**< Large integer value */ /* --- */ - KvData_NUMTYPES, + KvData_NUMTYPES }; methodmap KeyValues < Handle { // Creates a new KeyValues structure. The Handle must be closed with // CloseHandle() or delete. - // + // // @param name Name of the root section. // @param firstKey If non-empty, specifies the first key value. // @param firstValue If firstKey is non-empty, specifies the first key's value. @@ -68,6 +68,18 @@ methodmap KeyValues < Handle // @return True on success, false otherwise. public native bool ExportToFile(const char[] file); + // Exports a KeyValues tree to a string. The string is dumped from the current position. + // + // @param buffer Buffer to write to. + // @param maxlength Max length of buffer. + // @return Number of bytes that can be written to buffer. + public native int ExportToString(char[] buffer, int maxlength); + + // Amount of bytes written by ExportToFile & ExportToString. + property int ExportLength { + public native get(); + } + // Imports a file in KeyValues format. The file is read into the current // position of the tree. // @@ -77,7 +89,7 @@ methodmap KeyValues < Handle // Converts a given string to a KeyValues tree. The string is read into // the current postion of the tree. - // + // // @param buffer String buffer to load into the KeyValues. // @param resourceName The resource name of the KeyValues, used for error tracking purposes. // @return True on success, false otherwise. @@ -86,7 +98,7 @@ methodmap KeyValues < Handle // Imports subkeys in the given KeyValues, at the current position in that // KeyValues, into the current position in this KeyValues. Note that this // copies keys; it does not embed a reference to them. - // + // // @param other Origin KeyValues Handle. public native void Import(KeyValues other); @@ -133,13 +145,13 @@ methodmap KeyValues < Handle } // Sets a vector value of a KeyValues key. - // + // // @param key Name of the key, or NULL_STRING. // @param vec Vector value. public native void SetVector(const char[] key, const float vec[3]); // Retrieves a string value from a KeyValues key. - // + // // @param key Name of the key, or NULL_STRING. // @param value Buffer to store key value in. // @param maxlength Maximum length of the value buffer. @@ -147,7 +159,7 @@ methodmap KeyValues < Handle public native void GetString(const char[] key, char[] value, int maxlength, const char[] defvalue=""); // Retrieves an integer value from a KeyValues key. - // + // // @param key Name of the key, or NULL_STRING. // @param defvalue Optional default value to use if the key is not found. // @return Integer value of the key. @@ -164,9 +176,9 @@ methodmap KeyValues < Handle // // @param key Name of the key, or NULL_STRING. // @param r Red value, set by reference. - // @param g Green value, set by reference. - // @param b Blue value, set by reference. - // @param a Alpha value, set by reference. + // @param g Green value, set by reference. + // @param b Blue value, set by reference. + // @param a Alpha value, set by reference. public native void GetColor(const char[] key, int &r, int &g, int &b, int &a); // Retrieves a set of color values from a KeyValues key. @@ -219,13 +231,13 @@ methodmap KeyValues < Handle // Sets the current position in the KeyValues tree to the next sub key. // This native does NOT add to the internal traversal stack, and thus // GoBack() is not needed for each successive call to this function. - // + // // @param keyOnly If false, non-keys will be traversed (values). // @return True on success, false if there was no next sub key. public native bool GotoNextKey(bool keyOnly=true); // Saves the current position in the traversal stack onto the traversal - // stack. This can be useful if you wish to use KvGotoNextKey() and + // stack. This can be useful if you wish to use KvGotoNextKey() and // have the previous key saved for backwards traversal. // // @param kv KeyValues Handle. @@ -248,9 +260,9 @@ methodmap KeyValues < Handle // Removes the current sub-key and attempts to set the position // to the sub-key after the removed one. If no such sub-key exists, // the position will be the parent key in the traversal stack. - // Given the sub-key having position "N" in the traversal stack, the + // Given the sub-key having position "N" in the traversal stack, the // removal will always take place from position "N-1." - // + // // @param kv KeyValues Handle. // @return 1 if removal succeeded and there was another key. // 0 if the current node was not contained in the @@ -259,7 +271,7 @@ methodmap KeyValues < Handle // thus the state is as if KvGoBack() was called. public native int DeleteThis(); - // Sets the position back to the top node, emptying the entire node + // Sets the position back to the top node, emptying the entire node // traversal history. This can be used instead of looping KvGoBack() // if recursive iteration is not important. // @@ -267,14 +279,14 @@ methodmap KeyValues < Handle public native void Rewind(); // Retrieves the current section name. - // + // // @param section Buffer to store the section name. // @param maxlength Maximum length of the name buffer. // @return True on success, false on failure. public native bool GetSectionName(char[] section, int maxlength); // Sets the current section name. - // + // // @param section Section name. public native void SetSectionName(const char[] section); @@ -287,14 +299,14 @@ methodmap KeyValues < Handle // Sets whether or not the KeyValues parser will read escape sequences. // For example, \n would be read as a literal newline. This defaults // to false for new KeyValues structures. - // + // // @param useEscapes Whether or not to read escape sequences. public native void SetEscapeSequences(bool useEscapes); // Returns the position in the jump stack; I.e. the number of calls // required for KvGoBack to return to the root node. If at the root node, // 0 is returned. - // + // // @return Number of non-root nodes in the jump stack. public native int NodesInStack(); @@ -307,14 +319,14 @@ methodmap KeyValues < Handle public native bool FindKeyById(int id, char[] name, int maxlength); // Finds a KeyValues id inside a KeyValues tree. - // + // // @param key Key name. // @param id Id of the found KeyValue. // @return True on success, false if key not found. public native bool GetNameSymbol(const char[] key, int &id); // Retrieves the current section id. - // + // // @param kv KeyValues Handle. // @param id Id of the current section. // @return True on success, false on failure. @@ -324,161 +336,161 @@ methodmap KeyValues < Handle /** * Creates a new KeyValues structure. The Handle must always be closed. * - * @param name Name of the root section. - * @param firstKey If non-empty, specifies the first key value. - * @param firstValue If firstKey is non-empty, specifies the first key's value. - * @return A Handle to a new KeyValues structure. + * @param name Name of the root section. + * @param firstKey If non-empty, specifies the first key value. + * @param firstValue If firstKey is non-empty, specifies the first key's value. + * @return A Handle to a new KeyValues structure. */ native KeyValues CreateKeyValues(const char[] name, const char[] firstKey="", const char[] firstValue=""); -/** +/** * Sets a string value of a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param value String value. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param value String value. + * @error Invalid Handle. */ native void KvSetString(Handle kv, const char[] key, const char[] value); -/** +/** * Sets an integer value of a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param value Value number. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param value Value number. + * @error Invalid Handle. */ native void KvSetNum(Handle kv, const char[] key, int value); -/** +/** * Sets a large integer value of a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param value Large integer value (0=High bits, 1=Low bits) - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param value Large integer value (0=High bits, 1=Low bits) + * @error Invalid Handle. */ native void KvSetUInt64(Handle kv, const char[] key, const int value[2]); -/** +/** * Sets a floating point value of a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param value Floating point value. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param value Floating point value. + * @error Invalid Handle. */ native void KvSetFloat(Handle kv, const char[] key, float value); -/** +/** * Sets a set of color values of a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param r Red value. - * @param g Green value. - * @param b Blue value. - * @param a Alpha value. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param r Red value. + * @param g Green value. + * @param b Blue value. + * @param a Alpha value. + * @error Invalid Handle. */ native void KvSetColor(Handle kv, const char[] key, int r, int g, int b, int a=0); -/** +/** * Sets a vector value of a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param vec Vector value. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param vec Vector value. + * @error Invalid Handle. */ native void KvSetVector(Handle kv, const char[] key, const float vec[3]); -/** +/** * Retrieves a string value from a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param value Buffer to store key value in. - * @param maxlength Maximum length of the value buffer. - * @param defvalue Optional default value to use if the key is not found. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param value Buffer to store key value in. + * @param maxlength Maximum length of the value buffer. + * @param defvalue Optional default value to use if the key is not found. + * @error Invalid Handle. */ native void KvGetString(Handle kv, const char[] key, char[] value, int maxlength, const char[] defvalue=""); -/** +/** * Retrieves an integer value from a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param defvalue Optional default value to use if the key is not found. - * @return Integer value of the key. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param defvalue Optional default value to use if the key is not found. + * @return Integer value of the key. + * @error Invalid Handle. */ native int KvGetNum(Handle kv, const char[] key, int defvalue=0); -/** +/** * Retrieves a floating point value from a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param defvalue Optional default value to use if the key is not found. - * @return Floating point value of the key. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param defvalue Optional default value to use if the key is not found. + * @return Floating point value of the key. + * @error Invalid Handle. */ native float KvGetFloat(Handle kv, const char[] key, float defvalue=0.0); -/** +/** * Retrieves a set of color values from a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param r Red value, set by reference. - * @param g Green value, set by reference. - * @param b Blue value, set by reference. - * @param a Alpha value, set by reference. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param r Red value, set by reference. + * @param g Green value, set by reference. + * @param b Blue value, set by reference. + * @param a Alpha value, set by reference. + * @error Invalid Handle. */ native void KvGetColor(Handle kv, const char[] key, int &r, int &g, int &b, int &a); -/** +/** * Retrieves a large integer value from a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param value Array to represent the large integer. - * @param defvalue Optional default value to use if the key is not found. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param value Array to represent the large integer. + * @param defvalue Optional default value to use if the key is not found. + * @error Invalid Handle. */ native void KvGetUInt64(Handle kv, const char[] key, int value[2], int defvalue[2]={0,0}); -/** +/** * Retrieves a vector value from a KeyValues key. * - * @param kv KeyValues Handle. - * @param key Name of the key, or NULL_STRING. - * @param vec Destination vector to store the value in. - * @param defvalue Optional default value to use if the key is not found. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key, or NULL_STRING. + * @param vec Destination vector to store the value in. + * @param defvalue Optional default value to use if the key is not found. + * @error Invalid Handle. */ native void KvGetVector(Handle kv, const char[] key, float vec[3], const float defvalue[3]={0.0, 0.0, 0.0}); /** * Sets the current position in the KeyValues tree to the given key. * - * @param kv KeyValues Handle. - * @param key Name of the key. - * @param create If true, and the key does not exist, it will be created. - * @return True if the key exists, false if it does not and was not created. + * @param kv KeyValues Handle. + * @param key Name of the key. + * @param create If true, and the key does not exist, it will be created. + * @return True if the key exists, false if it does not and was not created. */ native bool KvJumpToKey(Handle kv, const char[] key, bool create=false); /** * Sets the current position in the KeyValues tree to the given key. * - * @param kv KeyValues Handle. - * @param id KeyValues id. - * @return True if the key exists, false if it does not. + * @param kv KeyValues Handle. + * @param id KeyValues id. + * @return True if the key exists, false if it does not. */ native bool KvJumpToKeySymbol(Handle kv, int id); @@ -486,10 +498,10 @@ native bool KvJumpToKeySymbol(Handle kv, int id); * Sets the current position in the KeyValues tree to the first sub key. * This native adds to the internal traversal stack. * - * @param kv KeyValues Handle. - * @param keyOnly If false, non-keys will be traversed (values). - * @return True on success, false if there was no first sub key. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param keyOnly If false, non-keys will be traversed (values). + * @return True on success, false if there was no first sub key. + * @error Invalid Handle. */ native bool KvGotoFirstSubKey(Handle kv, bool keyOnly=true); @@ -498,30 +510,30 @@ native bool KvGotoFirstSubKey(Handle kv, bool keyOnly=true); * This native does NOT add to the internal traversal stack, and thus * KvGoBack() is not needed for each successive call to this function. * - * @param kv KeyValues Handle. - * @param keyOnly If false, non-keys will be traversed (values). - * @return True on success, false if there was no next sub key. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param keyOnly If false, non-keys will be traversed (values). + * @return True on success, false if there was no next sub key. + * @error Invalid Handle. */ native bool KvGotoNextKey(Handle kv, bool keyOnly=true); /** * Saves the current position in the traversal stack onto the traversal - * stack. This can be useful if you wish to use KvGotoNextKey() and + * stack. This can be useful if you wish to use KvGotoNextKey() and * have the previous key saved for backwards traversal. * - * @param kv KeyValues Handle. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @error Invalid Handle. */ native void KvSavePosition(Handle kv); /** * Removes the given key from the current position. * - * @param kv KeyValues Handle. - * @param key Name of the key. - * @return True on success, false if key did not exist. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Name of the key. + * @return True on success, false if key did not exist. + * @error Invalid Handle. */ native bool KvDeleteKey(Handle kv, const char[] key); @@ -529,16 +541,16 @@ native bool KvDeleteKey(Handle kv, const char[] key); * Removes the current sub-key and attempts to set the position * to the sub-key after the removed one. If no such sub-key exists, * the position will be the parent key in the traversal stack. - * Given the sub-key having position "N" in the traversal stack, the + * Given the sub-key having position "N" in the traversal stack, the * removal will always take place from position "N-1." * - * @param kv KeyValues Handle. - * @return 1 if removal succeeded and there was another key. - * 0 if the current node was not contained in the - * previous node, or no previous node exists. - * -1 if removal succeeded and there were no more keys, - * thus the state is as if KvGoBack() was called. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @return 1 if removal succeeded and there was another key. + * 0 if the current node was not contained in the + * previous node, or no previous node exists. + * -1 if removal succeeded and there were no more keys, + * thus the state is as if KvGoBack() was called. + * @error Invalid Handle. */ native int KvDeleteThis(Handle kv); @@ -548,49 +560,49 @@ native int KvDeleteThis(Handle kv); * once for each successful Jump call, in order to return to the top node. * This function pops one node off the internal traversal stack. * - * @param kv KeyValues Handle. - * @return True on success, false if there is no higher node. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @return True on success, false if there is no higher node. + * @error Invalid Handle. */ native bool KvGoBack(Handle kv); /** - * Sets the position back to the top node, emptying the entire node + * Sets the position back to the top node, emptying the entire node * traversal history. This can be used instead of looping KvGoBack() * if recursive iteration is not important. * - * @param kv KeyValues Handle. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @error Invalid Handle. */ native void KvRewind(Handle kv); /** * Retrieves the current section name. - * - * @param kv KeyValues Handle. - * @param section Buffer to store the section name. - * @param maxlength Maximum length of the name buffer. - * @return True on success, false on failure. - * @error Invalid Handle. + * + * @param kv KeyValues Handle. + * @param section Buffer to store the section name. + * @param maxlength Maximum length of the name buffer. + * @return True on success, false on failure. + * @error Invalid Handle. */ native bool KvGetSectionName(Handle kv, char[] section, int maxlength); /** * Sets the current section name. - * - * @param kv KeyValues Handle. - * @param section Section name. - * @error Invalid Handle. + * + * @param kv KeyValues Handle. + * @param section Section name. + * @error Invalid Handle. */ native void KvSetSectionName(Handle kv, const char[] section); /** * Returns the data type at a key. * - * @param kv KeyValues Handle. - * @param key Key name. - * @return KvDataType value of the key. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Key name. + * @return KvDataType value of the key. + * @error Invalid Handle. */ native KvDataTypes KvGetDataType(Handle kv, const char[] key); @@ -598,10 +610,10 @@ native KvDataTypes KvGetDataType(Handle kv, const char[] key); * Converts a KeyValues tree to a file. The tree is dumped * from the current position. * - * @param kv KeyValues Handle. - * @param file File to dump write to. - * @return True on success, false otherwise. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param file File to dump write to. + * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool KeyValuesToFile(Handle kv, const char[] file); @@ -609,10 +621,10 @@ native bool KeyValuesToFile(Handle kv, const char[] file); * Converts a file to a KeyValues tree. The file is read into * the current position of the tree. * - * @param kv KeyValues Handle. - * @param file File to read from. - * @return True on success, false otherwise. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param file File to read from. + * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool FileToKeyValues(Handle kv, const char[] file); @@ -620,11 +632,11 @@ native bool FileToKeyValues(Handle kv, const char[] file); * Converts a given string to a KeyValues tree. The string is read into * the current postion of the tree. * - * @param kv KeyValues Handle. - * @param buffer String buffer to load into the KeyValues. - * @param resourceName The resource name of the KeyValues, used for error tracking purposes. - * @return True on success, false otherwise. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param buffer String buffer to load into the KeyValues. + * @param resourceName The resource name of the KeyValues, used for error tracking purposes. + * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool StringToKeyValues(Handle kv, const char[] buffer, const char[] resourceName="StringToKeyValues"); @@ -633,9 +645,9 @@ native bool StringToKeyValues(Handle kv, const char[] buffer, const char[] resou * For example, \n would be read as a literal newline. This defaults * to false for new KeyValues structures. * - * @param kv KeyValues Handle. - * @param useEscapes Whether or not to read escape sequences. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param useEscapes Whether or not to read escape sequences. + * @error Invalid Handle. */ native void KvSetEscapeSequences(Handle kv, bool useEscapes); @@ -644,9 +656,9 @@ native void KvSetEscapeSequences(Handle kv, bool useEscapes); * required for KvGoBack to return to the root node. If at the root node, * 0 is returned. * - * @param kv KeyValues Handle. - * @return Number of non-root nodes in the jump stack. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @return Number of non-root nodes in the jump stack. + * @error Invalid Handle. */ native int KvNodesInStack(Handle kv); @@ -655,41 +667,41 @@ native int KvNodesInStack(Handle kv); * the destination KeyValues. * NOTE: All KeyValues are processed from the current location not the root one. * - * @param origin Origin KeyValues Handle. - * @param dest Destination KeyValues Handle. - * @error Invalid Handle. + * @param origin Origin KeyValues Handle. + * @param dest Destination KeyValues Handle. + * @error Invalid Handle. */ native void KvCopySubkeys(Handle origin, Handle dest); -/** +/** * Finds a KeyValues name by id. * - * @param kv KeyValues Handle. - * @param id KeyValues id. - * @param name Buffer to store the name. - * @param maxlength Maximum length of the value buffer. - * @return True on success, false if id not found. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param id KeyValues id. + * @param name Buffer to store the name. + * @param maxlength Maximum length of the value buffer. + * @return True on success, false if id not found. + * @error Invalid Handle. */ native bool KvFindKeyById(Handle kv, int id, char[] name, int maxlength); -/** +/** * Finds a KeyValues id inside a KeyValues tree. * - * @param kv KeyValues Handle. - * @param key Key name. - * @param id Id of the found KeyValue. - * @return True on success, false if key not found. - * @error Invalid Handle. + * @param kv KeyValues Handle. + * @param key Key name. + * @param id Id of the found KeyValue. + * @return True on success, false if key not found. + * @error Invalid Handle. */ native bool KvGetNameSymbol(Handle kv, const char[] key, int &id); /** * Retrieves the current section id. - * - * @param kv KeyValues Handle. - * @param id Id of the current section. - * @return True on success, false on failure. - * @error Invalid Handle. + * + * @param kv KeyValues Handle. + * @param id Id of the current section. + * @return True on success, false on failure. + * @error Invalid Handle. */ native bool KvGetSectionSymbol(Handle kv, int &id); diff --git a/env/include/lang.inc b/env/include/lang.inc index b3a6e60..440b795 100644 --- a/env/include/lang.inc +++ b/env/include/lang.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -35,13 +35,13 @@ #endif #define _lang_included -#define LANG_SERVER 0 /**< Translate using the server's language */ +#define LANG_SERVER 0 /**< Translate using the server's language */ /** * Loads a translation file for the plugin calling this native. * If no extension is specified, .txt is assumed. * - * @param file Translation file. + * @param file Translation file. */ native void LoadTranslations(const char[] file); @@ -51,66 +51,84 @@ native void LoadTranslations(const char[] file); * indexes can be specified but the error will occur during translation, * not during this function call. * - * @param client Client index or LANG_SERVER. + * @param client Client index or LANG_SERVER. */ native void SetGlobalTransTarget(int client); /** * Retrieves the language number of a client. * - * @param client Client index. - * @return Language number client is using. - * @error Invalid client index or client not connected. + * @param client Client index. + * @return Language number client is using. + * @error Invalid client index or client not connected. */ native int GetClientLanguage(int client); /** * Retrieves the server's language. * - * @return Language number server is using. + * @return Language number server is using. */ native int GetServerLanguage(); /** * Returns the number of languages known in languages.cfg. * - * @return Language count. + * @return Language count. */ native int GetLanguageCount(); /** * Retrieves info about a given language number. * - * @param language Language number. - * @param code Language code buffer (2-3 characters usually). - * @param codeLen Maximum length of the language code buffer. - * @param name Language name buffer. - * @param nameLen Maximum length of the language name buffer. - * @error Invalid language number. + * @param language Language number. + * @param code Language code buffer (2-3 characters usually). + * @param codeLen Maximum length of the language code buffer. + * @param name Language name buffer. + * @param nameLen Maximum length of the language name buffer. + * @error Invalid language number. */ native void GetLanguageInfo(int language, char[] code="", int codeLen=0, char[] name="", int nameLen=0); /** * Sets the language number of a client. * - * @param client Client index. - * @param language Language number. - * @error Invalid client index or client not connected. + * @param client Client index. + * @param language Language number. + * @error Invalid client index or client not connected. */ native void SetClientLanguage(int client, int language); /** * Retrieves the language number from a language code. * - * @param code Language code (2-3 characters usually). - * @return Language number. -1 if not found. + * @param code Language code (2-3 characters usually). + * @return Language number. -1 if not found. */ native int GetLanguageByCode(const char[] code); /** * Retrieves the language number from a language name. * - * @param name Language name (case insensitive). - * @return Language number. -1 if not found. + * @param name Language name (case insensitive). + * @return Language number. -1 if not found. */ native int GetLanguageByName(const char[] name); + +/** + * Determines if the specified phrase exists within the plugin's + * translation cache. + * + * @param phrase Phrase to look for. + * @return True if phrase exists. + */ +native bool TranslationPhraseExists(const char[] phrase); + +/** + * Determines if there is a translation for the specified language. + * + * @param phrase Phrase to check. + * @param language Language number. + * @return True if translation exists. + */ +native bool IsTranslatedForLanguage(const char[] phrase, int language); diff --git a/env/include/logging.inc b/env/include/logging.inc index 0fac733..2ab337c 100644 --- a/env/include/logging.inc +++ b/env/include/logging.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,77 +29,77 @@ * * Version: $Id$ */ - + #if defined _sm_logging_included #endinput #endif #define _sm_logging_included /** - * Logs a plugin message to the SourceMod logs. The log message will be + * Logs a plugin message to the SourceMod logs. The log message will be * prefixed by the plugin's logtag (filename). * - * @param format String format. - * @param ... Format arguments. + * @param format String format. + * @param ... Format arguments. */ native void LogMessage(const char[] format, any ...); /** - * Logs a message to any file. The log message will be in the normal + * Logs a message to any file. The log message will be in the normal * SourceMod format, with the plugin logtag prepended. * - * @param file File to write the log message in. - * @param format String format. - * @param ... Format arguments. - * @error File could not be opened/written. + * @param file File to write the log message in. + * @param format String format. + * @param ... Format arguments. + * @error File could not be opened/written. */ native void LogToFile(const char[] file, const char[] format, any ...); /** * Same as LogToFile(), except no plugin logtag is prepended. * - * @param file File to write the log message in. - * @param format String format. - * @param ... Format arguments. - * @error File could not be opened/written. + * @param file File to write the log message in. + * @param format String format. + * @param ... Format arguments. + * @error File could not be opened/written. */ native void LogToFileEx(const char[] file, const char[] format, any ...); /** - * Logs an action from a command or event whereby interception and routing may + * Logs an action from a command or event whereby interception and routing may * be important. This is intended to be a logging version of ShowActivity(). * - * @param client Client performing the action, 0 for server, or -1 if not - * applicable. - * @param target Client being targetted, or -1 if not applicable. - * @param message Message format. - * @param ... Message formatting parameters. + * @param client Client performing the action, 0 for server, or -1 if not + * applicable. + * @param target Client being targetted, or -1 if not applicable. + * @param message Message format. + * @param ... Message formatting parameters. */ native void LogAction(int client, int target, const char[] message, any ...); /** * Logs a plugin error message to the SourceMod logs. * - * @param format String format. - * @param ... Format arguments. + * @param format String format. + * @param ... Format arguments. */ native void LogError(const char[] format, any ...); /** * Called when an action is going to be logged. * - * @param source Handle to the object logging the action, or INVALID_HANDLE - * if Core is logging the action. - * @param ident Type of object logging the action (plugin, ext, or core). - * @param client Client the action is from; 0 for server, -1 if not applicable. - * @param target Client the action is targetting, or -1 if not applicable. - * @param message Message that is being logged. - * @return Plugin_Continue will perform the default logging behavior. - * Plugin_Handled will stop Core from logging the message. - * Plugin_Stop is the same as Handled, but prevents any other - * plugins from handling the message. + * @param source Handle to the object logging the action, or INVALID_HANDLE + * if Core is logging the action. + * @param ident Type of object logging the action (plugin, ext, or core). + * @param client Client the action is from; 0 for server, -1 if not applicable. + * @param target Client the action is targetting, or -1 if not applicable. + * @param message Message that is being logged. + * @return Plugin_Continue will perform the default logging behavior. + * Plugin_Handled will stop Core from logging the message. + * Plugin_Stop is the same as Handled, but prevents any other + * plugins from handling the message. */ -forward Action OnLogAction(Handle source, +forward Action OnLogAction(Handle source, Identity ident, int client, int target, @@ -108,28 +108,28 @@ forward Action OnLogAction(Handle source, /** * Called when a game log message is received. * - * Any Log*() functions called within this callback will not recursively + * Any Log*() functions called within this callback will not recursively * pass through. That is, they will log directly, bypassing this callback. * - * Note that this does not capture log messages from the engine. It only + * Note that this does not capture log messages from the engine. It only * captures log messages being sent from the game/mod itself. * - * @param message Message contents. - * @return Plugin_Handled or Plugin_Stop will prevent the message - * from being written to the log file. + * @param message Message contents. + * @return Plugin_Handled or Plugin_Stop will prevent the message + * from being written to the log file. */ typedef GameLogHook = function Action (const char[] message); /** * Adds a game log hook. * - * @param hook Hook function. + * @param hook Hook function. */ native void AddGameLogHook(GameLogHook hook); /** * Removes a game log hook. * - * @param hook Hook function. + * @param hook Hook function. */ native void RemoveGameLogHook(GameLogHook hook); diff --git a/env/include/mapchooser.inc b/env/include/mapchooser.inc index 0fe7def..89d73c7 100644 --- a/env/include/mapchooser.inc +++ b/env/include/mapchooser.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -30,71 +30,72 @@ * Version: $Id$ */ #if defined _mapchooser_included_ - #endinput + #endinput #endif #define _mapchooser_included_ enum NominateResult { - Nominate_Added, /** The map was added to the nominate list */ - Nominate_Replaced, /** A clients existing nomination was replaced */ - Nominate_AlreadyInVote, /** Specified map was already in the vote */ - Nominate_InvalidMap, /** Mapname specified wasn't a valid map */ - Nominate_VoteFull, /** This will only occur if force was set to false */ + Nominate_Added, /** The map was added to the nominate list */ + Nominate_Replaced, /** A clients existing nomination was replaced */ + Nominate_AlreadyInVote, /** Specified map was already in the vote */ + Nominate_InvalidMap, /** Mapname specified wasn't a valid map */ + Nominate_VoteFull /** This will only occur if force was set to false */ }; enum MapChange { - MapChange_Instant, /** Change map as soon as the voting results have come in */ - MapChange_RoundEnd, /** Change map at the end of the round */ - MapChange_MapEnd, /** Change the sm_nextmap cvar */ + MapChange_Instant, /** Change map as soon as the voting results have come in */ + MapChange_RoundEnd, /** Change map at the end of the round */ + MapChange_MapEnd /** Change the sm_nextmap cvar */ }; /** * Attempt to add a map to the mapchooser map list. * - * @param map Map to add. - * @param force Should we force the map in even if it requires overwriting an existing nomination? - * @param owner Client index of the nominator. If the client disconnects the nomination will be removed. Use 0 for constant nominations - * @return Nominate Result of the outcome + * @param map Map to add. + * @param force Should we force the map in even if it requires overwriting an existing nomination? + * @param owner Client index of the nominator. If the client disconnects the nomination will be removed. + * Use 0 for constant nominations + * @return Nominate Result of the outcome */ native NominateResult NominateMap(const char[] map, bool force, int owner); /** * Attempt to remove a map from the mapchooser map list. * - * @param map Map to remove. - * @return True if the nomination was found and removed, or false if the nomination was not found. + * @param map Map to remove. + * @return True if the nomination was found and removed, or false if the nomination was not found. */ native bool RemoveNominationByMap(const char[] map); /** * Attempt to remove a map from the mapchooser map list. * - * @param owner Client index of the nominator. - * @return True if the nomination was found and removed, or false if the nomination was not found. + * @param owner Client index of the nominator. + * @return True if the nomination was found and removed, or false if the nomination was not found. */ native bool RemoveNominationByOwner(int owner); /** * Gets the current list of excluded maps. * - * @param array An ADT array handle to add the map strings to. + * @param array An ADT array handle to add the map strings to. */ native void GetExcludeMapList(ArrayList array); /** * Gets the current list of nominated maps. * - * @param maparray An ADT array handle to add the map strings to. - * @param ownerarray An optional ADT array handle to add the nominator client indexes to. + * @param maparray An ADT array handle to add the map strings to. + * @param ownerarray An optional ADT array handle to add the nominator client indexes to. */ native void GetNominatedMapList(ArrayList maparray, ArrayList ownerarray = null); /** * Checks if MapChooser will allow a vote * - * @return True if a vote can be held, or false if mapchooser is already holding a vote. + * @return True if a vote can be held, or false if mapchooser is already holding a vote. */ native bool CanMapChooserStartVote(); @@ -104,22 +105,22 @@ native bool CanMapChooserStartVote(); * Note: If no input array is specified mapchooser will use its internal list. This includes * any nominations and excluded maps (as per mapchoosers convars). * - * @param when MapChange consant of when the resulting mapchange should occur. - * @param inputarray ADT array list of maps to add to the vote. + * @param when MapChange consant of when the resulting mapchange should occur. + * @param inputarray ADT array list of maps to add to the vote. */ native void InitiateMapChooserVote(MapChange when, ArrayList inputarray=null); /** * Checks if MapChooser's end of map vote has completed. * - * @return True if complete, false otherwise. + * @return True if complete, false otherwise. */ native bool HasEndOfMapVoteFinished(); /** * Checks if MapChooser is set to run an end of map vote. * - * @return True if enabled, false otherwise. + * @return True if enabled, false otherwise. */ native bool EndOfMapVoteEnabled(); @@ -134,7 +135,7 @@ forward void OnNominationRemoved(const char[] map, int owner); */ forward void OnMapVoteStarted(); -public SharedPlugin __pl_mapchooser = +public SharedPlugin __pl_mapchooser = { name = "mapchooser", file = "mapchooser.smx", diff --git a/env/include/menus.inc b/env/include/menus.inc index a200116..7341328 100644 --- a/env/include/menus.inc +++ b/env/include/menus.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _menus_included #endinput #endif @@ -40,9 +40,9 @@ */ enum MenuStyle { - MenuStyle_Default = 0, /**< The "default" menu style for the mod */ - MenuStyle_Valve = 1, /**< The Valve provided menu style (Used on HL2DM) */ - MenuStyle_Radio = 2, /**< The simpler menu style commonly used on CS:S */ + MenuStyle_Default = 0, /**< The "default" menu style for the mod */ + MenuStyle_Valve = 1, /**< The Valve provided menu style (Used on HL2DM) */ + MenuStyle_Radio = 2 /**< The simpler menu style commonly used on CS:S */ }; /** @@ -50,64 +50,62 @@ enum MenuStyle */ enum MenuAction { - MenuAction_Start = (1<<0), /**< A menu has been started (nothing passed) */ - MenuAction_Display = (1<<1), /**< A menu is about to be displayed (param1=client, param2=MenuPanel Handle) */ - MenuAction_Select = (1<<2), /**< An item was selected (param1=client, param2=item) */ - MenuAction_Cancel = (1<<3), /**< The menu was cancelled (param1=client, param2=reason) */ - MenuAction_End = (1<<4), /**< A menu display has fully ended. - param1 is the MenuEnd reason, and if it's MenuEnd_Cancelled, then - param2 is the MenuCancel reason from MenuAction_Cancel. - */ - MenuAction_VoteEnd = (1<<5), /**< (VOTE ONLY): A vote sequence has succeeded (param1=chosen item) - This is not called if SetVoteResultCallback has been used on the menu. */ - MenuAction_VoteStart = (1<<6), /**< (VOTE ONLY): A vote sequence has started (nothing passed) */ - MenuAction_VoteCancel = (1<<7), /**< (VOTE ONLY): A vote sequence has been cancelled (param1=reason) */ - MenuAction_DrawItem = (1<<8), /**< An item is being drawn; return the new style (param1=client, param2=item) */ - MenuAction_DisplayItem = (1<<9),/**< Item text is being drawn to the display (param1=client, param2=item) - To change the text, use RedrawMenuItem(). - If you do so, return its return value. Otherwise, return 0. - */ + MenuAction_Start = (1<<0), /**< A menu has been started (nothing passed) */ + MenuAction_Display = (1<<1), /**< A menu is about to be displayed (param1=client, param2=MenuPanel Handle) */ + MenuAction_Select = (1<<2), /**< An item was selected (param1=client, param2=item) */ + MenuAction_Cancel = (1<<3), /**< The menu was cancelled (param1=client, param2=reason) */ + MenuAction_End = (1<<4), /**< A menu display has fully ended. + param1 is the MenuEnd reason, and if it's MenuEnd_Cancelled, then + param2 is the MenuCancel reason from MenuAction_Cancel. */ + MenuAction_VoteEnd = (1<<5), /**< (VOTE ONLY): A vote sequence has succeeded (param1=chosen item) + This is not called if SetVoteResultCallback has been used on the menu. */ + MenuAction_VoteStart = (1<<6), /**< (VOTE ONLY): A vote sequence has started (nothing passed) */ + MenuAction_VoteCancel = (1<<7), /**< (VOTE ONLY): A vote sequence has been cancelled (param1=reason) */ + MenuAction_DrawItem = (1<<8), /**< An item is being drawn; return the new style (param1=client, param2=item) */ + MenuAction_DisplayItem = (1<<9) /**< Item text is being drawn to the display (param1=client, param2=item) + To change the text, use RedrawMenuItem(). + If you do so, return its return value. Otherwise, return 0. */ }; /** Default menu actions */ -#define MENU_ACTIONS_DEFAULT MenuAction_Select|MenuAction_Cancel|MenuAction_End +#define MENU_ACTIONS_DEFAULT MenuAction_Select|MenuAction_Cancel|MenuAction_End /** All menu actions */ -#define MENU_ACTIONS_ALL view_as(0xFFFFFFFF) +#define MENU_ACTIONS_ALL view_as(0xFFFFFFFF) -#define MENU_NO_PAGINATION 0 /**< Menu should not be paginated (10 items max) */ -#define MENU_TIME_FOREVER 0 /**< Menu should be displayed as long as possible */ +#define MENU_NO_PAGINATION 0 /**< Menu should not be paginated (10 items max) */ +#define MENU_TIME_FOREVER 0 /**< Menu should be displayed as long as possible */ -#define ITEMDRAW_DEFAULT (0) /**< Item should be drawn normally */ -#define ITEMDRAW_DISABLED (1<<0) /**< Item is drawn but not selectable */ -#define ITEMDRAW_RAWLINE (1<<1) /**< Item should be a raw line, without a slot */ -#define ITEMDRAW_NOTEXT (1<<2) /**< No text should be drawn */ -#define ITEMDRAW_SPACER (1<<3) /**< Item should be drawn as a spacer, if possible */ -#define ITEMDRAW_IGNORE ((1<<1)|(1<<2)) /**< Item should be completely ignored (rawline + notext) */ -#define ITEMDRAW_CONTROL (1<<4) /**< Item is control text (back/next/exit) */ +#define ITEMDRAW_DEFAULT (0) /**< Item should be drawn normally */ +#define ITEMDRAW_DISABLED (1<<0) /**< Item is drawn but not selectable */ +#define ITEMDRAW_RAWLINE (1<<1) /**< Item should be a raw line, without a slot */ +#define ITEMDRAW_NOTEXT (1<<2) /**< No text should be drawn */ +#define ITEMDRAW_SPACER (1<<3) /**< Item should be drawn as a spacer, if possible */ +#define ITEMDRAW_IGNORE ((1<<1)|(1<<2)) /**< Item should be completely ignored (rawline + notext) */ +#define ITEMDRAW_CONTROL (1<<4) /**< Item is control text (back/next/exit) */ -#define MENUFLAG_BUTTON_EXIT (1<<0) /**< Menu has an "exit" button (default if paginated) */ -#define MENUFLAG_BUTTON_EXITBACK (1<<1) /**< Menu has an "exit back" button */ -#define MENUFLAG_NO_SOUND (1<<2) /**< Menu will not have any select sounds */ -#define MENUFLAG_BUTTON_NOVOTE (1<<3) /**< Menu has a "No Vote" button at slot 1 */ +#define MENUFLAG_BUTTON_EXIT (1<<0) /**< Menu has an "exit" button (default if paginated) */ +#define MENUFLAG_BUTTON_EXITBACK (1<<1) /**< Menu has an "exit back" button */ +#define MENUFLAG_NO_SOUND (1<<2) /**< Menu will not have any select sounds */ +#define MENUFLAG_BUTTON_NOVOTE (1<<3) /**< Menu has a "No Vote" button at slot 1 */ -#define VOTEINFO_CLIENT_INDEX 0 /**< Client index */ -#define VOTEINFO_CLIENT_ITEM 1 /**< Item the client selected, or -1 for none */ -#define VOTEINFO_ITEM_INDEX 0 /**< Item index */ -#define VOTEINFO_ITEM_VOTES 1 /**< Number of votes for the item */ +#define VOTEINFO_CLIENT_INDEX 0 /**< Client index */ +#define VOTEINFO_CLIENT_ITEM 1 /**< Item the client selected, or -1 for none */ +#define VOTEINFO_ITEM_INDEX 0 /**< Item index */ +#define VOTEINFO_ITEM_VOTES 1 /**< Number of votes for the item */ -#define VOTEFLAG_NO_REVOTES (1<<0) /**< Players cannot change their votes */ +#define VOTEFLAG_NO_REVOTES (1<<0) /**< Players cannot change their votes */ /** * Reasons a menu can be cancelled (MenuAction_Cancel). */ enum { - MenuCancel_Disconnected = -1, /**< Client dropped from the server */ - MenuCancel_Interrupted = -2, /**< Client was interrupted with another menu */ - MenuCancel_Exit = -3, /**< Client exited via "exit" */ - MenuCancel_NoDisplay = -4, /**< Menu could not be displayed to the client */ - MenuCancel_Timeout = -5, /**< Menu timed out */ - MenuCancel_ExitBack = -6, /**< Client selected "exit back" on a paginated menu */ + MenuCancel_Disconnected = -1, /**< Client dropped from the server */ + MenuCancel_Interrupted = -2, /**< Client was interrupted with another menu */ + MenuCancel_Exit = -3, /**< Client exited via "exit" */ + MenuCancel_NoDisplay = -4, /**< Menu could not be displayed to the client */ + MenuCancel_Timeout = -5, /**< Menu timed out */ + MenuCancel_ExitBack = -6 /**< Client selected "exit back" on a paginated menu */ }; /** @@ -115,8 +113,8 @@ enum */ enum { - VoteCancel_Generic = -1, /**< Vote was generically cancelled. */ - VoteCancel_NoVotes = -2, /**< Vote did not receive any votes. */ + VoteCancel_Generic = -1, /**< Vote was generically cancelled. */ + VoteCancel_NoVotes = -2 /**< Vote did not receive any votes. */ }; /** @@ -124,12 +122,12 @@ enum */ enum { - MenuEnd_Selected = 0, /**< Menu item was selected */ - MenuEnd_VotingDone = -1, /**< Voting finished */ - MenuEnd_VotingCancelled = -2, /**< Voting was cancelled */ - MenuEnd_Cancelled = -3, /**< Menu was cancelled (reason in param2) */ - MenuEnd_Exit = -4, /**< Menu was cleanly exited via "exit" */ - MenuEnd_ExitBack = -5, /**< Menu was cleanly exited via "back" */ + MenuEnd_Selected = 0, /**< Menu item was selected */ + MenuEnd_VotingDone = -1, /**< Voting finished */ + MenuEnd_VotingCancelled = -2, /**< Voting was cancelled */ + MenuEnd_Cancelled = -3, /**< Menu was cancelled (reason in param2) */ + MenuEnd_Exit = -4, /**< Menu was cleanly exited via "exit" */ + MenuEnd_ExitBack = -5 /**< Menu was cleanly exited via "back" */ }; /** @@ -137,19 +135,19 @@ enum */ enum MenuSource { - MenuSource_None = 0, /**< No menu is being displayed */ - MenuSource_External = 1, /**< External menu */ - MenuSource_Normal = 2, /**< A basic menu is being displayed */ - MenuSource_RawPanel = 3, /**< A display is active, but it is not tied to a menu */ + MenuSource_None = 0, /**< No menu is being displayed */ + MenuSource_External = 1, /**< External menu */ + MenuSource_Normal = 2, /**< A basic menu is being displayed */ + MenuSource_RawPanel = 3 /**< A display is active, but it is not tied to a menu */ }; /** * Called when a menu action is completed. * - * @param menu The menu being acted upon. - * @param action The action of the menu. - * @param param1 First action parameter (usually the client). - * @param param2 Second action parameter (usually the item). + * @param menu The menu being acted upon. + * @param action The action of the menu. + * @param param1 First action parameter (usually the client). + * @param param2 Second action parameter (usually the item). */ typedef MenuHandler = function int (Menu menu, MenuAction action, int param1, int param2); @@ -158,8 +156,8 @@ typedef MenuHandler = function int (Menu menu, MenuAction action, int param1, in methodmap Panel < Handle { // Constructor for a new Panel. - // - // @param hStyle MenuStyle Handle, or null to use the default style. + // + // @param hStyle MenuStyle Handle, or null to use the default style. public native Panel(Handle hStyle = null); // Sets the panel's title. @@ -171,7 +169,7 @@ methodmap Panel < Handle // Draws an item on a panel. If the item takes up a slot, the position // is returned. // - // @param text Display text to use. If not a raw line, + // @param text Display text to use. If not a raw line, // the style may automatically add color markup. // No numbering or newlines are needed. // @param style ITEMDRAW style flags. @@ -193,7 +191,7 @@ methodmap Panel < Handle public native bool CanDrawFlags(int style); // Sets the selectable key map of a panel. This is not supported by - // all styles (only by Radio, as of this writing). + // all styles (only by Radio, as of this writing). // // @param keys An integer where each bit N allows key // N+1 to be selected. If no keys are selectable, @@ -202,7 +200,7 @@ methodmap Panel < Handle public native bool SetKeys(int keys); // Sends a panel to a client. Unlike full menus, the handler - // function will only receive the following actions, both of + // function will only receive the following actions, both of // which will have null for a menu, and the client as param1. // // MenuAction_Select (param2 will be the key pressed) @@ -216,8 +214,8 @@ methodmap Panel < Handle // @return True on success, false on failure. public native bool Send(int client, MenuHandler handler, int time); - // Returns the amount of text the menu can still hold. If this is - // limit is reached or overflowed, the text is silently truncated. + // Returns the amount of text the menu can still hold. If this is + // limit is reached or overflowed, the text is silently truncated. // // Radio menus: Currently 511 characters (512 bytes). // Valve menus: Currently -1 (no meaning). @@ -242,9 +240,9 @@ methodmap Panel < Handle methodmap Menu < Handle { // Creates a new, empty menu using the default style. - // + // // @param handler Function which will receive menu actions. - // @param actions Optionally set which actions to receive. Select, + // @param actions Optionally set which actions to receive. Select, // Cancel, and End will always be received regardless // of whether they are set or not. They are also // the only default actions. @@ -272,7 +270,7 @@ methodmap Menu < Handle // // @param info Item information string. // @param display Default item display string. - // @param style Drawing style flags. Anything other than DEFAULT or + // @param style Drawing style flags. Anything other than DEFAULT or // DISABLED will be completely ignored when paginating. // @return True on success, false on failure. // @error Item limit reached. @@ -284,7 +282,7 @@ methodmap Menu < Handle // @param position Position, starting from 0. // @param info Item information string. // @param display Default item display string. - // @param style Drawing style flags. Anything other than DEFAULT or + // @param style Drawing style flags. Anything other than DEFAULT or // DISABLED will be completely ignored when paginating. // @return True on success, false on failure. // @error Invalid menu position. @@ -309,9 +307,23 @@ methodmap Menu < Handle // @param style By-reference variable to store drawing flags. // @param dispBuf Display buffer. // @param dispBufLen Maximum length of the display buffer. + // @param client Client index. Must be specified if menu is per-client random shuffled, -1 to ignore. // @return True on success, false if position is invalid. - public native bool GetItem(int position, char[] infoBuf, int infoBufLen, - int &style=0, char[] dispBuf="", int dispBufLen=0); + public native bool GetItem(int position, char[] infoBuf, int infoBufLen, + int &style=0, char[] dispBuf="", int dispBufLen=0, int client=0); + + // Generates a per-client random mapping for the current vote options. + // + // @param start Menu item index to start randomizing from. + // @param stop Menu item index to stop randomizing at. -1 = infinite + public native void ShufflePerClient(int start=0, int stop=-1); + + // Fills the client vote option mapping with user supplied values. + // + // @param client Client index. + // @param array Integer array with mapping. + // @param length Length of array. + public native void SetClientMapping(int client, int[] array, int length); // Sets the menu's default title/instruction message. // @@ -321,7 +333,6 @@ methodmap Menu < Handle // Returns the text of a menu's title. // - // @param menu Menu Handle. // @param buffer Buffer to store title. // @param maxlength Maximum length of the buffer. // @return Number of bytes written. @@ -330,7 +341,6 @@ methodmap Menu < Handle // Creates a raw MenuPanel based off the menu's style. // The Handle must be freed with CloseHandle(). // - // @param menu Menu Handle. // @return A new MenuPanel Handle. public native Panel ToPanel(); @@ -344,8 +354,8 @@ methodmap Menu < Handle // If any vote is in progress on a menu, it will be cancelled. public native void Cancel(); - // Broadcasts a menu to a list of clients. The most selected item will be - // returned through MenuAction_End. On a tie, a random item will be returned + // Broadcasts a menu to a list of clients. The most selected item will be + // returned through MenuAction_End. On a tie, a random item will be returned // from a list of the tied items. // // Note that MenuAction_VoteEnd and MenuAction_VoteStart are both @@ -371,15 +381,17 @@ methodmap Menu < Handle int[] players = new int[MaxClients]; for (int i = 1; i <= MaxClients; i++) { if (!IsClientInGame(i) || IsFakeClient(i)) + { continue; + } players[total++] = i; } return this.DisplayVote(players, total, time, flags); } // Get or set the menu's pagination. - // - // If pagination is MENU_NO_PAGINATION, and the exit button flag is set, + // + // If pagination is MENU_NO_PAGINATION, and the exit button flag is set, // then the exit button flag is removed. It can be re-applied if desired. property int Pagination { public native get(); @@ -401,10 +413,10 @@ methodmap Menu < Handle public native set(bool value); } - // Controls whether or not the menu has an "exit back" button. By default, - // menus do not have an exit back button. - // - // Exit Back buttons appear as "Back" on page 1 of paginated menus and have + // Controls whether or not the menu has an "exit back" button. By default, + // menus do not have an exit back button. + // + // Exit Back buttons appear as "Back" on page 1 of paginated menus and have // functionality defined by the user in MenuEnd_ExitBack. property bool ExitBackButton { public native get(); @@ -434,7 +446,7 @@ methodmap Menu < Handle } // Returns the first item on the page of a currently selected menu. - // + // // This is only valid inside a MenuAction_Select callback. property int Selection { public native get(); @@ -443,155 +455,176 @@ methodmap Menu < Handle /** * Creates a new, empty menu using the default style. - * - * @param handler Function which will receive menu actions. - * @param actions Optionally set which actions to receive. Select, - * Cancel, and End will always be received regardless - * of whether they are set or not. They are also - * the only default actions. - * @return A new menu Handle. + * + * @param handler Function which will receive menu actions. + * @param actions Optionally set which actions to receive. Select, + * Cancel, and End will always be received regardless + * of whether they are set or not. They are also + * the only default actions. + * @return A new menu Handle. */ native Menu CreateMenu(MenuHandler handler, MenuAction actions=MENU_ACTIONS_DEFAULT); /** * Displays a menu to a client. * - * @param menu Menu Handle. - * @param client Client index. - * @param time Maximum time to leave menu on the screen. - * @return True on success, false on failure. - * @error Invalid Handle or client not in game. + * @param menu Menu Handle. + * @param client Client index. + * @param time Maximum time to leave menu on the screen. + * @return True on success, false on failure. + * @error Invalid Handle or client not in game. */ native bool DisplayMenu(Handle menu, int client, int time); /** * Displays a menu to a client, starting from the given item. * - * @param menu Menu Handle. - * @param client Client index. - * @param first_item First item to begin drawing from. - * @param time Maximum time to leave menu on the screen. - * @return True on success, false on failure. - * @error Invalid Handle or client not in game. + * @param menu Menu Handle. + * @param client Client index. + * @param first_item First item to begin drawing from. + * @param time Maximum time to leave menu on the screen. + * @return True on success, false on failure. + * @error Invalid Handle or client not in game. */ native bool DisplayMenuAtItem(Handle menu, int client, int first_item, int time); /** * Appends a new item to the end of a menu. * - * @param menu Menu Handle. - * @param info Item information string. - * @param display Default item display string. - * @param style Drawing style flags. Anything other than DEFAULT or - * DISABLED will be completely ignored when paginating. - * @return True on success, false on failure. - * @error Invalid Handle or item limit reached. + * @param menu Menu Handle. + * @param info Item information string. + * @param display Default item display string. + * @param style Drawing style flags. Anything other than DEFAULT or + * DISABLED will be completely ignored when paginating. + * @return True on success, false on failure. + * @error Invalid Handle or item limit reached. */ -native bool AddMenuItem(Handle menu, - const char[] info, - const char[] display, +native bool AddMenuItem(Handle menu, + const char[] info, + const char[] display, int style=ITEMDRAW_DEFAULT); /** * Inserts an item into the menu before a certain position; the new item will * be at the given position and all next items pushed forward. * - * @param menu Menu Handle. - * @param position Position, starting from 0. - * @param info Item information string. - * @param display Default item display string. - * @param style Drawing style flags. Anything other than DEFAULT or - * DISABLED will be completely ignored when paginating. - * @return True on success, false on failure. - * @error Invalid Handle or menu position. + * @param menu Menu Handle. + * @param position Position, starting from 0. + * @param info Item information string. + * @param display Default item display string. + * @param style Drawing style flags. Anything other than DEFAULT or + * DISABLED will be completely ignored when paginating. + * @return True on success, false on failure. + * @error Invalid Handle or menu position. */ native bool InsertMenuItem(Handle menu, - position, - const char[] info, - const char[] display, + position, + const char[] info, + const char[] display, int style=ITEMDRAW_DEFAULT); /** * Removes an item from the menu. * - * @param menu Menu Handle. - * @param position Position, starting from 0. - * @return True on success, false on failure. - * @error Invalid Handle or menu position. + * @param menu Menu Handle. + * @param position Position, starting from 0. + * @return True on success, false on failure. + * @error Invalid Handle or menu position. */ native bool RemoveMenuItem(Handle menu, int position); /** * Removes all items from a menu. * - * @param menu Menu Handle. - * @error Invalid Handle or menu position. + * @param menu Menu Handle. + * @error Invalid Handle or menu position. */ native void RemoveAllMenuItems(Handle menu); /** * Retrieves information about a menu item. * - * @param menu Menu Handle. - * @param position Position, starting from 0. - * @param infoBuf Info buffer. - * @param infoBufLen Maximum length of the info buffer. - * @param style By-reference variable to store drawing flags. - * @param dispBuf Display buffer. - * @param dispBufLen Maximum length of the display buffer. - * @return True on success, false if position is invalid. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param position Position, starting from 0. + * @param infoBuf Info buffer. + * @param infoBufLen Maximum length of the info buffer. + * @param style By-reference variable to store drawing flags. + * @param dispBuf Display buffer. + * @param dispBufLen Maximum length of the display buffer. + * @param client Client index. Must be specified if menu is per-client random shuffled, -1 to ignore. + * @return True on success, false if position is invalid. + * @error Invalid Handle. */ -native bool GetMenuItem(Handle menu, - int position, - char[] infoBuf, - int infoBufLen, - int &style=0, +native bool GetMenuItem(Handle menu, + int position, + char[] infoBuf, + int infoBufLen, + int &style=0, char[] dispBuf="", - int dispBufLen=0); - + int dispBufLen=0, + int client=0); + +/** + * Generates a per-client random mapping for the current vote options. + * + * @param menu Menu Handle. + * @param start Menu item index to start randomizing from. + * @param stop Menu item index to stop randomizing at. -1 = infinite + */ +native void MenuShufflePerClient(Handle menu, int start=0, int stop=-1); + +/* + * Fills the client vote option mapping with user supplied values. + * + * @param menu Menu Handle. + * @param client Client index. + * @param array Integer array with mapping. + * @param length Length of array. + */ +native void MenuSetClientMapping(Handle menu, int client, int[] array, int length); + /** * Returns the first item on the page of a currently selected menu. * * This is only valid inside a MenuAction_Select callback. * - * @return First item number on the page the client was viewing - * before selecting the item in the callback. This can - * be used to re-display the menu from the original - * position. - * @error Not called from inside a MenuAction_Select callback. + * @return First item number on the page the client was viewing + * before selecting the item in the callback. This can + * be used to re-display the menu from the original + * position. + * @error Not called from inside a MenuAction_Select callback. */ native int GetMenuSelectionPosition(); /** * Returns the number of items in a menu. * - * @param menu Menu Handle. - * @return Number of items in the menu. - * @error Invalid Handle. + * @param menu Menu Handle. + * @return Number of items in the menu. + * @error Invalid Handle. */ native int GetMenuItemCount(Handle menu); /** * Sets whether the menu should be paginated or not. * - * If itemsPerPage is MENU_NO_PAGINATION, and the exit button flag is set, + * If itemsPerPage is MENU_NO_PAGINATION, and the exit button flag is set, * then the exit button flag is removed. It can be re-applied if desired. * - * @param menu Handle to the menu. - * @param itemsPerPage Number of items per page, or MENU_NO_PAGINATION. - * @return True on success, false if pagination is too high or - * low. - * @error Invalid Handle. + * @param menu Handle to the menu. + * @param itemsPerPage Number of items per page, or MENU_NO_PAGINATION. + * @return True on success, false if pagination is too high or + * low. + * @error Invalid Handle. */ native bool SetMenuPagination(Handle menu, int itemsPerPage); /** * Returns a menu's pagination setting. * - * @param menu Handle to the menu. - * @return Pagination setting. - * @error Invalid Handle. + * @param menu Handle to the menu. + * @return Pagination setting. + * @error Invalid Handle. */ native int GetMenuPagination(Handle menu); @@ -599,30 +632,30 @@ native int GetMenuPagination(Handle menu); * Returns a menu's MenuStyle Handle. The Handle * is global and cannot be freed. * - * @param menu Handle to the menu. - * @return Handle to the menu's draw style. - * @error Invalid Handle. + * @param menu Handle to the menu. + * @return Handle to the menu's draw style. + * @error Invalid Handle. */ native Handle GetMenuStyle(Handle menu); /** * Sets the menu's default title/instruction message. * - * @param menu Menu Handle. - * @param fmt Message string format - * @param ... Message string arguments. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param fmt Message string format + * @param ... Message string arguments. + * @error Invalid Handle. */ native void SetMenuTitle(Handle menu, const char[] fmt, any ...); /** * Returns the text of a menu's title. * - * @param menu Menu Handle. - * @param buffer Buffer to store title. - * @param maxlength Maximum length of the buffer. - * @return Number of bytes written. - * @error Invalid Handle/ + * @param menu Menu Handle. + * @param buffer Buffer to store title. + * @param maxlength Maximum length of the buffer. + * @return Number of bytes written. + * @error Invalid Handle/ */ native int GetMenuTitle(Handle menu, char[] buffer, int maxlength); @@ -630,9 +663,9 @@ native int GetMenuTitle(Handle menu, char[] buffer, int maxlength); * Creates a raw MenuPanel based off the menu's style. * The Handle must be freed with CloseHandle(). * - * @param menu Menu Handle. - * @return A new MenuPanel Handle. - * @error Invalid Handle. + * @param menu Menu Handle. + * @return A new MenuPanel Handle. + * @error Invalid Handle. */ native Panel CreatePanelFromMenu(Handle menu); @@ -640,53 +673,53 @@ native Panel CreatePanelFromMenu(Handle menu); * Returns whether or not the menu has an exit button. * By default, menus have an exit button. * - * @param menu Menu Handle. - * @return True if the menu has an exit button; false otherwise. - * @error Invalid Handle. + * @param menu Menu Handle. + * @return True if the menu has an exit button; false otherwise. + * @error Invalid Handle. */ native bool GetMenuExitButton(Handle menu); /** - * Sets whether or not the menu has an exit button. By default, paginated menus + * Sets whether or not the menu has an exit button. By default, paginated menus * have an exit button. * - * If a menu's pagination is changed to MENU_NO_PAGINATION, and the pagination - * was previously a different value, then the Exit button status is changed to + * If a menu's pagination is changed to MENU_NO_PAGINATION, and the pagination + * was previously a different value, then the Exit button status is changed to * false. It must be explicitly re-enabled afterwards. * - * If a non-paginated menu has an exit button, then at most 9 items will be + * If a non-paginated menu has an exit button, then at most 9 items will be * displayed. * - * @param menu Menu Handle. - * @param button True to enable the button, false to remove it. - * @return True if allowed; false on failure. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param button True to enable the button, false to remove it. + * @return True if allowed; false on failure. + * @error Invalid Handle. */ native bool SetMenuExitButton(Handle menu, bool button); /** - * Returns whether or not the menu has an "exit back" button. By default, - * menus do not have an exit back button. + * Returns whether or not the menu has an "exit back" button. By default, + * menus do not have an exit back button. * - * Exit Back buttons appear as "Back" on page 1 of paginated menus and have + * Exit Back buttons appear as "Back" on page 1 of paginated menus and have * functionality defined by the user in MenuEnd_ExitBack. * - * @param menu Menu Handle. - * @return True if the menu has an exit back button; false otherwise. - * @error Invalid Handle. + * @param menu Menu Handle. + * @return True if the menu has an exit back button; false otherwise. + * @error Invalid Handle. */ native bool GetMenuExitBackButton(Handle menu); /** - * Sets whether or not the menu has an "exit back" button. By default, menus + * Sets whether or not the menu has an "exit back" button. By default, menus * do not have an exit back button. * - * Exit Back buttons appear as "Back" on page 1 of paginated menus and have + * Exit Back buttons appear as "Back" on page 1 of paginated menus and have * functionality defined by the user in MenuEnd_ExitBack. * - * @param menu Menu Handle. - * @param button True to enable the button, false to remove it. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param button True to enable the button, false to remove it. + * @error Invalid Handle. */ native void SetMenuExitBackButton(Handle menu, bool button); @@ -694,10 +727,10 @@ native void SetMenuExitBackButton(Handle menu, bool button); * Sets whether or not the menu has a "no vote" button in slot 1. * By default, menus do not have a no vote button. * - * @param menu Menu Handle. - * @param button True to enable the button, false to remove it. - * @return True if allowed; false on failure. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param button True to enable the button, false to remove it. + * @return True if allowed; false on failure. + * @error Invalid Handle. */ native bool SetMenuNoVoteButton(Handle menu, bool button); @@ -711,17 +744,17 @@ native bool SetMenuNoVoteButton(Handle menu, bool button); * * If any vote is in progress on a menu, it will be cancelled. * - * @param menu Menu Handle. - * @error Invalid Handle. + * @param menu Menu Handle. + * @error Invalid Handle. */ native void CancelMenu(Handle menu); /** * Retrieves a menu's option flags. * - * @param menu Menu Handle. - * @return A bitstring of MENUFLAG bits. - * @error Invalid Handle. + * @param menu Menu Handle. + * @return A bitstring of MENUFLAG bits. + * @error Invalid Handle. */ native int GetMenuOptionFlags(Handle menu); @@ -732,61 +765,61 @@ native int GetMenuOptionFlags(Handle menu); * See SetMenuExitButton() for information on Exit buttons. * See SetMenuExitBackButton() for information on Exit Back buttons. * - * @param menu Menu Handle. - * @param flags A new bitstring of MENUFLAG bits. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param flags A new bitstring of MENUFLAG bits. + * @error Invalid Handle. */ native void SetMenuOptionFlags(Handle menu, int flags); /** * Returns whether a vote is in progress. * - * @param menu Deprecated; no longer used. - * @return True if a vote is in progress, false otherwise. + * @param menu Deprecated; no longer used. + * @return True if a vote is in progress, false otherwise. */ native bool IsVoteInProgress(Handle menu=INVALID_HANDLE); /** * Cancels the vote in progress. * - * @error If no vote is in progress. + * @error If no vote is in progress. */ native void CancelVote(); /** - * Broadcasts a menu to a list of clients. The most selected item will be - * returned through MenuAction_End. On a tie, a random item will be returned + * Broadcasts a menu to a list of clients. The most selected item will be + * returned through MenuAction_End. On a tie, a random item will be returned * from a list of the tied items. * * Note that MenuAction_VoteEnd and MenuAction_VoteStart are both * default callbacks and do not need to be enabled. * - * @param menu Menu Handle. - * @param clients Array of clients to broadcast to. - * @param numClients Number of clients in the array. - * @param time Maximum time to leave menu on the screen. - * @param flags Optional voting flags. - * @return True on success, false if this menu already has a vote session - * in progress. - * @error Invalid Handle, or a vote is already in progress. + * @param menu Menu Handle. + * @param clients Array of clients to broadcast to. + * @param numClients Number of clients in the array. + * @param time Maximum time to leave menu on the screen. + * @param flags Optional voting flags. + * @return True on success, false if this menu already has a vote session + * in progress. + * @error Invalid Handle, or a vote is already in progress. */ native bool VoteMenu(Handle menu, int[] clients, int numClients, int time, int flags=0); /** * Sends a vote menu to all clients. See VoteMenu() for more information. * - * @param menu Menu Handle. - * @param time Maximum time to leave menu on the screen. - * @param flags Optional voting flags. - * @return True on success, false if this menu already has a vote session - * in progress. - * @error Invalid Handle. + * @param menu Menu Handle. + * @param time Maximum time to leave menu on the screen. + * @param flags Optional voting flags. + * @return True on success, false if this menu already has a vote session + * in progress. + * @error Invalid Handle. */ stock bool VoteMenuToAll(Handle menu, int time, int flags=0) { int total; int[] players = new int[MaxClients]; - + for (int i=1; i<=MaxClients; i++) { if (!IsClientInGame(i) || IsFakeClient(i)) @@ -795,20 +828,20 @@ stock bool VoteMenuToAll(Handle menu, int time, int flags=0) } players[total++] = i; } - + return VoteMenu(menu, players, total, time, flags); } /** * Callback for when a vote has ended and results are available. * - * @param menu The menu being voted on. - * @param num_votes Number of votes tallied in total. - * @param num_clients Number of clients who could vote. - * @param client_info Array of clients. Use VOTEINFO_CLIENT_ defines. - * @param num_items Number of unique items that were selected. - * @param item_info Array of items, sorted by count. Use VOTEINFO_ITEM - * defines. + * @param menu The menu being voted on. + * @param num_votes Number of votes tallied in total. + * @param num_clients Number of clients who could vote. + * @param client_info Array of clients. Use VOTEINFO_CLIENT_ defines. + * @param num_items Number of unique items that were selected. + * @param item_info Array of items, sorted by count. Use VOTEINFO_ITEM + * defines. */ typeset VoteHandler { @@ -837,9 +870,9 @@ typeset VoteHandler * Sets an advanced vote handling callback. If this callback is set, * MenuAction_VoteEnd will not be called. * - * @param menu Menu Handle. - * @param callback Callback function. - * @error Invalid Handle or callback. + * @param menu Menu Handle. + * @param callback Callback function. + * @error Invalid Handle or callback. */ native void SetVoteResultCallback(Handle menu, VoteHandler callback); @@ -848,113 +881,113 @@ native void SetVoteResultCallback(Handle menu, VoteHandler callback); * a publicly invocable menu. This number is the time remaining until * (last_vote + sm_vote_delay). * - * @return Number of seconds to wait, or 0 for none. + * @return Number of seconds to wait, or 0 for none. */ native int CheckVoteDelay(); /** - * Returns whether a client is in the pool of clients allowed - * to participate in the current vote. This is determined by + * Returns whether a client is in the pool of clients allowed + * to participate in the current vote. This is determined by * the client list passed to VoteMenu(). * - * @param client Client index. - * @return True if client is allowed to vote, false otherwise. - * @error If no vote is in progress or client index is invalid. + * @param client Client index. + * @return True if client is allowed to vote, false otherwise. + * @error If no vote is in progress or client index is invalid. */ native bool IsClientInVotePool(int client); /** * Redraws the current vote menu to a client in the voting pool. * - * @param client Client index. - * @param revotes True to allow revotes, false otherwise. - * @return True on success, false if the client is in the vote pool - * but cannot vote again. - * @error No vote in progress, int client is not in the voting pool, - * or client index is invalid. + * @param client Client index. + * @param revotes True to allow revotes, false otherwise. + * @return True on success, false if the client is in the vote pool + * but cannot vote again. + * @error No vote in progress, int client is not in the voting pool, + * or client index is invalid. */ native bool RedrawClientVoteMenu(int client, bool revotes=true); /** * Returns a style's global Handle. * - * @param style Menu Style. - * @return A Handle, or INVALID_HANDLE if not found or unusable. + * @param style Menu Style. + * @return A Handle, or INVALID_HANDLE if not found or unusable. */ native Handle GetMenuStyleHandle(MenuStyle style); /** - * Creates a MenuPanel from a MenuStyle. Panels are used for drawing raw + * Creates a MenuPanel from a MenuStyle. Panels are used for drawing raw * menus without any extra helper functions. The Handle must be closed * with CloseHandle(). * - * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. - * @return A new MenuPanel Handle. - * @error Invalid Handle other than INVALID_HANDLE. + * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. + * @return A new MenuPanel Handle. + * @error Invalid Handle other than INVALID_HANDLE. */ native Panel CreatePanel(Handle hStyle=INVALID_HANDLE); -/** - * Creates a Menu from a MenuStyle. The Handle must be closed with +/** + * Creates a Menu from a MenuStyle. The Handle must be closed with * CloseHandle(). * - * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. - * @param handler Function which will receive menu actions. - * @param actions Optionally set which actions to receive. Select, - * Cancel, and End will always be received regardless - * of whether they are set or not. They are also - * the only default actions. - * @return A new menu Handle. - * @error Invalid Handle other than INVALID_HANDLE. + * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. + * @param handler Function which will receive menu actions. + * @param actions Optionally set which actions to receive. Select, + * Cancel, and End will always be received regardless + * of whether they are set or not. They are also + * the only default actions. + * @return A new menu Handle. + * @error Invalid Handle other than INVALID_HANDLE. */ native Menu CreateMenuEx(Handle hStyle=INVALID_HANDLE, MenuHandler handler, MenuAction actions=MENU_ACTIONS_DEFAULT); /** * Returns whether a client is viewing a menu. * - * @param client Client index. - * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. - * @return A MenuSource value. - * @error Invalid Handle other than null. + * @param client Client index. + * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. + * @return A MenuSource value. + * @error Invalid Handle other than null. */ native MenuSource GetClientMenu(int client, Handle hStyle=null); -/** +/** * Cancels a menu on a client. This will only affect non-external menus. * - * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. - * @param client Client index. - * @param autoIgnore If true, no menus can be re-drawn on the client during - * the cancellation process. - * @return True if a menu was cancelled, false otherwise. + * @param client Client index. + * @param autoIgnore If true, no menus can be re-drawn on the client during + * the cancellation process. + * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. + * @return True if a menu was cancelled, false otherwise. */ native bool CancelClientMenu(int client, bool autoIgnore=false, Handle hStyle=INVALID_HANDLE); /** * Returns a style's maximum items per page. * - * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. - * @return Maximum items per page. - * @error Invalid Handle other than INVALID_HANDLE. + * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style. + * @return Maximum items per page. + * @error Invalid Handle other than INVALID_HANDLE. */ native int GetMaxPageItems(Handle hStyle=INVALID_HANDLE); /** * Returns a MenuPanel's parent style. * - * @param panel A MenuPanel Handle. - * @return The MenuStyle Handle that created the panel. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @return The MenuStyle Handle that created the panel. + * @error Invalid Handle. */ native Handle GetPanelStyle(Handle panel); /** * Sets the panel's title. * - * @param panel A MenuPanel Handle. - * @param text Text to set as the title. - * @param onlyIfEmpty If true, the title will only be set if no title is set. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @param text Text to set as the title. + * @param onlyIfEmpty If true, the title will only be set if no title is set. + * @error Invalid Handle. */ native void SetPanelTitle(Handle panel, const char[] text, bool onlyIfEmpty=false); @@ -962,24 +995,24 @@ native void SetPanelTitle(Handle panel, const char[] text, bool onlyIfEmpty=fals * Draws an item on a panel. If the item takes up a slot, the position * is returned. * - * @param panel A MenuPanel Handle. - * @param text Display text to use. If not a raw line, - * the style may automatically add color markup. - * No numbering or newlines are needed. - * @param style ITEMDRAW style flags. - * @return A slot position, or 0 if item was a rawline or could not be drawn. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @param text Display text to use. If not a raw line, + * the style may automatically add color markup. + * No numbering or newlines are needed. + * @param style ITEMDRAW style flags. + * @return A slot position, or 0 if item was a rawline or could not be drawn. + * @error Invalid Handle. */ native int DrawPanelItem(Handle panel, const char[] text, int style=ITEMDRAW_DEFAULT); /** * Draws a raw line of text on a panel, without any markup other than a newline. * - * @param panel A MenuPanel Handle, or INVALID_HANDLE if inside a - * MenuAction_DisplayItem callback. - * @param text Display text to use. - * @return True on success, false if raw lines are not supported. - * @error Invalid Handle. + * @param panel A MenuPanel Handle, or INVALID_HANDLE if inside a + * MenuAction_DisplayItem callback. + * @param text Display text to use. + * @return True on success, false if raw lines are not supported. + * @error Invalid Handle. */ native bool DrawPanelText(Handle panel, const char[] text); @@ -987,28 +1020,28 @@ native bool DrawPanelText(Handle panel, const char[] text); * Returns whether or not the given drawing flags are supported by * the menu style. * - * @param panel A MenuPanel Handle. - * @param style ITEMDRAW style flags. - * @return True if item is drawable, false otherwise. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @param style ITEMDRAW style flags. + * @return True if item is drawable, false otherwise. + * @error Invalid Handle. */ native bool CanPanelDrawFlags(Handle panel, int style); /** * Sets the selectable key map of a panel. This is not supported by - * all styles (only by Radio, as of this writing). + * all styles (only by Radio, as of this writing). * - * @param panel A MenuPanel Handle. - * @param keys An integer where each bit N allows key - * N+1 to be selected. If no keys are selectable, - * then key 0 (bit 9) is automatically set. - * @return True if supported, false otherwise. + * @param panel A MenuPanel Handle. + * @param keys An integer where each bit N allows key + * N+1 to be selected. If no keys are selectable, + * then key 0 (bit 9) is automatically set. + * @return True if supported, false otherwise. */ native bool SetPanelKeys(Handle panel, int keys); /** * Sends a panel to a client. Unlike full menus, the handler - * function will only receive the following actions, both of + * function will only receive the following actions, both of * which will have INVALID_HANDLE for a menu, and the client * as param1. * @@ -1017,35 +1050,35 @@ native bool SetPanelKeys(Handle panel, int keys); * * Also, if the menu fails to display, no callbacks will be called. * - * @param panel A MenuPanel Handle. - * @param client A client to draw to. - * @param handler The MenuHandler function to catch actions with. - * @param time Time to hold the menu for. - * @return True on success, false on failure. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @param client A client to draw to. + * @param handler The MenuHandler function to catch actions with. + * @param time Time to hold the menu for. + * @return True on success, false on failure. + * @error Invalid Handle. */ native bool SendPanelToClient(Handle panel, int client, MenuHandler handler, int time); /** - * @brief Returns the amount of text the menu can still hold. If this is - * limit is reached or overflowed, the text is silently truncated. + * @brief Returns the amount of text the menu can still hold. If this is + * limit is reached or overflowed, the text is silently truncated. * * Radio menus: Currently 511 characters (512 bytes). * Valve menus: Currently -1 (no meaning). * - * @param panel A MenuPanel Handle. - * @return Number of characters that the menu can still hold, - * or -1 if there is no known limit. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @return Number of characters that the menu can still hold, + * or -1 if there is no known limit. + * @error Invalid Handle. */ native int GetPanelTextRemaining(Handle panel); /** * @brief Returns the current key position. * - * @param panel A MenuPanel Handle. - * @return Current key position starting at 1. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @return Current key position starting at 1. + * @error Invalid Handle. */ native int GetPanelCurrentKey(Handle panel); @@ -1053,48 +1086,48 @@ native int GetPanelCurrentKey(Handle panel); * @brief Sets the next key position. This cannot be used * to traverse backwards. * - * @param panel A MenuPanel Handle. - * @param key Key that is greater or equal to - * GetPanelCurrentKey(). - * @return True on success, false otherwise. - * @error Invalid Handle. + * @param panel A MenuPanel Handle. + * @param key Key that is greater or equal to + * GetPanelCurrentKey(). + * @return True on success, false otherwise. + * @error Invalid Handle. */ native bool SetPanelCurrentKey(Handle panel, int key); /** * @brief Redraws menu text from inside a MenuAction_DisplayItem callback. - * - * @param text Menu text to draw. - * @return Item position; must be returned via the callback. + * + * @param text Menu text to draw. + * @return Item position; must be returned via the callback. */ native int RedrawMenuItem(const char[] text); /** - * This function is provided for legacy code only. Some older plugins may use - * network messages instead of the panel API. This function wraps the panel - * API for eased portability into the SourceMod menu system. + * This function is provided for legacy code only. Some older plugins may use + * network messages instead of the panel API. This function wraps the panel + * API for eased portability into the SourceMod menu system. * - * This function is only usable with the Radio Menu style. You do not need to - * split up your menu into multiple packets; SourceMod will break the string + * This function is only usable with the Radio Menu style. You do not need to + * split up your menu into multiple packets; SourceMod will break the string * up internally. * - * @param client Client index. - * @param str Full menu string as would be passed over the network. - * @param time Time to hold the menu for. - * @param keys Selectable key bitstring. - * @param handler Optional handler function, with the same rules as - * SendPanelToClient(). - * @return True on success, false on failure. - * @error Invalid client index, or radio menus not supported. + * @param client Client index. + * @param str Full menu string as would be passed over the network. + * @param time Time to hold the menu for. + * @param keys Selectable key bitstring. + * @param handler Optional handler function, with the same rules as + * SendPanelToClient(). + * @return True on success, false on failure. + * @error Invalid client index, or radio menus not supported. */ native bool InternalShowMenu(int client, const char[] str, int time, int keys=-1, MenuHandler handler=INVALID_FUNCTION); /** * Retrieves voting information from MenuAction_VoteEnd. * - * @param param2 Second parameter of MenuAction_VoteEnd. - * @param winningVotes Number of votes received by the winning option. - * @param totalVotes Number of total votes received. + * @param param2 Second parameter of MenuAction_VoteEnd. + * @param winningVotes Number of votes received by the winning option. + * @param totalVotes Number of total votes received. */ stock void GetMenuVoteInfo(int param2, int &winningVotes, int &totalVotes) { @@ -1103,12 +1136,12 @@ stock void GetMenuVoteInfo(int param2, int &winningVotes, int &totalVotes) } /** - * Quick stock to determine whether voting is allowed. This doesn't let you - * fine-tune a reason for not voting, so it's not recommended for lazily + * Quick stock to determine whether voting is allowed. This doesn't let you + * fine-tune a reason for not voting, so it's not recommended for lazily * telling clients that voting isn't allowed. - * - * @return True if voting is allowed, false if voting is in progress - * or the cooldown is active. + * + * @return True if voting is allowed, false if voting is in progress + * or the cooldown is active. */ stock bool IsNewVoteAllowed() { @@ -1116,6 +1149,6 @@ stock bool IsNewVoteAllowed() { return false; } - + return true; } diff --git a/env/include/nextmap.inc b/env/include/nextmap.inc index e61e7b8..1039e25 100644 --- a/env/include/nextmap.inc +++ b/env/include/nextmap.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,52 +31,52 @@ */ #if defined _nextmap_included_ - #endinput + #endinput #endif #define _nextmap_included_ /** - * Sets SourceMod's internal nextmap. + * Sets SourceMod's internal nextmap. * Equivalent to changing sm_nextmap but with an added validity check. * - * @param map Next map to set. - * @return True if the nextmap was set, false if map was invalid. + * @param map Next map to set. + * @return True if the nextmap was set, false if map was invalid. */ native bool SetNextMap(const char[] map); /** * Returns SourceMod's internal nextmap. * - * @param map Buffer to store the nextmap name. - * @param maxlen Maximum length of the map buffer. - * @return True if a Map was found and copied, false if no nextmap is set (map will be unchanged). + * @param map Buffer to store the nextmap name. + * @param maxlen Maximum length of the map buffer. + * @return True if a Map was found and copied, false if no nextmap is set (map will be unchanged). */ native bool GetNextMap(char[] map, int maxlen); /** * Changes the current map and records the reason for the change with maphistory * - * @param map Map to change to. - * @param reason Reason for change. + * @param map Map to change to. + * @param reason Reason for change. */ native void ForceChangeLevel(const char[] map, const char[] reason); /** * Gets the current number of maps in the map history * - * @return Number of maps. + * @return Number of maps. */ native int GetMapHistorySize(); /** * Retrieves a map from the map history list. - * - * @param item Item number. Must be 0 or greater and less than GetMapHistorySize(). - * @param map Buffer to store the map name. - * @param mapLen Length of map buffer. - * @param reason Buffer to store the change reason. - * @param reasonLen Length of the reason buffer. - * @param startTime Time the map started. - * @error Invalid item number. + * + * @param item Item number. Must be 0 or greater and less than GetMapHistorySize(). + * @param map Buffer to store the map name. + * @param mapLen Length of map buffer. + * @param reason Buffer to store the change reason. + * @param reasonLen Length of the reason buffer. + * @param startTime Time the map started. + * @error Invalid item number. */ native void GetMapHistory(int item, char[] map, int mapLen, char[] reason, int reasonLen, int &startTime); diff --git a/env/include/profiler.inc b/env/include/profiler.inc index 82c2498..df5b956 100644 --- a/env/include/profiler.inc +++ b/env/include/profiler.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2018 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -38,28 +38,54 @@ /** * ONLY AVAILABLE ON WINDOWS RIGHT NOW K. */ - + +methodmap Profiler < Handle +{ + // Creates a new profile object. The Handle must be freed + // using delete or CloseHandle(). + // + // @return A new Profiler Handle. + public native Profiler(); + + // Starts a cycle for profiling. + public native void Start(); + + // Stops a cycle for profiling. + // + // @error Profiler was never started. + public native void Stop(); + + // Returns the amount of high-precision time in seconds + // that passed during the profiler's last start/stop + // cycle. + // + // @return Time elapsed in seconds. + property float Time { + public native get(); + } +}; + /** * Creates a new profile object. The Handle must be freed - * using CloseHandle(). + * using delete or CloseHandle(). * - * @return Handle to the profiler object. + * @return Handle to the profiler object. */ -native Handle CreateProfiler(); +native Profiler CreateProfiler(); /** * Starts profiling. * - * @param prof Profiling object. - * @error Invalid Handle. + * @param prof Profiling object. + * @error Invalid Handle. */ native void StartProfiling(Handle prof); /** * Stops profiling. * - * @param prof Profiling object. - * @error Invalid Handle or profiling was never started. + * @param prof Profiling object. + * @error Invalid Handle or profiling was never started. */ native void StopProfiling(Handle prof); @@ -68,9 +94,9 @@ native void StopProfiling(Handle prof); * that passed during the profiler's last start/stop * cycle. * - * @param prof Profiling object. - * @return Time elapsed in seconds. - * @error Invalid Handle. + * @param prof Profiling object. + * @return Time elapsed in seconds. + * @error Invalid Handle. */ native float GetProfilerTime(Handle prof); diff --git a/env/include/protobuf.inc b/env/include/protobuf.inc index 9e692b0..80c4337 100644 --- a/env/include/protobuf.inc +++ b/env/include/protobuf.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,9 +29,9 @@ * * Version: $Id$ */ - + #if defined _protobuf_included -#endinput + #endinput #endif #define _protobuf_included @@ -40,13 +40,21 @@ methodmap Protobuf < Handle { // Reads an int32, uint32, sint32, fixed32, sfixed32, or enum value from a protobuf message. - // + // // @param field Field name. // @param index Index into repeated field. // @return Integer value read. // @error Non-existent field, or incorrect field type. public native int ReadInt(const char[] field, int index = PB_FIELD_NOT_REPEATED); + // Reads an int64, uint64, sint64, fixed64, sfixed64 from a protobuf message. + // + // @param field Field name. + // @param value Array to represent the large integer (0=High bits, 1=Low bits). + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void ReadInt64(const char[] field, int value[2], int index = PB_FIELD_NOT_REPEATED); + // Reads a float or downcasted double from a protobuf message. // // @param field Field name. @@ -56,7 +64,7 @@ methodmap Protobuf < Handle public native float ReadFloat(const char[] field, int index = PB_FIELD_NOT_REPEATED); // Reads a bool from a protobuf message. - // + // // @param field Field name. // @param index Index into repeated field. // @return Boolean value read. @@ -64,7 +72,7 @@ methodmap Protobuf < Handle public native bool ReadBool(const char[] field, int index = PB_FIELD_NOT_REPEATED); // Reads a string from a protobuf message. - // + // // @param field Field name. // @param buffer Destination string buffer. // @param maxlength Maximum length of output string buffer. @@ -73,7 +81,7 @@ methodmap Protobuf < Handle public native void ReadString(const char[] field, char[] buffer, int maxlength, int index = PB_FIELD_NOT_REPEATED); // Reads an RGBA color value from a protobuf message. - // + // // @param field Field name. // @param buffer Destination color buffer. // @param index Index into repeated field. @@ -89,7 +97,7 @@ methodmap Protobuf < Handle public native void ReadAngle(const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); // Reads an XYZ vector value from a protobuf message. - // + // // @param pb protobuf handle. // @param field Field name. // @param buffer Destination vector buffer. @@ -109,16 +117,31 @@ methodmap Protobuf < Handle // // @param field Field name. // @return Number of elements in the field. - // @error Non-existent field, or incorrect field type. + // @error Non-existent field, or non-repeated field. public native int GetRepeatedFieldCount(const char[] field); + // Returns whether or not the named, non-repeated field has a value set. + // + // @param field Field name. + // @return True if value has been set, else false. + // @error Non-existent field, or repeated field. + public native bool HasField(const char[] field); + // Sets an int32, uint32, sint32, fixed32, sfixed32, or enum value on a protobuf message. // // @param field Field name. // @param value Integer value to set. // @param index Index into repeated field. // @error Non-existent field, or incorrect field type. - public native int SetInt(const char[] field, int value, int index = PB_FIELD_NOT_REPEATED); + public native void SetInt(const char[] field, int value, int index = PB_FIELD_NOT_REPEATED); + + // Sets an int64, uint64, sint64, fixed64, sfixed64 on a protobuf message. + // + // @param field Field name. + // @param value Large integer value to set (0=High bits, 1=Low bits). + // @param index Index into repeated field. + // @error Non-existent field, or incorrect field type. + public native void SetInt64(const char[] field, int value[2], int index = PB_FIELD_NOT_REPEATED); // Sets a float or double on a protobuf message. // @@ -129,7 +152,7 @@ methodmap Protobuf < Handle public native void SetFloat(const char[] field, float value, int index = PB_FIELD_NOT_REPEATED); // Sets a bool on a protobuf message. - // + // // @param field Field name. // @param value Boolean value to set. // @param index Index into repeated field. @@ -145,7 +168,7 @@ methodmap Protobuf < Handle public native void SetString(const char[] field, const char[] value, int index = PB_FIELD_NOT_REPEATED); // Sets an RGBA color on a protobuf message. - // + // // @param field Field name. // @param color Color value to set. // @param index Index into repeated field. @@ -153,7 +176,7 @@ methodmap Protobuf < Handle public native void SetColor(const char[] field, const int color[4], int index = PB_FIELD_NOT_REPEATED); // Sets an XYZ angle on a protobuf message. - // + // // @param field Field name. // @param angle Angle value to set. // @param index Index into repeated field. @@ -161,7 +184,7 @@ methodmap Protobuf < Handle public native void SetAngle(const char[] field, const float angle[3], int index = PB_FIELD_NOT_REPEATED); // Sets an XYZ vector on a protobuf message. - // + // // @param field Field name. // @param vec Vector value to set. // @param index Index into repeated field. @@ -183,8 +206,15 @@ methodmap Protobuf < Handle // @error Non-existent field, or incorrect field type. public native void AddInt(const char[] field, int value); + // Add an int64, uint64, sint64, fixed64, sfixed64 to a protobuf message repeated field. + // + // @param field Field name. + // @param value Large integer value to add (0=High bits, 1=Low bits). + // @error Non-existent field, or incorrect field type. + public native void AddInt64(const char[] field, int value[2]); + // Add a float or double to a protobuf message repeated field. - // + // // @param field Field name. // @param value Float value to add. // @error Non-existent field, or incorrect field type. @@ -205,14 +235,14 @@ methodmap Protobuf < Handle public native void AddString(const char[] field, const char[] value); // Add an RGBA color to a protobuf message repeated field. - // + // // @param field Field name. // @param color Color value to add. // @error Non-existent field, or incorrect field type. public native void AddColor(const char[] field, const int color[4]); // Add an XYZ angle to a protobuf message repeated field. - // + // // @param field Field name. // @param angle Angle value to add. // @error Non-existent field, or incorrect field type. @@ -266,307 +296,307 @@ methodmap Protobuf < Handle /** * Reads an int32, uint32, sint32, fixed32, sfixed32, or enum value from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param index Index into repeated field. - * @return Integer value read. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param index Index into repeated field. + * @return Integer value read. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native int PbReadInt(Handle pb, const char[] field, int index = PB_FIELD_NOT_REPEATED); /** * Reads a float or downcasted double from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param index Index into repeated field. - * @return Float value read. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param index Index into repeated field. + * @return Float value read. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native float PbReadFloat(Handle pb, const char[] field, int index = PB_FIELD_NOT_REPEATED); /** * Reads a bool from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param index Index into repeated field. - * @return Boolean value read. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param index Index into repeated field. + * @return Boolean value read. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native bool PbReadBool(Handle pb, const char[] field, int index = PB_FIELD_NOT_REPEATED); /** * Reads a string from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbReadString(Handle pb, const char[] field, char[] buffer, int maxlength, int index = PB_FIELD_NOT_REPEATED); /** * Reads an RGBA color value from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param buffer Destination color buffer. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param buffer Destination color buffer. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbReadColor(Handle pb, const char[] field, int buffer[4], int index = PB_FIELD_NOT_REPEATED); /** * Reads an XYZ angle value from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param buffer Destination angle buffer. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param buffer Destination angle buffer. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbReadAngle(Handle pb, const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); /** * Reads an XYZ vector value from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param buffer Destination vector buffer. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param buffer Destination vector buffer. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbReadVector(Handle pb, const char[] field, float buffer[3], int index = PB_FIELD_NOT_REPEATED); /** * Reads an XY vector value from a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param buffer Destination vector buffer. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param buffer Destination vector buffer. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbReadVector2D(Handle pb, const char[] field, float buffer[2], int index = PB_FIELD_NOT_REPEATED); /** * Gets the number of elements in a repeated field of a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @return Number of elements in the field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @return Number of elements in the field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native int PbGetRepeatedFieldCount(Handle pb, const char[] field); /** * Sets an int32, uint32, sint32, fixed32, sfixed32, or enum value on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param value Integer value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value Integer value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetInt(Handle pb, const char[] field, int value, int index = PB_FIELD_NOT_REPEATED); /** * Sets a float or double on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param value Float value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value Float value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetFloat(Handle pb, const char[] field, float value, int index = PB_FIELD_NOT_REPEATED); /** * Sets a bool on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param value Boolean value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value Boolean value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetBool(Handle pb, const char[] field, bool value, int index = PB_FIELD_NOT_REPEATED); /** * Sets a string on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param value String value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value String value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetString(Handle pb, const char[] field, const char[] value, int index = PB_FIELD_NOT_REPEATED); /** * Sets an RGBA color on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param color Color value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param color Color value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetColor(Handle pb, const char[] field, const int color[4], int index = PB_FIELD_NOT_REPEATED); /** * Sets an XYZ angle on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param angle Angle value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param angle Angle value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetAngle(Handle pb, const char[] field, const float angle[3], int index = PB_FIELD_NOT_REPEATED); /** * Sets an XYZ vector on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param vec Vector value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param vec Vector value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetVector(Handle pb, const char[] field, const float vec[3], int index = PB_FIELD_NOT_REPEATED); /** * Sets an XY vector on a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @param vec Vector value to set. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param vec Vector value to set. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbSetVector2D(Handle pb, const char[] field, const float vec[2], int index = PB_FIELD_NOT_REPEATED); /** * Add an int32, uint32, sint32, fixed32, sfixed32, or enum value to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param value Integer value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value Integer value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddInt(Handle pb, const char[] field, int value); /** * Add a float or double to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param value Float value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value Float value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddFloat(Handle pb, const char[] field, float value); /** * Add a bool to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param value Boolean value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value Boolean value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddBool(Handle pb, const char[] field, bool value); /** * Add a string to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param value String value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param value String value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddString(Handle pb, const char[] field, const char[] value); /** * Add an RGBA color to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param color Color value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param color Color value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddColor(Handle pb, const char[] field, const int color[4]); /** * Add an XYZ angle to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param angle Angle value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param angle Angle value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddAngle(Handle pb, const char[] field, const float angle[3]); /** * Add an XYZ vector to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param vec Vector value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param vec Vector value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddVector(Handle pb, const char[] field, const float vec[3]); /** * Add an XY vector to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param vec Vector value to add. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + * @param pb protobuf handle. + * @param field Field name. + * @param vec Vector value to add. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. */ native void PbAddVector2D(Handle pb, const char[] field, const float vec[2]); /** * Removes a value by index from a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param index Index into repeated field. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. - */ + * @param pb protobuf handle. + * @param field Field name. + * @param index Index into repeated field. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + */ native void PbRemoveRepeatedFieldValue(Handle pb, const char[] field, int index); /** * Retrieve a handle to an embedded protobuf message in a protobuf message. * - * @param pb protobuf handle. - * @param field Field name. - * @return protobuf handle to embedded message. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. - */ + * @param pb protobuf handle. + * @param field Field name. + * @return protobuf handle to embedded message. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + */ native Handle PbReadMessage(Handle pb, const char[] field); /** * Retrieve a handle to an embedded protobuf message in a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @param index Index in the repeated field. - * @return protobuf handle to embedded message. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. - */ + * @param pb protobuf handle. + * @param field Field name. + * @param index Index in the repeated field. + * @return protobuf handle to embedded message. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + */ native Handle PbReadRepeatedMessage(Handle pb, const char[] field, int index); /** * Adds an embedded protobuf message to a protobuf message repeated field. * - * @param pb protobuf handle. - * @param field Field name. - * @return protobuf handle to added, embedded message. - * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. - */ + * @param pb protobuf handle. + * @param field Field name. + * @return protobuf handle to added, embedded message. + * @error Invalid or incorrect Handle, non-existent field, or incorrect field type. + */ native Handle PbAddMessage(Handle pb, const char[] field); diff --git a/env/include/regex.inc b/env/include/regex.inc index d926216..88ae11e 100644 --- a/env/include/regex.inc +++ b/env/include/regex.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,12 +31,12 @@ */ #if defined _regex_included - #endinput + #endinput #endif #define _regex_included /** - * @section Flags for compiling regex expressions. These come directly from the + * @section Flags for compiling regex expressions. These come directly from the * pcre library and can be used in MatchRegex and CompileRegex. */ #define PCRE_CASELESS 0x00000001 /* Ignore Case */ @@ -44,12 +44,12 @@ #define PCRE_DOTALL 0x00000004 /* Single line (affects . so that it matches any character, even new line characters). */ #define PCRE_EXTENDED 0x00000008 /* Pattern extension (ignore whitespace and # comments). */ #define PCRE_ANCHORED 0x00000010 /* Force pattern anchoring. */ -#define PCRE_DOLLAR_ENDONLY 0x00000020 /* $ not to match newline at end. */ +#define PCRE_DOLLAR_ENDONLY 0x00000020 /* $ not to match newline at end. */ #define PCRE_UNGREEDY 0x00000200 /* Invert greediness of quantifiers */ -#define PCRE_NOTEMPTY 0x00000400 /* An empty string is not a valid match. */ +#define PCRE_NOTEMPTY 0x00000400 /* An empty string is not a valid match. */ #define PCRE_UTF8 0x00000800 /* Use UTF-8 Chars */ #define PCRE_NO_UTF8_CHECK 0x00002000 /* Do not check the pattern for UTF-8 validity (only relevant if PCRE_UTF8 is set) */ -#define PCRE_UCP 0x20000000 /* Use Unicode properties for \ed, \ew, etc. */ +#define PCRE_UCP 0x20000000 /* Use Unicode properties for \ed, \ew, etc. */ /** @@ -57,8 +57,26 @@ */ enum RegexError { - REGEX_ERROR_NONE = 0, /* No error */ - REGEX_ERROR_NOMATCH = -1, /* No match was found */ + REGEX_ERROR_NONE = 0, /* No error */ + + REGEX_ERROR_ASSERT = 1, /* internal error ? */ + REGEX_ERROR_BADBR, /* invalid repeat counts in {} */ + REGEX_ERROR_BADPAT, /* pattern error */ + REGEX_ERROR_BADRPT, /* ? * + invalid */ + REGEX_ERROR_EBRACE, /* unbalanced {} */ + REGEX_ERROR_EBRACK, /* unbalanced [] */ + REGEX_ERROR_ECOLLATE, /* collation error - not relevant */ + REGEX_ERROR_ECTYPE, /* bad class */ + REGEX_ERROR_EESCAPE, /* bad escape sequence */ + REGEX_ERROR_EMPTY, /* empty expression */ + REGEX_ERROR_EPAREN, /* unbalanced () */ + REGEX_ERROR_ERANGE, /* bad range inside [] */ + REGEX_ERROR_ESIZE, /* expression too big */ + REGEX_ERROR_ESPACE, /* failed to get memory */ + REGEX_ERROR_ESUBREG, /* bad back reference */ + REGEX_ERROR_INVARG, /* bad argument */ + + REGEX_ERROR_NOMATCH = -1, /* No match was found */ REGEX_ERROR_NULL = -2, REGEX_ERROR_BADOPTION = -3, REGEX_ERROR_BADMAGIC = -4, @@ -66,7 +84,7 @@ enum RegexError REGEX_ERROR_NOMEMORY = -6, REGEX_ERROR_NOSUBSTRING = -7, REGEX_ERROR_MATCHLIMIT = -8, - REGEX_ERROR_CALLOUT = -9, /* Never used by PCRE itself */ + REGEX_ERROR_CALLOUT = -9, /* Never used by PCRE itself */ REGEX_ERROR_BADUTF8 = -10, REGEX_ERROR_BADUTF8_OFFSET = -11, REGEX_ERROR_PARTIAL = -12, @@ -79,7 +97,7 @@ enum RegexError REGEX_ERROR_DFA_WSSIZE = -19, REGEX_ERROR_DFA_RECURSE = -20, REGEX_ERROR_RECURSIONLIMIT = -21, - REGEX_ERROR_NULLWSLIMIT = -22, /* No longer actually used */ + REGEX_ERROR_NULLWSLIMIT = -22, /* No longer actually used */ REGEX_ERROR_BADNEWLINE = -23, REGEX_ERROR_BADOFFSET = -24, REGEX_ERROR_SHORTUTF8 = -25, @@ -89,7 +107,7 @@ enum RegexError REGEX_ERROR_BADENDIANNESS = -29, REGEX_ERROR_DFA_BADRESTART = -30, REGEX_ERROR_JIT_BADOPTION = -31, - REGEX_ERROR_BADLENGTH = -32, + REGEX_ERROR_BADLENGTH = -32 }; // Regular expression objects are used to match or decompose strings based on @@ -97,102 +115,139 @@ enum RegexError methodmap Regex < Handle { // Compile a regular expression. - // - // @param pattern The regular expression pattern. - // @param flags General flags for the regular expression. - // @param error Error message encountered, if applicable. - // @param maxLen Maximum string length of the error buffer. - // @param errcode Regex type error code encountered, if applicable. + // + // @param pattern The regular expression pattern. + // @param flags General flags for the regular expression. + // @param error Error message encountered, if applicable. + // @param maxLen Maximum string length of the error buffer. + // @param errcode Regex type error code encountered, if applicable. public native Regex(const char[] pattern, int flags = 0, char[] error="", int maxLen = 0, RegexError &errcode = REGEX_ERROR_NONE); // Matches a string against a pre-compiled regular expression pattern. - // - // @param str The string to check. - // @param regex Regex Handle from CompileRegex() - // @param ret Error code, if applicable. - // @return Number of substrings found or -1 on failure. - // - // @note Use the regex handle passed to this function to extract - // matches with GetRegexSubString(). - public native int Match(const char[] str, RegexError &ret = REGEX_ERROR_NONE); + // + // @param str The string to check. + // @param ret Error code, if applicable. + // @param offset Offset in the string to start searching from. MatchOffset returns the offset of the match. + // @return Number of captures found or -1 on failure. + // + // @note Use the regex handle passed to this function to extract + // matches with GetSubString(). + public native int Match(const char[] str, RegexError &ret = REGEX_ERROR_NONE, int offset = 0); + + // Gets all matches from a string against a pre-compiled regular expression pattern. + // + // @param str The string to check. + // @param ret Error code, if applicable. + // @return Number of matches found or -1 on failure. + // + // @note Use GetSubString() and loop from 0 -> totalmatches - 1. + public native int MatchAll(const char[] str, RegexError &ret = REGEX_ERROR_NONE); // Returns a matched substring from a regex handle. - // - // Substring ids start at 0 and end at substrings-1, where substrings is the - // number returned by Regex.Match. // - // @param regex The regex handle to extract data from. - // @param str_id The index of the expression to get - starts at 0, and ends at substrings - 1. - // @param buffer The buffer to set to the matching substring. - // @param maxlen The maximum string length of the buffer. - // @return True if a substring was found, False on fail/error - public native bool GetSubString(int str_id, char[] buffer, int maxlen); + // Substring ids start at 0 and end at captures-1, where captures is the + // number returned by Regex.Match or Regex.CaptureCount. + // + // @param str_id The index of the expression to get - starts at 0, and ends at captures - 1. + // @param buffer The buffer to set to the matching substring. + // @param maxlen The maximum string length of the buffer. + // @param match Match to get the captures for - starts at 0, and ends at MatchCount() -1 + // @return True if a substring was found, False on fail/error + // + // @note str_id = 0 is the full captured string, anything else is the capture group index. + // if Regex.Match is used match can only be 0 + public native bool GetSubString(int str_id, char[] buffer, int maxlen, int match = 0); + + // Returns number of matches + // + // When using Match this is always 1 or 0 (unless an error occured) + // @return Total number of matches found. + public native int MatchCount(); + + // Returns number of captures for a match + // + // @param match Match to get the number of captures for. Match starts at 0, and ends at MatchCount() -1 + // @return Number of captures in the match. + // + // @note Use GetSubString() and loop from 1 -> captures -1 for str_id to get all captures + public native int CaptureCount(int match = 0); + + // Returns the string offset of a match. + // + // @param match Match to get the offset of. Match starts at 0, and ends at MatchCount() -1 + // @return Offset of the match in the string. + public native int MatchOffset(int match = 0); }; /** - * Precompile a regular expression. Use this if you intend on using the + * Precompile a regular expression. Use this if you intend on using the * same expression multiple times. Pass the regex handle returned here to * MatchRegex to check for matches. * - * @param pattern The regular expression pattern. - * @param flags General flags for the regular expression. - * @param error Error message encountered, if applicable. - * @param maxLen Maximum string length of the error buffer. - * @param errcode Regex type error code encountered, if applicable. - * @return Valid regex handle on success, INVALID_HANDLE on failure. + * @param pattern The regular expression pattern. + * @param flags General flags for the regular expression. + * @param error Error message encountered, if applicable. + * @param maxLen Maximum string length of the error buffer. + * @param errcode Regex type error code encountered, if applicable. + * @return Valid regex handle on success, INVALID_HANDLE on failure. */ native Regex CompileRegex(const char[] pattern, int flags = 0, char[] error="", int maxLen = 0, RegexError &errcode = REGEX_ERROR_NONE); /** * Matches a string against a pre-compiled regular expression pattern. * - * @param str The string to check. - * @param regex Regex Handle from CompileRegex() - * @param ret Error code, if applicable. - * @return Number of substrings found or -1 on failure. + * @param regex Regex Handle from CompileRegex() + * @param str The string to check. + * @param ret Error code, if applicable. + * @return Number of captures found or -1 on failure. * - * @note Use the regex handle passed to this function to extract - * matches with GetRegexSubString(). + * @note Use the regex handle passed to this function to extract + * matches with GetRegexSubString(). */ native int MatchRegex(Handle regex, const char[] str, RegexError &ret = REGEX_ERROR_NONE); /** * Returns a matched substring from a regex handle. - * Substring ids start at 0 and end at substrings-1, where substrings is the number returned - * by MatchRegex + * Substring ids start at 0 and end at captures-1, where captures is the number returned + * by MatchRegex. + * + * @param regex The regex handle to extract data from. + * @param str_id The index of the expression to get - starts at 0, and ends at captures - 1. + * @param buffer The buffer to set to the matching substring. + * @param maxlen The maximum string length of the buffer. + * @return True if a substring was found, False on fail/error + * + * @note str_id = 0 is the full captured string, anything else is the capture group index. * - * @param regex The regex handle to extract data from. - * @param str_id The index of the expression to get - starts at 0, and ends at substrings - 1. - * @param buffer The buffer to set to the matching substring. - * @param maxlen The maximum string length of the buffer. - * @return True if a substring was found, False on fail/error */ native bool GetRegexSubString(Handle regex, int str_id, char[] buffer, int maxlen); /** * Matches a string against a regular expression pattern. * - * @note If you intend on using the same regular expression pattern - * multiple times, consider using CompileRegex and MatchRegex - * instead of making this function reparse the expression each time. + * @note If you intend on using the same regular expression pattern + * multiple times, consider using CompileRegex and MatchRegex + * instead of making this function reparse the expression each time. * - * @param str The string to check. - * @param pattern The regular expression pattern. - * @param flags General flags for the regular expression. - * @param error Error message, if applicable. - * @param maxLen Maximum length of the error buffer. - * @return Number of substrings found or -1 on failure. + * @param str The string to check. + * @param pattern The regular expression pattern. + * @param flags General flags for the regular expression. + * @param error Error message, if applicable. + * @param maxLen Maximum length of the error buffer. + * @return Number of substrings found or -1 on failure. */ stock int SimpleRegexMatch(const char[] str, const char[] pattern, int flags = 0, char[] error="", int maxLen = 0) { Regex regex = new Regex(pattern, flags, error, maxLen); if (!regex) - return -1; - + { + return -1; + } + int substrings = regex.Match(str); delete regex; - return substrings; + return substrings; } /** @@ -202,7 +257,7 @@ stock int SimpleRegexMatch(const char[] str, const char[] pattern, int flags = 0 /** * Do not edit below this line! */ -public Extension __ext_regex = +public Extension __ext_regex = { name = "Regex Extension", file = "regex.ext", @@ -217,3 +272,19 @@ public Extension __ext_regex = required = 0, #endif }; + +#if !defined REQUIRE_EXTENSIONS +public void __ext_regex_SetNTVOptional() +{ + MarkNativeAsOptional("CompileRegex"); + MarkNativeAsOptional("MatchRegex"); + MarkNativeAsOptional("GetRegexSubString"); + MarkNativeAsOptional("Regex.Regex"); + MarkNativeAsOptional("Regex.Match"); + MarkNativeAsOptional("Regex.MatchAll"); + MarkNativeAsOptional("Regex.GetSubString"); + MarkNativeAsOptional("Regex.MatchCount"); + MarkNativeAsOptional("Regex.CaptureCount"); + MarkNativeAsOptional("Regex.MatchOffset"); +} +#endif diff --git a/env/include/sdkhooks.inc b/env/include/sdkhooks.inc index f58c128..07c8d9c 100644 --- a/env/include/sdkhooks.inc +++ b/env/include/sdkhooks.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -35,45 +35,70 @@ // this is obviously _not_ a robust check, but it will solve most conflict and is clean #if !defined DMG_GENERIC -#define DMG_GENERIC 0 /**< generic damage was done */ -#define DMG_CRUSH (1 << 0) /**< crushed by falling or moving object. - NOTE: It's assumed crush damage is occurring as a result of physics collision, so no extra physics force is generated by crush damage. - DON'T use DMG_CRUSH when damaging entities unless it's the result of a physics collision. You probably want DMG_CLUB instead. */ -#define DMG_BULLET (1 << 1) /**< shot */ -#define DMG_SLASH (1 << 2) /**< cut, clawed, stabbed */ -#define DMG_BURN (1 << 3) /**< heat burned */ -#define DMG_VEHICLE (1 << 4) /**< hit by a vehicle */ -#define DMG_FALL (1 << 5) /**< fell too far */ -#define DMG_BLAST (1 << 6) /**< explosive blast damage */ -#define DMG_CLUB (1 << 7) /**< crowbar, punch, headbutt */ -#define DMG_SHOCK (1 << 8) /**< electric shock */ -#define DMG_SONIC (1 << 9) /**< sound pulse shockwave */ -#define DMG_ENERGYBEAM (1 << 10) /**< laser or other high energy beam */ -#define DMG_PREVENT_PHYSICS_FORCE (1 << 11) /**< Prevent a physics force */ -#define DMG_NEVERGIB (1 << 12) /**< with this bit OR'd in, no damage type will be able to gib victims upon death */ -#define DMG_ALWAYSGIB (1 << 13) /**< with this bit OR'd in, any damage type can be made to gib victims upon death. */ -#define DMG_DROWN (1 << 14) /**< Drowning */ -#define DMG_PARALYZE (1 << 15) /**< slows affected creature down */ -#define DMG_NERVEGAS (1 << 16) /**< nerve toxins, very bad */ -#define DMG_POISON (1 << 17) /**< blood poisoning - heals over time like drowning damage */ -#define DMG_RADIATION (1 << 18) /**< radiation exposure */ -#define DMG_DROWNRECOVER (1 << 19) /**< drowning recovery */ -#define DMG_ACID (1 << 20) /**< toxic chemicals or acid burns */ -#define DMG_SLOWBURN (1 << 21) /**< in an oven */ -#define DMG_REMOVENORAGDOLL (1 << 22) /**< with this bit OR'd in, no ragdoll will be created, and the target will be quietly removed. - use this to kill an entity that you've already got a server-side ragdoll for */ -#define DMG_PHYSGUN (1 << 23) /**< Hit by manipulator. Usually doesn't do any damage. */ -#define DMG_PLASMA (1 << 24) /**< Shot by Cremator */ -#define DMG_AIRBOAT (1 << 25) /**< Hit by the airboat's gun */ -#define DMG_DISSOLVE (1 << 26) /**< Dissolving! */ -#define DMG_BLAST_SURFACE (1 << 27) /**< A blast on the surface of water that cannot harm things underwater */ -#define DMG_DIRECT (1 << 28) -#define DMG_BUCKSHOT (1 << 29) /**< not quite a bullet. Little, rounder, different. */ +#define DMG_GENERIC 0 /**< generic damage was done */ +#define DMG_CRUSH (1 << 0) /**< crushed by falling or moving object. + NOTE: It's assumed crush damage is occurring as a result of physics collision, + so no extra physics force is generated by crush damage. + DON'T use DMG_CRUSH when damaging entities unless it's the result of a physics + collision. You probably want DMG_CLUB instead. */ +#define DMG_BULLET (1 << 1) /**< shot */ +#define DMG_SLASH (1 << 2) /**< cut, clawed, stabbed */ +#define DMG_BURN (1 << 3) /**< heat burned */ +#define DMG_VEHICLE (1 << 4) /**< hit by a vehicle */ +#define DMG_FALL (1 << 5) /**< fell too far */ +#define DMG_BLAST (1 << 6) /**< explosive blast damage */ +#define DMG_CLUB (1 << 7) /**< crowbar, punch, headbutt */ +#define DMG_SHOCK (1 << 8) /**< electric shock */ +#define DMG_SONIC (1 << 9) /**< sound pulse shockwave */ +#define DMG_ENERGYBEAM (1 << 10) /**< laser or other high energy beam */ +#define DMG_PREVENT_PHYSICS_FORCE (1 << 11) /**< Prevent a physics force */ +#define DMG_NEVERGIB (1 << 12) /**< with this bit OR'd in, no damage type will be able to gib victims upon death */ +#define DMG_ALWAYSGIB (1 << 13) /**< with this bit OR'd in, any damage type can be made to gib victims upon death. */ +#define DMG_DROWN (1 << 14) /**< Drowning */ +#define DMG_PARALYZE (1 << 15) /**< slows affected creature down */ +#define DMG_NERVEGAS (1 << 16) /**< nerve toxins, very bad */ +#define DMG_POISON (1 << 17) /**< blood poisoning - heals over time like drowning damage */ +#define DMG_RADIATION (1 << 18) /**< radiation exposure */ +#define DMG_DROWNRECOVER (1 << 19) /**< drowning recovery */ +#define DMG_ACID (1 << 20) /**< toxic chemicals or acid burns */ +#define DMG_SLOWBURN (1 << 21) /**< in an oven */ +#define DMG_REMOVENORAGDOLL (1 << 22) /**< with this bit OR'd in, no ragdoll will be created, and the target will be quietly removed. + use this to kill an entity that you've already got a server-side ragdoll for */ +#define DMG_PHYSGUN (1 << 23) /**< Hit by manipulator. Usually doesn't do any damage. */ +#define DMG_PLASMA (1 << 24) /**< Shot by Cremator */ +#define DMG_AIRBOAT (1 << 25) /**< Hit by the airboat's gun */ +#define DMG_DISSOLVE (1 << 26) /**< Dissolving! */ +#define DMG_BLAST_SURFACE (1 << 27) /**< A blast on the surface of water that cannot harm things underwater */ +#define DMG_DIRECT (1 << 28) +#define DMG_BUCKSHOT (1 << 29) /**< not quite a bullet. Little, rounder, different. */ #endif #if !defined DMG_CRIT - // TF2 crits and minicrits - #define DMG_CRIT DMG_ACID + #define DMG_CRIT DMG_ACID /**< TF2 crits and minicrits */ +#endif + +#if !defined DMG_RADIUS_MAX + #define DMG_RADIUS_MAX DMG_ENERGYBEAM /**< No damage falloff */ +#endif + +#if !defined DMG_NOCLOSEDISTANCEMOD + #define DMG_NOCLOSEDISTANCEMOD DMG_POISON /**< Don't do damage falloff too close */ +#endif + +#if !defined DMG_HALF_FALLOFF + #define DMG_HALF_FALLOFF DMG_RADIATION /**< 50% damage falloff */ +#endif + +#if !defined DMG_USEDISTANCEMOD + #define DMG_USEDISTANCEMOD DMG_SLOWBURN /**< Do damage falloff */ +#endif + +#if !defined DMG_IGNITE + #define DMG_IGNITE DMG_PLASMA /**< Ignite victim */ +#endif + +#if !defined DMG_USE_HITLOCATIONS + #define DMG_USE_HITLOCATIONS DMG_AIRBOAT /**< Do hit location damage (Like the sniperrifle and ambassador) */ #endif enum SDKHookType @@ -121,7 +146,7 @@ enum SDKHookType SDKHook_BlockedPost, SDKHook_OnTakeDamageAlive, SDKHook_OnTakeDamageAlivePost, - SDKHook_CanBeAutobalanced, + SDKHook_CanBeAutobalanced }; /* @@ -129,70 +154,70 @@ enum SDKHookType SDKHook_Blocked, SDKHook_BlockedPost, - + SDKHook_CanBeAutobalanced, - + SDKHook_EndTouch, SDKHook_EndTouchPost, - + SDKHook_FireBulletsPost, - + SDKHook_GetMaxHealth, (ep2v and later) - + SDKHook_GroundEntChangedPost, - + SDKHook_OnTakeDamage, SDKHook_OnTakeDamagePost, - + SDKHook_OnTakeDamageAlive, SDKHook_OnTakeDamageAlivePost, - + SDKHook_PreThink, SDKHook_PreThinkPost, - + SDKHook_PostThink, SDKHook_PostThinkPost, - + SDKHook_Reload, SDKHook_ReloadPost, - + SDKHook_SetTransmit, - + SDKHook_ShouldCollide, - + SDKHook_Spawn, SDKHook_SpawnPost, - + SDKHook_StartTouch, SDKHook_StartTouchPost, - + SDKHook_Think, SDKHook_ThinkPost, - + SDKHook_Touch, SDKHook_TouchPost, - + SDKHook_TraceAttack, SDKHook_TraceAttackPost, - + SDKHook_Use, SDKHook_UsePost, - + SDKHook_VPhysicsUpdate, SDKHook_VPhysicsUpdatePost, - + SDKHook_WeaponCanSwitchTo, SDKHook_WeaponCanSwitchToPost, - + SDKHook_WeaponCanUse, SDKHook_WeaponCanUsePost, - + SDKHook_WeaponDrop, SDKHook_WeaponDropPost, - + SDKHook_WeaponEquip, SDKHook_WeaponEquipPost, - + SDKHook_WeaponSwitch, SDKHook_WeaponSwitchPost */ @@ -210,47 +235,47 @@ typeset SDKHookCB // PreThink/Post // PostThink/Post function void (int client); - + // Spawn function Action (int entity); - + // GroundEntChanged // SpawnPost // Think/Post // VPhysicsUpdate/Post function void (int entity); - + // EndTouch // StartTouch // Touch // Blocked function Action (int entity, int other); - + // EndTouchPost // StartTouchPost // TouchPost function void (int entity, int other); - + // SetTransmit function Action (int entity, int client); - + // WeaponCanSwitchTo // WeaponCanUse // WeaponDrop // WeaponEquip // WeaponSwitch function Action (int client, int weapon); - + // WeaponCanSwitchToPost // WeaponCanUsePost // WeaponDropPost // WeaponEquipPost // WeaponSwitchPost function void (int client, int weapon); - + // GetMaxHealth (ep2v and later) function Action (int entity, int &maxhealth); - + // OnTakeDamage // OnTakeDamageAlive // Note: The weapon parameter is not used by all games and damage sources. @@ -263,131 +288,139 @@ typeset SDKHookCB // DON'T attempt to access 'damagecustom' var if feature status != available function Action (int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom); - + // OnTakeDamagePost // OnTakeDamageAlivePost function void (int victim, int attacker, int inflictor, float damage, int damagetype); function void (int victim, int attacker, int inflictor, float damage, int damagetype, int weapon, const float damageForce[3], const float damagePosition[3]); - function void (int victim, int attacker, int inflictor, float damage, int damagetype, int weapon, + function void (int victim, int attacker, int inflictor, float damage, int damagetype, int weapon, const float damageForce[3], const float damagePosition[3], int damagecustom); - + // FireBulletsPost function void (int client, int shots, const char[] weaponname); - + // TraceAttack function Action (int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &ammotype, int hitbox, int hitgroup); - + // TraceAttackPost function void (int victim, int attacker, int inflictor, float damage, int damagetype, int ammotype, int hitbox, int hitgroup); - + // ShouldCollide function bool (int entity, int collisiongroup, int contentsmask, bool originalResult); - + // Use function Action (int entity, int activator, int caller, UseType type, float value); - + // UsePost function void (int entity, int activator, int caller, UseType type, float value); - + // Reload function Action (int weapon); - + // Reload post function void (int weapon, bool bSuccessful); - + // CanBeAutobalanced function bool (int client, bool origRet); }; /** - * @brief When an entity is created + * When an entity is created * - * @param entity Entity index - * @param classname Class name + * @param entity Entity index + * @param classname Class name */ forward void OnEntityCreated(int entity, const char[] classname); /** - * @brief When an entity is destroyed + * When an entity is spawned * - * @param entity Entity index + * @param entity Entity index + * @param classname Class name + */ +forward void OnEntitySpawned(int entity, const char[] classname); + +/** + * When an entity is destroyed + * + * @param entity Entity index */ forward void OnEntityDestroyed(int entity); /** - * @brief When the game description is retrieved + * When the game description is retrieved * - * @note Not supported on ep2v. + * @note Not supported on ep2v. * - * @param gameDesc Game description - * @return Plugin_Changed if gameDesc has been edited, else no change. + * @param gameDesc Game description + * @return Plugin_Changed if gameDesc has been edited, else no change. */ forward Action OnGetGameDescription(char gameDesc[64]); /** - * @brief When the level is initialized + * When the level is initialized * - * @param mapName Name of the map - * @param mapEntities Entities of the map - * @return Plugin_Changed if mapEntities has been edited, else no change. + * @param mapName Name of the map + * @param mapEntities Entities of the map + * @return Plugin_Changed if mapEntities has been edited, else no change. */ forward Action OnLevelInit(const char[] mapName, char mapEntities[2097152]); /** - * @brief Hooks an entity + * Hooks an entity * - * @param entity Entity index - * @param type Type of function to hook - * @param callback Function to call when hook is called + * @param entity Entity index + * @param type Type of function to hook + * @param callback Function to call when hook is called */ native void SDKHook(int entity, SDKHookType type, SDKHookCB callback); /** - * @brief Hooks an entity + * Hooks an entity * - * @param entity Entity index - * @param type Type of function to hook - * @param callback Function to call when hook is called - * @return bool Hook Successful + * @param entity Entity index + * @param type Type of function to hook + * @param callback Function to call when hook is called + * @return Hook Successful */ native bool SDKHookEx(int entity, SDKHookType type, SDKHookCB callback); /** - * @brief Unhooks an entity + * Unhooks an entity * - * @param entity Entity index - * @param type Type of function to unhook - * @param callback Callback function to unhook + * @param entity Entity index + * @param type Type of function to unhook + * @param callback Callback function to unhook */ native void SDKUnhook(int entity, SDKHookType type, SDKHookCB callback); /** - * @brief Applies damage to an entity + * Applies damage to an entity * * @note Force application is dependent on game and damage type(s) * - * @param entity Entity index taking damage - * @param inflictor Inflictor entity index - * @param attacker Attacker entity index - * @param damage Amount of damage - * @param damageType Bitfield of damage types - * @param weapon Weapon index (orangebox and later) or -1 for unspecified - * @param damageForce Velocity of damage force - * @param damagePosition Origin of damage + * @param entity Entity index taking damage + * @param inflictor Inflictor entity index + * @param attacker Attacker entity index + * @param damage Amount of damage + * @param damageType Bitfield of damage types + * @param weapon Weapon index (orangebox and later) or -1 for unspecified + * @param damageForce Velocity of damage force + * @param damagePosition Origin of damage */ native void SDKHooks_TakeDamage(int entity, int inflictor, int attacker, float damage, int damageType=DMG_GENERIC, int weapon=-1, const float damageForce[3]=NULL_VECTOR, const float damagePosition[3]=NULL_VECTOR); /** - * @brief Forces a client to drop the specified weapon + * Forces a client to drop the specified weapon * - * @param client Client index. - * @param weapon Weapon entity index. - * @param vecTarget Location to toss weapon to, or NULL_VECTOR for default. - * @param vecVelocity Velocity at which to toss weapon, or NULL_VECTOR for default. - * @error Invalid client or weapon entity, weapon not owned by client. + * @param client Client index. + * @param weapon Weapon entity index. + * @param vecTarget Location to toss weapon to, or NULL_VECTOR for default. + * @param vecVelocity Velocity at which to toss weapon, or NULL_VECTOR for default. + * @error Invalid client or weapon entity, weapon not owned by client. */ native void SDKHooks_DropWeapon(int client, int weapon, const float vecTarget[3]=NULL_VECTOR, const float vecVelocity[3]=NULL_VECTOR); @@ -395,7 +428,7 @@ native void SDKHooks_DropWeapon(int client, int weapon, const float vecTarget[3] /** * Do not edit below this line! */ -public Extension __ext_sdkhooks = +public Extension __ext_sdkhooks = { name = "SDKHooks", file = "sdkhooks.ext", diff --git a/env/include/sdktools.inc b/env/include/sdktools.inc index 6a4d961..e5dffba 100644 --- a/env/include/sdktools.inc +++ b/env/include/sdktools.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2017 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,7 +31,7 @@ */ #if defined _sdktools_included - #endinput + #endinput #endif #define _sdktools_included @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -54,86 +55,86 @@ enum SDKCallType { - SDKCall_Static, /**< Static call */ - SDKCall_Entity, /**< CBaseEntity call */ - SDKCall_Player, /**< CBasePlayer call */ - SDKCall_GameRules, /**< CGameRules call */ - SDKCall_EntityList, /**< CGlobalEntityList call */ - SDKCall_Raw, /**< |this| pointer with an arbitrary address */ + SDKCall_Static, /**< Static call */ + SDKCall_Entity, /**< CBaseEntity call */ + SDKCall_Player, /**< CBasePlayer call */ + SDKCall_GameRules, /**< CGameRules call */ + SDKCall_EntityList, /**< CGlobalEntityList call */ + SDKCall_Raw /**< |this| pointer with an arbitrary address */ }; enum SDKLibrary { - SDKLibrary_Server, /**< server.dll/server_i486.so */ - SDKLibrary_Engine, /**< engine.dll/engine_*.so */ + SDKLibrary_Server, /**< server.dll/server_i486.so */ + SDKLibrary_Engine /**< engine.dll/engine_*.so */ }; enum SDKFuncConfSource { - SDKConf_Virtual = 0, /**< Read a virtual index from the Offsets section */ - SDKConf_Signature = 1, /**< Read a signature from the Signatures section */ - SDKConf_Address = 2, /**< Read an address from the Addresses section */ + SDKConf_Virtual = 0, /**< Read a virtual index from the Offsets section */ + SDKConf_Signature = 1, /**< Read a signature from the Signatures section */ + SDKConf_Address = 2 /**< Read an address from the Addresses section */ }; enum SDKType { - SDKType_CBaseEntity, /**< CBaseEntity (always as pointer) */ - SDKType_CBasePlayer, /**< CBasePlayer (always as pointer) */ - SDKType_Vector, /**< Vector (pointer, byval, or byref) */ - SDKType_QAngle, /**< QAngles (pointer, byval, or byref) */ - SDKType_PlainOldData, /**< Integer/generic data <=32bit (any) */ - SDKType_Float, /**< Float (any) */ - SDKType_Edict, /**< edict_t (always as pointer) */ - SDKType_String, /**< NULL-terminated string (always as pointer) */ - SDKType_Bool, /**< Boolean (any) */ + SDKType_CBaseEntity, /**< CBaseEntity (always as pointer) */ + SDKType_CBasePlayer, /**< CBasePlayer (always as pointer) */ + SDKType_Vector, /**< Vector (pointer, byval, or byref) */ + SDKType_QAngle, /**< QAngles (pointer, byval, or byref) */ + SDKType_PlainOldData, /**< Integer/generic data <=32bit (any) */ + SDKType_Float, /**< Float (any) */ + SDKType_Edict, /**< edict_t (always as pointer) */ + SDKType_String, /**< NULL-terminated string (always as pointer) */ + SDKType_Bool /**< Boolean (any) */ }; enum SDKPassMethod { - SDKPass_Pointer, /**< Pass as a pointer */ - SDKPass_Plain, /**< Pass as plain data */ - SDKPass_ByValue, /**< Pass an object by value */ - SDKPass_ByRef, /**< Pass an object by reference */ + SDKPass_Pointer, /**< Pass as a pointer */ + SDKPass_Plain, /**< Pass as plain data */ + SDKPass_ByValue, /**< Pass an object by value */ + SDKPass_ByRef /**< Pass an object by reference */ }; -#define VDECODE_FLAG_ALLOWNULL (1<<0) /**< Allow NULL for pointers */ -#define VDECODE_FLAG_ALLOWNOTINGAME (1<<1) /**< Allow players not in game */ -#define VDECODE_FLAG_ALLOWWORLD (1<<2) /**< Allow World entity */ -#define VDECODE_FLAG_BYREF (1<<3) /**< Floats/ints by reference */ +#define VDECODE_FLAG_ALLOWNULL (1<<0) /**< Allow NULL for pointers */ +#define VDECODE_FLAG_ALLOWNOTINGAME (1<<1) /**< Allow players not in game */ +#define VDECODE_FLAG_ALLOWWORLD (1<<2) /**< Allow World entity */ +#define VDECODE_FLAG_BYREF (1<<3) /**< Floats/ints by reference */ -#define VENCODE_FLAG_COPYBACK (1<<0) /**< Copy back data once done */ +#define VENCODE_FLAG_COPYBACK (1<<0) /**< Copy back data once done */ /** * Starts the preparation of an SDK call. * - * @param type Type of function call this will be. + * @param type Type of function call this will be. */ native void StartPrepSDKCall(SDKCallType type); /** * Sets the virtual index of the SDK call if it is virtual. * - * @param vtblidx Virtual table index. + * @param vtblidx Virtual table index. */ native void PrepSDKCall_SetVirtual(int vtblidx); /** * Finds an address in a library and sets it as the address to use for the SDK call. * - * @param lib Library to use. - * @param signature Binary data to search for in the library. If it starts with '@', - * the bytes parameter is ignored and the signature is interpreted - * as a symbol lookup in the library. - * @param bytes Number of bytes in the binary search string. - * @return True on success, false if nothing was found. + * @param lib Library to use. + * @param signature Binary data to search for in the library. If it starts with '@', + * the bytes parameter is ignored and the signature is interpreted + * as a symbol lookup in the library. + * @param bytes Number of bytes in the binary search string. + * @return True on success, false if nothing was found. */ native bool PrepSDKCall_SetSignature(SDKLibrary lib, const char[] signature, int bytes); /** * Uses the given function address for the SDK call. * - * @param addr Address of function to use. - * @return True on success, false on failure. + * @param addr Address of function to use. + * @return True on success, false on failure. */ native bool PrepSDKCall_SetAddress(Address addr); @@ -141,39 +142,39 @@ native bool PrepSDKCall_SetAddress(Address addr); * Finds an address or virtual function index in a GameConfig file and sets it as * the calling information for the SDK call. * - * @param gameconf GameConfig Handle, or INVALID_HANDLE to use sdktools.games.txt. - * @param source Whether to look in Offsets or Signatures. - * @param name Name of the property to find. - * @return True on success, false if nothing was found. + * @param gameconf GameConfig Handle, or INVALID_HANDLE to use sdktools.games.txt. + * @param source Whether to look in Offsets or Signatures. + * @param name Name of the property to find. + * @return True on success, false if nothing was found. */ native bool PrepSDKCall_SetFromConf(Handle gameconf, SDKFuncConfSource source, const char[] name); /** * Sets the return information of an SDK call. Do not call this if there is no return data. - * This must be called if there is a return value (i.e. it is not necessarily safe to ignore + * This must be called if there is a return value (i.e. it is not necessarily safe to ignore * the data). * - * @param type Data type to convert to/from. - * @param pass How the data is passed in C++. - * @param decflags Flags on decoding from the plugin to C++. - * @param encflags Flags on encoding from C++ to the plugin. + * @param type Data type to convert to/from. + * @param pass How the data is passed in C++. + * @param decflags Flags on decoding from the plugin to C++. + * @param encflags Flags on encoding from C++ to the plugin. */ native void PrepSDKCall_SetReturnInfo(SDKType type, SDKPassMethod pass, int decflags=0, int encflags=0); /** * Adds a parameter to the calling convention. This should be called in normal ascending order. * - * @param type Data type to convert to/from. - * @param pass How the data is passed in C++. - * @param decflags Flags on decoding from the plugin to C++. - * @param encflags Flags on encoding from C++ to the plugin. + * @param type Data type to convert to/from. + * @param pass How the data is passed in C++. + * @param decflags Flags on decoding from the plugin to C++. + * @param encflags Flags on encoding from C++ to the plugin. */ native void PrepSDKCall_AddParameter(SDKType type, SDKPassMethod pass, int decflags=0, int encflags=0); /** * Finalizes an SDK call preparation and returns the resultant Handle. * - * @return A new SDKCall Handle on success, or INVALID_HANDLE on failure. + * @return A new SDKCall Handle on success, or INVALID_HANDLE on failure. */ native Handle EndPrepSDKCall(); @@ -185,24 +186,24 @@ native Handle EndPrepSDKCall(); * If the return value is a Vector or QAngles, the SECOND parameter must be a Float[3]. * If the return value is a string, the THIRD parameter must be a String buffer, and the * FOURTH parameter must be the maximum length. - * All parameters must be passed after the above is followed. Failure to follow these + * All parameters must be passed after the above is followed. Failure to follow these * rules will result in crashes or wildly unexpected behavior! * * If the return value is a float or integer, the return value will be this value. * If the return value is a CBaseEntity, CBasePlayer, or edict, the return value will - * always be the entity index, or -1 for NULL. + * always be the entity index, or -1 for NULL. * - * @param call SDKCall Handle. - * @param ... Call Parameters. - * @return Simple return value, if any. - * @error Invalid Handle or internal decoding error. + * @param call SDKCall Handle. + * @param ... Call Parameters. + * @return Simple return value, if any. + * @error Invalid Handle or internal decoding error. */ native any SDKCall(Handle call, any ...); /** * Returns the entity index of the player resource/manager entity. * - * @return Index of resource entity or -1 if not found. + * @return Index of resource entity or -1 if not found. */ native int GetPlayerResourceEntity(); @@ -211,7 +212,7 @@ native int GetPlayerResourceEntity(); /** * Do not edit below this line! */ -public Extension __ext_sdktools = +public Extension __ext_sdktools = { name = "SDKTools", file = "sdktools.ext", diff --git a/env/include/sdktools_client.inc b/env/include/sdktools_client.inc index 786a659..23da412 100644 --- a/env/include/sdktools_client.inc +++ b/env/include/sdktools_client.inc @@ -31,20 +31,20 @@ */ #if defined _sdktools_client_included - #endinput + #endinput #endif #define _sdktools_client_included /** * Sets the client to an inactive state waiting for a new map * - * @param client The client index + * @param client The client index */ native void InactivateClient(int client); /** * Reconnect a client without dropping the netchannel * - * @param client The client index + * @param client The client index */ native void ReconnectClient(int client); diff --git a/env/include/sdktools_engine.inc b/env/include/sdktools_engine.inc index 127a7e6..95da43a 100644 --- a/env/include/sdktools_engine.inc +++ b/env/include/sdktools_engine.inc @@ -31,36 +31,36 @@ */ #if defined _sdktools_engine_included - #endinput + #endinput #endif #define _sdktools_engine_included -#define MAX_LIGHTSTYLES 64 +#define MAX_LIGHTSTYLES 64 /** * Sets a client's "viewing entity." * - * @param client Client index. - * @param entity Entity index. - * @error Invalid client or entity, lack of mod support, or client not in - * game. + * @param client Client index. + * @param entity Entity index. + * @error Invalid client or entity, lack of mod support, or client not in + * game. */ native void SetClientViewEntity(int client, int entity); /** * Sets a light style. * - * @param style Light style (from 0 to MAX_LIGHTSTYLES-1) - * @param value Light value string (see world.cpp/light.cpp in dlls) - * @error Light style index is out of range. + * @param style Light style (from 0 to MAX_LIGHTSTYLES-1) + * @param value Light value string (see world.cpp/light.cpp in dlls) + * @error Light style index is out of range. */ native void SetLightStyle(int style, const char[] value); /** * Returns the client's eye position. * - * @param client Player's index. - * @param pos Destination vector to store the client's eye position. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param pos Destination vector to store the client's eye position. + * @error Invalid client index, client not in game, or no mod support. */ native void GetClientEyePosition(int client, float pos[3]); diff --git a/env/include/sdktools_entinput.inc b/env/include/sdktools_entinput.inc index 85bd1e7..64454b3 100644 --- a/env/include/sdktools_entinput.inc +++ b/env/include/sdktools_entinput.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2017 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,78 +31,21 @@ */ #if defined _sdktools_entinput_included - #endinput + #endinput #endif #define _sdktools_entinput_included /** - * Invokes a named input method on an entity. + * Invokes a named input method on an entity. * * After completion (successful or not), the current global variant is re-initialized. * - * @param dest Destination entity index. - * @param input Input action. - * @param activator Entity index which initiated the sequence of actions (-1 for a NULL entity). - * @param caller Entity index from which this event is sent (-1 for a NULL entity). - * @param outputid Unknown. - * @return True if successful otherwise false. - * @error Invalid entity index or no mod support. + * @param dest Destination entity index. + * @param input Input action. + * @param activator Entity index which initiated the sequence of actions (-1 for a NULL entity). + * @param caller Entity index from which this event is sent (-1 for a NULL entity). + * @param outputid Unknown. + * @return True if successful otherwise false. + * @error Invalid entity index or no mod support. */ native bool AcceptEntityInput(int dest, const char[] input, int activator=-1, int caller=-1, int outputid=0); - -/** - * Sets a bool value in the global variant object. - * - * @param val Input value. - */ -native void SetVariantBool(bool val); - -/** - * Sets a string in the global variant object. - * - * @param str Input string. - */ -native void SetVariantString(const char[] str); - -/** - * Sets an integer value in the global variant object. - * - * @param val Input value. - */ -native void SetVariantInt(int val); - -/** - * Sets a floating point value in the global variant object. - * - * @param val Input value. - */ -native void SetVariantFloat(float val); - -/** - * Sets a 3D vector in the global variant object. - * - * @param vec Input vector. - */ -native void SetVariantVector3D(const float vec[3]); - -/** - * Sets a 3D position vector in the global variant object. - * - * @param vec Input position vector. - */ -native void SetVariantPosVector3D(const float vec[3]); - -/** - * Sets a color in the global variant object. - * - * @param color Input color. - */ -native void SetVariantColor(const int color[4]); - -/** - * Sets an entity in the global variant object. - * - * @param entity Entity index. - * @error Invalid entity index. - */ -native void SetVariantEntity(int entity); diff --git a/env/include/sdktools_entoutput.inc b/env/include/sdktools_entoutput.inc index 48d8d3e..eb5a915 100644 --- a/env/include/sdktools_entoutput.inc +++ b/env/include/sdktools_entoutput.inc @@ -1,7 +1,7 @@ /** * vim: set ts=4 : * ============================================================================= - * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. + * SourceMod (C)2004-2017 AlliedModders LLC. All rights reserved. * ============================================================================= * * This file is part of the SourceMod/SourcePawn SDK. @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,20 +31,20 @@ */ #if defined _sdktools_entoutput_included - #endinput + #endinput #endif #define _sdktools_entoutput_included /** * Called when an entity output is fired. * - * @param output Name of the output that fired. - * @param caller Entity index of the caller. - * @param activator Entity index of the activator. - * @param delay Delay in seconds? before the event gets fired. - * @return Anything other than Plugin_Continue will supress this event, - * returning Plugin_Continue will allow it to propagate the results - * of this output to any entity inputs. + * @param output Name of the output that fired. + * @param caller Entity index of the caller. + * @param activator Entity index of the activator. + * @param delay Delay in seconds? before the event gets fired. + * @return Anything other than Plugin_Continue will supress this event, + * returning Plugin_Continue will allow it to propagate the results + * of this output to any entity inputs. */ typeset EntityOutput { @@ -55,41 +55,54 @@ typeset EntityOutput /** * Add an entity output hook on a entity classname * - * @param classname The classname to hook. - * @param output The output name to hook. - * @param callback An EntityOutput function pointer. - * @error Entity Outputs disabled. + * @param classname The classname to hook. + * @param output The output name to hook. + * @param callback An EntityOutput function pointer. + * @error Entity Outputs disabled. */ native void HookEntityOutput(const char[] classname, const char[] output, EntityOutput callback); /** * Remove an entity output hook. - * @param classname The classname to hook. - * @param output The output name to hook. - * @param callback An EntityOutput function pointer. - * @return True on success, false if no valid hook was found. - * @error Entity Outputs disabled. + * @param classname The classname to hook. + * @param output The output name to hook. + * @param callback An EntityOutput function pointer. + * @return True on success, false if no valid hook was found. + * @error Entity Outputs disabled. */ native bool UnhookEntityOutput(const char[] classname, const char[] output, EntityOutput callback); /** - * Add an entity output hook on a single entity instance + * Add an entity output hook on a single entity instance * - * @param entity The entity on which to add a hook. - * @param output The output name to hook. - * @param callback An EntityOutput function pointer. - * @param once Only fire this hook once and then remove itself. - * @error Entity Outputs disabled or Invalid Entity index. + * @param entity The entity on which to add a hook. + * @param output The output name to hook. + * @param callback An EntityOutput function pointer. + * @param once Only fire this hook once and then remove itself. + * @error Entity Outputs disabled or Invalid Entity index. */ native void HookSingleEntityOutput(int entity, const char[] output, EntityOutput callback, bool once=false); /** - * Remove a single entity output hook. + * Remove a single entity output hook. * - * @param entity The entity on which to remove the hook. - * @param output The output name to hook. - * @param callback An EntityOutput function pointer. - * @return True on success, false if no valid hook was found. - * @error Entity Outputs disabled or Invalid Entity index. + * @param entity The entity on which to remove the hook. + * @param output The output name to hook. + * @param callback An EntityOutput function pointer. + * @return True on success, false if no valid hook was found. + * @error Entity Outputs disabled or Invalid Entity index. */ native bool UnhookSingleEntityOutput(int entity, const char[] output, EntityOutput callback); + +/** + * Fire a named output on an entity. + * + * After completion (successful or not), the current global variant is re-initialized. + * + * @param caller Entity index from where the output is fired. + * @param output Output name. + * @param activator Entity index which initiated the sequence of actions (-1 for a NULL entity). + * @param delay Delay before firing the output. + * @error Invalid entity index or no mod support. + */ +native void FireEntityOutput(int caller, const char[] output, int activator=-1, float delay=0.0); diff --git a/env/include/sdktools_functions.inc b/env/include/sdktools_functions.inc index ccf472a..3be387e 100644 --- a/env/include/sdktools_functions.inc +++ b/env/include/sdktools_functions.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,175 +31,175 @@ */ #if defined _sdktools_functions_included - #endinput + #endinput #endif #define _sdktools_functions_included /** * Removes a player's item. * - * @param client Client index. - * @param item CBaseCombatWeapon entity index. - * @return True on success, false otherwise. - * @error Invalid client or entity, lack of mod support, or client not in - * game. + * @param client Client index. + * @param item CBaseCombatWeapon entity index. + * @return True on success, false otherwise. + * @error Invalid client or entity, lack of mod support, or client not in + * game. */ native bool RemovePlayerItem(int client, int item); /** * Gives a named item to a player. * - * @param client Client index. - * @param item Item classname (such as weapon_ak47). - * @param iSubType Unknown. - * @return Entity index on success, or -1 on failure. - * @error Invalid client or client not in game, or lack of mod support. + * @param client Client index. + * @param item Item classname (such as weapon_ak47). + * @param iSubType Unknown. + * @return Entity index on success, or -1 on failure. + * @error Invalid client or client not in game, or lack of mod support. */ native int GivePlayerItem(int client, const char[] item, int iSubType=0); /** - * Returns the weapon in a player's slot. + * Returns the weapon in a player's slot. * - * @param client Client index. - * @param slot Slot index (mod specific). - * @return Entity index on success, -1 if no weapon existed. - * @error Invalid client or client not in game, or lack of mod support. + * @param client Client index. + * @param slot Slot index (mod specific). + * @return Entity index on success, -1 if no weapon existed. + * @error Invalid client or client not in game, or lack of mod support. */ native int GetPlayerWeaponSlot(int client, int slot); /** * Ignites an entity on fire. * - * @param entity Entity index. - * @param time Number of seconds to set on fire. - * @param npc True to only affect NPCs. - * @param size Unknown. - * @param level Unknown. - * @error Invalid entity or client not in game, or lack of mod support. + * @param entity Entity index. + * @param time Number of seconds to set on fire. + * @param npc True to only affect NPCs. + * @param size Unknown. + * @param level Unknown. + * @error Invalid entity or client not in game, or lack of mod support. */ native void IgniteEntity(int entity, float time, bool npc=false, float size=0.0, bool level=false); /** * Extinguishes an entity that is on fire. * - * @param entity Entity index. - * @error Invalid entity or client not in game, or lack of mod support. + * @param entity Entity index. + * @error Invalid entity or client not in game, or lack of mod support. */ native void ExtinguishEntity(int entity); /** * Teleports an entity. * - * @param entity Client index. - * @param origin New origin, or NULL_VECTOR for no change. - * @param angles New angles, or NULL_VECTOR for no change. - * @param velocity New velocity, or NULL_VECTOR for no change. - * @error Invalid entity or client not in game, or lack of mod support. + * @param entity Client index. + * @param origin New origin, or NULL_VECTOR for no change. + * @param angles New angles, or NULL_VECTOR for no change. + * @param velocity New velocity, or NULL_VECTOR for no change. + * @error Invalid entity or client not in game, or lack of mod support. */ native void TeleportEntity(int entity, const float origin[3], const float angles[3], const float velocity[3]); /** * Forces a player to commit suicide. * - * @param client Client index. - * @error Invalid client or client not in game, or lack of mod support. + * @param client Client index. + * @error Invalid client or client not in game, or lack of mod support. */ native void ForcePlayerSuicide(int client); /** * Slaps a player in a random direction. * - * @param client Client index. - * @param health Health to subtract. - * @param sound False to disable the sound effects. - * @error Invalid client or client not in game, or lack of mod support. + * @param client Client index. + * @param health Health to subtract. + * @param sound False to disable the sound effects. + * @error Invalid client or client not in game, or lack of mod support. */ native void SlapPlayer(int client, int health=5, bool sound=true); /** * Searches for an entity by classname. * - * @param startEnt The entity index after which to begin searching from. - * Use -1 to start from the first entity. - * @param classname Classname of the entity to find. - * @return Entity index >= 0 if found, -1 otherwise. - * @error Lack of mod support. + * @param startEnt The entity index after which to begin searching from. + * Use -1 to start from the first entity. + * @param classname Classname of the entity to find. + * @return Entity index >= 0 if found, -1 otherwise. + * @error Lack of mod support. */ native int FindEntityByClassname(int startEnt, const char[] classname); /** * Returns the client's eye angles. * - * @param client Player's index. - * @param ang Destination vector to store the client's eye angles. - * @return True on success, false on failure. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param ang Destination vector to store the client's eye angles. + * @return True on success, false on failure. + * @error Invalid client index, client not in game, or no mod support. */ native bool GetClientEyeAngles(int client, float ang[3]); /** * Creates an entity by string name, but does not spawn it (see DispatchSpawn). - * If ForceEdictIndex is not -1, then it will use the edict by that index. If the index is + * If ForceEdictIndex is not -1, then it will use the edict by that index. If the index is * invalid or there is already an edict using that index, it will error out. * - * @param classname Entity classname. - * @param ForceEdictIndex Edict index used by the created entity (ignored on Orangebox and above). - * @return Entity index on success, or -1 on failure. - * @error Invalid edict index, or no mod support. + * @param classname Entity classname. + * @param ForceEdictIndex Edict index used by the created entity (ignored on Orangebox and above). + * @return Entity index on success, or -1 on failure. + * @error Invalid edict index, or no mod support. */ native int CreateEntityByName(const char[] classname, int ForceEdictIndex=-1); /** * Spawns an entity into the game. * - * @param entity Entity index of the created entity. - * @return True on success, false otherwise. - * @error Invalid entity index, or no mod support. + * @param entity Entity index of the created entity. + * @return True on success, false otherwise. + * @error Invalid entity index, or no mod support. */ native bool DispatchSpawn(int entity); /** * Dispatches a KeyValue into given entity using a string value. * - * @param entity Destination entity index. - * @param keyName Name of the key. - * @param value String value. - * @return True on success, false otherwise. - * @error Invalid entity index, or no mod support. + * @param entity Destination entity index. + * @param keyName Name of the key. + * @param value String value. + * @return True on success, false otherwise. + * @error Invalid entity index, or no mod support. */ native bool DispatchKeyValue(int entity, const char[] keyName, const char[] value); /** * Dispatches a KeyValue into given entity using a floating point value. * - * @param entity Destination entity index. - * @param keyName Name of the key. - * @param value Floating point value. - * @return True on success, false otherwise. - * @error Invalid entity index, or no mod support. + * @param entity Destination entity index. + * @param keyName Name of the key. + * @param value Floating point value. + * @return True on success, false otherwise. + * @error Invalid entity index, or no mod support. */ native bool DispatchKeyValueFloat(int entity, const char[] keyName, float value); /** * Dispatches a KeyValue into given entity using a vector value. * - * @param entity Destination entity index. - * @param keyName Name of the key. - * @param vec Vector value. - * @return True on success, false otherwise. - * @error Invalid entity index, or no mod support. + * @param entity Destination entity index. + * @param keyName Name of the key. + * @param vec Vector value. + * @return True on success, false otherwise. + * @error Invalid entity index, or no mod support. */ native bool DispatchKeyValueVector(int entity, const char[] keyName, const float vec[3]); /** * Returns the entity a client is aiming at. * - * @param client Client performing the aiming. - * @param only_clients True to exclude all entities but clients. - * @return Entity index being aimed at. - * -1 if no entity is being aimed at. - * -2 if the function is not supported. - * @error Invalid client index or client not in game. + * @param client Client performing the aiming. + * @param only_clients True to exclude all entities but clients. + * @return Entity index being aimed at. + * -1 if no entity is being aimed at. + * -2 if the function is not supported. + * @error Invalid client index or client not in game. */ native int GetClientAimTarget(int client, bool only_clients=true); @@ -207,7 +207,7 @@ native int GetClientAimTarget(int client, bool only_clients=true); * Returns the total number of teams in a game. * Note: This native should not be called before OnMapStart. * - * @return Total number of teams. + * @return Total number of teams. */ native int GetTeamCount(); @@ -215,10 +215,10 @@ native int GetTeamCount(); * Retrieves the team name based on a team index. * Note: This native should not be called before OnMapStart. * - * @param index Team index. - * @param name Buffer to store string in. - * @param maxlength Maximum length of string buffer. - * @error Invalid team index. + * @param index Team index. + * @param name Buffer to store string in. + * @param maxlength Maximum length of string buffer. + * @error Invalid team index. */ native void GetTeamName(int index, char[] name, int maxlength); @@ -226,9 +226,9 @@ native void GetTeamName(int index, char[] name, int maxlength); * Returns the score of a team based on a team index. * Note: This native should not be called before OnMapStart. * - * @param index Team index. - * @return Score. - * @error Invalid team index. + * @param index Team index. + * @return Score. + * @error Invalid team index. */ native int GetTeamScore(int index); @@ -236,9 +236,9 @@ native int GetTeamScore(int index); * Sets the score of a team based on a team index. * Note: This native should not be called before OnMapStart. * - * @param index Team index. - * @param value New score value. - * @error Invalid team index. + * @param index Team index. + * @param value New score value. + * @error Invalid team index. */ native void SetTeamScore(int index, int value); @@ -246,75 +246,75 @@ native void SetTeamScore(int index, int value); * Retrieves the number of players in a certain team. * Note: This native should not be called before OnMapStart. * - * @param index Team index. - * @return Number of players in the team. - * @error Invalid team index. + * @param index Team index. + * @return Number of players in the team. + * @error Invalid team index. */ native int GetTeamClientCount(int index); /** * Returns the entity index of a team. * - * @param teamIndex Team index. - * @return Entity index of team. - * @error Invalid team index. + * @param teamIndex Team index. + * @return Entity index of team. + * @error Invalid team index. */ native int GetTeamEntity(int teamIndex); /** * Sets the model to a given entity. * - * @param entity Entity index. - * @param model Model name. - * @error Invalid entity index, or no mod support. + * @param entity Entity index. + * @param model Model name. + * @error Invalid entity index, or no mod support. */ native void SetEntityModel(int entity, const char[] model); /** * Retrieves the decal file name associated with a given client. * - * @param client Player's index. - * @param hex Buffer to store the logo filename. - * @param maxlength Maximum length of string buffer. - * @return True on success, otherwise false. - * @error Invalid client or client not in game. + * @param client Player's index. + * @param hex Buffer to store the logo filename. + * @param maxlength Maximum length of string buffer. + * @return True on success, otherwise false. + * @error Invalid client or client not in game. */ native bool GetPlayerDecalFile(int client, char[] hex, int maxlength); /** * Retrieves the jingle file name associated with a given client. * - * @param client Player's index. - * @param hex Buffer to store the jingle filename. - * @param maxlength Maximum length of string buffer. - * @return True on success, otherwise false. - * @error Invalid client or client not in game. + * @param client Player's index. + * @param hex Buffer to store the jingle filename. + * @param maxlength Maximum length of string buffer. + * @return True on success, otherwise false. + * @error Invalid client or client not in game. */ native bool GetPlayerJingleFile(int client, char[] hex, int maxlength); /** * Returns the average server network traffic in bytes/sec. * - * @param in Buffer to store the input traffic velocity. - * @param out Buffer to store the output traffic velocity. + * @param in Buffer to store the input traffic velocity. + * @param out Buffer to store the output traffic velocity. */ native void GetServerNetStats(float &inAmount, float &outAmout); /** * Equip's a player's weapon. * - * @param client Client index. - * @param weapon CBaseCombatWeapon entity index. - * @error Invalid client or entity, lack of mod support, or client not in - * game. + * @param client Client index. + * @param weapon CBaseCombatWeapon entity index. + * @error Invalid client or entity, lack of mod support, or client not in + * game. */ native void EquipPlayerWeapon(int client, int weapon); /** * Activates an entity (CBaseAnimating::Activate) * - * @param entity Entity index. - * @error Invalid entity or lack of mod support. + * @param entity Entity index. + * @error Invalid entity or lack of mod support. */ native void ActivateEntity(int entity); @@ -322,18 +322,18 @@ native void ActivateEntity(int entity); * Sets values to client info buffer keys and notifies the engine of the change. * The change does not get propagated to mods until the next frame. * - * @param client Player's index. - * @param key Key string. - * @param value Value string. - * @error Invalid client index, or client not connected. + * @param client Player's index. + * @param key Key string. + * @param value Value string. + * @error Invalid client index, or client not connected. */ native void SetClientInfo(int client, const char[] key, const char[] value); /** * Changes a client's name. * - * @param client Player's index. - * @param name New name. + * @param client Player's index. + * @param name New name. * @error Invalid client index, or client not connected. */ native void SetClientName(int client, const char[] name); @@ -346,7 +346,6 @@ native void SetClientName(int client, const char[] name); * @param amount Amount of ammo to give. Is capped at ammotype's limit. * @param ammotype Type of ammo to give to player. * @param suppressSound If true, don't play the ammo pickup sound. - * - * @return Amount of ammo actually given. + * @return Amount of ammo actually given. */ native int GivePlayerAmmo(int client, int amount, int ammotype, bool suppressSound=false); diff --git a/env/include/sdktools_gamerules.inc b/env/include/sdktools_gamerules.inc index af498ec..dc69355 100644 --- a/env/include/sdktools_gamerules.inc +++ b/env/include/sdktools_gamerules.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,165 +31,165 @@ */ #if defined _sdktools_gamerules_included - #endinput + #endinput #endif #define _sdktools_gamerules_included enum RoundState { // initialize the game, create teams RoundState_Init, - + //Before players have joined the game. Periodically checks to see if enough players are ready //to start a game. Also reverts to this when there are no active players RoundState_Pregame, - + //The game is about to start, wait a bit and spawn everyone RoundState_StartGame, - + //All players are respawned, frozen in place RoundState_Preround, - + //Round is on, playing normally RoundState_RoundRunning, - + //Someone has won the round RoundState_TeamWin, - + //Noone has won, manually restart the game, reset scores RoundState_Restart, - + //Noone has won, restart the game RoundState_Stalemate, - + //Game is over, showing the scoreboard etc RoundState_GameOver, - + //Game is over, doing bonus round stuff RoundState_Bonus, - + //Between rounds - RoundState_BetweenRounds, + RoundState_BetweenRounds }; /** * Retrieves an integer value from a property of the gamerules entity. - * - * @param prop Property name. - * @param size Number of bytes to read (valid values are 1, 2, or 4). - * This value is auto-detected, and the size parameter is - * only used as a fallback in case detection fails. - * @param element Element # (starting from 0) if property is an array. - * @return Value at the given property offset. - * @error Not supported. + * + * @param prop Property name. + * @param size Number of bytes to read (valid values are 1, 2, or 4). + * This value is auto-detected, and the size parameter is + * only used as a fallback in case detection fails. + * @param element Element # (starting from 0) if property is an array. + * @return Value at the given property offset. + * @error Not supported. */ native int GameRules_GetProp(const char[] prop, int size=4, int element=0); /** * Sets an integer value for a property of the gamerules entity. * - * @param prop Property name. - * @param value Value to set. - * @param size Number of bytes to write (valid values are 1, 2, or 4). - * This value is auto-detected, and the size parameter is - * only used as a fallback in case detection fails. - * @param element Element # (starting from 0) if property is an array. - * @param changeState This parameter is ignored. - * @error Not supported. + * @param prop Property name. + * @param value Value to set. + * @param size Number of bytes to write (valid values are 1, 2, or 4). + * This value is auto-detected, and the size parameter is + * only used as a fallback in case detection fails. + * @param element Element # (starting from 0) if property is an array. + * @param changeState This parameter is ignored. + * @error Not supported. */ native void GameRules_SetProp(const char[] prop, any value, int size=4, int element=0, bool changeState=false); /** * Retrieves a float value from a property of the gamerules entity. - * - * @param prop Property name. - * @param element Element # (starting from 0) if property is an array. - * @return Value at the given property offset. - * @error Not supported. + * + * @param prop Property name. + * @param element Element # (starting from 0) if property is an array. + * @return Value at the given property offset. + * @error Not supported. */ native float GameRules_GetPropFloat(const char[] prop, int element=0); /** * Sets a float value for a property of the gamerules entity. - * - * @param prop Property name. - * @param value Value to set. - * @param element Element # (starting from 0) if property is an array. - * @param changeState This parameter is ignored. - * @error Not supported. + * + * @param prop Property name. + * @param value Value to set. + * @param element Element # (starting from 0) if property is an array. + * @param changeState This parameter is ignored. + * @error Not supported. */ native void GameRules_SetPropFloat(const char[] prop, float value, int element=0, bool changeState=false); /** * Retrieves a entity index from a property of the gamerules entity. - * - * @param prop Property name. - * @param element Element # (starting from 0) if property is an array. - * @return Entity index at the given property. - * If there is no entity, or the entity is not valid, - * then -1 is returned. - * @error Not supported. + * + * @param prop Property name. + * @param element Element # (starting from 0) if property is an array. + * @return Entity index at the given property. + * If there is no entity, or the entity is not valid, + * then -1 is returned. + * @error Not supported. */ native int GameRules_GetPropEnt(const char[] prop, int element=0); /** * Sets an entity index for a property of the gamerules entity. - * - * @param prop Property name. - * @param other Entity index to set, or -1 to unset. - * @param element Element # (starting from 0) if property is an array. - * @param changeState This parameter is ignored. - * @error Not supported. + * + * @param prop Property name. + * @param other Entity index to set, or -1 to unset. + * @param element Element # (starting from 0) if property is an array. + * @param changeState This parameter is ignored. + * @error Not supported. */ native void GameRules_SetPropEnt(const char[] prop, int other, int element=0, bool changeState=false); /** * Retrieves a vector of floats from the gamerules entity, given a named network property. - * - * @param prop Property name. - * @param vec Vector buffer to store data in. - * @param element Element # (starting from 0) if property is an array. - * @error Not supported. + * + * @param prop Property name. + * @param vec Vector buffer to store data in. + * @param element Element # (starting from 0) if property is an array. + * @error Not supported. */ native void GameRules_GetPropVector(const char[] prop, float vec[3], int element=0); /** * Sets a vector of floats in the gamerules entity, given a named network property. * - * @param prop Property name. - * @param vec Vector to set. - * @param element Element # (starting from 0) if property is an array. - * @param changeState This parameter is ignored. - * @error Not supported. + * @param prop Property name. + * @param vec Vector to set. + * @param element Element # (starting from 0) if property is an array. + * @param changeState This parameter is ignored. + * @error Not supported. */ native void GameRules_SetPropVector(const char[] prop, const float vec[3], int element=0, bool changeState=false); /** * Gets a gamerules property as a string. - * - * @param prop Property to use. - * @param buffer Destination string buffer. - * @param maxlen Maximum length of output string buffer. - * @return Number of non-null bytes written. - * @error Not supported. + * + * @param prop Property to use. + * @param buffer Destination string buffer. + * @param maxlen Maximum length of output string buffer. + * @return Number of non-null bytes written. + * @error Not supported. */ native int GameRules_GetPropString(const char[] prop, char[] buffer, int maxlen); /** * Sets a gamerules property as a string. * - * @param prop Property to use. - * @param buffer String to set. - * @param changeState This parameter is ignored. - * @return Number of non-null bytes written. - * @error Not supported. + * @param prop Property to use. + * @param buffer String to set. + * @param changeState This parameter is ignored. + * @return Number of non-null bytes written. + * @error Not supported. */ native int GameRules_SetPropString(const char[] prop, const char[] buffer, bool changeState=false); /** * Gets the current round state. * - * @return Round state. - * @error Game doesn't support round state. + * @return Round state. + * @error Game doesn't support round state. */ stock RoundState GameRules_GetRoundState() { diff --git a/env/include/sdktools_hooks.inc b/env/include/sdktools_hooks.inc index 4f30625..aa20e3b 100644 --- a/env/include/sdktools_hooks.inc +++ b/env/include/sdktools_hooks.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,49 +31,65 @@ */ #if defined _sdktools_hooks_included - #endinput + #endinput #endif #define _sdktools_hooks_included -#define FEATURECAP_PLAYERRUNCMD_11PARAMS "SDKTools PlayerRunCmd 11Params" +#define FEATURECAP_PLAYERRUNCMD_11PARAMS "SDKTools PlayerRunCmd 11Params" /** - * @brief Called when a clients movement buttons are being processed + * Called when a clients movement buttons are being processed * - * @param client Index of the client. - * @param buttons Copyback buffer containing the current commands (as bitflags - see entity_prop_stocks.inc). - * @param impulse Copyback buffer containing the current impulse command. - * @param vel Players desired velocity. - * @param angles Players desired view angles. - * @param weapon Entity index of the new weapon if player switches weapon, 0 otherwise. - * @param subtype Weapon subtype when selected from a menu. - * @param cmdnum Command number. Increments from the first command sent. - * @param tickcount Tick count. A client's prediction based on the server's GetGameTickCount value. - * @param seed Random seed. Used to determine weapon recoil, spread, and other predicted elements. - * @param mouse Mouse direction (x, y). - * @return Plugin_Handled to block the commands from being processed, Plugin_Continue otherwise. + * @param client Index of the client. + * @param buttons Copyback buffer containing the current commands (as bitflags - see entity_prop_stocks.inc). + * @param impulse Copyback buffer containing the current impulse command. + * @param vel Players desired velocity. + * @param angles Players desired view angles. + * @param weapon Entity index of the new weapon if player switches weapon, 0 otherwise. + * @param subtype Weapon subtype when selected from a menu. + * @param cmdnum Command number. Increments from the first command sent. + * @param tickcount Tick count. A client's prediction based on the server's GetGameTickCount value. + * @param seed Random seed. Used to determine weapon recoil, spread, and other predicted elements. + * @param mouse Mouse direction (x, y). + * @return Plugin_Handled to block the commands from being processed, Plugin_Continue otherwise. * - * @note To see if all 11 params are available, use FeatureType_Capability and - * FEATURECAP_PLAYERRUNCMD_11PARAMS. + * @note To see if all 11 params are available, use FeatureType_Capability and FEATURECAP_PLAYERRUNCMD_11PARAMS. */ forward Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]); /** - * @brief Called when a client requests a file from the server. + * Called after a clients movement buttons were processed. * - * @param client Client index. - * @param sFile Requested file path. + * @param client Index of the client. + * @param buttons The current commands (as bitflags - see entity_prop_stocks.inc). + * @param impulse The current impulse command. + * @param vel Players desired velocity. + * @param angles Players desired view angles. + * @param weapon Entity index of the new weapon if player switches weapon, 0 otherwise. + * @param subtype Weapon subtype when selected from a menu. + * @param cmdnum Command number. Increments from the first command sent. + * @param tickcount Tick count. A client's prediction based on the server's GetGameTickCount value. + * @param seed Random seed. Used to determine weapon recoil, spread, and other predicted elements. + * @param mouse Mouse direction (x, y). + */ +forward void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, int cmdnum, int tickcount, int seed, const int mouse[2]); + +/** + * Called when a client requests a file from the server. * - * @return Plugin_Handled to block the transfer, Plugin_Continue to let it proceed. + * @param client Client index. + * @param sFile Requested file path. + * + * @return Plugin_Handled to block the transfer, Plugin_Continue to let it proceed. */ forward Action OnFileSend(int client, const char[] sFile); /** - * @brief Called when a client sends a file to the server. + * Called when a client sends a file to the server. * - * @param client Client index. - * @param sFile Requested file path. + * @param client Client index. + * @param sFile Requested file path. * - * @return Plugin_Handled to block the transfer, Plugin_Continue to let it proceed. + * @return Plugin_Handled to block the transfer, Plugin_Continue to let it proceed. */ forward Action OnFileReceive(int client, const char[] sFile); diff --git a/env/include/sdktools_sound.inc b/env/include/sdktools_sound.inc index 79668b2..41c87de 100644 --- a/env/include/sdktools_sound.inc +++ b/env/include/sdktools_sound.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,40 +31,40 @@ */ #if defined _sdktools_sound_included - #endinput + #endinput #endif #define _sdktools_sound_included /** * Sound should be from the target client. */ -#define SOUND_FROM_PLAYER -2 +#define SOUND_FROM_PLAYER -2 /** * Sound should be from the listen server player. */ -#define SOUND_FROM_LOCAL_PLAYER -1 +#define SOUND_FROM_LOCAL_PLAYER -1 /** * Sound is from the world. */ -#define SOUND_FROM_WORLD 0 +#define SOUND_FROM_WORLD 0 /** * Sound channels. */ enum { - SNDCHAN_REPLACE = -1, /**< Unknown */ - SNDCHAN_AUTO = 0, /**< Auto */ - SNDCHAN_WEAPON = 1, /**< Weapons */ - SNDCHAN_VOICE = 2, /**< Voices */ - SNDCHAN_ITEM = 3, /**< Items */ - SNDCHAN_BODY = 4, /**< Player? */ - SNDCHAN_STREAM = 5, /**< "Stream channel from the static or dynamic area" */ - SNDCHAN_STATIC = 6, /**< "Stream channel from the static area" */ - SNDCHAN_VOICE_BASE = 7, /**< "Channel for network voice data" */ - SNDCHAN_USER_BASE = 135 /**< Anything >= this is allocated to game code */ + SNDCHAN_REPLACE = -1, /**< Unknown */ + SNDCHAN_AUTO = 0, /**< Auto */ + SNDCHAN_WEAPON = 1, /**< Weapons */ + SNDCHAN_VOICE = 2, /**< Voices */ + SNDCHAN_ITEM = 3, /**< Items */ + SNDCHAN_BODY = 4, /**< Player? */ + SNDCHAN_STREAM = 5, /**< "Stream channel from the static or dynamic area" */ + SNDCHAN_STATIC = 6, /**< "Stream channel from the static area" */ + SNDCHAN_VOICE_BASE = 7, /**< "Channel for network voice data" */ + SNDCHAN_USER_BASE = 135 /**< Anything >= this is allocated to game code */ }; /** @@ -72,15 +72,15 @@ enum */ enum { - SND_NOFLAGS= 0, /**< Nothing */ - SND_CHANGEVOL = 1, /**< Change sound volume */ - SND_CHANGEPITCH = 2, /**< Change sound pitch */ - SND_STOP = 3, /**< Stop the sound */ - SND_SPAWNING = 4, /**< Used in some cases for ambients */ - SND_DELAY = 5, /**< Sound has an initial delay */ - SND_STOPLOOPING = 6, /**< Stop looping all sounds on the entity */ - SND_SPEAKER = 7, /**< Being played by a mic through a speaker */ - SND_SHOULDPAUSE = 8, /**< Pause if game is paused */ + SND_NOFLAGS= 0, /**< Nothing */ + SND_CHANGEVOL = 1, /**< Change sound volume */ + SND_CHANGEPITCH = 2, /**< Change sound pitch */ + SND_STOP = 3, /**< Stop the sound */ + SND_SPAWNING = 4, /**< Used in some cases for ambients */ + SND_DELAY = 5, /**< Sound has an initial delay */ + SND_STOPLOOPING = 6, /**< Stop looping all sounds on the entity */ + SND_SPEAKER = 7, /**< Being played by a mic through a speaker */ + SND_SHOULDPAUSE = 8 /**< Pause if game is paused */ }; /** @@ -88,52 +88,53 @@ enum */ enum { - SNDLEVEL_NONE = 0, /**< None */ - SNDLEVEL_RUSTLE = 20, /**< Rustling leaves */ - SNDLEVEL_WHISPER = 25, /**< Whispering */ - SNDLEVEL_LIBRARY = 30, /**< In a library */ - SNDLEVEL_FRIDGE = 45, /**< Refrigerator */ - SNDLEVEL_HOME = 50, /**< Average home (3.9 attn) */ - SNDLEVEL_CONVO = 60, /**< Normal conversation (2.0 attn) */ - SNDLEVEL_DRYER = 60, /**< Clothes dryer */ - SNDLEVEL_DISHWASHER = 65, /**< Dishwasher/washing machine (1.5 attn) */ - SNDLEVEL_CAR = 70, /**< Car or vacuum cleaner (1.0 attn) */ - SNDLEVEL_NORMAL = 75, /**< Normal sound level */ - SNDLEVEL_TRAFFIC = 75, /**< Busy traffic (0.8 attn) */ - SNDLEVEL_MINIBIKE = 80, /**< Mini-bike, alarm clock (0.7 attn) */ - SNDLEVEL_SCREAMING = 90, /**< Screaming child (0.5 attn) */ - SNDLEVEL_TRAIN = 100, /**< Subway train, pneumatic drill (0.4 attn) */ - SNDLEVEL_HELICOPTER = 105, /**< Helicopter */ - SNDLEVEL_SNOWMOBILE = 110, /**< Snow mobile */ - SNDLEVEL_AIRCRAFT = 120, /**< Auto horn, aircraft */ - SNDLEVEL_RAIDSIREN = 130, /**< Air raid siren */ - SNDLEVEL_GUNFIRE = 140, /**< Gunshot, jet engine (0.27 attn) */ - SNDLEVEL_ROCKET = 180, /**< Rocket launching (0.2 attn) */ + SNDLEVEL_NONE = 0, /**< None */ + SNDLEVEL_RUSTLE = 20, /**< Rustling leaves */ + SNDLEVEL_WHISPER = 25, /**< Whispering */ + SNDLEVEL_LIBRARY = 30, /**< In a library */ + SNDLEVEL_FRIDGE = 45, /**< Refrigerator */ + SNDLEVEL_HOME = 50, /**< Average home (3.9 attn) */ + SNDLEVEL_CONVO = 60, /**< Normal conversation (2.0 attn) */ + SNDLEVEL_DRYER = 60, /**< Clothes dryer */ + SNDLEVEL_DISHWASHER = 65, /**< Dishwasher/washing machine (1.5 attn) */ + SNDLEVEL_CAR = 70, /**< Car or vacuum cleaner (1.0 attn) */ + SNDLEVEL_NORMAL = 75, /**< Normal sound level */ + SNDLEVEL_TRAFFIC = 75, /**< Busy traffic (0.8 attn) */ + SNDLEVEL_MINIBIKE = 80, /**< Mini-bike, alarm clock (0.7 attn) */ + SNDLEVEL_SCREAMING = 90, /**< Screaming child (0.5 attn) */ + SNDLEVEL_TRAIN = 100, /**< Subway train, pneumatic drill (0.4 attn) */ + SNDLEVEL_HELICOPTER = 105, /**< Helicopter */ + SNDLEVEL_SNOWMOBILE = 110, /**< Snow mobile */ + SNDLEVEL_AIRCRAFT = 120, /**< Auto horn, aircraft */ + SNDLEVEL_RAIDSIREN = 130, /**< Air raid siren */ + SNDLEVEL_GUNFIRE = 140, /**< Gunshot, jet engine (0.27 attn) */ + SNDLEVEL_ROCKET = 180 /**< Rocket launching (0.2 attn) */ }; -#define SNDVOL_NORMAL 1.0 /**< Normal volume */ -#define SNDPITCH_NORMAL 100 /**< Normal pitch */ -#define SNDPITCH_LOW 95 /**< A low pitch */ -#define SNDPITCH_HIGH 120 /**< A high pitch */ -#define SNDATTN_NONE 0.0 /**< No attenuation */ -#define SNDATTN_NORMAL 0.8 /**< Normal attenuation */ -#define SNDATTN_STATIC 1.25 /**< Static attenuation? */ -#define SNDATTN_RICOCHET 1.5 /**< Ricochet effect */ -#define SNDATTN_IDLE 2.0 /**< Idle attenuation? */ - +#define SNDVOL_NORMAL 1.0 /**< Normal volume */ +#define SNDPITCH_NORMAL 100 /**< Normal pitch */ +#define SNDPITCH_LOW 95 /**< A low pitch */ +#define SNDPITCH_HIGH 120 /**< A high pitch */ +#define SNDATTN_NONE 0.0 /**< No attenuation */ +#define SNDATTN_NORMAL 0.8 /**< Normal attenuation */ +#define SNDATTN_STATIC 1.25 /**< Static attenuation? */ +#define SNDATTN_RICOCHET 1.5 /**< Ricochet effect */ +#define SNDATTN_IDLE 2.0 /**< Idle attenuation? */ + /** * Prefetches a sound. * - * @param name Sound file name relative to the "sounds" folder. + * @param name Sound file name relative to the "sound" folder. */ native void PrefetchSound(const char[] name); /** - * This function is not known to work, and may crash. You should + * This function is not known to work, and may crash. You should * not use it. It is provided for backwards compatibility only. * - * @param name Sound file name relative to the "sounds" folder. - * @return Duration in seconds. + * @param name Sound file name relative to the "sound" folder. + * @return Duration in seconds. + * @deprecated Does not work, may crash. */ #pragma deprecated Does not work, may crash. native float GetSoundDuration(const char[] name); @@ -141,14 +142,14 @@ native float GetSoundDuration(const char[] name); /** * Emits an ambient sound. * - * @param name Sound file name relative to the "sounds" folder. - * @param pos Origin of sound. - * @param entity Entity index to associate sound with. - * @param level Sound level (from 0 to 255). - * @param flags Sound flags. - * @param vol Volume (from 0.0 to 1.0). - * @param pitch Pitch (from 0 to 255). - * @param delay Play delay. + * @param name Sound file name relative to the "sound" folder. + * @param pos Origin of sound. + * @param entity Entity index to associate sound with. + * @param level Sound level (from 0 to 255). + * @param flags Sound flags. + * @param vol Volume (from 0.0 to 1.0). + * @param pitch Pitch (from 0 to 255). + * @param delay Play delay. */ native void EmitAmbientSound(const char[] name, const float pos[3], @@ -162,43 +163,43 @@ native void EmitAmbientSound(const char[] name, /** * Fades a client's volume level toward silence or a given percentage. * - * @param client Client index. - * @param percent Fade percentage. - * @param outtime Fade out time, in seconds. - * @param holdtime Hold time, in seconds. - * @param intime Fade in time, in seconds. - * @error Invalid client index or client not in game. + * @param client Client index. + * @param percent Fade percentage. + * @param outtime Fade out time, in seconds. + * @param holdtime Hold time, in seconds. + * @param intime Fade in time, in seconds. + * @error Invalid client index or client not in game. */ native void FadeClientVolume(int client, float percent, float outtime, float holdtime, float intime); /** * Stops a sound. * - * @param entity Entity index. - * @param channel Channel number. - * @param name Sound file name relative to the "sounds" folder. + * @param entity Entity index. + * @param channel Channel number. + * @param name Sound file name relative to the "sound" folder. */ native void StopSound(int entity, int channel, const char[] name); /** * Emits a sound to a list of clients. * - * @param clients Array of client indexes. - * @param numClients Number of clients in the array. - * @param sample Sound file name relative to the "sounds" folder. - * @param entity Entity to emit from. - * @param channel Channel to emit with. - * @param level Sound level. - * @param flags Sound flags. - * @param volume Sound volume. - * @param pitch Sound pitch. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @param ... Optional list of Float[3] arrays to specify additional origins. - * @error Invalid client index. + * @param clients Array of client indexes. + * @param numClients Number of clients in the array. + * @param sample Sound file name relative to the "sound" folder. + * @param entity Entity to emit from. + * @param channel Channel to emit with. + * @param level Sound level. + * @param flags Sound flags. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @param ... Optional list of Float[3] arrays to specify additional origins. + * @error Invalid client index. */ native void EmitSound(const int[] clients, int numClients, @@ -220,24 +221,24 @@ native void EmitSound(const int[] clients, * Emits a sound or game sound to a list of clients using the latest version of the engine sound interface. * This native is only available in engines that are greater than or equal to Portal 2. * - * @param clients Array of client indexes. - * @param numClients Number of clients in the array. - * @param soundEntry Sound entry name. - * @param sample Sound file name relative to the "sounds" folder. - * @param entity Entity to emit from. - * @param channel Channel to emit with. - * @param level Sound level. - * @param seed Sound seed. - * @param flags Sound flags. - * @param volume Sound volume. - * @param pitch Sound pitch. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @param ... Optional list of Float[3] arrays to specify additional origins. - * @error Invalid client index. + * @param clients Array of client indexes. + * @param numClients Number of clients in the array. + * @param soundEntry Sound entry name. + * @param sample Sound file name relative to the "sound" folder. + * @param entity Entity to emit from. + * @param channel Channel to emit with. + * @param level Sound level. + * @param seed Sound seed. + * @param flags Sound flags. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @param ... Optional list of Float[3] arrays to specify additional origins. + * @error Invalid client index. */ native void EmitSoundEntry(const int[] clients, int numClients, @@ -260,22 +261,22 @@ native void EmitSoundEntry(const int[] clients, /** * Emits a sentence to a list of clients. * - * @param clients Array of client indexes. - * @param numClients Number of clients in the array. - * @param sentence Sentence index (from PrecacheSentenceFile). - * @param entity Entity to emit from. - * @param channel Channel to emit with. - * @param level Sound level. - * @param flags Sound flags. - * @param volume Sound volume. - * @param pitch Sound pitch. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @param ... Optional list of Float[3] arrays to specify additional origins. - * @error Invalid client index. + * @param clients Array of client indexes. + * @param numClients Number of clients in the array. + * @param sentence Sentence index (from PrecacheSentenceFile). + * @param entity Entity to emit from. + * @param channel Channel to emit with. + * @param level Sound level. + * @param flags Sound flags. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @param ... Optional list of Float[3] arrays to specify additional origins. + * @error Invalid client index. */ native void EmitSentence(const int[] clients, int numClients, @@ -292,13 +293,13 @@ native void EmitSentence(const int[] clients, bool updatePos = true, float soundtime = 0.0, any ...); - + /** * Calculates gain of sound on given distance with given sound level in decibel * - * @param soundlevel decibel of sound, like SNDLEVEL_NORMAL or integer value - * @param distance distance of sound to calculate, not meter or feet, but Source Engine`s normal Coordinate unit - * @return gain of sound. you can multiply this with original sound`s volume to calculate volume on given distance + * @param soundlevel decibel of sound, like SNDLEVEL_NORMAL or integer value + * @param distance distance of sound to calculate, not meter or feet, but Source Engine`s normal Coordinate unit + * @return gain of sound. you can multiply this with original sound`s volume to calculate volume on given distance */ native float GetDistGainFromSoundLevel(int soundlevel, float distance); @@ -307,16 +308,16 @@ native float GetDistGainFromSoundLevel(int soundlevel, float distance); * * NOTICE: all parameters can be overwritten to modify the default behavior. * - * @param sample Sound file name relative to the "sounds" folder. - * @param entity Entity index associated to the sound. - * @param volume Volume (from 0.0 to 1.0). - * @param level Sound level (from 0 to 255). - * @param pitch Pitch (from 0 to 255). - * @param pos Origin of sound. - * @param flags Sound flags. - * @param delay Play delay. - * @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, - * Plugin_Changed when any parameter has been modified. + * @param sample Sound file name relative to the "sound" folder. + * @param entity Entity index associated to the sound. + * @param volume Volume (from 0.0 to 1.0). + * @param level Sound level (from 0 to 255). + * @param pitch Pitch (from 0 to 255). + * @param pos Origin of sound. + * @param flags Sound flags. + * @param delay Play delay. + * @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, + * Plugin_Changed when any parameter has been modified. */ typedef AmbientSHook = function Action ( char sample[PLATFORM_MAX_PATH], @@ -336,7 +337,7 @@ typeset NormalSHook // // @param clients Array of client indexes. // @param numClients Number of clients in the array (modify this value if you add/remove elements from the client array). - // @param sample Sound file name relative to the "sounds" folder. + // @param sample Sound file name relative to the "sound" folder. // @param entity Entity emitting the sound. // @param channel Channel emitting the sound. // @param volume Sound volume. @@ -345,17 +346,17 @@ typeset NormalSHook // @param flags Sound flags. // @param soundEntry Game sound entry name. (Used in engines newer than Portal 2) // @param seed Sound seed. (Used in engines newer than Portal 2) - // @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, + // @return Plugin_Continue to allow the sound to be played, Plugin_Stop to block it, // Plugin_Changed when any parameter has been modified. function Action (int clients[MAXPLAYERS], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags, char soundEntry[PLATFORM_MAX_PATH], int &seed); - + // Deprecated. Use other prototype. function Action (int clients[64], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags, char soundEntry[PLATFORM_MAX_PATH], int &seed); - + // Deprecated. Use other prototype. function Action (int clients[64], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags); @@ -364,52 +365,52 @@ typeset NormalSHook /** * Hooks all played ambient sounds. * - * @param hook Function to use as a hook. - * @error Invalid function hook. + * @param hook Function to use as a hook. + * @error Invalid function hook. */ native void AddAmbientSoundHook(AmbientSHook hook); /** * Hooks all played normal sounds. * - * @param hook Function to use as a hook. - * @error Invalid function hook. + * @param hook Function to use as a hook. + * @error Invalid function hook. */ native void AddNormalSoundHook(NormalSHook hook); /** * Unhooks all played ambient sounds. * - * @param hook Function used for the hook. - * @error Invalid function hook. + * @param hook Function used for the hook. + * @error Invalid function hook. */ native void RemoveAmbientSoundHook(AmbientSHook hook); /** * Unhooks all played normal sounds. * - * @param hook Function used for the hook. - * @error Invalid function hook. + * @param hook Function used for the hook. + * @error Invalid function hook. */ native void RemoveNormalSoundHook(NormalSHook hook); - + /** * Wrapper to emit sound to one client. * - * @param client Client index. - * @param sample Sound file name relative to the "sounds" folder. - * @param entity Entity to emit from. - * @param channel Channel to emit with. - * @param level Sound level. - * @param flags Sound flags. - * @param volume Sound volume. - * @param pitch Sound pitch. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @error Invalid client index. + * @param client Client index. + * @param sample Sound file name relative to the "sound" folder. + * @param entity Entity to emit from. + * @param channel Channel to emit with. + * @param level Sound level. + * @param flags Sound flags. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @error Invalid client index. */ stock void EmitSoundToClient(int client, const char[] sample, @@ -429,7 +430,7 @@ stock void EmitSoundToClient(int client, clients[0] = client; /* Save some work for SDKTools and remove SOUND_FROM_PLAYER references */ entity = (entity == SOUND_FROM_PLAYER) ? client : entity; - EmitSound(clients, 1, sample, entity, channel, + EmitSound(clients, 1, sample, entity, channel, level, flags, volume, pitch, speakerentity, origin, dir, updatePos, soundtime); } @@ -437,19 +438,19 @@ stock void EmitSoundToClient(int client, /** * Wrapper to emit sound to all clients. * - * @param sample Sound file name relative to the "sounds" folder. - * @param entity Entity to emit from. - * @param channel Channel to emit with. - * @param level Sound level. - * @param flags Sound flags. - * @param volume Sound volume. - * @param pitch Sound pitch. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @error Invalid client index. + * @param sample Sound file name relative to the "sound" folder. + * @param entity Entity to emit from. + * @param channel Channel to emit with. + * @param level Sound level. + * @param flags Sound flags. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @error Invalid client index. */ stock void EmitSoundToAll(const char[] sample, int entity = SOUND_FROM_PLAYER, @@ -466,7 +467,7 @@ stock void EmitSoundToAll(const char[] sample, { int[] clients = new int[MaxClients]; int total = 0; - + for (int i=1; i<=MaxClients; i++) { if (IsClientInGame(i)) @@ -474,23 +475,21 @@ stock void EmitSoundToAll(const char[] sample, clients[total++] = i; } } - - if (!total) + + if (total) { - return; + EmitSound(clients, total, sample, entity, channel, + level, flags, volume, pitch, speakerentity, + origin, dir, updatePos, soundtime); } - - EmitSound(clients, total, sample, entity, channel, - level, flags, volume, pitch, speakerentity, - origin, dir, updatePos, soundtime); } /** - * Converts an attenuation value to a sound level. + * Converts an attenuation value to a sound level. * This function is from the HL2SDK. * - * @param attn Attenuation value. - * @return Integer sound level. + * @param attn Attenuation value. + * @return Integer sound level. */ stock int ATTN_TO_SNDLEVEL(float attn) { @@ -510,16 +509,16 @@ stock int ATTN_TO_SNDLEVEL(float attn) * Note that if a game sound has a rndwave section, one of them will be returned * at random. * - * @param gameSound Name of game sound. - * @param channel Channel to emit with. - * @param level Sound level. - * @param volume Sound volume. - * @param pitch Sound pitch. - * @param sample Sound file name relative to the "sounds" folder. - * @param maxlength Maximum length of sample string buffer. - * @param entity Entity the sound is being emitted from. - * @return True if the sound was successfully retrieved, false if it - * was not found + * @param gameSound Name of game sound. + * @param channel Channel to emit with. + * @param level Sound level. + * @param volume Sound volume. + * @param pitch Sound pitch. + * @param sample Sound file name relative to the "sound" folder. + * @param maxlength Maximum length of sample string buffer. + * @param entity Entity the sound is being emitted from. + * @return True if the sound was successfully retrieved, false if it + * was not found */ native bool GetGameSoundParams(const char[] gameSound, int &channel, @@ -539,18 +538,18 @@ native bool GetGameSoundParams(const char[] gameSound, * Note that if a game sound has a rndwave section, one of them will be returned * at random. * - * @param clients Array of client indexes. - * @param numClients Number of clients in the array. - * @param gameSound Name of game sound. - * @param entity Entity to emit from. - * @param flags Sound flags. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @return True if the sound was played successfully, false if it failed - * @error Invalid client index. + * @param clients Array of client indexes. + * @param numClients Number of clients in the array. + * @param gameSound Name of game sound. + * @param entity Entity to emit from. + * @param flags Sound flags. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @return True if the sound was played successfully, false if it failed + * @error Invalid client index. */ stock bool EmitGameSound(const int[] clients, int numClients, @@ -568,16 +567,14 @@ stock bool EmitGameSound(const int[] clients, float volume; int pitch; char sample[PLATFORM_MAX_PATH]; - + if (GetGameSoundParams(gameSound, channel, level, volume, pitch, sample, sizeof(sample), entity)) { EmitSound(clients, numClients, sample, entity, channel, level, flags, volume, pitch, speakerentity, origin, dir, updatePos, soundtime); return true; } - else - { - return false; - } + + return false; } /** @@ -589,11 +586,11 @@ stock bool EmitGameSound(const int[] clients, * Note that if a game sound has a rndwave section, one of them will be returned * at random. * - * @param gameSound Name of game sound. - * @param pos Origin of sound. - * @param entity Entity index to associate sound with. - * @param flags Sound flags. - * @param delay Play delay. + * @param gameSound Name of game sound. + * @param pos Origin of sound. + * @param entity Entity index to associate sound with. + * @param flags Sound flags. + * @param delay Play delay. */ stock bool EmitAmbientGameSound(const char[] gameSound, const float pos[3], @@ -606,16 +603,14 @@ stock bool EmitAmbientGameSound(const char[] gameSound, float volume; int pitch; char sample[PLATFORM_MAX_PATH]; - + if (GetGameSoundParams(gameSound, channel, level, volume, pitch, sample, sizeof(sample), entity)) { EmitAmbientSound(sample, pos, entity, level, flags, volume, pitch, delay); return true; } - else - { - return false; - } + + return false; } /** @@ -627,16 +622,16 @@ stock bool EmitAmbientGameSound(const char[] gameSound, * Note that if a game sound has a rndwave section, one of them will be returned * at random. * - * @param client Client index. - * @param gameSound Name of game sound. - * @param entity Entity to emit from. - * @param flags Sound flags. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @error Invalid client index. + * @param client Client index. + * @param gameSound Name of game sound. + * @param entity Entity to emit from. + * @param flags Sound flags. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @error Invalid client index. */ stock bool EmitGameSoundToClient(int client, const char[] gameSound, @@ -665,15 +660,15 @@ stock bool EmitGameSoundToClient(int client, * Note that if a game sound has a rndwave section, one of them will be returned * at random. * - * @param gameSound Name of game sound. - * @param entity Entity to emit from. - * @param flags Sound flags. - * @param speakerentity Unknown. - * @param origin Sound origin. - * @param dir Sound direction. - * @param updatePos Unknown (updates positions?) - * @param soundtime Alternate time to play sound for. - * @error Invalid client index. + * @param gameSound Name of game sound. + * @param entity Entity to emit from. + * @param flags Sound flags. + * @param speakerentity Unknown. + * @param origin Sound origin. + * @param dir Sound direction. + * @param updatePos Unknown (updates positions?) + * @param soundtime Alternate time to play sound for. + * @error Invalid client index. */ stock bool EmitGameSoundToAll(const char[] gameSound, int entity = SOUND_FROM_PLAYER, @@ -686,7 +681,7 @@ stock bool EmitGameSoundToAll(const char[] gameSound, { int[] clients = new int[MaxClients]; int total = 0; - + for (int i=1; i<=MaxClients; i++) { if (IsClientInGame(i)) @@ -694,12 +689,12 @@ stock bool EmitGameSoundToAll(const char[] gameSound, clients[total++] = i; } } - + if (!total) { return false; } - + return EmitGameSound(clients, total, gameSound, entity, flags, speakerentity, origin, dir, updatePos, soundtime); } @@ -710,16 +705,15 @@ stock bool EmitGameSoundToAll(const char[] gameSound, * Most games will precache all game sounds on map start, but this is not guaranteed... * Team Fortress 2 is known to not pre-cache MvM game mode sounds on non-MvM maps. * - * Due to the above, this native should be called before any calls to GetGameSoundParams, + * Due to the above, this native should be called before any calls to GetGameSoundParams, * EmitGameSound*, or EmitAmbientGameSound. * * It should be safe to pass already precached game sounds to this function. - * + * * Note: It precaches all files for a game sound. - * - * @param soundname Game sound to precache - * - * @return True if the game sound was found, false if sound did not exist - * or had no files + * + * @param soundname Game sound to precache + * @return True if the game sound was found, false if sound did not exist + * or had no files */ native bool PrecacheScriptSound(const char[] soundname); diff --git a/env/include/sdktools_stocks.inc b/env/include/sdktools_stocks.inc index dfc32e0..9417938 100644 --- a/env/include/sdktools_stocks.inc +++ b/env/include/sdktools_stocks.inc @@ -31,7 +31,7 @@ */ #if defined _sdktools_stocks_included - #endinput + #endinput #endif #define _sdktools_stocks_included @@ -42,10 +42,10 @@ * first N characters of the team names, where N is the number of * characters in the search pattern. * - * @param name Partial or full team name. - * @return A valid team index on success. - * -1 if no team matched. - * -2 if more than one team matched. + * @param name Partial or full team name. + * @return A valid team index on success. + * -1 if no team matched. + * -2 if more than one team matched. */ stock int FindTeamByName(const char[] name) { diff --git a/env/include/sdktools_stringtables.inc b/env/include/sdktools_stringtables.inc index 9d36c2d..497dd99 100644 --- a/env/include/sdktools_stringtables.inc +++ b/env/include/sdktools_stringtables.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,131 +31,131 @@ */ #if defined _sdktools_stringtables_included - #endinput + #endinput #endif #define _sdktools_stringtables_included -#define INVALID_STRING_TABLE -1 /**< An invalid string table index */ -#define INVALID_STRING_INDEX -1 /**< An invalid string index in a table */ +#define INVALID_STRING_TABLE -1 /**< An invalid string table index */ +#define INVALID_STRING_INDEX -1 /**< An invalid string index in a table */ /** * Searches for a string table. * - * @param name Name of string table to find. - * @return A string table index number if found, INVALID_STRING_TABLE otherwise. + * @param name Name of string table to find. + * @return A string table index number if found, INVALID_STRING_TABLE otherwise. */ native int FindStringTable(const char[] name); /** * Returns the number of string tables that currently exist. * - * @return Number of string tables that currently exist. + * @return Number of string tables that currently exist. */ native int GetNumStringTables(); /** * Returns the number of strings that currently exist in a given string table. * - * @param tableidx A string table index. - * @return Number of strings that currently exist. - * @error Invalid string table index. + * @param tableidx A string table index. + * @return Number of strings that currently exist. + * @error Invalid string table index. */ native int GetStringTableNumStrings(int tableidx); /** * Returns the maximum number of strings that are allowed in a given string table. * - * @param tableidx A string table index. - * @return Maximum number of strings allowed. - * @error Invalid string table index. + * @param tableidx A string table index. + * @return Maximum number of strings allowed. + * @error Invalid string table index. */ native int GetStringTableMaxStrings(int tableidx); /** * Retrieves the name of a string table. * - * @param tableidx A string table index. - * @param name Buffer to store the name of the string table. - * @param maxlength Maximum length of string buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid string table index. + * @param tableidx A string table index. + * @param name Buffer to store the name of the string table. + * @param maxlength Maximum length of string buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid string table index. */ native int GetStringTableName(int tableidx, char[] name, int maxlength); /** * Searches for the index of a given string in a string table. * - * @param tableidx A string table index. - * @param str String to find. - * @return String index if found, INVALID_STRING_INDEX otherwise. - * @error Invalid string table index. + * @param tableidx A string table index. + * @param str String to find. + * @return String index if found, INVALID_STRING_INDEX otherwise. + * @error Invalid string table index. */ native int FindStringIndex(int tableidx, const char[] str); /** * Retrieves the string at a given index of a string table. * - * @param tableidx A string table index. - * @param stringidx A string index. - * @param str Buffer to store the string value. - * @param maxlength Maximum length of string buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid string table index or string index. + * @param tableidx A string table index. + * @param stringidx A string index. + * @param str Buffer to store the string value. + * @param maxlength Maximum length of string buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid string table index or string index. */ native int ReadStringTable(int tableidx, int stringidx, char[] str, int maxlength); /** * Returns the length of the user data associated with a given string index. * - * @param tableidx A string table index. - * @param stringidx A string index. - * @return Length of user data. This will be 0 if there is no user data. - * @error Invalid string table index or string index. + * @param tableidx A string table index. + * @param stringidx A string index. + * @return Length of user data. This will be 0 if there is no user data. + * @error Invalid string table index or string index. */ native int GetStringTableDataLength(int tableidx, int stringidx); /** * Retrieves the user data associated with a given string index. * - * @param tableidx A string table index. - * @param stringidx A string index. - * @param userdata Buffer to store the user data. This will be set to "" if there is no user data. - * @param maxlength Maximum length of string buffer. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid string table index or string index. + * @param tableidx A string table index. + * @param stringidx A string index. + * @param userdata Buffer to store the user data. This will be set to "" if there is no user data. + * @param maxlength Maximum length of string buffer. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid string table index or string index. */ native int GetStringTableData(int tableidx, int stringidx, char[] userdata, int maxlength); /** * Sets the user data associated with a given string index. * - * @param tableidx A string table index. - * @param stringidx A string index. - * @param userdata User data string that will be set. - * @param length Length of user data string. This should include the null terminator. - * @return Number of bytes written to the buffer (UTF-8 safe). - * @error Invalid string table index or string index. + * @param tableidx A string table index. + * @param stringidx A string index. + * @param userdata User data string that will be set. + * @param length Length of user data string. This should include the null terminator. + * @return Number of bytes written to the buffer (UTF-8 safe). + * @error Invalid string table index or string index. */ native int SetStringTableData(int tableidx, int stringidx, const char[] userdata, int length); /** * Adds a string to a given string table. * - * @param tableidx A string table index. - * @param str String to add. - * @param userdata An optional user data string. - * @param length Length of user data string. This should include the null terminator. - * If set to -1, then user data will be not be altered if the specified string - * already exists in the string table. + * @param tableidx A string table index. + * @param str String to add. + * @param userdata An optional user data string. + * @param length Length of user data string. This should include the null terminator. + * If set to -1, then user data will be not be altered if the specified string + * already exists in the string table. */ native void AddToStringTable(int tableidx, const char[] str, const char[] userdata="", int length=-1); /** * Locks or unlocks the network string tables. * - * @param lock Determines whether network string tables should be locked. - * True means the tables should be locked for writing; false means unlocked. - * @return Previous lock state. + * @param lock Determines whether network string tables should be locked. + * True means the tables should be locked for writing; false means unlocked. + * @return Previous lock state. */ native bool LockStringTables(bool lock); @@ -163,17 +163,17 @@ native bool LockStringTables(bool lock); * Adds a file to the downloadables network string table. * This forces a client to download the file if they do not already have it. * - * @param filename File that will be added to downloadables table. + * @param filename File that will be added to downloadables table. */ stock void AddFileToDownloadsTable(const char[] filename) { static int table = INVALID_STRING_TABLE; - + if (table == INVALID_STRING_TABLE) { table = FindStringTable("downloadables"); } - + bool save = LockStringTables(false); AddToStringTable(table, filename); LockStringTables(save); diff --git a/env/include/sdktools_tempents.inc b/env/include/sdktools_tempents.inc index 252fdd7..cc35c71 100644 --- a/env/include/sdktools_tempents.inc +++ b/env/include/sdktools_tempents.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -38,128 +38,128 @@ /** * Called when a temp entity is going to be sent. * - * @param te_name TE name. - * @param Players Array containing target player indexes. - * @param numClients Number of players in the array. - * @param delay Delay in seconds to send the TE. - * @return Plugin_Continue to allow the transmission of the TE, Plugin_Stop to block it. + * @param te_name TE name. + * @param Players Array containing target player indexes. + * @param numClients Number of players in the array. + * @param delay Delay in seconds to send the TE. + * @return Plugin_Continue to allow the transmission of the TE, Plugin_Stop to block it. */ typedef TEHook = function Action (const char[] te_name, const int[] Players, int numClients, float delay); /** * Hooks a temp entity. * - * @param te_name TE name to hook. - * @param hook Function to use as a hook. - * @error Temp Entity name not available or invalid function hook. + * @param te_name TE name to hook. + * @param hook Function to use as a hook. + * @error Temp Entity name not available or invalid function hook. */ native void AddTempEntHook(const char[] te_name, TEHook hook); /** * Removes a temp entity hook. * - * @param te_name TE name to unhook. - * @param hook Function used for the hook. - * @error Temp Entity name not available or invalid function hook. + * @param te_name TE name to unhook. + * @param hook Function used for the hook. + * @error Temp Entity name not available or invalid function hook. */ native void RemoveTempEntHook(const char[] te_name, TEHook hook); /** * Starts a temp entity transmission. * - * @param te_name TE name. - * @error Temp Entity name not available. + * @param te_name TE name. + * @error Temp Entity name not available. */ native void TE_Start(const char[] te_name); /** * Checks if a certain TE property exists. * - * @param prop Property to use. - * @return True if the property exists, otherwise false. + * @param prop Property to use. + * @return True if the property exists, otherwise false. */ native bool TE_IsValidProp(const char[] prop); /** * Sets an integer value in the current temp entity. * - * @param prop Property to use. - * @param value Integer value to set. - * @error Property not found. + * @param prop Property to use. + * @param value Integer value to set. + * @error Property not found. */ native void TE_WriteNum(const char[] prop, int value); /** * Reads an integer value in the current temp entity. * - * @param prop Property to use. - * @return Property value. - * @error Property not found. + * @param prop Property to use. + * @return Property value. + * @error Property not found. */ native int TE_ReadNum(const char[] prop); /** * Sets a floating point number in the current temp entity. * - * @param prop Property to use. - * @param value Floating point number to set. - * @error Property not found. + * @param prop Property to use. + * @param value Floating point number to set. + * @error Property not found. */ native void TE_WriteFloat(const char[] prop, float value); /** * Reads a floating point number in the current temp entity. * - * @param prop Property to use. - * @return Property value. - * @error Property not found. + * @param prop Property to use. + * @return Property value. + * @error Property not found. */ native float TE_ReadFloat(const char[] prop); /** * Sets a vector in the current temp entity. * - * @param prop Property to use. - * @param vector Vector to set. - * @error Property not found. + * @param prop Property to use. + * @param vector Vector to set. + * @error Property not found. */ native void TE_WriteVector(const char[] prop, const float vector[3]); /** * Reads a vector in the current temp entity. * - * @param prop Property to use. - * @param vector Vector to read. - * @error Property not found. + * @param prop Property to use. + * @param vector Vector to read. + * @error Property not found. */ native void TE_ReadVector(const char[] prop, float vector[3]); /** * Sets a QAngle in the current temp entity. * - * @param prop Property to use. - * @param angles Angles to set. - * @error Property not found. + * @param prop Property to use. + * @param angles Angles to set. + * @error Property not found. */ native void TE_WriteAngles(const char[] prop, const float angles[3]); /** * Sets an array of floats in the current temp entity. * - * @param prop Property to use. - * @param array Array of values to copy. - * @param arraySize Number of values to copy. - * @error Property not found. + * @param prop Property to use. + * @param array Array of values to copy. + * @param arraySize Number of values to copy. + * @error Property not found. */ native void TE_WriteFloatArray(const char[] prop, const float[] array, int arraySize); /** * Sends the current temp entity to one or more clients. * - * @param clients Array containing player indexes to broadcast to. - * @param numClients Number of players in the array. - * @param delay Delay in seconds to send the TE. - * @error Invalid client index or client not in game. + * @param clients Array containing player indexes to broadcast to. + * @param numClients Number of players in the array. + * @param delay Delay in seconds to send the TE. + * @error Invalid client index or client not in game. */ native void TE_Send(const int[] clients, int numClients, float delay=0.0); @@ -167,9 +167,9 @@ native void TE_Send(const int[] clients, int numClients, float delay=0.0); * Sets an encoded entity index in the current temp entity. * (This is usually used for m_nStartEntity and m_nEndEntity). * - * @param prop Property to use. - * @param value Value to set. - * @error Property not found. + * @param prop Property to use. + * @param value Value to set. + * @error Property not found. */ stock void TE_WriteEncodedEnt(const char[] prop, int value) { @@ -181,7 +181,7 @@ stock void TE_WriteEncodedEnt(const char[] prop, int value) * Broadcasts the current temp entity to all clients. * @note See TE_Start(). * - * @param delay Delay in seconds to send the TE. + * @param delay Delay in seconds to send the TE. */ stock void TE_SendToAll(float delay=0.0) { @@ -201,9 +201,9 @@ stock void TE_SendToAll(float delay=0.0) * Sends the current TE to only a client. * @note See TE_Start(). * - * @param client Client to send to. - * @param delay Delay in seconds to send the TE. - * @error Invalid client index or client not in game. + * @param client Client to send to. + * @param delay Delay in seconds to send the TE. + * @error Invalid client index or client not in game. */ stock void TE_SendToClient(int client, float delay=0.0) { @@ -215,14 +215,14 @@ stock void TE_SendToClient(int client, float delay=0.0) } /** - * Sends the current TE to all clients that are in + * Sends the current TE to all clients that are in * visible or audible range of the origin. * @note See TE_Start(). * @note See GetClientsInRange() * - * @param origin Coordinates from which to test range. - * @param rangeType Range type to use for filtering clients. - * @param delay Delay in seconds to send the TE. + * @param origin Coordinates from which to test range. + * @param rangeType Range type to use for filtering clients. + * @param delay Delay in seconds to send the TE. */ stock void TE_SendToAllInRange(float origin[3], ClientRangeType rangeType, float delay=0.0) { diff --git a/env/include/sdktools_tempents_stocks.inc b/env/include/sdktools_tempents_stocks.inc index d114ba0..75dfc5e 100644 --- a/env/include/sdktools_tempents_stocks.inc +++ b/env/include/sdktools_tempents_stocks.inc @@ -38,15 +38,15 @@ /** * @section TE Explosion flags. */ -#define TE_EXPLFLAG_NONE 0x0 /**< all flags clear makes default Half-Life explosion */ -#define TE_EXPLFLAG_NOADDITIVE 0x1 /**< sprite will be drawn opaque (ensure that the sprite you send is a non-additive sprite) */ -#define TE_EXPLFLAG_NODLIGHTS 0x2 /**< do not render dynamic lights */ -#define TE_EXPLFLAG_NOSOUND 0x4 /**< do not play client explosion sound */ -#define TE_EXPLFLAG_NOPARTICLES 0x8 /**< do not draw particles */ -#define TE_EXPLFLAG_DRAWALPHA 0x10 /**< sprite will be drawn alpha */ -#define TE_EXPLFLAG_ROTATE 0x20 /**< rotate the sprite randomly */ -#define TE_EXPLFLAG_NOFIREBALL 0x40 /**< do not draw a fireball */ -#define TE_EXPLFLAG_NOFIREBALLSMOKE 0x80 /**< do not draw smoke with the fireball */ +#define TE_EXPLFLAG_NONE 0x0 /**< all flags clear makes default Half-Life explosion */ +#define TE_EXPLFLAG_NOADDITIVE 0x1 /**< sprite will be drawn opaque (ensure that the sprite you send is a non-additive sprite) */ +#define TE_EXPLFLAG_NODLIGHTS 0x2 /**< do not render dynamic lights */ +#define TE_EXPLFLAG_NOSOUND 0x4 /**< do not play client explosion sound */ +#define TE_EXPLFLAG_NOPARTICLES 0x8 /**< do not draw particles */ +#define TE_EXPLFLAG_DRAWALPHA 0x10 /**< sprite will be drawn alpha */ +#define TE_EXPLFLAG_ROTATE 0x20 /**< rotate the sprite randomly */ +#define TE_EXPLFLAG_NOFIREBALL 0x40 /**< do not draw a fireball */ +#define TE_EXPLFLAG_NOFIREBALLSMOKE 0x80 /**< do not draw smoke with the fireball */ /** * @endsection @@ -55,22 +55,22 @@ /** * @section TE Beam flags. */ -#define FBEAM_STARTENTITY 0x00000001 -#define FBEAM_ENDENTITY 0x00000002 -#define FBEAM_FADEIN 0x00000004 -#define FBEAM_FADEOUT 0x00000008 -#define FBEAM_SINENOISE 0x00000010 -#define FBEAM_SOLID 0x00000020 -#define FBEAM_SHADEIN 0x00000040 -#define FBEAM_SHADEOUT 0x00000080 -#define FBEAM_ONLYNOISEONCE 0x00000100 /**< Only calculate our noise once */ -#define FBEAM_NOTILE 0x00000200 -#define FBEAM_USE_HITBOXES 0x00000400 /**< Attachment indices represent hitbox indices instead when this is set. */ -#define FBEAM_STARTVISIBLE 0x00000800 /**< Has this client actually seen this beam's start entity yet? */ -#define FBEAM_ENDVISIBLE 0x00001000 /**< Has this client actually seen this beam's end entity yet? */ -#define FBEAM_ISACTIVE 0x00002000 -#define FBEAM_FOREVER 0x00004000 -#define FBEAM_HALOBEAM 0x00008000 /**< When drawing a beam with a halo, don't ignore the segments and endwidth */ +#define FBEAM_STARTENTITY 0x00000001 +#define FBEAM_ENDENTITY 0x00000002 +#define FBEAM_FADEIN 0x00000004 +#define FBEAM_FADEOUT 0x00000008 +#define FBEAM_SINENOISE 0x00000010 +#define FBEAM_SOLID 0x00000020 +#define FBEAM_SHADEIN 0x00000040 +#define FBEAM_SHADEOUT 0x00000080 +#define FBEAM_ONLYNOISEONCE 0x00000100 /**< Only calculate our noise once */ +#define FBEAM_NOTILE 0x00000200 +#define FBEAM_USE_HITBOXES 0x00000400 /**< Attachment indices represent hitbox indices instead when this is set. */ +#define FBEAM_STARTVISIBLE 0x00000800 /**< Has this client actually seen this beam's start entity yet? */ +#define FBEAM_ENDVISIBLE 0x00001000 /**< Has this client actually seen this beam's end entity yet? */ +#define FBEAM_ISACTIVE 0x00002000 +#define FBEAM_FOREVER 0x00004000 +#define FBEAM_HALOBEAM 0x00008000 /**< When drawing a beam with a halo, don't ignore the segments and endwidth */ /** * @endsection @@ -79,10 +79,10 @@ /** * Sets up a sparks effect. * - * @param pos Position of the sparks. - * @param dir Direction of the sparks. - * @param Magnitude Sparks size. - * @param TrailLength Trail lenght of the sparks. + * @param pos Position of the sparks. + * @param dir Direction of the sparks. + * @param Magnitude Sparks size. + * @param TrailLength Trail lenght of the sparks. */ stock void TE_SetupSparks(const float pos[3], const float dir[3], int Magnitude, int TrailLength) { @@ -96,10 +96,10 @@ stock void TE_SetupSparks(const float pos[3], const float dir[3], int Magnitude, /** * Sets up a smoke effect. * - * @param pos Position of the smoke. - * @param Model Precached model index. - * @param Scale Scale of the smoke. - * @param FrameRate Frame rate of the smoke. + * @param pos Position of the smoke. + * @param Model Precached model index. + * @param Scale Scale of the smoke. + * @param FrameRate Frame rate of the smoke. */ stock void TE_SetupSmoke(const float pos[3], int Model, float Scale, int FrameRate) { @@ -113,10 +113,10 @@ stock void TE_SetupSmoke(const float pos[3], int Model, float Scale, int FrameRa /** * Sets up a dust cloud effect. * - * @param pos Position of the dust. - * @param dir Direction of the dust. - * @param Size Dust cloud size. - * @param Speed Dust cloud speed. + * @param pos Position of the dust. + * @param dir Direction of the dust. + * @param Size Dust cloud size. + * @param Speed Dust cloud speed. */ stock void TE_SetupDust(const float pos[3], const float dir[3], float Size, float Speed) { @@ -130,10 +130,10 @@ stock void TE_SetupDust(const float pos[3], const float dir[3], float Size, floa /** * Sets up a muzzle flash effect. * - * @param pos Position of the muzzle flash. - * @param angles Rotation angles of the muzzle flash. - * @param Scale Scale of the muzzle flash. - * @param Type Muzzle flash type to render (Mod specific). + * @param pos Position of the muzzle flash. + * @param angles Rotation angles of the muzzle flash. + * @param Scale Scale of the muzzle flash. + * @param Type Muzzle flash type to render (Mod specific). */ stock void TE_SetupMuzzleFlash(const float pos[3], const float angles[3], float Scale, int Type) { @@ -147,8 +147,8 @@ stock void TE_SetupMuzzleFlash(const float pos[3], const float angles[3], float /** * Sets up a metal sparks effect. * - * @param pos Position of the metal sparks. - * @param dir Direction of the metal sparks. + * @param pos Position of the metal sparks. + * @param dir Direction of the metal sparks. */ stock void TE_SetupMetalSparks(const float pos[3], const float dir[3]) { @@ -160,9 +160,9 @@ stock void TE_SetupMetalSparks(const float pos[3], const float dir[3]) /** * Sets up an energy splash effect. * - * @param pos Position of the energy splash. - * @param dir Direction of the energy splash. - * @param Explosive Makes the effect explosive. + * @param pos Position of the energy splash. + * @param dir Direction of the energy splash. + * @param Explosive Makes the effect explosive. */ stock void TE_SetupEnergySplash(const float pos[3], const float dir[3], bool Explosive) { @@ -175,8 +175,8 @@ stock void TE_SetupEnergySplash(const float pos[3], const float dir[3], bool Exp /** * Sets up an armor ricochet effect. * - * @param pos Position of the armor ricochet. - * @param dir Direction of the armor ricochet. + * @param pos Position of the armor ricochet. + * @param dir Direction of the armor ricochet. */ stock void TE_SetupArmorRicochet(const float pos[3], const float dir[3]) { @@ -188,11 +188,11 @@ stock void TE_SetupArmorRicochet(const float pos[3], const float dir[3]) /** * Sets up a glowing sprite effect. * - * @param pos Position of the sprite. - * @param Model Precached model index. - * @param Life Time duration of the sprite. - * @param Size Sprite size. - * @param Brightness Sprite brightness. + * @param pos Position of the sprite. + * @param Model Precached model index. + * @param Life Time duration of the sprite. + * @param Size Sprite size. + * @param Brightness Sprite brightness. */ stock void TE_SetupGlowSprite(const float pos[3], int Model, float Life, float Size, int Brightness) { @@ -207,15 +207,15 @@ stock void TE_SetupGlowSprite(const float pos[3], int Model, float Life, float S /** * Sets up a explosion effect. * - * @param pos Explosion position. - * @param Model Precached model index. - * @param Scale Explosion scale. - * @param Framerate Explosion frame rate. - * @param Flags Explosion flags. - * @param Radius Explosion radius. - * @param Magnitude Explosion size. - * @param normal Normal vector to the explosion. - * @param MaterialType Exploded material type. + * @param pos Explosion position. + * @param Model Precached model index. + * @param Scale Explosion scale. + * @param Framerate Explosion frame rate. + * @param Flags Explosion flags. + * @param Radius Explosion radius. + * @param Magnitude Explosion size. + * @param normal Normal vector to the explosion. + * @param MaterialType Exploded material type. */ stock void TE_SetupExplosion(const float pos[3], int Model, float Scale, int Framerate, int Flags, int Radius, int Magnitude, const float normal[3]={0.0, 0.0, 1.0}, int MaterialType='C') { @@ -234,12 +234,12 @@ stock void TE_SetupExplosion(const float pos[3], int Model, float Scale, int Fra /** * Sets up a blood sprite effect. * - * @param pos Position of the sprite. - * @param dir Sprite direction. - * @param color Color array (r, g, b, a). - * @param Size Sprite size. - * @param SprayModel Precached model index. - * @param BloodDropModel Precached model index. + * @param pos Position of the sprite. + * @param dir Sprite direction. + * @param color Color array (r, g, b, a). + * @param Size Sprite size. + * @param SprayModel Precached model index. + * @param BloodDropModel Precached model index. */ stock void TE_SetupBloodSprite(const float pos[3], const float dir[3], const int color[4], int Size, int SprayModel, int BloodDropModel) { @@ -258,19 +258,19 @@ stock void TE_SetupBloodSprite(const float pos[3], const float dir[3], const int /** * Sets up a beam ring point effect. * - * @param center Center position of the ring. - * @param Start_Radius Initial ring radius. - * @param End_Radius Final ring radius. - * @param ModelIndex Precached model index. - * @param HaloIndex Precached model index. - * @param StartFrame Initial frame to render. - * @param FrameRate Ring frame rate. - * @param Life Time duration of the ring. - * @param Width Beam width. - * @param Amplitude Beam amplitude. - * @param Color Color array (r, g, b, a). - * @param Speed Speed of the beam. - * @param Flags Beam flags. + * @param center Center position of the ring. + * @param Start_Radius Initial ring radius. + * @param End_Radius Final ring radius. + * @param ModelIndex Precached model index. + * @param HaloIndex Precached model index. + * @param StartFrame Initial frame to render. + * @param FrameRate Ring frame rate. + * @param Life Time duration of the ring. + * @param Width Beam width. + * @param Amplitude Beam amplitude. + * @param Color Color array (r, g, b, a). + * @param Speed Speed of the beam. + * @param Flags Beam flags. */ stock void TE_SetupBeamRingPoint(const float center[3], float Start_Radius, float End_Radius, int ModelIndex, int HaloIndex, int StartFrame, int FrameRate, float Life, float Width, float Amplitude, const int Color[4], int Speed, int Flags) @@ -299,19 +299,19 @@ stock void TE_SetupBeamRingPoint(const float center[3], float Start_Radius, floa /** * Sets up a point to point beam effect. * - * @param start Start position of the beam. - * @param end End position of the beam. - * @param ModelIndex Precached model index. - * @param HaloIndex Precached model index. - * @param StartFrame Initial frame to render. - * @param FrameRate Beam frame rate. - * @param Life Time duration of the beam. - * @param Width Initial beam width. - * @param EndWidth Final beam width. - * @param FadeLength Beam fade time duration. - * @param Amplitude Beam amplitude. - * @param Color Color array (r, g, b, a). - * @param Speed Speed of the beam. + * @param start Start position of the beam. + * @param end End position of the beam. + * @param ModelIndex Precached model index. + * @param HaloIndex Precached model index. + * @param StartFrame Initial frame to render. + * @param FrameRate Beam frame rate. + * @param Life Time duration of the beam. + * @param Width Initial beam width. + * @param EndWidth Final beam width. + * @param FadeLength Beam fade time duration. + * @param Amplitude Beam amplitude. + * @param Color Color array (r, g, b, a). + * @param Speed Speed of the beam. */ stock void TE_SetupBeamPoints(const float start[3], const float end[3], int ModelIndex, int HaloIndex, int StartFrame, int FrameRate, float Life, float Width, float EndWidth, int FadeLength, float Amplitude, const int Color[4], int Speed) @@ -338,19 +338,19 @@ stock void TE_SetupBeamPoints(const float start[3], const float end[3], int Mode /** * Sets up an entity to entity laser effect. * - * @param StartEntity Entity index from where the beam starts. - * @param EndEntity Entity index from where the beam ends. - * @param ModelIndex Precached model index. - * @param HaloIndex Precached model index. - * @param StartFrame Initial frame to render. - * @param FrameRate Beam frame rate. - * @param Life Time duration of the beam. - * @param Width Initial beam width. - * @param EndWidth Final beam width. - * @param FadeLength Beam fade time duration. - * @param Amplitude Beam amplitude. - * @param Color Color array (r, g, b, a). - * @param Speed Speed of the beam. + * @param StartEntity Entity index from where the beam starts. + * @param EndEntity Entity index from where the beam ends. + * @param ModelIndex Precached model index. + * @param HaloIndex Precached model index. + * @param StartFrame Initial frame to render. + * @param FrameRate Beam frame rate. + * @param Life Time duration of the beam. + * @param Width Initial beam width. + * @param EndWidth Final beam width. + * @param FadeLength Beam fade time duration. + * @param Amplitude Beam amplitude. + * @param Color Color array (r, g, b, a). + * @param Speed Speed of the beam. */ stock void TE_SetupBeamLaser(int StartEntity, int EndEntity, int ModelIndex, int HaloIndex, int StartFrame, int FrameRate, float Life, float Width, float EndWidth, int FadeLength, float Amplitude, const int Color[4], int Speed) @@ -377,18 +377,18 @@ stock void TE_SetupBeamLaser(int StartEntity, int EndEntity, int ModelIndex, int /** * Sets up a beam ring effect. * - * @param StartEntity Entity index from where the ring starts. - * @param EndEntity Entity index from where the ring ends. - * @param ModelIndex Precached model index. - * @param HaloIndex Precached model index. - * @param StartFrame Initial frame to render. - * @param FrameRate Ring frame rate. - * @param Life Time duration of the ring. - * @param Width Beam width. - * @param Amplitude Beam amplitude. - * @param Color Color array (r, g, b, a). - * @param Speed Speed of the beam. - * @param Flags Beam flags. + * @param StartEntity Entity index from where the ring starts. + * @param EndEntity Entity index from where the ring ends. + * @param ModelIndex Precached model index. + * @param HaloIndex Precached model index. + * @param StartFrame Initial frame to render. + * @param FrameRate Ring frame rate. + * @param Life Time duration of the ring. + * @param Width Beam width. + * @param Amplitude Beam amplitude. + * @param Color Color array (r, g, b, a). + * @param Speed Speed of the beam. + * @param Flags Beam flags. */ stock void TE_SetupBeamRing(int StartEntity, int EndEntity, int ModelIndex, int HaloIndex, int StartFrame, int FrameRate, float Life, float Width, float Amplitude, const int Color[4], int Speed, int Flags) { @@ -415,14 +415,14 @@ stock void TE_SetupBeamRing(int StartEntity, int EndEntity, int ModelIndex, int /** * Sets up a follow beam effect. * - * @param EntIndex Entity index from where the beam starts. - * @param ModelIndex Precached model index. - * @param HaloIndex Precached model index. - * @param Life Time duration of the beam. - * @param Width Initial beam width. - * @param EndWidth Final beam width. - * @param FadeLength Beam fade time duration. - * @param Color Color array (r, g, b, a). + * @param EntIndex Entity index from where the beam starts. + * @param ModelIndex Precached model index. + * @param HaloIndex Precached model index. + * @param Life Time duration of the beam. + * @param Width Initial beam width. + * @param EndWidth Final beam width. + * @param FadeLength Beam fade time duration. + * @param Color Color array (r, g, b, a). */ stock void TE_SetupBeamFollow(int EntIndex, int ModelIndex, int HaloIndex, float Life, float Width, float EndWidth, int FadeLength, const int Color[4]) { diff --git a/env/include/sdktools_trace.inc b/env/include/sdktools_trace.inc index daf83c7..cf977e1 100644 --- a/env/include/sdktools_trace.inc +++ b/env/include/sdktools_trace.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -35,70 +35,124 @@ #endif #define _sdktools_trace_included -#define CONTENTS_EMPTY 0 /**< No contents. */ -#define CONTENTS_SOLID 0x1 /**< an eye is never valid in a solid . */ -#define CONTENTS_WINDOW 0x2 /**< translucent, but not watery (glass). */ -#define CONTENTS_AUX 0x4 -#define CONTENTS_GRATE 0x8 /**< alpha-tested "grate" textures. Bullets/sight pass through, but solids don't. */ -#define CONTENTS_SLIME 0x10 -#define CONTENTS_WATER 0x20 -#define CONTENTS_MIST 0x40 -#define CONTENTS_OPAQUE 0x80 /**< things that cannot be seen through (may be non-solid though). */ -#define LAST_VISIBLE_CONTENTS 0x80 -#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) -#define CONTENTS_TESTFOGVOLUME 0x100 -#define CONTENTS_UNUSED5 0x200 -#define CONTENTS_UNUSED6 0x4000 -#define CONTENTS_TEAM1 0x800 /**< per team contents used to differentiate collisions. */ -#define CONTENTS_TEAM2 0x1000 /**< between players and objects on different teams. */ -#define CONTENTS_IGNORE_NODRAW_OPAQUE 0x2000 /**< ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW. */ -#define CONTENTS_MOVEABLE 0x4000 /**< hits entities which are MOVETYPE_PUSH (doors, plats, etc) */ -#define CONTENTS_AREAPORTAL 0x8000 /**< remaining contents are non-visible, and don't eat brushes. */ -#define CONTENTS_PLAYERCLIP 0x10000 -#define CONTENTS_MONSTERCLIP 0x20000 +#define CONTENTS_EMPTY 0 /**< No contents. */ +#define CONTENTS_SOLID 0x1 /**< an eye is never valid in a solid . */ +#define CONTENTS_WINDOW 0x2 /**< translucent, but not watery (glass). */ +#define CONTENTS_AUX 0x4 +#define CONTENTS_GRATE 0x8 /**< alpha-tested "grate" textures. Bullets/sight pass through, but solids don't. */ +#define CONTENTS_SLIME 0x10 +#define CONTENTS_WATER 0x20 +#define CONTENTS_MIST 0x40 +#define CONTENTS_OPAQUE 0x80 /**< things that cannot be seen through (may be non-solid though). */ +#define LAST_VISIBLE_CONTENTS 0x80 +#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) +#define CONTENTS_TESTFOGVOLUME 0x100 +#define CONTENTS_UNUSED5 0x200 +#define CONTENTS_UNUSED6 0x4000 +#define CONTENTS_TEAM1 0x800 /**< per team contents used to differentiate collisions. */ +#define CONTENTS_TEAM2 0x1000 /**< between players and objects on different teams. */ +#define CONTENTS_IGNORE_NODRAW_OPAQUE 0x2000 /**< ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW. */ +#define CONTENTS_MOVEABLE 0x4000 /**< hits entities which are MOVETYPE_PUSH (doors, plats, etc) */ +#define CONTENTS_AREAPORTAL 0x8000 /**< remaining contents are non-visible, and don't eat brushes. */ +#define CONTENTS_PLAYERCLIP 0x10000 +#define CONTENTS_MONSTERCLIP 0x20000 /** * @section currents can be added to any other contents, and may be mixed */ -#define CONTENTS_CURRENT_0 0x40000 -#define CONTENTS_CURRENT_90 0x80000 -#define CONTENTS_CURRENT_180 0x100000 -#define CONTENTS_CURRENT_270 0x200000 -#define CONTENTS_CURRENT_UP 0x400000 -#define CONTENTS_CURRENT_DOWN 0x800000 +#define CONTENTS_CURRENT_0 0x40000 +#define CONTENTS_CURRENT_90 0x80000 +#define CONTENTS_CURRENT_180 0x100000 +#define CONTENTS_CURRENT_270 0x200000 +#define CONTENTS_CURRENT_UP 0x400000 +#define CONTENTS_CURRENT_DOWN 0x800000 /** * @endsection */ -#define CONTENTS_ORIGIN 0x1000000 /**< removed before bsp-ing an entity. */ -#define CONTENTS_MONSTER 0x2000000 /**< should never be on a brush, only in game. */ -#define CONTENTS_DEBRIS 0x4000000 -#define CONTENTS_DETAIL 0x8000000 /**< brushes to be added after vis leafs. */ -#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ -#define CONTENTS_LADDER 0x20000000 -#define CONTENTS_HITBOX 0x40000000 /**< use accurate hitboxes on trace. */ +#define CONTENTS_ORIGIN 0x1000000 /**< removed before bsp-ing an entity. */ +#define CONTENTS_MONSTER 0x2000000 /**< should never be on a brush, only in game. */ +#define CONTENTS_DEBRIS 0x4000000 +#define CONTENTS_DETAIL 0x8000000 /**< brushes to be added after vis leafs. */ +#define CONTENTS_TRANSLUCENT 0x10000000 /**< auto set if any surface has trans. */ +#define CONTENTS_LADDER 0x20000000 +#define CONTENTS_HITBOX 0x40000000 /**< use accurate hitboxes on trace. */ /** * @section Trace masks. */ -#define MASK_ALL (0xFFFFFFFF) -#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ -#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that blocks player movement */ -#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< blocks npc movement */ -#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ -#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ -#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ -#define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players */ -#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ -#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ -#define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) /**< non-raycasted weapons see this as solid (includes grates) */ -#define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW) /**< hits solids (not grates) and passes through everything else */ -#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ -#define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) /**< everything normally solid for player movement, except monsters (world+brush only) */ -#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ -#define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< just the world, used for route rebuilding */ -#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ +#define MASK_ALL (0xFFFFFFFF) +#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that is normally solid */ +#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< everything that blocks player movement */ +#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) /**< blocks npc movement */ +#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) /**< water physics in these contents */ +#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) /**< everything that blocks line of sight for AI, lighting, etc */ +#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) /**< everything that blocks line of sight for AI, lighting, etc, but with monsters added. */ +#define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players */ +#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) /**< everything that blocks line of sight for players, but with monsters added. */ +#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) /**< bullets see these as solid */ +#define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) /**< non-raycasted weapons see this as solid (includes grates) */ +#define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW) /**< hits solids (not grates) and passes through everything else */ +#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) /**< everything normally solid, except monsters (world+brush only) */ +#define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) /**< everything normally solid for player movement, except monsters (world+brush only) */ +#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< everything normally solid for npc movement, except monsters (world+brush only) */ +#define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) /**< just the world, used for route rebuilding */ +#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) /**< These are things that can split areaportals */ + +/** + * @endsection + */ + +/** + * @section Surface flags. + */ + +#define SURF_LIGHT 0x0001 /**< value will hold the light strength */ +#define SURF_SKY2D 0x0002 /**< don't draw, indicates we should skylight + draw 2d sky but not draw the 3D skybox */ +#define SURF_SKY 0x0004 /**< don't draw, but add to skybox */ +#define SURF_WARP 0x0008 /**< turbulent water warp */ +#define SURF_TRANS 0x0010 +#define SURF_NOPORTAL 0x0020 /**< the surface can not have a portal placed on it */ +#define SURF_TRIGGER 0x0040 /**< This is an xbox hack to work around elimination of trigger surfaces, which breaks occluders */ +#define SURF_NODRAW 0x0080 /**< don't bother referencing the texture */ + +#define SURF_HINT 0x0100 /**< make a primary bsp splitter */ + +#define SURF_SKIP 0x0200 /**< completely ignore, allowing non-closed brushes */ +#define SURF_NOLIGHT 0x0400 /**< Don't calculate light */ +#define SURF_BUMPLIGHT 0x0800 /**< calculate three lightmaps for the surface for bumpmapping */ +#define SURF_NOSHADOWS 0x1000 /**< Don't receive shadows */ +#define SURF_NODECALS 0x2000 /**< Don't receive decals */ +#define SURF_NOCHOP 0x4000 /**< Don't subdivide patches on this surface */ +#define SURF_HITBOX 0x8000 /**< surface is part of a hitbox */ + +/** + * @endsection + */ + +/** + * @section Partition masks. + */ + +#define PARTITION_SOLID_EDICTS (1 << 1) /**< every edict_t that isn't SOLID_TRIGGER or SOLID_NOT (and static props) */ +#define PARTITION_TRIGGER_EDICTS (1 << 2) /**< every edict_t that IS SOLID_TRIGGER */ +#define PARTITION_NON_STATIC_EDICTS (1 << 5) /**< everything in solid & trigger except the static props, includes SOLID_NOTs */ +#define PARTITION_STATIC_PROPS (1 << 7) + +/** + * @endsection + */ + +/** + * @section Displacement flags. + */ + +#define DISPSURF_FLAG_SURFACE (1<<0) +#define DISPSURF_FLAG_WALKABLE (1<<1) +#define DISPSURF_FLAG_BUILDABLE (1<<2) +#define DISPSURF_FLAG_SURFPROP1 (1<<3) +#define DISPSURF_FLAG_SURFPROP2 (1<<4) /** * @endsection @@ -106,8 +160,8 @@ enum RayType { - RayType_EndPoint, /**< The trace ray will go from the start position to the end position. */ - RayType_Infinite /**< The trace ray will go from the start position to infinity using a direction vector. */ + RayType_EndPoint, /**< The trace ray will go from the start position to the end position. */ + RayType_Infinite /**< The trace ray will go from the start position to infinity using a direction vector. */ }; typeset TraceEntityFilter @@ -115,254 +169,495 @@ typeset TraceEntityFilter /** * Called on entity filtering. * - * @param entity Entity index. - * @param contentsMask Contents Mask. - * @return True to allow the current entity to be hit, otherwise false. - */ + * @param entity Entity index. + * @param contentsMask Contents Mask. + * @return True to allow the current entity to be hit, otherwise false. + */ function bool (int entity, int contentsMask); - + /** * Called on entity filtering. * - * @param entity Entity index. - * @param contentsMask Contents Mask. - * @param data Data value, if used. - * @return True to allow the current entity to be hit, otherwise false. - */ + * @param entity Entity index. + * @param contentsMask Contents Mask. + * @param data Data value, if used. + * @return True to allow the current entity to be hit, otherwise false. + */ function bool (int entity, int contentsMask, any data); }; +typeset TraceEntityEnumerator +{ + /** + * Called for each entity enumerated with EnumerateEntities*. + * + * @param entity Entity index. + * @return True to continue enumerating, otherwise false. + */ + function bool (int entity); + + /** + * Called for each entity enumerated with EnumerateEntities*. + * + * @param entity Entity index. + * @param data Data value, if used. + * @return True to continue enumerating, otherwise false. */ + function bool (int entity, any data); +} + /** * Get the contents mask and the entity index at the given position. * - * @param pos World position to test. - * @param entindex Entity index found at the given position (by reference). - * @return Contents mask. + * @param pos World position to test. + * @param entindex Entity index found at the given position (by reference). + * @return Contents mask. */ native int TR_GetPointContents(const float pos[3], int &entindex=-1); /** * Get the point contents testing only the given entity index. * - * @param entindex Entity index to test. - * @param pos World position. - * @return Contents mask. + * @param entindex Entity index to test. + * @param pos World position. + * @return Contents mask. */ native int TR_GetPointContentsEnt(int entindex, const float pos[3]); /** * Starts up a new trace ray using a global trace result. * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the - * ending point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the + * ending point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. */ native void TR_TraceRay(const float pos[3], - const float vec[3], - int flags, - RayType rtype); - + const float vec[3], + int flags, + RayType rtype); + /** * Starts up a new trace hull using a global trace result. * - * @param pos Starting position of the ray. - * @param vec Ending position of the ray. - * @param mins Hull minimum size. - * @param maxs Hull maximum size. - * @param flags Trace flags. + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param flags Trace flags. */ native void TR_TraceHull(const float pos[3], - const float vec[3], - const float mins[3], - const float maxs[3], - int flags); + const float vec[3], + const float mins[3], + const float maxs[3], + int flags); /** - * Starts up a new trace ray using a global trace result and a customized + * Enumerates over entities along a ray. This may find entities that are + * close to the ray but do not actually intersect it. Use TR_Clip*RayToEntity + * with TR_DidHit to check if the ray actually intersects the entity. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending + * point, or the direction angle. + * @param mask Mask to use for the trace. See PARTITION_* flags. + * @param rtype Method to calculate the ray direction. + * @param enumerator Function to use as enumerator. For each entity found + * along the ray, this function is called. + * @param data Arbitrary data value to pass through to the enumerator. + */ +native void TR_EnumerateEntities(const float pos[3], + const float vec[3], + int mask, + RayType rtype, + TraceEntityEnumerator enumerator, + any data=0); + +/** + * Enumerates over entities along a ray hull. This may find entities that are + * close to the ray but do not actually intersect it. Use TR_Clip*RayToEntity + * with TR_DidHit to check if the ray actually intersects the entity. + * + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param mask Mask to use for the trace. See PARTITION_* flags. + * @param enumerator Function to use as enumerator. For each entity found + * along the ray, this function is called. + * @param data Arbitrary data value to pass through to the enumerator. + */ +native void TR_EnumerateEntitiesHull(const float pos[3], + const float vec[3], + const float mins[3], + const float maxs[3], + int mask, + TraceEntityEnumerator enumerator, + any data=0); + +/** + * Starts up a new trace ray using a global trace result and a customized * trace ray filter. * - * Calling TR_Trace*Filter or TR_Trace*FilterEx from inside a filter + * Calling TR_Trace*Filter or TR_Trace*FilterEx from inside a filter * function is currently not allowed and may not work. * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending - * point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @param filter Function to use as a filter. - * @param data Arbitrary data value to pass through to the filter - * function. + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending + * point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter + * function. */ native void TR_TraceRayFilter(const float pos[3], - const float vec[3], - int flags, - RayType rtype, - TraceEntityFilter filter, - any data=0); - + const float vec[3], + int flags, + RayType rtype, + TraceEntityFilter filter, + any data=0); + /** - * Starts up a new trace hull using a global trace result and a customized + * Starts up a new trace hull using a global trace result and a customized * trace ray filter. * - * Calling TR_Trace*Filter or TR_Trace*FilterEx from inside a filter + * Calling TR_Trace*Filter or TR_Trace*FilterEx from inside a filter * function is currently not allowed and may not work. * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending - * point, or the direction angle. - * @param mins Hull minimum size. - * @param maxs Hull maximum size. - * @param flags Trace flags. - * @param filter Function to use as a filter. - * @param data Arbitrary data value to pass through to the filter - * function. + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param flags Trace flags. + * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter + * function. */ native void TR_TraceHullFilter(const float pos[3], - const float vec[3], - const float mins[3], - const float maxs[3], - int flags, - TraceEntityFilter filter, - any data=0); + const float vec[3], + const float mins[3], + const float maxs[3], + int flags, + TraceEntityFilter filter, + any data=0); + +/** + * Clips a ray to a particular entity. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending + * point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @param entity Entity to clip to. + */ +native void TR_ClipRayToEntity(const float pos[3], + const float vec[3], + int flags, + RayType rtype, + int entity); + +/** + * Clips a ray hull to a particular entity. + * + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param flags Trace flags. + * @param entity Entity to clip to. + */ +native void TR_ClipRayHullToEntity(const float pos[3], + const float vec[3], + const float mins[3], + const float maxs[3], + int flags, + int entity); + +/** + * Clips the current global ray (or hull) to a particular entity. + * + * @param flags Trace flags. + * @param entity Entity to clip to. + */ +native void TR_ClipCurrentRayToEntity(int flags, int entity); /** * Starts up a new trace ray using a new trace result. * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending - * point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @return Ray trace handle, which must be closed via CloseHandle(). + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending + * point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @return Ray trace handle, which must be closed via CloseHandle(). */ native Handle TR_TraceRayEx(const float pos[3], - const float vec[3], - int flags, - RayType rtype); - + const float vec[3], + int flags, + RayType rtype); + /** * Starts up a new trace hull using a new trace result. * - * @param pos Starting position of the ray. - * @param vec Ending position of the ray. - * @param mins Hull minimum size. - * @param maxs Hull maximum size. - * @param flags Trace flags. - * @return Ray trace handle, which must be closed via CloseHandle(). + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param flags Trace flags. + * @return Ray trace handle, which must be closed via CloseHandle(). */ native Handle TR_TraceHullEx(const float pos[3], - const float vec[3], - const float mins[3], - const float maxs[3], - int flags); + const float vec[3], + const float mins[3], + const float maxs[3], + int flags); /** - * Starts up a new trace ray using a new trace result and a customized + * Starts up a new trace ray using a new trace result and a customized * trace ray filter. * - * Calling TR_Trace*Filter or TR_TraceRay*Ex from inside a filter + * Calling TR_Trace*Filter or TR_TraceRay*Ex from inside a filter * function is currently not allowed and may not work. * - * @param pos Starting position of the ray. - * @param vec Depending on RayType, it will be used as the ending - * point, or the direction angle. - * @param flags Trace flags. - * @param rtype Method to calculate the ray direction. - * @param filter Function to use as a filter. - * @param data Arbitrary data value to pass through to the filter function. - * @return Ray trace handle, which must be closed via CloseHandle(). + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending + * point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter function. + * @return Ray trace handle, which must be closed via CloseHandle(). */ -native Handle TR_TraceRayFilterEx(const float pos[3], - const float vec[3], - int flags, - RayType rtype, - TraceEntityFilter filter, - any data=0); - +native Handle TR_TraceRayFilterEx(const float pos[3], + const float vec[3], + int flags, + RayType rtype, + TraceEntityFilter filter, + any data=0); + /** - * Starts up a new trace hull using a new trace result and a customized + * Starts up a new trace hull using a new trace result and a customized * trace ray filter. * - * Calling TR_Trace*Filter or TR_Trace*FilterEx from inside a filter + * Calling TR_Trace*Filter or TR_Trace*FilterEx from inside a filter * function is currently not allowed and may not work. * - * @param pos Starting position of the ray. - * @param vec Ending position of the ray. - * @param mins Hull minimum size. - * @param maxs Hull maximum size. - * @param flags Trace flags. - * @param filter Function to use as a filter. - * @param data Arbitrary data value to pass through to the filter function. - * @return Ray trace handle, which must be closed via CloseHandle(). + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param flags Trace flags. + * @param filter Function to use as a filter. + * @param data Arbitrary data value to pass through to the filter function. + * @return Ray trace handle, which must be closed via CloseHandle(). */ -native Handle TR_TraceHullFilterEx(const float pos[3], - const float vec[3], - const float mins[3], - const float maxs[3], - int flags, - TraceEntityFilter filter, - any data=0); +native Handle TR_TraceHullFilterEx(const float pos[3], + const float vec[3], + const float mins[3], + const float maxs[3], + int flags, + TraceEntityFilter filter, + any data=0); + +/** + * Clips a ray to a particular entity. + * + * @param pos Starting position of the ray. + * @param vec Depending on RayType, it will be used as the ending + * point, or the direction angle. + * @param flags Trace flags. + * @param rtype Method to calculate the ray direction. + * @param entity Entity to clip to. + * @return Ray trace handle, which must be closed via CloseHandle(). + */ +native Handle TR_ClipRayToEntityEx(const float pos[3], + const float vec[3], + int flags, + RayType rtype, + int entity); + +/** + * Clips a ray hull to a particular entity. + * + * @param pos Starting position of the ray. + * @param vec Ending position of the ray. + * @param mins Hull minimum size. + * @param maxs Hull maximum size. + * @param flags Trace flags. + * @param entity Entity to clip to. + * @return Ray trace handle, which must be closed via CloseHandle(). + */ +native Handle TR_ClipRayHullToEntityEx(const float pos[3], + const float vec[3], + const float mins[3], + const float maxs[3], + int flags, + int entity); + +/** + * Clips the current global ray (or hull) to a particular entity. + * + * @param flags Trace flags. + * @param entity Entity to clip to. + * @return Ray trace handle, which must be closed via CloseHandle(). + */ +native Handle TR_ClipCurrentRayToEntityEx(int flags, int entity); /** * Returns the time fraction from a trace result (1.0 means no collision). * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Time fraction value of the trace. - * @error Invalid Handle. + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Time fraction value of the trace. + * @error Invalid Handle. */ native float TR_GetFraction(Handle hndl=INVALID_HANDLE); +/** + * Returns the time fraction from a trace result when it left a solid. + * Only valid if trace started in solid + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Time fraction left solid value of the trace. + * @error Invalid Handle. + */ +native float TR_GetFractionLeftSolid(Handle hndl=INVALID_HANDLE); + +/** + * Returns the starting position of a trace. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @param pos Vector buffer to store data in. + * @error Invalid Handle. + */ +native void TR_GetStartPosition(Handle hndl, float pos[3]); + /** * Returns the collision position of a trace result. * - * @param pos Vector buffer to store data in. - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @error Invalid Handle. + * @param pos Vector buffer to store data in. + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @error Invalid Handle. */ native void TR_GetEndPosition(float pos[3], Handle hndl=INVALID_HANDLE); /** * Returns the entity index that collided with the trace. * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Entity index or -1 for no collision. - * @error Invalid Handle. + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Entity index or -1 for no collision. + * @error Invalid Handle. */ native int TR_GetEntityIndex(Handle hndl=INVALID_HANDLE); +/** + * Returns the displacement flags for the surface that was hit. See DISPSURF_FLAG_*. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Displacement flags. + * @error Invalid Handle. + */ +native int TR_GetDisplacementFlags(Handle hndl=INVALID_HANDLE); + +/** + * Returns the name of the surface that was hit. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @param buffer Buffer to store surface name in + * @param maxlen Maximum length of output buffer + * @error Invalid Handle. + */ +native void TR_GetSurfaceName(Handle hndl, char[] buffer, int maxlen); + +/** + * Returns the surface properties index of the surface that was hit. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Surface props. + * @error Invalid Handle. + */ +native int TR_GetSurfaceProps(Handle hndl=INVALID_HANDLE); + +/** + * Returns the surface flags. See SURF_*. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Surface flags. + * @error Invalid Handle. + */ +native int TR_GetSurfaceFlags(Handle hndl=INVALID_HANDLE); + +/** + * Returns the index of the physics bone that was hit. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Physics bone index. + * @error Invalid Handle. + */ +native int TR_GetPhysicsBone(Handle hndl=INVALID_HANDLE); + +/** + * Returns whether the entire trace was in a solid area. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return True if entire trace was in a solid area, otherwise false. + * @error Invalid Handle. + */ +native bool TR_AllSolid(Handle hndl=INVALID_HANDLE); + +/** + * Returns whether the initial point was in a solid area. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return True if initial point was in a solid area, otherwise false. + * @error Invalid Handle. + */ +native bool TR_StartSolid(Handle hndl=INVALID_HANDLE); + /** * Returns if there was any kind of collision along the trace ray. * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return True if any collision found, otherwise false. - * @error Invalid Handle. + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return True if any collision found, otherwise false. + * @error Invalid Handle. */ native bool TR_DidHit(Handle hndl=INVALID_HANDLE); /** * Returns in which body hit group the trace collided if any. * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @return Body hit group. - * @error Invalid Handle. + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Body hit group. + * @error Invalid Handle. */ native int TR_GetHitGroup(Handle hndl=INVALID_HANDLE); +/** + * Returns in which hitbox the trace collided if any. + * + * Note: if the entity that collided with the trace is the world entity, + * then this function doesn't return an hitbox index but a static prop index. + * + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @return Hitbox index (Or static prop index). + * @error Invalid Handle. + */ +native int TR_GetHitBoxIndex(Handle hndl=INVALID_HANDLE); + /** * Find the normal vector to the collision plane of a trace. * - * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. - * @param normal Vector buffer to store the vector normal to the collision plane - * @error Invalid Handle + * @param hndl A trace Handle, or INVALID_HANDLE to use a global trace result. + * @param normal Vector buffer to store the vector normal to the collision plane + * @error Invalid Handle */ native void TR_GetPlaneNormal(Handle hndl, float normal[3]); /** * Tests a point to see if it's outside any playable area * - * @param pos Vector buffer to store data in. - * @return True if outside world, otherwise false. + * @param pos Vector buffer to store data in. + * @return True if outside world, otherwise false. */ native bool TR_PointOutsideWorld(float pos[3]); diff --git a/env/include/sdktools_variant_t.inc b/env/include/sdktools_variant_t.inc new file mode 100644 index 0000000..71bfced --- /dev/null +++ b/env/include/sdktools_variant_t.inc @@ -0,0 +1,93 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2017 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +#if defined _sdktools_variant_t_included + #endinput +#endif +#define _sdktools_variant_t_included + +/** + * Sets a bool value in the global variant object. + * + * @param val Input value. + */ +native void SetVariantBool(bool val); + +/** + * Sets a string in the global variant object. + * + * @param str Input string. + */ +native void SetVariantString(const char[] str); + +/** + * Sets an integer value in the global variant object. + * + * @param val Input value. + */ +native void SetVariantInt(int val); + +/** + * Sets a floating point value in the global variant object. + * + * @param val Input value. + */ +native void SetVariantFloat(float val); + +/** + * Sets a 3D vector in the global variant object. + * + * @param vec Input vector. + */ +native void SetVariantVector3D(const float vec[3]); + +/** + * Sets a 3D position vector in the global variant object. + * + * @param vec Input position vector. + */ +native void SetVariantPosVector3D(const float vec[3]); + +/** + * Sets a color in the global variant object. + * + * @param color Input color. + */ +native void SetVariantColor(const int color[4]); + +/** + * Sets an entity in the global variant object. + * + * @param entity Entity index. + * @error Invalid entity index. + */ +native void SetVariantEntity(int entity); diff --git a/env/include/sdktools_voice.inc b/env/include/sdktools_voice.inc index 8d84466..2731997 100644 --- a/env/include/sdktools_voice.inc +++ b/env/include/sdktools_voice.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -31,54 +31,55 @@ */ #if defined _sdktools_voice_included - #endinput + #endinput #endif #define _sdktools_voice_included /** * @section voice flags. */ -#define VOICE_NORMAL 0 /**< Allow the client to listen and speak normally. */ -#define VOICE_MUTED 1 /**< Mutes the client from speaking to everyone. */ -#define VOICE_SPEAKALL 2 /**< Allow the client to speak to everyone. */ -#define VOICE_LISTENALL 4 /**< Allow the client to listen to everyone. */ -#define VOICE_TEAM 8 /**< Allow the client to always speak to team, even when dead. */ -#define VOICE_LISTENTEAM 16 /**< Allow the client to always hear teammates, including dead ones. */ - +#define VOICE_NORMAL 0 /**< Allow the client to listen and speak normally. */ +#define VOICE_MUTED 1 /**< Mutes the client from speaking to everyone. */ +#define VOICE_SPEAKALL 2 /**< Allow the client to speak to everyone. */ +#define VOICE_LISTENALL 4 /**< Allow the client to listen to everyone. */ +#define VOICE_TEAM 8 /**< Allow the client to always speak to team, even when dead. */ +#define VOICE_LISTENTEAM 16 /**< Allow the client to always hear teammates, including dead ones. */ + /** * @endsection */ enum ListenOverride { - Listen_Default = 0, /**< Leave it up to the game */ - Listen_No, /**< Can't hear */ - Listen_Yes, /**< Can hear */ + Listen_Default = 0, /**< Leave it up to the game */ + Listen_No, /**< Can't hear */ + Listen_Yes /**< Can hear */ }; /** * Set the client listening flags. * - * @param client The client index - * @param flags The voice flags + * @param client The client index + * @param flags The voice flags */ native void SetClientListeningFlags(int client, int flags); /** * Retrieve the client current listening flags. * - * @param client The client index - * @return The current voice flags + * @param client The client index + * @return The current voice flags */ native int GetClientListeningFlags(int client); /** * Set the receiver ability to listen to the sender. * - * @param iReceiver The listener index. - * @param iSender The sender index. - * @param bListen True if the receiver can listen to the sender, false otherwise. - * @return True if successful otherwise false. + * @param iReceiver The listener index. + * @param iSender The sender index. + * @param bListen True if the receiver can listen to the sender, false otherwise. + * @return True if successful otherwise false. + * @deprecated Use SetListenOverride() instead. */ #pragma deprecated Use SetListenOverride() instead native bool SetClientListening(int iReceiver, int iSender, bool bListen); @@ -86,9 +87,10 @@ native bool SetClientListening(int iReceiver, int iSender, bool bListen); /** * Retrieves if the receiver can listen to the sender. * - * @param iReceiver The listener index. - * @param iSender The sender index. - * @return True if successful otherwise false. + * @param iReceiver The listener index. + * @param iSender The sender index. + * @return True if successful otherwise false. + * @deprecated GetListenOverride() instead. */ #pragma deprecated GetListenOverride() instead native bool GetClientListening(int iReceiver, int iSender); @@ -96,27 +98,27 @@ native bool GetClientListening(int iReceiver, int iSender); /** * Override the receiver's ability to listen to the sender. * - * @param iReceiver The listener index. - * @param iSender The sender index. - * @param override The override of the receiver's ability to listen to the sender. - * @return True if successful otherwise false. + * @param iReceiver The listener index. + * @param iSender The sender index. + * @param override The override of the receiver's ability to listen to the sender. + * @return True if successful otherwise false. */ native bool SetListenOverride(int iReceiver, int iSender, ListenOverride override); /** * Retrieves the override of the receiver's ability to listen to the sender. * - * @param iReceiver The listener index. - * @param iSender The sender index. - * @return The override value. + * @param iReceiver The listener index. + * @param iSender The sender index. + * @return The override value. */ native ListenOverride GetListenOverride(int iReceiver, int iSender); /** * Retrieves if the muter has muted the mutee. * - * @param iMuter The muter index. - * @param iMutee The mutee index. - * @return True if muter has muted mutee, false otherwise. + * @param iMuter The muter index. + * @param iMutee The mutee index. + * @return True if muter has muted mutee, false otherwise. */ native bool IsClientMuted(int iMuter, int iMutee); diff --git a/env/include/sorting.inc b/env/include/sorting.inc index 2478645..5b0c249 100644 --- a/env/include/sorting.inc +++ b/env/include/sorting.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -32,7 +32,7 @@ #if defined _sorting_included - #endinput + #endinput #endif #define _sorting_included @@ -41,9 +41,9 @@ */ enum SortOrder { - Sort_Ascending = 0, /**< Ascending order */ - Sort_Descending = 1, /**< Descending order */ - Sort_Random = 2 /**< Random order */ + Sort_Ascending = 0, /**< Ascending order */ + Sort_Descending = 1, /**< Descending order */ + Sort_Random = 2 /**< Random order */ }; /** @@ -51,35 +51,35 @@ enum SortOrder */ enum SortType { - Sort_Integer = 0, - Sort_Float, - Sort_String, + Sort_Integer = 0, + Sort_Float, + Sort_String }; /** * Sorts an array of integers. * - * @param array Array of integers to sort in-place. - * @param array_size Size of the array. - * @param order Sorting order to use. + * @param array Array of integers to sort in-place. + * @param array_size Size of the array. + * @param order Sorting order to use. */ native void SortIntegers(int[] array, int array_size, SortOrder order = Sort_Ascending); /** * Sorts an array of float point numbers. * - * @param array Array of floating point numbers to sort in-place. - * @param array_size Size of the array. - * @param order Sorting order to use. + * @param array Array of floating point numbers to sort in-place. + * @param array_size Size of the array. + * @param order Sorting order to use. */ native void SortFloats(float[] array, int array_size, SortOrder order = Sort_Ascending); /** * Sorts an array of strings. * - * @param array Array of strings to sort in-place. - * @param array_size Size of the array. - * @param order Sorting order to use. + * @param array Array of strings to sort in-place. + * @param array_size Size of the array. + * @param order Sorting order to use. */ native void SortStrings(char[][] array, int array_size, SortOrder order = Sort_Ascending); @@ -87,23 +87,23 @@ native void SortStrings(char[][] array, int array_size, SortOrder order = Sort_A * Sort comparison function for 1D array elements. * @note You may need to use explicit tags in order to use data properly. * - * @param elem1 First element to compare. - * @param elem2 Second element to compare. - * @param array Array that is being sorted (order is undefined). - * @param hndl Handle optionally passed in while sorting. - * @return -1 if first should go before second - * 0 if first is equal to second - * 1 if first should go after second + * @param elem1 First element to compare. + * @param elem2 Second element to compare. + * @param array Array that is being sorted (order is undefined). + * @param hndl Handle optionally passed in while sorting. + * @return -1 if first should go before second + * 0 if first is equal to second + * 1 if first should go after second */ typedef SortFunc1D = function int (int elem1, int elem2, const int[] array, Handle hndl); -/** +/** * Sorts a custom 1D array. You must pass in a comparison function. * - * @param array Array to sort. - * @param array_size Size of the array to sort. - * @param sortfunc Sort function. - * @param hndl Optional Handle to pass through the comparison calls. + * @param array Array to sort. + * @param array_size Size of the array to sort. + * @param sortfunc Sort function. + * @param hndl Optional Handle to pass through the comparison calls. */ native void SortCustom1D(int[] array, int array_size, SortFunc1D sortfunc, Handle hndl=INVALID_HANDLE); @@ -111,13 +111,13 @@ native void SortCustom1D(int[] array, int array_size, SortFunc1D sortfunc, Handl * Sort comparison function for 2D array elements (sub-arrays). * @note You may need to use explicit tags in order to use data properly. * - * @param elem1 First array to compare. - * @param elem2 Second array to compare. - * @param array Array that is being sorted (order is undefined). - * @param hndl Handle optionally passed in while sorting. - * @return -1 if first should go before second - * 0 if first is equal to second - * 1 if first should go after second + * @param elem1 First array to compare. + * @param elem2 Second array to compare. + * @param array Array that is being sorted (order is undefined). + * @param hndl Handle optionally passed in while sorting. + * @return -1 if first should go before second + * 0 if first is equal to second + * 1 if first should go after second */ typeset SortFunc2D { @@ -125,22 +125,22 @@ typeset SortFunc2D function int (char[] elem1, char[] elem2, const char[][] array, Handle hndl); }; -/** +/** * Sorts a custom 2D array. You must pass in a comparison function. * - * @param array Array to sort. - * @param array_size Size of the major array to sort (first index, outermost). - * @param sortfunc Sort comparison function to use. - * @param hndl Optional Handle to pass through the comparison calls. + * @param array Array to sort. + * @param array_size Size of the major array to sort (first index, outermost). + * @param sortfunc Sort comparison function to use. + * @param hndl Optional Handle to pass through the comparison calls. */ native void SortCustom2D(any[][] array, int array_size, SortFunc2D sortfunc, Handle hndl=INVALID_HANDLE); /** * Sort an ADT Array. Specify the type as Integer, Float, or String. * - * @param array Array Handle to sort - * @param order Sort order to use, same as other sorts. - * @param type Data type stored in the ADT Array + * @param array Array Handle to sort + * @param order Sort order to use, same as other sorts. + * @param type Data type stored in the ADT Array */ native void SortADTArray(Handle array, SortOrder order, SortType type); @@ -149,21 +149,21 @@ native void SortADTArray(Handle array, SortOrder order, SortType type); * indexes currently being sorted, use ADT Array functions to retrieve the * index values and compare. * - * @param index1 First index to compare. - * @param index2 Second index to compare. - * @param array Array that is being sorted (order is undefined). - * @param hndl Handle optionally passed in while sorting. - * @return -1 if first should go before second - * 0 if first is equal to second - * 1 if first should go after second + * @param index1 First index to compare. + * @param index2 Second index to compare. + * @param array Array that is being sorted (order is undefined). + * @param hndl Handle optionally passed in while sorting. + * @return -1 if first should go before second + * 0 if first is equal to second + * 1 if first should go after second */ typedef SortFuncADTArray = function int (int index1, int index2, Handle array, Handle hndl); /** * Custom sorts an ADT Array. You must pass in a comparison function. * - * @param array Array Handle to sort - * @param sortfunc Sort comparison function to use - * @param hndl Optional Handle to pass through the comparison calls. + * @param array Array Handle to sort + * @param sortfunc Sort comparison function to use + * @param hndl Optional Handle to pass through the comparison calls. */ -native void SortADTArrayCustom(Handle array, SortFuncADTArray sortfunc, Handle hndl=INVALID_HANDLE); +native void SortADTArrayCustom(Handle array, SortFuncADTArray sortfunc, Handle hndl=INVALID_HANDLE); diff --git a/env/include/sourcemod.inc b/env/include/sourcemod.inc index 1142f4b..8415296 100644 --- a/env/include/sourcemod.inc +++ b/env/include/sourcemod.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -40,21 +40,21 @@ */ struct Plugin { - public const char[] name; /**< Plugin Name */ - public const char[] description; /**< Plugin Description */ - public const char[] author; /**< Plugin Author */ - public const char[] version; /**< Plugin Version */ - public const char[] url; /**< Plugin URL */ + public const char[] name; /**< Plugin Name */ + public const char[] description; /**< Plugin Description */ + public const char[] author; /**< Plugin Author */ + public const char[] version; /**< Plugin Version */ + public const char[] url; /**< Plugin URL */ }; /** - * Returns whether a library exists. This function should be considered - * expensive; it should only be called on plugin to determine availability - * of resources. Use OnLibraryAdded()/OnLibraryRemoved() to detect changes + * Returns whether a library exists. This function should be considered + * expensive; it should only be called on plugin to determine availability + * of resources. Use OnLibraryAdded()/OnLibraryRemoved() to detect changes * in optional resources. * - * @param name Library name of a plugin or extension. - * @return True if exists, false otherwise. + * @param name Library name of a plugin or extension. + * @return True if exists, false otherwise. */ native bool LibraryExists(const char[] name); @@ -67,7 +67,7 @@ enum FeatureType * A native function call. */ FeatureType_Native, - + /** * A named capability. This is distinctly different from checking for a * native, because the underlying functionality could be enabled on-demand @@ -87,12 +87,12 @@ enum FeatureStatus * Feature is available for use. */ FeatureStatus_Available, - + /** * Feature is not available. */ FeatureStatus_Unavailable, - + /** * Feature is not known at all. */ @@ -132,6 +132,7 @@ native FeatureStatus GetFeatureStatus(FeatureType type, const char[] name); native void RequireFeature(FeatureType type, const char[] name, const char[] fmt="", any ...); + #include #include #include @@ -164,17 +165,48 @@ native void RequireFeature(FeatureType type, const char[] name, enum APLRes { - APLRes_Success = 0, /**< Plugin should load */ - APLRes_Failure, /**< Plugin shouldn't load and should display an error */ - APLRes_SilentFailure /**< Plugin shouldn't load but do so silently */ + APLRes_Success = 0, /**< Plugin should load */ + APLRes_Failure, /**< Plugin shouldn't load and should display an error */ + APLRes_SilentFailure /**< Plugin shouldn't load but do so silently */ +}; + +methodmap GameData < Handle +{ + // Loads a game config file. + // + // @param file File to load. The path must be relative to the 'gamedata' folder under the config folder + // and the extension should be omitted. + // @return A handle to the game config file or null on failure. + public native GameData(const char[] file); + + // Returns an offset value. + // + // @param key Key to retrieve from the offset section. + // @return An offset, or -1 on failure. + public native int GetOffset(const char[] key); + + // Gets the value of a key from the "Keys" section. + // + // @param key Key to retrieve from the Keys section. + // @param buffer Destination string buffer. + // @param maxlen Maximum length of output string buffer. + // @return True if key existed, false otherwise. + public native bool GetKeyValue(const char[] key, char[] buffer, int maxlen); + + // Finds an address calculation in a GameConfig file, + // performs LoadFromAddress on it as appropriate, then returns the final address. + // + // @param name Name of the property to find. + // @return An address calculated on success, or 0 on failure. + public native Address GetAddress(const char[] name); }; /** - * Called when the plugin is fully initialized and all known external references - * are resolved. This is only called once in the lifetime of the plugin, and is + * Called when the plugin is fully initialized and all known external references + * are resolved. This is only called once in the lifetime of the plugin, and is * paired with OnPluginEnd(). * - * If any run-time error is thrown during this callback, the plugin will be marked + * If any run-time error is thrown during this callback, the plugin will be marked * as failed. */ forward void OnPluginStart(); @@ -189,30 +221,29 @@ forward bool AskPluginLoad(Handle myself, bool late, char[] error, int err_max); /** * Called before OnPluginStart, in case the plugin wants to check for load failure. - * This is called even if the plugin type is "private." Any natives from modules are - * not available at this point. Thus, this forward should only be used for explicit - * pre-emptive things, such as adding dynamic natives, setting certain types of load + * This is called even if the plugin type is "private." Any natives from modules are + * not available at this point. Thus, this forward should only be used for explicit + * pre-emptive things, such as adding dynamic natives, setting certain types of load * filters (such as not loading the plugin for certain games). - * + * * @note It is not safe to call externally resolved natives until OnPluginStart(). * @note Any sort of RTE in this function will cause the plugin to fail loading. - * @note If you do not return anything, it is treated like returning success. + * @note If you do not return anything, it is treated like returning success. * @note If a plugin has an AskPluginLoad2(), AskPluginLoad() will not be called. * - * - * @param myself Handle to the plugin. - * @param late Whether or not the plugin was loaded "late" (after map load). - * @param error Error message buffer in case load failed. - * @param err_max Maximum number of characters for error message buffer. - * @return APLRes_Success for load success, APLRes_Failure or APLRes_SilentFailure otherwise + * @param myself Handle to the plugin. + * @param late Whether or not the plugin was loaded "late" (after map load). + * @param error Error message buffer in case load failed. + * @param err_max Maximum number of characters for error message buffer. + * @return APLRes_Success for load success, APLRes_Failure or APLRes_SilentFailure otherwise */ forward APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max); /** * Called when the plugin is about to be unloaded. * - * It is not necessary to close any handles or remove hooks in this function. - * SourceMod guarantees that plugin shutdown automatically and correctly releases + * It is not necessary to close any handles or remove hooks in this function. + * SourceMod guarantees that plugin shutdown automatically and correctly releases * all resources. */ forward void OnPluginEnd(); @@ -220,7 +251,7 @@ forward void OnPluginEnd(); /** * Called when the plugin's pause status is changing. * - * @param pause True if the plugin is being paused, false otherwise. + * @param pause True if the plugin is being paused, false otherwise. */ forward void OnPluginPauseChange(bool pause); @@ -234,7 +265,7 @@ forward void OnGameFrame(); * Called when the map is loaded. * * @note This used to be OnServerLoad(), which is now deprecated. - * Plugins still using the old forward will work. + * Plugins still using the old forward will work. */ forward void OnMapStart(); @@ -244,39 +275,39 @@ forward void OnMapStart(); forward void OnMapEnd(); /** - * Called when the map has loaded, servercfgfile (server.cfg) has been + * Called when the map has loaded, servercfgfile (server.cfg) has been * executed, and all plugin configs are done executing. This is the best - * place to initialize plugin functions which are based on cvar data. + * place to initialize plugin functions which are based on cvar data. * - * @note This will always be called once and only once per map. It will be - * called after OnMapStart(). + * @note This will always be called once and only once per map. It will be + * called after OnMapStart(). */ forward void OnConfigsExecuted(); /** - * This is called once, right after OnMapStart() but any time before - * OnConfigsExecuted(). It is called after the "exec sourcemod.cfg" - * command and all AutoExecConfig() exec commands have been added to + * This is called once, right after OnMapStart() but any time before + * OnConfigsExecuted(). It is called after the "exec sourcemod.cfg" + * command and all AutoExecConfig() exec commands have been added to * the ServerCommand() buffer. * - * If you need to load per-map settings that override default values, - * adding commands to the ServerCommand() buffer here will guarantee + * If you need to load per-map settings that override default values, + * adding commands to the ServerCommand() buffer here will guarantee * that they're set before OnConfigsExecuted(). * - * Unlike OnMapStart() and OnConfigsExecuted(), this is not called on + * Unlike OnMapStart() and OnConfigsExecuted(), this is not called on * late loads that occur after OnMapStart(). */ forward void OnAutoConfigsBuffered(); /** - * @deprecated Use OnConfigsExecuted() instead. + * @deprecated Use OnConfigsExecuted() instead. */ #pragma deprecated Use OnConfigsExecuted() instead forward void OnServerCfg(); /** - * Called after all plugins have been loaded. This is called once for - * every plugin. If a plugin late loads, it will be called immediately + * Called after all plugins have been loaded. This is called once for + * every plugin. If a plugin late loads, it will be called immediately * after OnPluginStart(). */ forward void OnAllPluginsLoaded(); @@ -284,87 +315,87 @@ forward void OnAllPluginsLoaded(); /** * Returns the calling plugin's Handle. * - * @return Handle of the calling plugin. + * @return Handle of the calling plugin. */ native Handle GetMyHandle(); /** * Returns an iterator that can be used to search through plugins. * - * @return Handle to iterate with. Must be closed via - * CloseHandle(). - * @error Invalid Handle. + * @return Handle to iterate with. Must be closed via + * CloseHandle(). + * @error Invalid Handle. */ native Handle GetPluginIterator(); /** * Returns whether there are more plugins available in the iterator. * - * @param iter Handle to the plugin iterator. - * @return True on more plugins, false otherwise. - * @error Invalid Handle. + * @param iter Handle to the plugin iterator. + * @return True on more plugins, false otherwise. + * @error Invalid Handle. */ native bool MorePlugins(Handle iter); /** * Returns the current plugin in the iterator and advances the iterator. * - * @param iter Handle to the plugin iterator. - * @return Current plugin the iterator is at, before - * the iterator is advanced. - * @error Invalid Handle. + * @param iter Handle to the plugin iterator. + * @return Current plugin the iterator is at, before + * the iterator is advanced. + * @error Invalid Handle. */ native Handle ReadPlugin(Handle iter); /** * Returns a plugin's status. * - * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). - * @return Status code for the plugin. - * @error Invalid Handle. + * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). + * @return Status code for the plugin. + * @error Invalid Handle. */ native PluginStatus GetPluginStatus(Handle plugin); /** * Retrieves a plugin's file name relative to the plugins folder. * - * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). - * @param buffer Buffer to the store the file name. - * @param maxlength Maximum length of the name buffer. - * @error Invalid Handle. + * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). + * @param buffer Buffer to the store the file name. + * @param maxlength Maximum length of the name buffer. + * @error Invalid Handle. */ native void GetPluginFilename(Handle plugin, char[] buffer, int maxlength); /** * Retrieves whether or not a plugin is being debugged. * - * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). - * @return True if being debugged, false otherwise. - * @error Invalid Handle. + * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). + * @return True if being debugged, false otherwise. + * @error Invalid Handle. */ native bool IsPluginDebugging(Handle plugin); /** * Retrieves a plugin's public info. * - * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). - * @param info Plugin info property to retrieve. - * @param buffer Buffer to store info in. - * @param maxlength Maximum length of buffer. - * @return True on success, false if property is not available. - * @error Invalid Handle. + * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). + * @param info Plugin info property to retrieve. + * @param buffer Buffer to store info in. + * @param maxlength Maximum length of buffer. + * @return True on success, false if property is not available. + * @error Invalid Handle. */ native bool GetPluginInfo(Handle plugin, PluginInfo info, char[] buffer, int maxlength); /** - * Finds a plugin by its order in the list from the "plugins list" server - * "sm" command. You should not use this function to loop through all plugins, - * use the iterator instead. Looping through all plugins using this native + * Finds a plugin by its order in the list from the "plugins list" server + * "sm" command. You should not use this function to loop through all plugins, + * use the iterator instead. Looping through all plugins using this native * is O(n^2), whereas using the iterator is O(n). * - * @param order_num Number of the plugin as it appears in "sm plugins list". - * @return Plugin Handle on success, INVALID_HANDLE if no plugin - * matches the given number. + * @param order_num Number of the plugin as it appears in "sm plugins list". + * @return Plugin Handle on success, INVALID_HANDLE if no plugin + * matches the given number. */ native Handle FindPluginByNumber(int order_num); @@ -372,18 +403,18 @@ native Handle FindPluginByNumber(int order_num); * Causes the plugin to enter a failed state. An error will be thrown and * the plugin will be paused until it is unloaded or reloaded. * - * For backwards compatibility, if no extra arguments are passed, no - * formatting is applied. If one or more additional arguments is passed, - * the string is formatted using Format(). If any errors are encountered - * during formatting, both the format specifier string and an additional + * For backwards compatibility, if no extra arguments are passed, no + * formatting is applied. If one or more additional arguments is passed, + * the string is formatted using Format(). If any errors are encountered + * during formatting, both the format specifier string and an additional * error message are written. * - * This function does not return, and no further code in the plugin is + * This function does not return, and no further code in the plugin is * executed. * - * @param string Format specifier string. - * @param ... Formatting arguments. - * @error Always throws SP_ERROR_ABORT. + * @param string Format specifier string. + * @param ... Formatting arguments. + * @error Always throws SP_ERROR_ABORT. */ native void SetFailState(const char[] string, any ...); @@ -391,60 +422,74 @@ native void SetFailState(const char[] string, any ...); * Aborts the current callback and throws an error. This function * does not return in that no code is executed following it. * - * @param fmt String format. - * @param ... Format arguments. - * @error Always! + * @param fmt String format. + * @param ... Format arguments. + * @error Always! */ native void ThrowError(const char[] fmt, any ...); +/** + * Logs a stack trace from the current function call. Code + * execution continues after the call + * + * @param fmt Format string to send with the stack trace. + * @param ... Format arguments. + * @error Always logs a stack trace. + */ +native void LogStackTrace(const char[] fmt, any ...); + /** * Gets the system time as a unix timestamp. * - * @param bigStamp Optional array to store the 64bit timestamp in. - * @return 32bit timestamp (number of seconds since unix epoch). + * @param bigStamp Optional array to store the 64bit timestamp in. + * @return 32bit timestamp (number of seconds since unix epoch). */ native int GetTime(int bigStamp[2]={0,0}); /** * Produces a date and/or time string value for a timestamp. * - * See this URL for valid parameters: + * See this URL for valid parameters: * http://cplusplus.com/reference/clibrary/ctime/strftime.html * - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param format Formatting rules (passing NULL_STRING will use the rules defined in sm_datetime_format). - * @param stamp Optional time stamp. - * @error Buffer too small or invalid time format. + * Note that available parameters depends on support from your operating system. + * In particular, ones highlighted in yellow on that page are not currently + * available on Windows and should be avoided for portable plugins. + * + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param format Formatting rules (passing NULL_STRING will use the rules defined in sm_datetime_format). + * @param stamp Optional time stamp. + * @error Buffer too small or invalid time format. */ native void FormatTime(char[] buffer, int maxlength, const char[] format, int stamp=-1); /** * Loads a game config file. * - * @param file File to load. The path must be relative to the 'gamedata' folder under the config folder - * and the extension should be omitted. - * @return A handle to the game config file or INVALID_HANDLE in failure. + * @param file File to load. The path must be relative to the 'gamedata' folder under the config folder + * and the extension should be omitted. + * @return A handle to the game config file or INVALID_HANDLE on failure. */ -native Handle LoadGameConfigFile(const char[] file); +native GameData LoadGameConfigFile(const char[] file); /** * Returns an offset value. * - * @param gc Game config handle. - * @param key Key to retrieve from the offset section. - * @return An offset, or -1 on failure. + * @param gc Game config handle. + * @param key Key to retrieve from the offset section. + * @return An offset, or -1 on failure. */ native int GameConfGetOffset(Handle gc, const char[] key); /** * Gets the value of a key from the "Keys" section. * - * @param gc Game config handle. - * @param key Key to retrieve from the Keys section. - * @param buffer Destination string buffer. - * @param maxlen Maximum length of output string buffer. - * @return True if key existed, false otherwise. + * @param gc Game config handle. + * @param key Key to retrieve from the Keys section. + * @param buffer Destination string buffer. + * @param maxlen Maximum length of output string buffer. + * @return True if key existed, false otherwise. */ native bool GameConfGetKeyValue(Handle gc, const char[] key, char[] buffer, int maxlen); @@ -452,163 +497,163 @@ native bool GameConfGetKeyValue(Handle gc, const char[] key, char[] buffer, int * Finds an address calculation in a GameConfig file, * performs LoadFromAddress on it as appropriate, then returns the final address. * - * @param gameconf GameConfig Handle, or INVALID_HANDLE to use sdktools.games.txt. + * @param gameconf Game config handle. * @param name Name of the property to find. * @return An address calculated on success, or 0 on failure. */ native Address GameConfGetAddress(Handle gameconf, const char[] name); /** - * Returns the operating system's "tick count," which is a number of + * Returns the operating system's "tick count," which is a number of * milliseconds since the operating system loaded. This can be used * for basic benchmarks. * - * @return Tick count in milliseconds. + * @return Tick count in milliseconds. */ native int GetSysTickCount(); /** * Specifies that the given config file should be executed after plugin load. - * OnConfigsExecuted() will not be called until the config file has executed, + * OnConfigsExecuted() will not be called until the config file has executed, * but it will be called if the execution fails. * - * @param autoCreate If true, and the config file does not exist, such a config - * file will be automatically created and populated with - * information from the plugin's registered cvars. - * @param name Name of the config file, excluding the .cfg extension. - * If empty, is assumed. - * @param folder Folder under cfg/ to use. By default this is "sourcemod." + * @param autoCreate If true, and the config file does not exist, such a config + * file will be automatically created and populated with + * information from the plugin's registered cvars. + * @param name Name of the config file, excluding the .cfg extension. + * If empty, is assumed. + * @param folder Folder under cfg/ to use. By default this is "sourcemod." */ native void AutoExecConfig(bool autoCreate=true, const char[] name="", const char[] folder="sourcemod"); /** - * Registers a library name for identifying as a dependency to + * Registers a library name for identifying as a dependency to * other plugins. * - * @param name Library name. + * @param name Library name. */ native void RegPluginLibrary(const char[] name); /** * Returns the status of an extension, by filename. * - * @param name Extension name (like "sdktools.ext"). - * @param error Optional error message buffer. - * @param maxlength Length of optional error message buffer. - * @return -2 if the extension was not found. - * -1 if the extension was found but failed to load. - * 0 if the extension loaded but reported an error. - * 1 if the extension is running without error. + * @param name Extension name (like "sdktools.ext"). + * @param error Optional error message buffer. + * @param maxlength Length of optional error message buffer. + * @return -2 if the extension was not found. + * -1 if the extension was found but failed to load. + * 0 if the extension loaded but reported an error. + * 1 if the extension is running without error. */ native int GetExtensionFileStatus(const char[] name, char[] error="", int maxlength=0); /** - * Called after a library is added that the current plugin references - * optionally. A library is either a plugin name or extension name, as + * Called after a library is added that the current plugin references + * optionally. A library is either a plugin name or extension name, as * exposed via its include file. * - * @param name Library name. + * @param name Library name. */ forward void OnLibraryAdded(const char[] name); /** - * Called right before a library is removed that the current plugin references - * optionally. A library is either a plugin name or extension name, as + * Called right before a library is removed that the current plugin references + * optionally. A library is either a plugin name or extension name, as * exposed via its include file. * - * @param name Library name. + * @param name Library name. */ forward void OnLibraryRemoved(const char[] name); -#define MAPLIST_FLAG_MAPSFOLDER (1<<0) /**< On failure, use all maps in the maps folder. */ -#define MAPLIST_FLAG_CLEARARRAY (1<<1) /**< If an input array is specified, clear it before adding. */ -#define MAPLIST_FLAG_NO_DEFAULT (1<<2) /**< Do not read "default" or "mapcyclefile" on failure. */ +#define MAPLIST_FLAG_MAPSFOLDER (1<<0) /**< On failure, use all maps in the maps folder. */ +#define MAPLIST_FLAG_CLEARARRAY (1<<1) /**< If an input array is specified, clear it before adding. */ +#define MAPLIST_FLAG_NO_DEFAULT (1<<2) /**< Do not read "default" or "mapcyclefile" on failure. */ /** * Loads a map list to an ADT Array. * - * A map list is a list of maps from a file. SourceMod allows easy configuration of - * maplists through addons/sourcemod/configs/maplists.cfg. Each entry is given a - * name and a file (for example, "rtv" => "rtv.cfg"), or a name and a redirection - * (for example, "rtv" => "default"). This native will read a map list entry, - * cache the file, and return the list of maps it holds. + * A map list is a list of maps from a file. SourceMod allows easy configuration of + * maplists through addons/sourcemod/configs/maplists.cfg. Each entry is given a + * name and a file (for example, "rtv" => "rtv.cfg"), or a name and a redirection + * (for example, "rtv" => "default"). This native will read a map list entry, + * cache the file, and return the list of maps it holds. * - * Serial change numbers are used to identify if a map list has changed. Thus, if - * you pass a serial change number and it's equal to what SourceMod currently knows + * Serial change numbers are used to identify if a map list has changed. Thus, if + * you pass a serial change number and it's equal to what SourceMod currently knows * about the map list, then SourceMod won't re-parse the file. * - * If the maps end up being read from the maps folder (MAPLIST_FLAG_MAPSFOLDER), they + * If the maps end up being read from the maps folder (MAPLIST_FLAG_MAPSFOLDER), they * are automatically sorted in alphabetical, ascending order. * * Arrays created by this function are temporary and must be freed via CloseHandle(). - * Modifying arrays created by this function will not affect future return values or + * Modifying arrays created by this function will not affect future return values or * or the contents of arrays returned to other plugins. * - * @param array Array to store the map list. If INVALID_HANDLE, a new blank - * array will be created. The blocksize should be at least 16; - * otherwise results may be truncated. Items are added to the array - * as strings. The array is never checked for duplicates, and it is - * not read beforehand. Only the serial number is used to detect - * changes. - * @param serial Serial number to identify last known map list change. If -1, the - * the value will not be checked. If the map list has since changed, - * the serial is updated (even if -1 was passed). If there is an error - * finding a valid maplist, then the serial is set to -1. - * @param str Config name, or "default" for the default map list. Config names - * should be somewhat descriptive. For example, the admin menu uses - * a config name of "admin menu". The list names can be configured - * by users in addons/sourcemod/configs/maplists.cfg. - * @param flags MAPLIST_FLAG flags. - * @return On failure: - * INVALID_HANDLE is returned, the serial is set to -1, and the input - * array (if any) is left unchanged. - * On no change: - INVALID_HANDLE is returned, the serial is unchanged, and the input - array (if any) is left unchanged. - * On success: - * A valid array Handle is returned, containing at least one map string. - * If an array was passed, the return value is equal to the passed Array - * Handle. If the passed array was not cleared, it will have grown by at - * least one item. The serial number is updated to a positive number. - * @error Invalid array Handle that is not INVALID_HANDLE. + * @param array Array to store the map list. If INVALID_HANDLE, a new blank + * array will be created. The blocksize should be at least 16; + * otherwise results may be truncated. Items are added to the array + * as strings. The array is never checked for duplicates, and it is + * not read beforehand. Only the serial number is used to detect + * changes. + * @param serial Serial number to identify last known map list change. If -1, the + * the value will not be checked. If the map list has since changed, + * the serial is updated (even if -1 was passed). If there is an error + * finding a valid maplist, then the serial is set to -1. + * @param str Config name, or "default" for the default map list. Config names + * should be somewhat descriptive. For example, the admin menu uses + * a config name of "admin menu". The list names can be configured + * by users in addons/sourcemod/configs/maplists.cfg. + * @param flags MAPLIST_FLAG flags. + * @return On failure: + * INVALID_HANDLE is returned, the serial is set to -1, and the input + * array (if any) is left unchanged. + * On no change: + * INVALID_HANDLE is returned, the serial is unchanged, and the input + * array (if any) is left unchanged. + * On success: + * A valid array Handle is returned, containing at least one map string. + * If an array was passed, the return value is equal to the passed Array + * Handle. If the passed array was not cleared, it will have grown by at + * least one item. The serial number is updated to a positive number. + * @error Invalid array Handle that is not INVALID_HANDLE. */ native Handle ReadMapList(Handle array=INVALID_HANDLE, - int &serial=-1, - const char[] str="default", - int flags=MAPLIST_FLAG_CLEARARRAY); - + int &serial=-1, + const char[] str="default", + int flags=MAPLIST_FLAG_CLEARARRAY); + /** - * Makes a compatibility binding for map lists. For example, if a function previously used - * "clam.cfg" for map lists, this function will insert a "fake" binding to "clam.cfg" that + * Makes a compatibility binding for map lists. For example, if a function previously used + * "clam.cfg" for map lists, this function will insert a "fake" binding to "clam.cfg" that * will be overridden if it's in the maplists.cfg file. * - * @param name Configuration name that would be used with ReadMapList(). - * @param file Default file to use. + * @param name Configuration name that would be used with ReadMapList(). + * @param file Default file to use. */ native void SetMapListCompatBind(const char[] name, const char[] file); /** - * Called when a client has sent chat text. This must return either true or + * Called when a client has sent chat text. This must return either true or * false to indicate that a client is or is not spamming the server. * - * The return value is a hint only. Core or another plugin may decide + * The return value is a hint only. Core or another plugin may decide * otherwise. * - * @param client Client index. The server (0) will never be passed. - * @return True if client is spamming the server, false otherwise. + * @param client Client index. The server (0) will never be passed. + * @return True if client is spamming the server, false otherwise. */ forward bool OnClientFloodCheck(int client); /** - * Called after a client's flood check has been computed. This can be used + * Called after a client's flood check has been computed. This can be used * by antiflood algorithms to decay/increase flooding weights. * - * Since the result from "OnClientFloodCheck" isn't guaranteed to be the - * final result, it is generally a good idea to use this to play with other + * Since the result from "OnClientFloodCheck" isn't guaranteed to be the + * final result, it is generally a good idea to use this to play with other * algorithms nicely. * - * @param client Client index. The server (0) will never be passed. - * @param blocked True if client flooded last "say", false otherwise. + * @param client Client index. The server (0) will never be passed. + * @param blocked True if client flooded last "say", false otherwise. */ forward void OnClientFloodResult(int client, bool blocked); @@ -624,7 +669,7 @@ enum NumberType enum Address { - Address_Null = 0, // a typical invalid result when an address lookup fails + Address_Null = 0 // a typical invalid result when an address lookup fails }; /** @@ -643,7 +688,38 @@ native int LoadFromAddress(Address addr, NumberType size); * @param data Value to store at the address. * @param size How many bytes should be written. */ -native void StoreToAddress(Address addr, int data, NumberType size); +native void StoreToAddress(Address addr, int data, NumberType size); + +methodmap FrameIterator < Handle { + // Creates a stack frame iterator to build your own stack traces. + // @return New handle to a FrameIterator. + public native FrameIterator(); + + // Advances the iterator to the next stack frame. + // @return True if another frame was fetched and data can be successfully read. + // @error No next element exception. + public native bool Next(); + + // Resets the iterator back to it's starting position. + public native void Reset(); + + // Returns the line number of the current function call. + property int LineNumber { + public native get(); + } + + // Gets the name of the current function in the call stack. + // + // @param buffer Buffer to copy to. + // @param maxlen Max size of the buffer. + public native void GetFunctionName(char[] buffer, int maxlen); + + // Gets the file path to the current call in the call stack. + // + // @param buffer Buffer to copy to. + // @param maxlen Max size of the buffer. + public native void GetFilePath(char[] buffer, int maxlen); +} #include #include diff --git a/env/include/string.inc b/env/include/string.inc index 11c4b00..990989f 100644 --- a/env/include/string.inc +++ b/env/include/string.inc @@ -45,53 +45,53 @@ /** * Calculates the length of a string. * - * @param str String to check. - * @return Number of valid character bytes in the string. + * @param str String to check. + * @return Number of valid character bytes in the string. */ native int strlen(const char[] str); /** * Tests whether a string is found inside another string. * - * @param str String to search in. - * @param substr Substring to find inside the original string. - * @param caseSensitive If true (default), search is case sensitive. - * If false, search is case insensitive. - * @return -1 on failure (no match found). Any other value - * indicates a position in the string where the match starts. + * @param str String to search in. + * @param substr Substring to find inside the original string. + * @param caseSensitive If true (default), search is case sensitive. + * If false, search is case insensitive. + * @return -1 on failure (no match found). Any other value + * indicates a position in the string where the match starts. */ native int StrContains(const char[] str, const char[] substr, bool caseSensitive=true); /** * Compares two strings lexographically. * - * @param str1 First string (left). - * @param str2 Second string (right). - * @param caseSensitive If true (default), comparison is case sensitive. - * If false, comparison is case insensitive. - * @return -1 if str1 < str2 - * 0 if str1 == str2 - * 1 if str1 > str2 + * @param str1 First string (left). + * @param str2 Second string (right). + * @param caseSensitive If true (default), comparison is case sensitive. + * If false, comparison is case insensitive. + * @return -1 if str1 < str2 + * 0 if str1 == str2 + * 1 if str1 > str2 */ native int strcmp(const char[] str1, const char[] str2, bool caseSensitive=true); /** * Compares two strings parts lexographically. * - * @param str1 First string (left). - * @param str2 Second string (right). - * @param num Number of characters to compare. - * @param caseSensitive If true (default), comparison is case sensitive. - * If false, comparison is case insensitive. - * @return -1 if str1 < str2 - * 0 if str1 == str2 - * 1 if str1 > str2 + * @param str1 First string (left). + * @param str2 Second string (right). + * @param num Number of characters to compare. + * @param caseSensitive If true (default), comparison is case sensitive. + * If false, comparison is case insensitive. + * @return -1 if str1 < str2 + * 0 if str1 == str2 + * 1 if str1 > str2 */ native int strncmp(const char[] str1, const char[] str2, int num, bool caseSensitive=true); /** * Backwards compatible stock - StrCompare is now strcmp - * @deprecated Renamed to strcmp + * @deprecated Renamed to strcmp */ #pragma deprecated Use strcmp() instead stock int StrCompare(const char[] str1, const char[] str2, bool caseSensitive=true) @@ -102,11 +102,11 @@ stock int StrCompare(const char[] str1, const char[] str2, bool caseSensitive=tr /** * Returns whether two strings are equal. * - * @param str1 First string (left). - * @param str2 Second string (right). - * @param caseSensitive If true (default), comparison is case sensitive. - * If false, comparison is case insensitive. - * @return True if equal, false otherwise. + * @param str1 First string (left). + * @param str2 Second string (right). + * @param caseSensitive If true (default), comparison is case sensitive. + * If false, comparison is case insensitive. + * @return True if equal, false otherwise. */ stock bool StrEqual(const char[] str1, const char[] str2, bool caseSensitive=true) { @@ -118,16 +118,16 @@ stock bool StrEqual(const char[] str1, const char[] str2, bool caseSensitive=tru * @note If the destination buffer is too small to hold the source string, the * destination will be truncated. * - * @param dest Destination string buffer to copy to. - * @param destLen Destination buffer length (includes null terminator). - * @param source Source string buffer to copy from. - * @return Number of cells written. + * @param dest Destination string buffer to copy to. + * @param destLen Destination buffer length (includes null terminator). + * @param source Source string buffer to copy from. + * @return Number of cells written. */ native int strcopy(char[] dest, int destLen, const char[] source); /** * Backwards compatibility stock - use strcopy - * @deprecated Renamed to strcopy + * @deprecated Renamed to strcopy */ #pragma deprecated Use strcopy() instead stock int StrCopy(char[] dest, int destLen, const char[] source) @@ -138,11 +138,11 @@ stock int StrCopy(char[] dest, int destLen, const char[] source) /** * Formats a string according to the SourceMod format rules (see documentation). * - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @return Number of cells written. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @return Number of cells written. */ native int Format(char[] buffer, int maxlength, const char[] format, any ...); @@ -152,11 +152,11 @@ native int Format(char[] buffer, int maxlength, const char[] format, any ...); * overlap the same memory as the output buffer. Since this security * check is removed, it is slightly faster. * - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param format Formatting rules. - * @param ... Variable number of format parameters. - * @return Number of cells written. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @return Number of cells written. */ native int FormatEx(char[] buffer, int maxlength, const char[] format, any ...); @@ -166,68 +166,68 @@ native int FormatEx(char[] buffer, int maxlength, const char[] format, any ...); * parent parameter stack, rather than a local. This is useful for * implementing your own variable argument functions. * - * @param buffer Destination string buffer. - * @param maxlength Maximum length of output string buffer. - * @param format Formatting rules. - * @param varpos Argument number which contains the '...' symbol. - * Note: Arguments start at 1. - * @return Number of bytes written. + * @param buffer Destination string buffer. + * @param maxlength Maximum length of output string buffer. + * @param format Formatting rules. + * @param varpos Argument number which contains the '...' symbol. + * Note: Arguments start at 1. + * @return Number of bytes written. */ native int VFormat(char[] buffer, int maxlength, const char[] format, int varpos); /** * Converts a string to an integer. * - * @param str String to convert. - * @param nBase Numerical base to use. 10 is default. - * @return Integer conversion of string, or 0 on failure. + * @param str String to convert. + * @param nBase Numerical base to use. 10 is default. + * @return Integer conversion of string, or 0 on failure. */ native int StringToInt(const char[] str, int nBase=10); /** * Converts a string to an integer with some more options. * - * @param str String to convert. - * @param result Variable to store the result in. - * @param nBase Numerical base to use. 10 is default. - * @return Number of characters consumed. + * @param str String to convert. + * @param result Variable to store the result in. + * @param nBase Numerical base to use. 10 is default. + * @return Number of characters consumed. */ native int StringToIntEx(const char[] str, int &result, int nBase=10); /** * Converts an integer to a string. * - * @param num Integer to convert. - * @param str Buffer to store string in. - * @param maxlength Maximum length of string buffer. - * @return Number of cells written to buffer. + * @param num Integer to convert. + * @param str Buffer to store string in. + * @param maxlength Maximum length of string buffer. + * @return Number of cells written to buffer. */ native int IntToString(int num, char[] str, int maxlength); /** * Converts a string to a floating point number. * - * @param str String to convert to a float. - * @return Floating point result, or 0.0 on error. + * @param str String to convert to a float. + * @return Floating point result, or 0.0 on error. */ native float StringToFloat(const char[] str); /** * Converts a string to a floating point number with some more options. * - * @param str String to convert to a float. - * @param result Variable to store result in. - * @return Number of characters consumed. + * @param str String to convert to a float. + * @param result Variable to store result in. + * @return Number of characters consumed. */ native int StringToFloatEx(const char[] str, float &result); /** * Converts a floating point number to a string. * - * @param num Floating point number to convert. - * @param str Buffer to store string in. - * @param maxlength Maximum length of string buffer. - * @return Number of cells written to buffer. + * @param num Floating point number to convert. + * @param str Buffer to store string in. + * @param maxlength Maximum length of string buffer. + * @return Number of cells written to buffer. */ native int FloatToString(float num, char[] str, int maxlength); @@ -238,16 +238,16 @@ native int FloatToString(float num, char[] str, int maxlength); * of the string is reached. If nothing remains, -1 is returned. * Otherwise, the index to the first character is returned. * - * @param source Source input string. - * @param arg Stores argument read from string. - * @param argLen Maximum length of argument buffer. - * @return Index to next piece of string, or -1 if none. + * @param source Source input string. + * @param arg Stores argument read from string. + * @param argLen Maximum length of argument buffer. + * @return Index to next piece of string, or -1 if none. */ native int BreakString(const char[] source, char[] arg, int argLen); /** * Backwards compatibility stock - use BreakString - * @deprecated Renamed to BreakString. + * @deprecated Renamed to BreakString. */ #pragma deprecated Use BreakString() instead stock int StrBreak(const char[] source, char[] arg, int argLen) @@ -258,21 +258,21 @@ stock int StrBreak(const char[] source, char[] arg, int argLen) /** * Removes whitespace characters from the beginning and end of a string. * - * @param str The string to trim. - * @return Number of bytes written (UTF-8 safe). + * @param str The string to trim. + * @return Number of bytes written (UTF-8 safe). */ native int TrimString(char[] str); /** * Returns text in a string up until a certain character sequence is reached. * - * @param source Source input string. - * @param split A string which specifies a search point to break at. - * @param part Buffer to store string part. - * @param partLen Maximum length of the string part buffer. - * @return -1 if no match was found; otherwise, an index into source - * marking the first index after the searched text. The - * index is always relative to the start of the input string. + * @param source Source input string. + * @param split A string which specifies a search point to break at. + * @param part Buffer to store string part. + * @param partLen Maximum length of the string part buffer. + * @return -1 if no match was found; otherwise, an index into source + * marking the first index after the searched text. The + * index is always relative to the start of the input string. */ native int SplitString(const char[] source, const char[] split, char[] part, int partLen); @@ -280,12 +280,12 @@ native int SplitString(const char[] source, const char[] split, char[] part, int * Given a string, replaces all occurrences of a search string with a * replacement string. * - * @param text String to perform search and replacements on. - * @param maxlength Maximum length of the string buffer. - * @param search String to search for. - * @param replace String to replace the search string with. - * @param caseSensitive If true (default), search is case sensitive. - * @return Number of replacements that were performed. + * @param text String to perform search and replacements on. + * @param maxlength Maximum length of the string buffer. + * @param search String to search for. + * @param replace String to replace the search string with. + * @param caseSensitive If true (default), search is case sensitive. + * @return Number of replacements that were performed. */ native int ReplaceString(char[] text, int maxlength, const char[] search, const char[] replace, bool caseSensitive=true); @@ -293,18 +293,18 @@ native int ReplaceString(char[] text, int maxlength, const char[] search, const * Given a string, replaces the first occurrence of a search string with a * replacement string. * - * @param text String to perform search and replacements on. - * @param maxlength Maximum length of the string buffer. - * @param search String to search for. - * @param replace String to replace the search string with. - * @param searchLen If higher than -1, its value will be used instead of - * a strlen() call on the search parameter. - * @param replaceLen If higher than -1, its value will be used instead of - * a strlen() call on the replace parameter. - * @param caseSensitive If true (default), search is case sensitive. - * @return Index into the buffer (relative to the start) from where - * the last replacement ended, or -1 if no replacements were - * made. + * @param text String to perform search and replacements on. + * @param maxlength Maximum length of the string buffer. + * @param search String to search for. + * @param replace String to replace the search string with. + * @param searchLen If higher than -1, its value will be used instead of + * a strlen() call on the search parameter. + * @param replaceLen If higher than -1, its value will be used instead of + * a strlen() call on the replace parameter. + * @param caseSensitive If true (default), search is case sensitive. + * @return Index into the buffer (relative to the start) from where + * the last replacement ended, or -1 if no replacements were + * made. */ native int ReplaceStringEx(char[] text, int maxlength, const char[] search, const char[] replace, int searchLen=-1, int replaceLen=-1, bool caseSensitive=true); @@ -313,8 +313,8 @@ native int ReplaceStringEx(char[] text, int maxlength, const char[] search, cons * for multi-byte characters (UTF-8). For normal ASCII characters, * this will return 1. * - * @param source Source input string. - * @return Number of bytes the current character uses. + * @param source Source input string. + * @return Number of bytes the current character uses. */ native int GetCharBytes(const char[] source); @@ -323,8 +323,8 @@ native int GetCharBytes(const char[] source); * * @note Multi-byte characters will always return false. * - * @param chr Character to test. - * @return True if character is alphabetical, otherwise false. + * @param chr Character to test. + * @return True if character is alphabetical, otherwise false. */ native bool IsCharAlpha(int chr); @@ -333,8 +333,8 @@ native bool IsCharAlpha(int chr); * * @note Multi-byte characters will always return false. * - * @param chr Character to test. - * @return True if character is numeric, otherwise false. + * @param chr Character to test. + * @return True if character is numeric, otherwise false. */ native bool IsCharNumeric(int chr); @@ -343,17 +343,17 @@ native bool IsCharNumeric(int chr); * * @note Multi-byte characters will always return false. * - * @param chr Character to test. - * @return True if character is whitespace, otherwise false. + * @param chr Character to test. + * @return True if character is whitespace, otherwise false. */ native bool IsCharSpace(int chr); /** * Returns if a character is multi-byte or not. * - * @param chr Character to test. - * @return 0 for a normal 7-bit ASCII character, - * otherwise number of bytes in multi-byte character. + * @param chr Character to test. + * @return 0 for a normal 7-bit ASCII character, + * otherwise number of bytes in multi-byte character. */ native int IsCharMB(int chr); @@ -362,8 +362,8 @@ native int IsCharMB(int chr); * * @note Multi-byte characters will always return false. * - * @param chr Character to test. - * @return True if character is uppercase, otherwise false. + * @param chr Character to test. + * @return True if character is uppercase, otherwise false. */ native bool IsCharUpper(int chr); @@ -372,8 +372,8 @@ native bool IsCharUpper(int chr); * * @note Multi-byte characters will always return false. * - * @param chr Character to test. - * @return True if character is lowercase, otherwise false. + * @param chr Character to test. + * @return True if character is lowercase, otherwise false. */ native bool IsCharLower(int chr); @@ -385,18 +385,18 @@ native bool IsCharLower(int chr); * exist. Otherwise, the string is left unmodified. This function should * be considered O(k) (all characters get shifted down). * - * @param text String to modify (in place). - * @return True if string was modified, false if there was no - * set of quotes. + * @param text String to modify (in place). + * @return True if string was modified, false if there was no + * set of quotes. */ native bool StripQuotes(char[] text); /** - * Returns an uppercase character to a lowercase character. + * Converts a lowercase character to its uppercase counterpart. * - * @param chr Character to convert. - * @return Lowercase character on success, - * no change on failure. + * @param chr Character to convert. + * @return Uppercase character on success, + * no change on failure. */ stock int CharToUpper(int chr) { @@ -404,15 +404,16 @@ stock int CharToUpper(int chr) { return (chr & ~(1<<5)); } + return chr; } /** - * Returns a lowercase character to an uppercase character. + * Converts an uppercase character to its lowercase counterpart. * - * @param chr Character to convert. - * @return Uppercase character on success, - * no change on failure. + * @param chr Character to convert. + * @return Lowercase character on success, + * no change on failure. */ stock int CharToLower(int chr) { @@ -420,32 +421,42 @@ stock int CharToLower(int chr) { return (chr | (1<<5)); } + return chr; } /** * Finds the first occurrence of a character in a string. * - * @param str String. - * @param c Character to search for. - * @param reverse False (default) to search forward, true to search - * backward. - * @return The index of the first occurrence of the character - * in the string, or -1 if the character was not found. + * @param str String. + * @param c Character to search for. + * @param reverse False (default) to search forward, true to search + * backward. + * @return The index of the first occurrence of the character + * in the string, or -1 if the character was not found. */ stock int FindCharInString(const char[] str, char c, bool reverse = false) { int len = strlen(str); - if (!reverse) { - for (int i = 0; i < len; i++) { + if (!reverse) + { + for (int i = 0; i < len; i++) + { if (str[i] == c) + { return i; + } } - } else { - for (int i = len - 1; i >= 0; i--) { + } + else + { + for (int i = len - 1; i >= 0; i--) + { if (str[i] == c) + { return i; + } } } @@ -455,10 +466,10 @@ stock int FindCharInString(const char[] str, char c, bool reverse = false) /** * Concatenates one string onto another. * - * @param buffer String to append to. - * @param maxlength Maximum length of entire buffer. - * @param source Source string to concatenate. - * @return Number of bytes written. + * @param buffer String to append to. + * @param maxlength Maximum length of entire buffer. + * @param source Source string to concatenate. + * @return Number of bytes written. */ stock int StrCat(char[] buffer, int maxlength, const char[] source) { @@ -474,14 +485,14 @@ stock int StrCat(char[] buffer, int maxlength, const char[] source) /** * Breaks a string into pieces and stores each piece into an array of buffers. * - * @param text The string to split. - * @param split The string to use as a split delimiter. - * @param buffers An array of string buffers (2D array). - * @param maxStrings Number of string buffers (first dimension size). - * @param maxStringLength Maximum length of each string buffer. - * @param copyRemainder False (default) discard excess pieces, true to ignore - * delimiters after last piece. - * @return Number of strings retrieved. + * @param text The string to split. + * @param split The string to use as a split delimiter. + * @param buffers An array of string buffers (2D array). + * @param maxStrings Number of string buffers (first dimension size). + * @param maxStringLength Maximum length of each string buffer. + * @param copyRemainder False (default) discard excess pieces, true to ignore + * delimiters after last piece. + * @return Number of strings retrieved. */ stock int ExplodeString(const char[] text, const char[] split, char[][] buffers, int maxStrings, int maxStringLength, bool copyRemainder = false) @@ -515,12 +526,12 @@ stock int ExplodeString(const char[] text, const char[] split, char[][] buffers, * Joins an array of strings into one string, with a "join" string inserted in * between each given string. This function complements ExplodeString. * - * @param strings An array of strings. - * @param numStrings Number of strings in the array. - * @param join The join string to insert between each string. - * @param buffer Output buffer to write the joined string to. - * @param maxLength Maximum length of the output buffer. - * @return Number of bytes written to the output buffer. + * @param strings An array of strings. + * @param numStrings Number of strings in the array. + * @param join The join string to insert between each string. + * @param buffer Output buffer to write the joined string to. + * @param maxLength Maximum length of the output buffer. + * @return Number of bytes written to the output buffer. */ stock int ImplodeStrings(const char[][] strings, int numStrings, const char[] join, char[] buffer, int maxLength) { diff --git a/env/include/testing.inc b/env/include/testing.inc index 561f068..8673379 100644 --- a/env/include/testing.inc +++ b/env/include/testing.inc @@ -41,9 +41,12 @@ stock void SetTestContext(const char[] context) stock void AssertEq(const char[] text, int cell1, int cell2) { TestNumber++; - if (cell1 == cell2) { + if (cell1 == cell2) + { PrintToServer("[%d] %s: %s == %d OK", TestNumber, TestContext, text, cell2); - } else { + } + else + { PrintToServer("[%d] %s FAIL: %s should be %d, got %d", TestNumber, TestContext, text, cell2, cell1); ThrowError("test %d (%s in %s) failed", TestNumber, text, TestContext); } @@ -52,9 +55,12 @@ stock void AssertEq(const char[] text, int cell1, int cell2) stock void AssertFalse(const char[] text, bool value) { TestNumber++; - if (!value) { + if (!value) + { PrintToServer("[%d] %s: %s == false OK", TestNumber, TestContext, text, value); - } else { + } + else + { PrintToServer("[%d] %s FAIL: %s should be false, got true", TestNumber, TestContext, text); ThrowError("test %d (%s in %s) failed", TestNumber, text, TestContext); } @@ -63,9 +69,12 @@ stock void AssertFalse(const char[] text, bool value) stock void AssertTrue(const char[] text, bool value) { TestNumber++; - if (value) { + if (value) + { PrintToServer("[%d] %s: %s == true OK", TestNumber, TestContext, text, value); - } else { + } + else + { PrintToServer("[%d] %s FAIL: %s should be true, got false", TestNumber, TestContext, text); ThrowError("test %d (%s in %s) failed", TestNumber, text, TestContext); } diff --git a/env/include/textparse.inc b/env/include/textparse.inc index d5c59b3..34e99e4 100644 --- a/env/include/textparse.inc +++ b/env/include/textparse.inc @@ -47,9 +47,9 @@ */ enum SMCResult { - SMCParse_Continue, /**< Continue parsing */ - SMCParse_Halt, /**< Stop parsing here */ - SMCParse_HaltFail /**< Stop parsing and return failure */ + SMCParse_Continue, /**< Continue parsing */ + SMCParse_Halt, /**< Stop parsing here */ + SMCParse_HaltFail /**< Stop parsing and return failure */ }; /** @@ -57,66 +57,77 @@ enum SMCResult */ enum SMCError { - SMCError_Okay = 0, /**< No error */ - SMCError_StreamOpen, /**< Stream failed to open */ - SMCError_StreamError, /**< The stream died... somehow */ - SMCError_Custom, /**< A custom handler threw an error */ - SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ - SMCError_InvalidSection2, /**< A section was declared without any header */ - SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ - SMCError_InvalidSection4, /**< A section ending has no matching beginning */ - SMCError_InvalidSection5, /**< A section beginning has no matching ending */ - SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ - SMCError_TokenOverflow, /**< The token buffer overflowed */ - SMCError_InvalidProperty1, /**< A property was declared outside of any section */ + SMCError_Okay = 0, /**< No error */ + SMCError_StreamOpen, /**< Stream failed to open */ + SMCError_StreamError, /**< The stream died... somehow */ + SMCError_Custom, /**< A custom handler threw an error */ + SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ + SMCError_InvalidSection2, /**< A section was declared without any header */ + SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ + SMCError_InvalidSection4, /**< A section ending has no matching beginning */ + SMCError_InvalidSection5, /**< A section beginning has no matching ending */ + SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ + SMCError_TokenOverflow, /**< The token buffer overflowed */ + SMCError_InvalidProperty1 /**< A property was declared outside of any section */ }; -// Called when parsing is started. -// -// @param smc The SMC Parse Handle. +/** + * Called when parsing is started. + * + * @param smc The SMC Parse Handle. + */ typedef SMC_ParseStart = function void (SMCParser smc); -// Called when the parser is entering a new section or sub-section. -// -// Note: Enclosing quotes are always stripped. -// -// @param smc The SMC Parser. -// @param name String containing section name. -// @param opt_quotes True if the section name was quote-enclosed in the file. -// @return An SMCResult action to take. +/** + * Called when the parser is entering a new section or sub-section. + * + * Note: Enclosing quotes are always stripped. + * + * @param smc The SMC Parser. + * @param name String containing section name. + * @param opt_quotes True if the section name was quote-enclosed in the file. + * @return An SMCResult action to take. + */ typedef SMC_NewSection = function SMCResult (SMCParser smc, const char[] name, bool opt_quotes); -// Called when the parser finds a new key/value pair. -// -// Note: Enclosing quotes are always stripped. -// -// @param smc The SMCParser. -// @param key String containing key name. -// @param value String containing value name. -// @param key_quotes Whether or not the key was enclosed in quotes. -// @param value_quotes Whether or not the value was enclosed in quotes. -// @return An SMCResult action to take. +/** + * Called when the parser finds a new key/value pair. + * + * Note: Enclosing quotes are always stripped. + * + * @param smc The SMCParser. + * @param key String containing key name. + * @param value String containing value name. + * @param key_quotes Whether or not the key was enclosed in quotes. + * @param value_quotes Whether or not the value was enclosed in quotes. + * @return An SMCResult action to take. + */ typedef SMC_KeyValue = function SMCResult (SMCParser smc, const char[] key, const char[] value, bool key_quotes, bool value_quotes); -// Called when the parser finds the end of the current section. -// -// @param smc The SMCParser. -// @return An SMCResult action to take. +/** Called when the parser finds the end of the current section. + * + * @param smc The SMCParser. + * @return An SMCResult action to take. + */ typedef SMC_EndSection = function SMCResult (SMCParser smc); -// Called when parsing is halted. -// -// @param smc The SMCParser. -// @param halted True if abnormally halted, false otherwise. -// @param failed True if parsing failed, false otherwise. +/** + * Called when parsing is halted. + * + * @param smc The SMCParser. + * @param halted True if abnormally halted, false otherwise. + * @param failed True if parsing failed, false otherwise. + */ typedef SMC_ParseEnd = function void (SMCParser smc, bool halted, bool failed); -// Callback for whenever a new line of text is about to be parsed. -// -// @param smc The SMCParser. -// @param line A string containing the raw line from the file. -// @param lineno The line number it occurs on. -// @return An SMCResult action to take. +/** + * Callback for whenever a new line of text is about to be parsed. + * + * @param smc The SMCParser. + * @param line A string containing the raw line from the file. + * @param lineno The line number it occurs on. + * @return An SMCResult action to take. + */ typedef SMC_RawLine = function SMCResult (SMCParser smc, const char[] line, int lineno); // An SMCParser is a callback-driven parser for SourceMod configuration files. @@ -130,10 +141,10 @@ methodmap SMCParser < Handle // Parses an SMC file. // - // @param file A string containing the file path. - // @param line An optional variable to store the last line number read. - // @param col An optional variable to store the last column number read. - // @return An SMCParseError result. + // @param file A string containing the file path. + // @param line An optional variable to store the last line number read. + // @param col An optional variable to store the last column number read. + // @return An SMCParseError result. public native SMCError ParseFile(const char[] file, int &line = 0, int &col = 0); // Sets the callback for receiving SMC_ParseStart events. @@ -168,76 +179,77 @@ methodmap SMCParser < Handle // Gets an error string for an SMCError code. // - // @param error The SMCParseError code. - // @param buffer A string buffer for the error (contents undefined on failure). - // @param buf_max The maximum size of the buffer. - // @return The number of characters written to buffer. + // @param error The SMCParseError code. + // @param buffer A string buffer for the error (contents undefined on failure). + // @param buf_max The maximum size of the buffer. + // @return The number of characters written to buffer. public native void GetErrorString(SMCError error, char[] buffer, int buf_max); }; /** * Creates a new SMC file format parser. This is used to set parse hooks. * - * @return A new Handle to an SMC Parse structure. + * @return A new Handle to an SMC Parse structure. */ native SMCParser SMC_CreateParser(); /** * Parses an SMC file. * - * @param smc A Handle to an SMC Parse structure. - * @param file A string containing the file path. - * @param line An optional by reference cell to store the last line number read. - * @param col An optional by reference cell to store the last column number read. - * @return An SMCParseError result. - * @error Invalid or corrupt Handle. + * @param smc A Handle to an SMC Parse structure. + * @param file A string containing the file path. + * @param line An optional by reference cell to store the last line number read. + * @param col An optional by reference cell to store the last column number read. + * @return An SMCParseError result. + * @error Invalid or corrupt Handle. */ native SMCError SMC_ParseFile(Handle smc, const char[] file, int &line=0, int &col=0); /** * Gets an error string for an SMCError code. + * * @note SMCError_Okay returns false. * @note SMCError_Custom (which is thrown on SMCParse_HaltFail) returns false. * - * @param error The SMCParseError code. - * @param buffer A string buffer for the error (contents undefined on failure). - * @param buf_max The maximum size of the buffer. - * @return True on success, false otherwise. + * @param error The SMCParseError code. + * @param buffer A string buffer for the error (contents undefined on failure). + * @param buf_max The maximum size of the buffer. + * @return True on success, false otherwise. */ native bool SMC_GetErrorString(SMCError error, char[] buffer, int buf_max); /** * Sets the SMC_ParseStart function of a parse Handle. * - * @param smc Handle to an SMC Parse. - * @param func SMC_ParseStart function. - * @error Invalid or corrupt Handle. + * @param smc Handle to an SMC Parse. + * @param func SMC_ParseStart function. + * @error Invalid or corrupt Handle. */ native void SMC_SetParseStart(Handle smc, SMC_ParseStart func); /** * Sets the SMC_ParseEnd of a parse handle. * - * @param smc Handle to an SMC Parse. - * @param func SMC_ParseEnd function. - * @error Invalid or corrupt Handle. + * @param smc Handle to an SMC Parse. + * @param func SMC_ParseEnd function. + * @error Invalid or corrupt Handle. */ native void SMC_SetParseEnd(Handle smc, SMC_ParseEnd func); /** * Sets the three main reader functions. * - * @param smc An SMC parse Handle. - * @param ns An SMC_NewSection function pointer. - * @param kv An SMC_KeyValue function pointer. - * @param es An SMC_EndSection function pointer. + * @param smc An SMC parse Handle. + * @param ns An SMC_NewSection function pointer. + * @param kv An SMC_KeyValue function pointer. + * @param es An SMC_EndSection function pointer. */ native void SMC_SetReaders(Handle smc, SMC_NewSection ns, SMC_KeyValue kv, SMC_EndSection es); /** * Sets a raw line reader on an SMC parser Handle. * - * @param smc Handle to an SMC Parse. - * @param func SMC_RawLine function. + * @param smc Handle to an SMC Parse. + * @param func SMC_RawLine function. */ native void SMC_SetRawLine(Handle smc, SMC_RawLine func); diff --git a/env/include/tf2.inc b/env/include/tf2.inc index 7c5bbc4..6b8a535 100644 --- a/env/include/tf2.inc +++ b/env/include/tf2.inc @@ -35,13 +35,14 @@ #endif #define _tf2_included -#define TF_STUNFLAG_SLOWDOWN (1 << 0) /**< activates slowdown modifier */ -#define TF_STUNFLAG_BONKSTUCK (1 << 1) /**< bonk sound, stuck */ -#define TF_STUNFLAG_LIMITMOVEMENT (1 << 2) /**< disable forward/backward movement */ -#define TF_STUNFLAG_CHEERSOUND (1 << 3) /**< cheering sound */ -#define TF_STUNFLAG_NOSOUNDOREFFECT (1 << 5) /**< no sound or particle */ -#define TF_STUNFLAG_THIRDPERSON (1 << 6) /**< panic animation */ -#define TF_STUNFLAG_GHOSTEFFECT (1 << 7) /**< ghost particles */ +#define TF_STUNFLAG_SLOWDOWN (1 << 0) /**< activates slowdown modifier */ +#define TF_STUNFLAG_BONKSTUCK (1 << 1) /**< bonk sound, stuck */ +#define TF_STUNFLAG_LIMITMOVEMENT (1 << 2) /**< disable forward/backward movement */ +#define TF_STUNFLAG_CHEERSOUND (1 << 3) /**< cheering sound */ +#define TF_STUNFLAG_NOSOUNDOREFFECT (1 << 5) /**< no sound or particle */ +#define TF_STUNFLAG_THIRDPERSON (1 << 6) /**< panic animation */ +#define TF_STUNFLAG_GHOSTEFFECT (1 << 7) /**< ghost particles */ +#define TF_STUNFLAG_SOUND (1 << 8) /**< sound */ #define TF_STUNFLAGS_LOSERSTATE TF_STUNFLAG_SLOWDOWN|TF_STUNFLAG_NOSOUNDOREFFECT|TF_STUNFLAG_THIRDPERSON #define TF_STUNFLAGS_GHOSTSCARE TF_STUNFLAG_GHOSTEFFECT|TF_STUNFLAG_THIRDPERSON @@ -68,134 +69,144 @@ enum TFTeam TFTeam_Unassigned = 0, TFTeam_Spectator = 1, TFTeam_Red = 2, - TFTeam_Blue = 3 + TFTeam_Blue = 3 }; enum TFCond { - TFCond_Slowed = 0, - TFCond_Zoomed, - TFCond_Disguising, - TFCond_Disguised, - TFCond_Cloaked, - TFCond_Ubercharged, - TFCond_TeleportedGlow, - TFCond_Taunting, - TFCond_UberchargeFading, + TFCond_Slowed = 0, //0: Revving Minigun, Sniper Rifle. Gives zoomed/revved pose + TFCond_Zoomed, //1: Sniper Rifle zooming + TFCond_Disguising, //2: Disguise smoke + TFCond_Disguised, //3: Disguise + TFCond_Cloaked, //4: Cloak effect + TFCond_Ubercharged, //5: Invulnerability, removed when being healed or by another Uber effect + TFCond_TeleportedGlow, //6: Teleport trail effect + TFCond_Taunting, //7: Used for taunting, can remove to stop taunting + TFCond_UberchargeFading, //8: Invulnerability expiration effect TFCond_Unknown1, //9 - TFCond_CloakFlicker = 9, - TFCond_Teleporting, - TFCond_Kritzkrieged, + TFCond_CloakFlicker = 9, //9: Cloak flickering effect + TFCond_Teleporting, //10: Used for teleporting, does nothing applying + TFCond_Kritzkrieged, //11: Crit boost, removed when being healed or another Uber effect TFCond_Unknown2, //12 - TFCond_TmpDamageBonus = 12, - TFCond_DeadRingered, - TFCond_Bonked, - TFCond_Dazed, - TFCond_Buffed, - TFCond_Charging, - TFCond_DemoBuff, - TFCond_CritCola, - TFCond_InHealRadius, - TFCond_Healing, - TFCond_OnFire, - TFCond_Overhealed, - TFCond_Jarated, - TFCond_Bleeding, - TFCond_DefenseBuffed, - TFCond_Milked, - TFCond_MegaHeal, - TFCond_RegenBuffed, - TFCond_MarkedForDeath, - TFCond_NoHealingDamageBuff, - TFCond_SpeedBuffAlly, // 32 - TFCond_HalloweenCritCandy, - TFCond_CritCanteen, - TFCond_CritDemoCharge, - TFCond_CritHype, - TFCond_CritOnFirstBlood, - TFCond_CritOnWin, - TFCond_CritOnFlagCapture, - TFCond_CritOnKill, - TFCond_RestrictToMelee, - TFCond_DefenseBuffNoCritBlock, - TFCond_Reprogrammed, - TFCond_CritMmmph, - TFCond_DefenseBuffMmmph, - TFCond_FocusBuff, - TFCond_DisguiseRemoved, - TFCond_MarkedForDeathSilent, - TFCond_DisguisedAsDispenser, - TFCond_Sapped, - TFCond_UberchargedHidden, - TFCond_UberchargedCanteen, - TFCond_HalloweenBombHead, - TFCond_HalloweenThriller, - TFCond_RadiusHealOnDamage, - TFCond_CritOnDamage, - TFCond_UberchargedOnTakeDamage, - TFCond_UberBulletResist, - TFCond_UberBlastResist, - TFCond_UberFireResist, - TFCond_SmallBulletResist, - TFCond_SmallBlastResist, - TFCond_SmallFireResist, - TFCond_Stealthed, // 64 - TFCond_MedigunDebuff, - TFCond_StealthedUserBuffFade, - TFCond_BulletImmune, - TFCond_BlastImmune, - TFCond_FireImmune, - TFCond_PreventDeath, - TFCond_MVMBotRadiowave, - TFCond_HalloweenSpeedBoost, - TFCond_HalloweenQuickHeal, - TFCond_HalloweenGiant, - TFCond_HalloweenTiny, - TFCond_HalloweenInHell, - TFCond_HalloweenGhostMode, - TFCond_MiniCritOnKill, + TFCond_TmpDamageBonus = 12, //12: Temporary damage buff, something along with attribute 19 + TFCond_DeadRingered, //13: Dead Ringer damage resistance, gives TFCond_Cloaked + TFCond_Bonked, //14: Bonk! Atomic Punch effect + TFCond_Dazed, //15: Slow effect, can remove to remove stun effects + TFCond_Buffed, //16: Buff Banner mini-crits, icon, and glow + TFCond_Charging, //17: Forced forward, charge effect + TFCond_DemoBuff, //18: Eyelander eye glow + TFCond_CritCola, //19: Mini-crit effect + TFCond_InHealRadius, //20: Ring effect, rings disappear after a taunt ends + TFCond_Healing, //21: Used for healing, does nothing applying + TFCond_OnFire, //22: Ignite sound and vocals, can remove to remove afterburn + TFCond_Overhealed, //23: Used for overheal, does nothing applying + TFCond_Jarated, //24: Jarate effect + TFCond_Bleeding, //25: Bleed effect + TFCond_DefenseBuffed, //26: Battalion's Backup's defense, icon, and glow + TFCond_Milked, //27: Mad Milk effect + TFCond_MegaHeal, //28: Quick-Fix Ubercharge's knockback/stun immunity and visual effect + TFCond_RegenBuffed, //29: Concheror's speed boost, heal on hit, icon, and glow + TFCond_MarkedForDeath, //30: Fan o' War marked-for-death effect + TFCond_NoHealingDamageBuff, //31: Mini-crits, blocks healing, glow, no weapon mini-crit effects + TFCond_SpeedBuffAlly, //32: Disciplinary Action speed boost + TFCond_HalloweenCritCandy, //33: Halloween pumpkin crit-boost + TFCond_CritCanteen, //34: Crit-boost and doubles Sentry Gun fire-rate + TFCond_CritDemoCharge, //35: Crit glow, adds TFCond_Charging when charge meter is below 75% + TFCond_CritHype, //36: Soda Popper multi-jump effect + TFCond_CritOnFirstBlood, //37: Arena first blood crit-boost + TFCond_CritOnWin, //38: End-of-round crit-boost (May not remove correctly?) + TFCond_CritOnFlagCapture, //39: Intelligence capture crit-boost + TFCond_CritOnKill, //40: Crit-boost from crit-on-kill weapons + TFCond_RestrictToMelee, //41: Prevents switching once melee is out + TFCond_DefenseBuffNoCritBlock, //42: MvM Bomb Carrier defense buff (TFCond_DefenseBuffed without crit resistance) + TFCond_Reprogrammed, //43: No longer functions + TFCond_CritMmmph, //44: Phlogistinator crit-boost + TFCond_DefenseBuffMmmph, //45: Old Phlogistinator defense buff + TFCond_FocusBuff, //46: Hitman's Heatmaker no-unscope and faster Sniper charge + TFCond_DisguiseRemoved, //47: Enforcer damage bonus removed + TFCond_MarkedForDeathSilent, //48: Marked-for-death without sound effect + TFCond_DisguisedAsDispenser, //49: Dispenser disguise when crouching, max movement speed, sentries ignore player + TFCond_Sapped, //50: Sapper sparkle effect in MvM + TFCond_UberchargedHidden, //51: Out-of-bounds robot invulnerability effect + TFCond_UberchargedCanteen, //52: Invulnerability effect and Sentry Gun damage resistance + TFCond_HalloweenBombHead, //53: Bomb head effect (does not explode) + TFCond_HalloweenThriller, //54: Forced Thriller taunting + TFCond_RadiusHealOnDamage, //55: Radius healing, adds TFCond_InHealRadius, TFCond_Healing. Removed when a taunt ends, but this condition stays but does nothing + TFCond_CritOnDamage, //56: Miscellaneous crit-boost + TFCond_UberchargedOnTakeDamage, //57: Miscellaneous invulnerability + TFCond_UberBulletResist, //58: Vaccinator Uber bullet resistance + TFCond_UberBlastResist, //59: Vaccinator Uber blast resistance + TFCond_UberFireResist, //60: Vaccinator Uber fire resistance + TFCond_SmallBulletResist, //61: Vaccinator healing bullet resistance + TFCond_SmallBlastResist, //62: Vaccinator healing blast resistance + TFCond_SmallFireResist, //63: Vaccinator healing fire resistance + TFCond_Stealthed, //64: Cloaked until next attack + TFCond_MedigunDebuff, //65: Unknown + TFCond_StealthedUserBuffFade, //66: Cloaked, will appear for a few seconds on attack and cloak again + TFCond_BulletImmune, //67: Full bullet immunity + TFCond_BlastImmune, //68: Full blast immunity + TFCond_FireImmune, //69: Full fire immunity + TFCond_PreventDeath, //70: Survive to 1 health, then the condition is removed + TFCond_MVMBotRadiowave, //71: Stuns bots and applies radio effect + TFCond_HalloweenSpeedBoost, //72: Speed boost, non-melee fire rate and reload, infinite air jumps + TFCond_HalloweenQuickHeal, //73: Healing effect, adds TFCond_Healing along with TFCond_MegaHeal temporarily + TFCond_HalloweenGiant, //74: Double size, x10 max health increase, ammo regeneration, and forced thirdperson + TFCond_HalloweenTiny, //75: Half size and increased head size + TFCond_HalloweenInHell, //76: Applies TFCond_HalloweenGhostMode when the player dies + TFCond_HalloweenGhostMode, //77: Becomes a ghost unable to attack but can fly + TFCond_MiniCritOnKill, //78: Mini-crits effect TFCond_DodgeChance, //79 - TFCond_ObscuredSmoke = 79, - TFCond_Parachute, - TFCond_BlastJumping, - TFCond_HalloweenKart, - TFCond_HalloweenKartDash, - TFCond_BalloonHead, - TFCond_MeleeOnly, - TFCond_SwimmingCurse, + TFCond_ObscuredSmoke = 79, //79: 75% chance to dodge an attack + TFCond_Parachute, //80: Parachute effect, removed when touching the ground + TFCond_BlastJumping, //81: Player is blast jumping + TFCond_HalloweenKart, //82: Player forced into a Halloween kart + TFCond_HalloweenKartDash, //83: Forced forward if in TFCond_HalloweenKart, zoom in effect, and dash animations + TFCond_BalloonHead, //84: Big head and lowered gravity + TFCond_MeleeOnly, //85: Forced melee, along with TFCond_SpeedBuffAlly and TFCond_HalloweenTiny + TFCond_SwimmingCurse, //86: Swim in the air with Jarate overlay TFCond_HalloweenKartNoTurn, //87 - TFCond_FreezeInput = 87, - TFCond_HalloweenKartCage, - TFCond_HasRune, - TFCond_RuneStrength, - TFCond_RuneHaste, - TFCond_RuneRegen, - TFCond_RuneResist, - TFCond_RuneVampire, - TFCond_RuneWarlock, - TFCond_RunePrecision, // 96 - TFCond_RuneAgility, - TFCond_GrapplingHook, - TFCond_GrapplingHookSafeFall, - TFCond_GrapplingHookLatched, - TFCond_GrapplingHookBleeding, - TFCond_AfterburnImmune, - TFCond_RuneKnockout, - TFCond_RuneImbalance, - TFCond_CritRuneTemp, - TFCond_PasstimeInterception, - TFCond_SwimmingNoEffects, - TFCond_EyeaductUnderworld, - TFCond_KingRune, - TFCond_PlagueRune, - TFCond_SupernovaRune, - TFCond_Plague, - TFCond_KingAura, - TFCond_SpawnOutline, //114 - TFCond_KnockedIntoAir, - TFCond_CompetitiveWinner, - TFCond_CompetitiveLoser, - TFCond_NoTaunting, + TFCond_FreezeInput = 87, //87: Prevents player from using controls + TFCond_HalloweenKartCage, //88: Puts a cage around the player if in TFCond_HalloweenKart, otherwise crashes + TFCond_HasRune, //89: Has a powerup + TFCond_RuneStrength, //90: Double damage and no damage falloff + TFCond_RuneHaste, //91: Double fire rate, reload speed, clip and ammo size, and 30% faster movement speed + TFCond_RuneRegen, //92: Regen ammo, health, and metal + TFCond_RuneResist, //93: Takes 1/2 damage and critical immunity + TFCond_RuneVampire, //94: Takes 3/4 damage, gain health on damage, and 40% increase in max health + TFCond_RuneWarlock, //95: Attacker takes damage and knockback on hitting the player and 50% increase in max health + TFCond_RunePrecision, //96: Less bullet spread, no damage falloff, 250% faster projectiles, and double damage, faster charge, and faster re-zoom for Sniper Rifles + TFCond_RuneAgility, //97: Increased movement speed, grappling hook speed, jump height, and instant weapon switch + TFCond_GrapplingHook, //98: Used when a player fires their grappling hook, no effect applying or removing + TFCond_GrapplingHookSafeFall, //99: Used when a player is pulled by their grappling hook, no effect applying or removing + TFCond_GrapplingHookLatched, //100: Used when a player latches onto a wall, no effect applying or removing + TFCond_GrapplingHookBleeding, //101: Used when a player is hit by attacker's grappling hook + TFCond_AfterburnImmune, //102: Deadringer afterburn immunity + TFCond_RuneKnockout, //103: Melee and grappling hook only, increased max health, knockback immunity, x4 more damage against buildings, and knockbacks a powerup off a victim on hit + TFCond_RuneImbalance, //104: Prevents gaining a crit-boost or Uber powerups + TFCond_CritRuneTemp, //105: Crit-boost effect + TFCond_PasstimeInterception, //106: Used when a player intercepts the Jack/Ball + TFCond_SwimmingNoEffects, //107: Swimming in the air without animations or overlay + TFCond_EyeaductUnderworld, //108: Refills max health, short Uber, escaped the underworld message on removal + TFCond_KingRune, //109: Increased max health and applies TFCond_KingAura + TFCond_PlagueRune, //110: Radius health kit stealing, increased max health, TFCond_Plague on touching a victim + TFCond_SupernovaRune, //111: Charge meter passively increasing, when charged activiated causes radius Bonk stun + TFCond_Plague, //112: Plague sound effect and message, blocks King powerup health regen + TFCond_KingAura, //113: Increased fire rate, reload speed, and health regen to players in a radius + TFCond_SpawnOutline, //114: Outline and health meter of teammates (and disguised spies) + TFCond_KnockedIntoAir, //115: Used when a player is airblasted + TFCond_CompetitiveWinner, //116: Unknown + TFCond_CompetitiveLoser, //117: Unknown + TFCond_NoTaunting_DEPRECATED, //118 + TFCond_HealingDebuff = 118, //118: Healing debuff from Medics and dispensers + TFCond_PasstimePenaltyDebuff, //119: Marked-for-death effect + TFCond_GrappledToPlayer, //120: Prevents taunting and some Grappling Hook actions + TFCond_GrappledByPlayer, //121: Unknown + TFCond_ParachuteDeployed, //122: Parachute deployed, prevents reopening it + TFCond_Gas, //123: Gas Passer effect + TFCond_BurningPyro, //124: Dragon's Fury afterburn on Pyros + TFCond_RocketPack, //125: Thermal Thruster launched effects, prevents reusing + TFCond_LostFooting, //126: Less ground friction + TFCond_AirCurrent //127: Reduced air control and friction }; const float TFCondDuration_Infinite = -1.0; @@ -234,57 +245,60 @@ enum TFObjectMode }; /** - * Sets a client on fire for 10 seconds. + * Sets a client on fire. * - * @param client Player's index. - * @param attacker Attacker's index. - * @error Invalid client index, client not in game, or no mod support. + * @note Fire duration is capped to 10 seconds. + * + * @param client Player's index. + * @param attacker Attacker's index. + * @param duration Duration of fire (in seconds). + * @error Invalid client index, client not in game, or no mod support. */ -native void TF2_IgnitePlayer(int client, int attacker); +native void TF2_IgnitePlayer(int client, int attacker, float duration=10.0); /** * Respawns a client * - * @param client Player's index. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_RespawnPlayer(int client); /** * Regenerates a client's health and ammunition * - * @param client Player's index. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_RegeneratePlayer(int client); /** * Adds a condition to a player * - * @param client Player's index. - * @param condition Integer identifier of condition to apply. - * @param duration Duration of condition (does not apply to all conditions). + * @param client Player's index. + * @param condition Integer identifier of condition to apply. + * @param duration Duration of condition (does not apply to all conditions). * Pass TFCondDuration_Infinite to apply until manually removed. - * @param inflictor Condition inflictor's index (0 for no inflictor). - * @error Invalid client index, client not in game, or no mod support. + * @param inflictor Condition inflictor's index (0 for no inflictor). + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_AddCondition(int client, TFCond condition, float duration=TFCondDuration_Infinite, int inflictor=0); /** * Removes a condition from a player * - * @param client Player's index. - * @param condition Integer identifier of condition to remove. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param condition Integer identifier of condition to remove. + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_RemoveCondition(int client, TFCond condition); /** * Enables/disables PowerPlay mode on a player. * - * @param client Player's index. - * @param enabled Whether to enable or disable PowerPlay on player. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param enabled Whether to enable or disable PowerPlay on player. + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_SetPlayerPowerPlay(int client, bool enabled); @@ -293,47 +307,48 @@ native void TF2_SetPlayerPowerPlay(int client, bool enabled); * * Note: This only starts the disguise process and a delay occurs before the spy is fully disguised * - * @param client Player's index. - * @param team Team to disguise the player as (only TFTeam_Red and TFTeam_Blue have an effect) - * @param classType TFClassType class to disguise the player as - * @param target Specific target player to disguise as (0 for any) - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @param team Team to disguise the player as (only TFTeam_Red and TFTeam_Blue have an effect) + * @param classType TFClassType class to disguise the player as + * @param target Specific target player to disguise as (0 for any) + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_DisguisePlayer(int client, TFTeam team, TFClassType classType, int target=0); /** * Removes the current disguise from a client. Only has an effect on spies. * - * @param client Player's index. - * @error Invalid client index, client not in game, or no mod support. + * @param client Player's index. + * @error Invalid client index, client not in game, or no mod support. */ native void TF2_RemovePlayerDisguise(int client); /** * Stuns a client * - * @param client Player's index. - * @param duration Duration of stun. - * @param slowdown Slowdown percent (as decimal, 0.00-1.00) - * Ignored if TF_STUNFLAG_SLOWDOWN is not set. - * @param stunflags Stun flags. - * @param attacker Attacker's index (0 is allowed for world). + * @param client Player's index. + * @param duration Duration of stun. + * @param slowdown Slowdown percent (as decimal, 0.00-1.00) + * Ignored if TF_STUNFLAG_SLOWDOWN is not set. + * @param stunflags Stun flags. + * @param attacker Attacker's index (0 is allowed for world). */ native void TF2_StunPlayer(int client, float duration, float slowdown=0.0, int stunflags, int attacker=0); /** * Induces the bleed effect on a client * - * @param client Player's index. - * @param attacker Attacker's index. - * @param duration Duration of bleeding (in seconds). + * @param client Player's index. + * @param attacker Attacker's index. + * @param duration Duration of bleeding (in seconds). */ native void TF2_MakeBleed(int client, int attacker, float duration); /** * Retrieves the entity index of the CPlayerResource entity * - * @return The current resource entity index. + * @return The current resource entity index. + * @deprecated Use GetPlayerResourceEntity instead */ #pragma deprecated Use GetPlayerResourceEntity instead native int TF2_GetResourceEntity(); @@ -341,8 +356,8 @@ native int TF2_GetResourceEntity(); /** * Finds the TFClassType for a given class name. * - * @param classname A classname string such as "sniper" or "demoman" - * @return A TFClassType constant. + * @param classname A classname string such as "sniper" or "demoman" + * @return A TFClassType constant. */ native TFClassType TF2_GetClass(const char[] classname); @@ -352,19 +367,19 @@ native TFClassType TF2_GetClass(const char[] classname); * action to override the decision with the value of 'result' * * @note Since critical shots are also calculated client side any changes made with - * this will not show for the shooter. Projectile weapons such as the rocketlauncher - * and demoman weapons will show a critical bullet but no critical sound effect. - * Bullet hits should appear as expected. + * this will not show for the shooter. Projectile weapons such as the rocketlauncher + * and demoman weapons will show a critical bullet but no critical sound effect. + * Bullet hits should appear as expected. * - * @param client Client Index. - * @param weapon Weapon entity Index. - * @param weaponname Classname of the weapon. - * @param result Buffer param for the result of the decision. + * @param client Client Index. + * @param weapon Weapon entity Index. + * @param weaponname Classname of the weapon. + * @param result Buffer param for the result of the decision. */ forward Action TF2_CalcIsAttackCritical(int client, int weapon, char[] weaponname, bool &result); /** - * @deprecated No longer called. Use TF2_OnIsHolidayActive. + * @deprecated No longer called. Use TF2_OnIsHolidayActive. */ #pragma deprecated No longer called. Use TF2_OnIsHolidayActive. forward Action TF2_OnGetHoliday(TFHoliday &holiday); @@ -374,17 +389,17 @@ forward Action TF2_OnGetHoliday(TFHoliday &holiday); * Return Plugin_Continue to let the original calculation or return a higher * action to override the decision with the value of 'result' * - * @param holiday Holiday being checked. - * @param result Buffer param for the result of the decision. - * @return Plugin_Continue for original calculation, higher value to use 'result'. + * @param holiday Holiday being checked. + * @param result Buffer param for the result of the decision. + * @return Plugin_Continue for original calculation, higher value to use 'result'. */ forward Action TF2_OnIsHolidayActive(TFHoliday holiday, bool &result); /** * Returns whether or not a holiday is active * - * @param holiday Holiday being checked. - * @return Boolean of whether or not the holiday is active. + * @param holiday Holiday being checked. + * @return Boolean of whether or not the holiday is active. */ native bool TF2_IsHolidayActive(TFHoliday holiday); @@ -392,7 +407,7 @@ native bool TF2_IsHolidayActive(TFHoliday holiday); * Returns whether or not a client (Player) is in a duel. * * @param client Client Index. - * @return Boolean of whether or not the client/player is dueling. + * @return Boolean of whether or not the client/player is dueling. */ native bool TF2_IsPlayerInDuel(int client); @@ -400,16 +415,16 @@ native bool TF2_IsPlayerInDuel(int client); * Removes an econ wearable (hat, misc, etc) from a player. * This also deletes the wearable entity. * - * @param client Client index. - * @param wearable Index of the wearable entity. - * @error Invalid client index, client not in game, invalid wearable entity, or no mod support. + * @param client Client index. + * @param wearable Index of the wearable entity. + * @error Invalid client index, client not in game, invalid wearable entity, or no mod support. */ native void TF2_RemoveWearable(int client, int wearable); /** * Called after a condition is added to a player * - * @param client Index of the client to which the condition is being added. + * @param client Index of the client to which the condition is being added. * @param condition Condition that is being added. */ forward void TF2_OnConditionAdded(int client, TFCond condition); @@ -417,8 +432,8 @@ forward void TF2_OnConditionAdded(int client, TFCond condition); /** * Called after a condition is removed from a player * - * @param client Index of the client to which the condition is being removed. - * @param condition Condition that is being removed. + * @param client Index of the client to which the condition is being removed. + * @param condition Condition that is being removed. */ forward void TF2_OnConditionRemoved(int client, TFCond condition); @@ -437,11 +452,11 @@ forward void TF2_OnWaitingForPlayersEnd(); * Return Plugin_Continue to let the original calculation or return a higher * action to override the decision with the value of 'result' * - * @param client Client index. - * @param teleporter Teleporter entity index. - * @param result Buffer param for the result of the decision. - * This is prepopulated with the game's original decision to let a player teleport. - * @return Plugin_Continue for original calculation, higher value to use 'result'. + * @param client Client index. + * @param teleporter Teleporter entity index. + * @param result Buffer param for the result of the decision. + * This is prepopulated with the game's original decision to let a player teleport. + * @return Plugin_Continue for original calculation, higher value to use 'result'. */ forward Action TF2_OnPlayerTeleport(int client, int teleporter, bool &result); diff --git a/env/include/tf2_stocks.inc b/env/include/tf2_stocks.inc index adc70c9..02c0054 100644 --- a/env/include/tf2_stocks.inc +++ b/env/include/tf2_stocks.inc @@ -79,6 +79,8 @@ #define TF_DEATHFLAG_INTERRUPTED (1 << 6) #define TF_DEATHFLAG_GIBBED (1 << 7) #define TF_DEATHFLAG_PURGATORY (1 << 8) +#define TF_DEATHFLAG_MINIBOSS (1 << 9) +#define TF_DEATHFLAG_AUSTRALIUM (1 << 10) // Custom kill identifiers for the customkill property on the player_death event enum { @@ -159,6 +161,12 @@ enum { TF_CUSTOM_KART, TF_CUSTOM_GIANT_HAMMER, TF_CUSTOM_RUNE_REFLECT, + TF_CUSTOM_DRAGONS_FURY_IGNITE, + TF_CUSTOM_DRAGONS_FURY_BONUS_BURNING, + TF_CUSTOM_SLAP_KILL, + TF_CUSTOM_CROC, + TF_CUSTOM_TAUNTATK_GASBLAST, + TF_CUSTOM_AXTINGUISHER_BOOSTED }; // Weapon codes as used in some events, such as player_death @@ -268,6 +276,12 @@ enum { TF_WEAPON_GRAPPLINGHOOK, TF_WEAPON_PASSTIME_GUN, TF_WEAPON_CHARGED_SMG, + TF_WEAPON_BREAKABLE_SIGN, + TF_WEAPON_ROCKETPACK, + TF_WEAPON_SLAP, + TF_WEAPON_JAR_GAS, + TF_WEAPON_GRENADE_JAR_GAS, + TF_WEAPON_FLAME_BALL }; // TF2 Weapon Loadout Slots @@ -339,9 +353,9 @@ static const char TFResourceNames[TFResourceType][] = /** * Gets a client's current team. * - * @param client Client index. - * @return Current TFTeam of client. - * @error Invalid client index. + * @param client Client index. + * @return Current TFTeam of client. + * @error Invalid client index. */ stock TFTeam TF2_GetClientTeam(int client) { @@ -363,9 +377,9 @@ stock void TF2_ChangeClientTeam(int client, TFTeam team) /** * Gets a client's current class. * - * @param client Player's index. - * @return Current TFClassType of player. - * @error Invalid client index. + * @param client Player's index. + * @return Current TFClassType of player. + * @error Invalid client index. */ stock TFClassType TF2_GetPlayerClass(int client) { @@ -377,11 +391,11 @@ stock TFClassType TF2_GetPlayerClass(int client) * * Note: If setting player class in a player spawn hook weapons should be set to false. * - * @param client Player's index. - * @param classType TFClassType class symbol. - * @param weapons This parameter is ignored. - * @param persistent If true, changes the player's desired class so the change stays after death. - * @error Invalid client index. + * @param client Player's index. + * @param classType TFClassType class symbol. + * @param weapons This parameter is ignored. + * @param persistent If true, changes the player's desired class so the change stays after death. + * @error Invalid client index. */ stock void TF2_SetPlayerClass(int client, TFClassType classType, bool weapons=true, bool persistent=true) { @@ -400,6 +414,7 @@ stock void TF2_SetPlayerClass(int client, TFClassType classType, bool weapons=tr * @param type ResourceType constant * @return Value or -1 on failure. * @error Invalid client index, client not in game or failed to find resource entity. + * @deprecated Use GetPlayerResourceEntity and GetEntProp instead. */ #pragma deprecated Use GetPlayerResourceEntity and GetEntProp instead stock int TF2_GetPlayerResourceData(int client, TFResourceType type) @@ -431,11 +446,12 @@ stock int TF2_GetPlayerResourceData(int client, TFResourceType type) * * Note: The game overwrites these values every frame, so changing them will have very little effect. * - * @param client Player's index. - * @param type ResourceType constant - * @param value Value to set. - * @return Value or -1 on failure. - * @error Invalid client index, client not in game or failed to find resource entity. + * @param client Player's index. + * @param type ResourceType constant + * @param value Value to set. + * @return Value or -1 on failure. + * @error Invalid client index, client not in game or failed to find resource entity. + * @deprecated Use GetPlayerResourceEntity and SetEntProp instead. */ #pragma deprecated Use GetPlayerResourceEntity and SetEntProp instead stock bool TF2_SetPlayerResourceData(int client, TFResourceType type, any value) @@ -467,9 +483,9 @@ stock bool TF2_SetPlayerResourceData(int client, TFResourceType type, any value) /** * Removes all weapons from a client's weapon slot * - * @param client Player's index. - * @param slot Slot index (0-5) - * @error Invalid client, invalid slot or lack of mod support + * @param client Player's index. + * @param slot Slot index (0-5) + * @error Invalid client, invalid slot or lack of mod support */ stock void TF2_RemoveWeaponSlot(int client, int slot) { @@ -498,7 +514,7 @@ stock void TF2_RemoveWeaponSlot(int client, int slot) /** * Removes all weapons from a client * - * @param client Player's index. + * @param client Player's index. */ stock void TF2_RemoveAllWeapons(int client) { @@ -511,8 +527,9 @@ stock void TF2_RemoveAllWeapons(int client) /** * Gets a player's condition bits * - * @param client Player's index. - * @return Player's condition bits + * @param client Player's index. + * @return Player's condition bits + * @deprecated Use TF2_IsPlayerInCondition instead. */ #pragma deprecated Use TF2_IsPlayerInCondition instead. stock int TF2_GetPlayerConditionFlags(int client) @@ -523,9 +540,9 @@ stock int TF2_GetPlayerConditionFlags(int client) /** * Check whether or not a condition is set on a player * - * @param client Player's index. - * @param cond TFCond constant - * @return True if set, false otherwise + * @param client Player's index. + * @param cond TFCond constant + * @return True if set, false otherwise */ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) { @@ -533,7 +550,7 @@ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) int iCond = view_as(cond); switch (iCond / 32) { - case 0: + case 0: { int bit = 1 << iCond; if ((GetEntProp(client, Prop_Send, "m_nPlayerCond") & bit) == bit) @@ -546,7 +563,7 @@ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) return true; } } - case 1: + case 1: { int bit = (1 << (iCond - 32)); if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx") & bit) == bit) @@ -554,7 +571,7 @@ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) return true; } } - case 2: + case 2: { int bit = (1 << (iCond - 64)); if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx2") & bit) == bit) @@ -562,7 +579,7 @@ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) return true; } } - case 3: + case 3: { int bit = (1 << (iCond - 96)); if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx3") & bit) == bit) @@ -570,8 +587,18 @@ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) return true; } } - default: - ThrowError("Invalid TFCond value %d", iCond); + case 4: + { + int bit = (1 << (iCond - 128)); + if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx4") & bit) == bit) + { + return true; + } + } + default: + { + ThrowError("Invalid TFCond value %d", iCond); + } } return false; @@ -580,9 +607,9 @@ stock bool TF2_IsPlayerInCondition(int client, TFCond cond) /** * Gets an entity's object type. * - * @param entity Entity index. - * @return Current TFObjectType of entity. - * @error Invalid entity index. + * @param entity Entity index. + * @return Current TFObjectType of entity. + * @error Invalid entity index. */ stock TFObjectType TF2_GetObjectType(int entity) { @@ -599,9 +626,9 @@ stock TFObjectType TF2_GetObjectType(int entity) /** * Gets an entity's object mode. * - * @param entity Entity index. - * @return Current TFObjectMode of entity. - * @error Invalid entity index. + * @param entity Entity index. + * @return Current TFObjectMode of entity. + * @error Invalid entity index. */ stock TFObjectMode TF2_GetObjectMode(int entity) { diff --git a/env/include/timers.inc b/env/include/timers.inc index 880bd07..2fb74d9 100644 --- a/env/include/timers.inc +++ b/env/include/timers.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -37,10 +37,10 @@ #include -#define TIMER_REPEAT (1<<0) /**< Timer will repeat until it returns Plugin_Stop */ -#define TIMER_FLAG_NO_MAPCHANGE (1<<1) /**< Timer will not carry over mapchanges */ -#define TIMER_HNDL_CLOSE (1<<9) /**< Deprecated define, replaced by below */ -#define TIMER_DATA_HNDL_CLOSE (1<<9) /**< Timer will automatically call CloseHandle() on its data when finished */ +#define TIMER_REPEAT (1<<0) /**< Timer will repeat until it returns Plugin_Stop */ +#define TIMER_FLAG_NO_MAPCHANGE (1<<1) /**< Timer will not carry over mapchanges */ +#define TIMER_HNDL_CLOSE (1<<9) /**< Deprecated define, replaced by below */ +#define TIMER_DATA_HNDL_CLOSE (1<<9) /**< Timer will automatically call CloseHandle() on its data when finished */ /** * Any of the following prototypes will work for a timed function. @@ -48,108 +48,108 @@ typeset Timer { /** - * Called when the timer interval has elapsed. - * - * @param timer Handle to the timer object. - * @param hndl Handle passed to CreateTimer() when timer was created. - * @return Plugin_Stop to stop a repeating timer, any other value for - * default behavior. - */ + * Called when the timer interval has elapsed. + * + * @param timer Handle to the timer object. + * @param hndl Handle passed to CreateTimer() when timer was created. + * @return Plugin_Stop to stop a repeating timer, any other value for + * default behavior. + */ function Action(Handle timer, Handle hndl); - + /** - * Called when the timer interval has elapsed. - * - * @param timer Handle to the timer object. - * @param data Data passed to CreateTimer() when timer was created. - * @return Plugin_Stop to stop a repeating timer, any other value for - * default behavior. - */ + * Called when the timer interval has elapsed. + * + * @param timer Handle to the timer object. + * @param data Data passed to CreateTimer() when timer was created. + * @return Plugin_Stop to stop a repeating timer, any other value for + * default behavior. + */ function Action(Handle timer, any data); - + /** - * Called when the timer interval has elapsed. - * - * @param timer Handle to the timer object. - * @return Plugin_Stop to stop a repeating timer, any other value for - * default behavior. - */ + * Called when the timer interval has elapsed. + * + * @param timer Handle to the timer object. + * @return Plugin_Stop to stop a repeating timer, any other value for + * default behavior. + */ function Action(Handle timer); }; /** * Creates a basic timer. Calling CloseHandle() on a timer will end the timer. * - * @param interval Interval from the current game time to execute the given function. - * @param func Function to execute once the given interval has elapsed. - * @param data Handle or value to pass through to the timer callback function. - * @param flags Flags to set (such as repeatability or auto-Handle closing). - * @return Handle to the timer object. You do not need to call CloseHandle(). - * If the timer could not be created, INVALID_HANDLE will be returned. + * @param interval Interval from the current game time to execute the given function. + * @param func Function to execute once the given interval has elapsed. + * @param data Handle or value to pass through to the timer callback function. + * @param flags Flags to set (such as repeatability or auto-Handle closing). + * @return Handle to the timer object. You do not need to call CloseHandle(). + * If the timer could not be created, INVALID_HANDLE will be returned. */ native Handle CreateTimer(float interval, Timer func, any data=INVALID_HANDLE, int flags=0); /** * Kills a timer. Use this instead of CloseHandle() if you need more options. * - * @param timer Timer Handle to kill. - * @param autoClose If autoClose is true, the data that was passed to CreateTimer() will - * be closed as a handle if TIMER_DATA_HNDL_CLOSE was not specified. - * @error Invalid handles will cause a run time error. + * @param timer Timer Handle to kill. + * @param autoClose If autoClose is true, the data that was passed to CreateTimer() will + * be closed as a handle if TIMER_DATA_HNDL_CLOSE was not specified. + * @error Invalid handles will cause a run time error. */ native void KillTimer(Handle timer, bool autoClose=false); /** * Manually triggers a timer so its function will be called. * - * @param timer Timer Handle to trigger. - * @param reset If reset is true, the elapsed time counter is reset - * so the full interval must pass again. + * @param timer Timer Handle to trigger. + * @param reset If reset is true, the elapsed time counter is reset + * so the full interval must pass again. */ native void TriggerTimer(Handle timer, bool reset=false); /** - * Returns the simulated game time. + * Returns the simulated game time. * - * This time is internally maintained by SourceMod and is based on the game - * tick count and tick rate. Unlike GetGameTime(), it will increment past - * map changes and while no players are connected. Unlike GetEngineTime(), - * it will not increment based on the system clock (i.e. it is still bound + * This time is internally maintained by SourceMod and is based on the game + * tick count and tick rate. Unlike GetGameTime(), it will increment past + * map changes and while no players are connected. Unlike GetEngineTime(), + * it will not increment based on the system clock (i.e. it is still bound * to the ticking process). * - * @return Time based on the game tick count. + * @return Time based on the game tick count. */ native float GetTickedTime(); /** - * Returns an estimate of the time left before the map ends. If the server - * has not processed any frames yet (i.e. no players have joined the map yet), + * Returns an estimate of the time left before the map ends. If the server + * has not processed any frames yet (i.e. no players have joined the map yet), * then the time left returned will always be infinite. * - * @param timeleft Variable to store the time, in seconds. If the - * value is less than 0, the time limit is infinite. - * @return True if the operation is supported, false otherwise. + * @param timeleft Variable to store the time, in seconds. If the + * value is less than 0, the time limit is infinite. + * @return True if the operation is supported, false otherwise. */ native bool GetMapTimeLeft(int &timeleft); /** - * Retrieves the current map time limit. If the server has not processed any - * frames yet (i.e. no players have joined the map yet), then the time limit + * Retrieves the current map time limit. If the server has not processed any + * frames yet (i.e. no players have joined the map yet), then the time limit * returned will always be 0. * - * @param time Set to the number of total seconds in the map time - * limit, or 0 if there is no time limit set. - * @return True on success, false if operation is not supported. + * @param time Set to the number of total seconds in the map time + * limit, or 0 if there is no time limit set. + * @return True on success, false if operation is not supported. */ native bool GetMapTimeLimit(int &time); /** * Extends the map time limit in a way that will notify all plugins. * - * @param time Number of seconds to extend map time limit by. - * The number can be negative to decrease the time limit. - * If 0, the map will be set to have no time limit. - * @return True on success, false if operation is not supported. + * @param time Number of seconds to extend map time limit by. + * The number can be negative to decrease the time limit. + * If 0, the map will be set to have no time limit. + * @return True on success, false if operation is not supported. */ native bool ExtendMapTimeLimit(int time); @@ -158,34 +158,34 @@ native bool ExtendMapTimeLimit(int time); * * Note: A tick, in this context, is a frame. * - * @return Number of seconds in between ticks. + * @return Number of seconds in between ticks. */ native float GetTickInterval(); /** - * Notification that the map's time left has changed via a change in the time - * limit or a change in the game rules (such as mp_restartgame). This is useful + * Notification that the map's time left has changed via a change in the time + * limit or a change in the game rules (such as mp_restartgame). This is useful * for plugins trying to create timers based on the time left in the map. * - * Calling ExtendMapTimeLimit() from here, without proper precaution, will + * Calling ExtendMapTimeLimit() from here, without proper precaution, will * cause infinite recursion. * * If the operation is not supported, this will never be called. - * If the server has not yet processed any frames (i.e. no players have joined - * the map yet), then this will be called once the server begins ticking, even + * If the server has not yet processed any frames (i.e. no players have joined + * the map yet), then this will be called once the server begins ticking, even * if there is no time limit set. */ forward void OnMapTimeLeftChanged(); /** - * Returns whether or not the server is processing frames or not. + * Returns whether or not the server is processing frames or not. * - * The server does not process frames until at least one client joins the game. - * Once the first player has in, even if that player, leaves, the server's + * The server does not process frames until at least one client joins the game. + * Once the first player has in, even if that player, leaves, the server's * timers and entities will work. * - * @return True if the server is ticking, false otherwise. + * @return True if the server is ticking, false otherwise. */ native bool IsServerProcessing(); @@ -194,12 +194,12 @@ native bool IsServerProcessing(); * @note The datapack is automatically freed when the timer ends. * @note The position of the datapack is not reset or changed for the timer function. * - * @param interval Interval from the current game time to execute the given function. - * @param func Function to execute once the given interval has elapsed. - * @param datapack The newly created datapack is passed though this by-reference - * parameter to the timer callback function. - * @param flags Timer flags. - * @return Handle to the timer object. You do not need to call CloseHandle(). + * @param interval Interval from the current game time to execute the given function. + * @param func Function to execute once the given interval has elapsed. + * @param datapack The newly created datapack is passed though this by-reference + * parameter to the timer callback function. + * @param flags Timer flags. + * @return Handle to the timer object. You do not need to call CloseHandle(). */ stock Handle CreateDataTimer(float interval, Timer func, Handle &datapack, int flags=0) { diff --git a/env/include/topmenus.inc b/env/include/topmenus.inc index d29cd78..bd1c6da 100644 --- a/env/include/topmenus.inc +++ b/env/include/topmenus.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _topmenus_included #endinput #endif @@ -49,18 +49,18 @@ enum TopMenuAction * OUTPUT: Buffer for rendering, maxlength of buffer. */ TopMenuAction_DisplayOption = 0, - + /** * The title of a menu is being drawn for a given topobj. * - * Note: The Object ID will be INVALID_TOPMENUOBJECT if drawing the + * Note: The Object ID will be INVALID_TOPMENUOBJECT if drawing the * root title. Otherwise, the Object ID is a category. * * INPUT : TopMenu Handle, topobj ID, client index. * OUTPUT: Buffer for rendering, maxlength of buffer. */ TopMenuAction_DisplayTitle = 1, - + /** * A menu option has been selected. * @@ -74,19 +74,19 @@ enum TopMenuAction * A menu option is being drawn and its flags can be overridden. * * INPUT : TopMenu Handle, topobj ID, client index. - * OUTPUT: The first byte of the 'buffer' string should be set - * to the desired flags. By default, it will contain - * ITEMDRAW_DEFAULT. + * OUTPUT: The first byte of the 'buffer' string should be set + * to the desired flags. By default, it will contain + * ITEMDRAW_DEFAULT. */ TopMenuAction_DrawOption = 3, - + /** * Called when an topobj is being removed from the menu. * This can be used to clean up data stored in the info string. * * INPUT : TopMenu Handle, topobj ID. */ - TopMenuAction_RemoveObject = 4, + TopMenuAction_RemoveObject = 4 }; /** @@ -94,8 +94,8 @@ enum TopMenuAction */ enum TopMenuObjectType { - TopMenuObject_Category = 0, /**< Category (sub-menu branching from root) */ - TopMenuObject_Item = 1 /**< Item on a sub-menu */ + TopMenuObject_Category = 0, /**< Category (sub-menu branching from root) */ + TopMenuObject_Item = 1 /**< Item on a sub-menu */ }; /** @@ -103,9 +103,9 @@ enum TopMenuObjectType */ enum TopMenuPosition { - TopMenuPosition_Start = 0, /**< Start/root of the menu */ - TopMenuPosition_LastRoot = 1, /**< Last position in the root menu */ - TopMenuPosition_LastCategory = 3, /**< Last position in their last category */ + TopMenuPosition_Start = 0, /**< Start/root of the menu */ + TopMenuPosition_LastRoot = 1, /**< Last position in the root menu */ + TopMenuPosition_LastCategory = 3 /**< Last position in their last category */ }; /** @@ -113,21 +113,21 @@ enum TopMenuPosition */ enum TopMenuObject { - INVALID_TOPMENUOBJECT = 0, + INVALID_TOPMENUOBJECT = 0 }; /** * TopMenu callback prototype. * - * @param topmenu Handle to the TopMenu. - * @param action TopMenuAction being performed. - * @param topobj_id The topobj ID (if used). - * @param param Extra parameter (if used). - * @param buffer Output buffer (if used). - * @param maxlength Output buffer (if used). + * @param topmenu Handle to the TopMenu. + * @param action TopMenuAction being performed. + * @param topobj_id The topobj ID (if used). + * @param param Extra parameter (if used). + * @param buffer Output buffer (if used). + * @param maxlength Output buffer (if used). */ typedef TopMenuHandler = function void ( - TopMenu topmenu, + TopMenu topmenu, TopMenuAction action, TopMenuObject topobj_id, int param, @@ -152,18 +152,18 @@ methodmap TopMenu < Handle // Re-sorts the items in a TopMenu via a configuration file. // - // The format of the configuration file should be a Valve Key-Values - // formatted file that SourceMod can parse. There should be one root - // section, and one sub-section for each category. Each sub-section's + // The format of the configuration file should be a Valve Key-Values + // formatted file that SourceMod can parse. There should be one root + // section, and one sub-section for each category. Each sub-section's // name should match the category name. // // Each sub-section may only contain key/value pairs in the form of: // key: "item" // value: Name of the item as passed to AddToTopMenu(). // - // The TopMenu will draw items in the order declared in the configuration - // file. If items do not appear in the configuration file, they are sorted - // per-player based on how the handler function renders for that player. + // The TopMenu will draw items in the order declared in the configuration + // file. If items do not appear in the configuration file, they are sorted + // per-player based on how the handler function renders for that player. // These items appear after the configuration sorted items. // // @param topmenu TopMenu Handle. @@ -172,79 +172,79 @@ methodmap TopMenu < Handle // @param maxlength Maximum size of the error buffer. Error buffer // will be filled with a zero-terminated string if // false is returned. - // @return True on success, false on failure. + // @return True on success, false on failure. public native bool LoadConfig(const char[] file, char[] error, int maxlength); // Adds a category to a TopMenu. - // + // // @param name Object name (MUST be unique). // @param handler Handler for topobj. // @param cmdname Command name (for access overrides). // @param flags Default access flags. // @param info_string Arbitrary storage (max 255 bytes). - // @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on failure. + // @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on failure. public native TopMenuObject AddCategory(const char[] name, TopMenuHandler handler, const char[] cmdname = "", int flags = 0, const char[] info_string = ""); // Adds an item to a TopMenu category. - // + // // @param name Object name (MUST be unique). // @param handler Handler for topobj. // @param category The object of the parent category for the item. // @param cmdname Command name (for access overrides). // @param flags Default access flags. // @param info_string Arbitrary storage (max 255 bytes). - // @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on failure. + // @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on failure. public native TopMenuObject AddItem(const char[] name, TopMenuHandler handler, TopMenuObject parent, const char[] cmdname = "", int flags = 0, const char[] info_string = ""); // Retrieves the info string of a top menu item. - // + // // @param parent TopMenuObject ID. // @param buffer Buffer to store info string. // @param maxlength Maximum size of info string. - // @return Number of bytes written, not including the null terminator. + // @return Number of bytes written, not including the null terminator. public native int GetInfoString(TopMenuObject parent, char[] buffer, int maxlength); // Retrieves the name string of a top menu item. - // + // // @param topobj TopMenuObject ID. // @param buffer Buffer to store info string. // @param maxlength Maximum size of info string. - // @return Number of bytes written, not including the null terminator. + // @return Number of bytes written, not including the null terminator. public native int GetObjName(TopMenuObject topobj, char[] buffer, int maxlength); // Removes an topobj from a TopMenu. - // - // Plugins' topobjs are automatically removed all TopMenus when the given + // + // Plugins' topobjs are automatically removed all TopMenus when the given // plugin unloads or pauses. In the case of unpausing, all items are restored. - // + // // @param topobj TopMenuObject ID. public native void Remove(TopMenuObject topobj); // Displays a TopMenu to a client. - // + // // @param client Client index. // @param position Position to display from. - // @return True on success, false on failure. + // @return True on success, false on failure. public native bool Display(int client, TopMenuPosition position); // Displays a TopMenu category to a client. - // + // // @param category Category topobj id. // @param client Client index. - // @return True on success, false on failure. + // @return True on success, false on failure. public native bool DisplayCategory(TopMenuObject category, int client); // Finds a category's topobj ID in a TopMenu. - // + // // @param name Object's unique name. - // @return TopMenuObject ID on success, or + // @return TopMenuObject ID on success, or // INVALID_TOPMENUOBJECT on failure. public native TopMenuObject FindCategory(const char[] name); - + // Set the menu title caching behavior of the TopMenu. By default titles // are cached to reduce overhead. If you need dynamic menu titles which // change each time the menu is displayed to a user, set this to false. @@ -256,56 +256,56 @@ methodmap TopMenu < Handle /** * Creates a TopMenu. * - * @param handler Handler to use for drawing the root title. - * @return A new TopMenu Handle, or INVALID_HANDLE on failure. - */ + * @param handler Handler to use for drawing the root title. + * @return A new TopMenu Handle, or INVALID_HANDLE on failure. + */ native TopMenu CreateTopMenu(TopMenuHandler handler); /** * Re-sorts the items in a TopMenu via a configuration file. * - * The format of the configuration file should be a Valve Key-Values - * formatted file that SourceMod can parse. There should be one root - * section, and one sub-section for each category. Each sub-section's + * The format of the configuration file should be a Valve Key-Values + * formatted file that SourceMod can parse. There should be one root + * section, and one sub-section for each category. Each sub-section's * name should match the category name. * * Each sub-section may only contain key/value pairs in the form of: * key: "item" * value: Name of the item as passed to AddToTopMenu(). * - * The TopMenu will draw items in the order declared in the configuration - * file. If items do not appear in the configuration file, they are sorted - * per-player based on how the handler function renders for that player. + * The TopMenu will draw items in the order declared in the configuration + * file. If items do not appear in the configuration file, they are sorted + * per-player based on how the handler function renders for that player. * These items appear after the configuration sorted items. * - * @param topmenu TopMenu Handle. - * @param file File path. - * @param error Error buffer. - * @param maxlength Maximum size of the error buffer. - * Error buffer will be filled with a - * zero-terminated string if false is - * returned. - * @return True on success, false on failure. - * @error Invalid TopMenu Handle. + * @param topmenu TopMenu Handle. + * @param file File path. + * @param error Error buffer. + * @param maxlength Maximum size of the error buffer. + * Error buffer will be filled with a + * zero-terminated string if false is + * returned. + * @return True on success, false on failure. + * @error Invalid TopMenu Handle. */ native bool LoadTopMenuConfig(Handle topmenu, const char[] file, char[] error, int maxlength); /** * Adds an topobj to a TopMenu. * - * @param topmenu TopMenu Handle. - * @param name Object name (MUST be unique). - * @param type Object type. - * @param handler Handler for topobj. - * @param parent Parent topobj ID, or INVALID_TOPMENUOBJECT for none. - * Items must have a category parent. - * Categories must not have a parent. - * @param cmdname Command name (for access overrides). - * @param flags Default access flags. - * @param info_string Arbitrary storage (max 255 bytes). - * @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on - * failure. - * @error Invalid TopMenu Handle. + * @param topmenu TopMenu Handle. + * @param name Object name (MUST be unique). + * @param type Object type. + * @param handler Handler for topobj. + * @param parent Parent topobj ID, or INVALID_TOPMENUOBJECT for none. + * Items must have a category parent. + * Categories must not have a parent. + * @param cmdname Command name (for access overrides). + * @param flags Default access flags. + * @param info_string Arbitrary storage (max 255 bytes). + * @return A new TopMenuObject ID, or INVALID_TOPMENUOBJECT on + * failure. + * @error Invalid TopMenu Handle. */ native TopMenuObject AddToTopMenu(Handle topmenu, const char[] name, @@ -315,75 +315,75 @@ native TopMenuObject AddToTopMenu(Handle topmenu, const char[] cmdname="", int flags=0, const char[] info_string=""); - + /** * Retrieves the info string of a top menu item. * - * @param topmenu TopMenu Handle. - * @param parent TopMenuObject ID. - * @param buffer Buffer to store info string. - * @param maxlength Maximum size of info string. - * @return Number of bytes written, not including the - * null terminator. - * @error Invalid TopMenu Handle or TopMenuObject ID. + * @param topmenu TopMenu Handle. + * @param parent TopMenuObject ID. + * @param buffer Buffer to store info string. + * @param maxlength Maximum size of info string. + * @return Number of bytes written, not including the + * null terminator. + * @error Invalid TopMenu Handle or TopMenuObject ID. */ native int GetTopMenuInfoString(Handle topmenu, TopMenuObject parent, char[] buffer, int maxlength); /** * Retrieves the name string of a top menu item. * - * @param topmenu TopMenu Handle. - * @param topobj TopMenuObject ID. - * @param buffer Buffer to store info string. - * @param maxlength Maximum size of info string. - * @return Number of bytes written, not including the - * null terminator. - * @error Invalid TopMenu Handle or TopMenuObject ID. + * @param topmenu TopMenu Handle. + * @param topobj TopMenuObject ID. + * @param buffer Buffer to store info string. + * @param maxlength Maximum size of info string. + * @return Number of bytes written, not including the + * null terminator. + * @error Invalid TopMenu Handle or TopMenuObject ID. */ native int GetTopMenuObjName(Handle topmenu, TopMenuObject topobj, char[] buffer, int maxlength); /** * Removes an topobj from a TopMenu. * - * Plugins' topobjs are automatically removed all TopMenus when the given + * Plugins' topobjs are automatically removed all TopMenus when the given * plugin unloads or pauses. In the case of unpausing, all items are restored. * - * @param topmenu TopMenu Handle. - * @param topobj TopMenuObject ID. - * @error Invalid TopMenu Handle. + * @param topmenu TopMenu Handle. + * @param topobj TopMenuObject ID. + * @error Invalid TopMenu Handle. */ native void RemoveFromTopMenu(Handle topmenu, TopMenuObject topobj); /** * Displays a TopMenu to a client. * - * @param topmenu TopMenu Handle. - * @param client Client index. - * @param position Position to display from. - * @return True on success, false on failure. - * @error Invalid TopMenu Handle or client not in game. + * @param topmenu TopMenu Handle. + * @param client Client index. + * @param position Position to display from. + * @return True on success, false on failure. + * @error Invalid TopMenu Handle or client not in game. */ native bool DisplayTopMenu(Handle topmenu, int client, TopMenuPosition position); /** * Displays a TopMenu category to a client. * - * @param topmenu TopMenu Handle. - * @param category Category topobj id. - * @param client Client index. - * @return True on success, false on failure. - * @error Invalid TopMenu Handle or client not in game. + * @param topmenu TopMenu Handle. + * @param category Category topobj id. + * @param client Client index. + * @return True on success, false on failure. + * @error Invalid TopMenu Handle or client not in game. */ native bool DisplayTopMenuCategory(Handle topmenu, TopMenuObject category, int client); /** * Finds a category's topobj ID in a TopMenu. * - * @param topmenu TopMenu Handle. - * @param name Object's unique name. - * @return TopMenuObject ID on success, or - * INVALID_TOPMENUOBJECT on failure. - * @error Invalid TopMenu Handle. + * @param topmenu TopMenu Handle. + * @param name Object's unique name. + * @return TopMenuObject ID on success, or + * INVALID_TOPMENUOBJECT on failure. + * @error Invalid TopMenu Handle. */ native TopMenuObject FindTopMenuCategory(Handle topmenu, const char[] name); @@ -403,7 +403,7 @@ native void SetTopMenuTitleCaching(Handle topmenu, bool cache_titles); /** * Do not edit below this line! */ -public Extension __ext_topmenus = +public Extension __ext_topmenus = { name = "TopMenus", file = "topmenus.ext", @@ -430,5 +430,17 @@ public void __ext_topmenus_SetNTVOptional() MarkNativeAsOptional("DisplayTopMenuCategory"); MarkNativeAsOptional("FindTopMenuCategory"); MarkNativeAsOptional("SetTopMenuTitleCaching"); + MarkNativeAsOptional("TopMenu.TopMenu"); + MarkNativeAsOptional("TopMenu.FromHandle"); + MarkNativeAsOptional("TopMenu.LoadConfig"); + MarkNativeAsOptional("TopMenu.AddCategory"); + MarkNativeAsOptional("TopMenu.AddItem"); + MarkNativeAsOptional("TopMenu.GetInfoString"); + MarkNativeAsOptional("TopMenu.GetObjName"); + MarkNativeAsOptional("TopMenu.Remove"); + MarkNativeAsOptional("TopMenu.Display"); + MarkNativeAsOptional("TopMenu.DisplayCategory"); + MarkNativeAsOptional("TopMenu.FindCategory"); + MarkNativeAsOptional("TopMenu.CacheTitles.set"); } #endif diff --git a/env/include/usermessages.inc b/env/include/usermessages.inc index 024b506..0a43f3f 100644 --- a/env/include/usermessages.inc +++ b/env/include/usermessages.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _eventsmsgs_included #endinput #endif @@ -40,7 +40,7 @@ */ enum UserMsg { - INVALID_MESSAGE_ID = -1, + INVALID_MESSAGE_ID = -1 }; /** @@ -49,15 +49,15 @@ enum UserMsg enum UserMessageType { UM_BitBuf = 0, - UM_Protobuf, + UM_Protobuf }; /** * @section Message Flags. */ -#define USERMSG_RELIABLE (1<<2) /**< Message will be set on the reliable stream */ -#define USERMSG_INITMSG (1<<3) /**< Message will be considered to be an initmsg */ -#define USERMSG_BLOCKHOOKS (1<<7) /**< Prevents the message from triggering SourceMod and Metamod hooks */ +#define USERMSG_RELIABLE (1<<2) /**< Message will be set on the reliable stream */ +#define USERMSG_INITMSG (1<<3) /**< Message will be considered to be an initmsg */ +#define USERMSG_BLOCKHOOKS (1<<7) /**< Prevents the message from triggering SourceMod and Metamod hooks */ /** * @endsection @@ -66,14 +66,17 @@ enum UserMessageType /** * Returns usermessage serialization type used for the current engine * - * @return The supported usermessage type. + * @return The supported usermessage type. */ native UserMessageType GetUserMessageType(); stock Protobuf UserMessageToProtobuf(Handle msg) { if (GetUserMessageType() != UM_Protobuf) + { return null; + } + return view_as(msg); } @@ -81,67 +84,75 @@ stock Protobuf UserMessageToProtobuf(Handle msg) stock BfWrite UserMessageToBfWrite(Handle msg) { if (GetUserMessageType() == UM_Protobuf) + { return null; + } + return view_as(msg); } // Make sure to only call this on readable buffers (eg from a message hook). -stock BfWrite UserMessageToBfRead(Handle msg) +stock BfRead UserMessageToBfRead(Handle msg) { if (GetUserMessageType() == UM_Protobuf) + { return null; + } + return view_as(msg); } /** * Returns the ID of a given message, or -1 on failure. * - * @param msg String containing message name (case sensitive). - * @return A message index, or INVALID_MESSAGE_ID on failure. + * @param msg String containing message name (case sensitive). + * @return A message index, or INVALID_MESSAGE_ID on failure. */ native UserMsg GetUserMessageId(const char[] msg); /** * Retrieves the name of a message by ID. * - * @param msg_id Message index. - * @param msg Buffer to store the name of the message. - * @param maxlength Maximum length of string buffer. - * @return True if message index is valid, false otherwise. + * @param msg_id Message index. + * @param msg Buffer to store the name of the message. + * @param maxlength Maximum length of string buffer. + * @return True if message index is valid, false otherwise. */ native bool GetUserMessageName(UserMsg msg_id, char[] msg, int maxlength); /** * Starts a usermessage (network message). + * * @note Only one message can be active at a time. * @note It is illegal to send any message while a non-intercept hook is in progress. * - * @param msgname Message name to start. - * @param clients Array containing player indexes to broadcast to. - * @param numClients Number of players in the array. - * @param flags Optional flags to set. - * @return A handle to a bf_write bit packing structure, or - * INVALID_HANDLE on failure. - * @error Invalid message name, unable to start a message, invalid client, - * or client not connected. + * @param msgname Message name to start. + * @param clients Array containing player indexes to broadcast to. + * @param numClients Number of players in the array. + * @param flags Optional flags to set. + * @return A handle to a bf_write bit packing structure, or + * INVALID_HANDLE on failure. + * @error Invalid message name, unable to start a message, invalid client, + * or client not connected. */ -native Handle StartMessage(char[] msgname, int[] clients, int numClients, int flags=0); +native Handle StartMessage(const char[] msgname, const int[] clients, int numClients, int flags=0); /** * Starts a usermessage (network message). + * * @note Only one message can be active at a time. * @note It is illegal to send any message while a non-intercept hook is in progress. * - * @param msg Message index to start. - * @param clients Array containing player indexes to broadcast to. - * @param numClients Number of players in the array. - * @param flags Optional flags to set. - * @return A handle to a bf_write bit packing structure, or - * INVALID_HANDLE on failure. - * @error Invalid message name, unable to start a message, invalid client, - * or client not connected. + * @param msg Message index to start. + * @param clients Array containing player indexes to broadcast to. + * @param numClients Number of players in the array. + * @param flags Optional flags to set. + * @return A handle to a bf_write bit packing structure, or + * INVALID_HANDLE on failure. + * @error Invalid message name, unable to start a message, invalid client, + * or client not connected. */ -native Handle StartMessageEx(UserMsg msg, int[] clients, int numClients, int flags=0); +native Handle StartMessageEx(UserMsg msg, const int[] clients, int numClients, int flags=0); /** * Ends a previously started user message (network message). @@ -156,29 +167,29 @@ typeset MsgHook /** * Called when a bit buffer based usermessage is hooked * - * @param msg_id Message index. - * @param msg Handle to the input bit buffer. - * @param players Array containing player indexes. - * @param playersNum Number of players in the array. - * @param reliable True if message is reliable, false otherwise. - * @param init True if message is an initmsg, false otherwise. - * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled - * blocks the message from being sent, and Plugin_Continue - * resumes normal functionality. + * @param msg_id Message index. + * @param msg Handle to the input bit buffer. + * @param players Array containing player indexes. + * @param playersNum Number of players in the array. + * @param reliable True if message is reliable, false otherwise. + * @param init True if message is an initmsg, false otherwise. + * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled + * blocks the message from being sent, and Plugin_Continue + * resumes normal functionality. */ function Action (UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init); /** * Called when a protobuf based usermessage is hooked * - * @param msg_id Message index. - * @param msg Handle to the input protobuf. - * @param players Array containing player indexes. - * @param playersNum Number of players in the array. - * @param reliable True if message is reliable, false otherwise. - * @param init True if message is an initmsg, false otherwise. - * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled - * blocks the message from being sent, and Plugin_Continue - * resumes normal functionality. + * @param msg_id Message index. + * @param msg Handle to the input protobuf. + * @param players Array containing player indexes. + * @param playersNum Number of players in the array. + * @param reliable True if message is reliable, false otherwise. + * @param init True if message is an initmsg, false otherwise. + * @return Ignored for normal hooks. For intercept hooks, Plugin_Handled + * blocks the message from being sent, and Plugin_Continue + * resumes normal functionality. */ function Action (UserMsg msg_id, Protobuf msg, const int[] players, int playersNum, bool reliable, bool init); }; @@ -186,72 +197,74 @@ typeset MsgHook /** * Called when a message hook has completed. * - * @param msg_id Message index. - * @param sent True if message was sent, false if blocked. + * @param msg_id Message index. + * @param sent True if message was sent, false if blocked. */ typedef MsgPostHook = function void (UserMsg msg_id, bool sent); /** * Hooks a user message. * - * @param msg_id Message index. - * @param hook Function to use as a hook. - * @param intercept If intercept is true, message will be fully intercepted, - * allowing the user to block the message. Otherwise, - * the hook is normal and ignores the return value. - * @param post Notification function. - * @error Invalid message index. + * @param msg_id Message index. + * @param hook Function to use as a hook. + * @param intercept If intercept is true, message will be fully intercepted, + * allowing the user to block the message. Otherwise, + * the hook is normal and ignores the return value. + * @param post Notification function. + * @error Invalid message index. */ native void HookUserMessage(UserMsg msg_id, MsgHook hook, bool intercept=false, MsgPostHook post=INVALID_FUNCTION); /** * Removes one usermessage hook. * - * @param msg_id Message index. - * @param hook Function used for the hook. - * @param intercept Specifies whether the hook was an intercept hook or not. - * @error Invalid message index. + * @param msg_id Message index. + * @param hook Function used for the hook. + * @param intercept Specifies whether the hook was an intercept hook or not. + * @error Invalid message index. */ native void UnhookUserMessage(UserMsg msg_id, MsgHook hook, bool intercept=false); /** * Starts a usermessage (network message) that broadcasts to all clients. + * * @note See StartMessage or StartMessageEx(). * - * @param msgname Message name to start. - * @param flags Optional flags to set. - * @return A handle to a bf_write bit packing structure, or - * INVALID_HANDLE on failure. + * @param msgname Message name to start. + * @param flags Optional flags to set. + * @return A handle to a bf_write bit packing structure, or + * INVALID_HANDLE on failure. */ -stock Handle StartMessageAll(char[] msgname, int flags=0) +stock Handle StartMessageAll(const char[] msgname, int flags=0) { int total = 0; int[] clients = new int[MaxClients]; - for (int i=1; i<=MaxClients; i++) + for (int i = 1; i <= MaxClients; i++) { if (IsClientConnected(i)) { clients[total++] = i; } } + return StartMessage(msgname, clients, total, flags); } /** * Starts a simpler usermessage (network message) for one client. + * * @note See StartMessage or StartMessageEx(). * - * @param msgname Message name to start. - * @param client Client to send to. - * @param flags Optional flags to set. - * @return A handle to a bf_write bit packing structure, or - * INVALID_HANDLE on failure. + * @param msgname Message name to start. + * @param client Client to send to. + * @param flags Optional flags to set. + * @return A handle to a bf_write bit packing structure, or + * INVALID_HANDLE on failure. */ -stock Handle StartMessageOne(char[] msgname, int client, int flags=0) +stock Handle StartMessageOne(const char[] msgname, int client, int flags=0) { int players[1]; - players[0] = client; - + return StartMessage(msgname, players, 1, flags); } diff --git a/env/include/vector.inc b/env/include/vector.inc index 067754c..3cfe21c 100644 --- a/env/include/vector.inc +++ b/env/include/vector.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -38,84 +38,84 @@ /** * Calculates a vector's length. * - * @param vec Vector. - * @param squared If true, the result will be squared (for optimization). - * @return Vector length (magnitude). + * @param vec Vector. + * @param squared If true, the result will be squared (for optimization). + * @return Vector length (magnitude). */ native float GetVectorLength(const float vec[3], bool squared=false); /** * Calculates the distance between two vectors. * - * @param vec1 First vector. - * @param vec2 Second vector. - * @param squared If true, the result will be squared (for optimization). - * @return Vector distance. + * @param vec1 First vector. + * @param vec2 Second vector. + * @param squared If true, the result will be squared (for optimization). + * @return Vector distance. */ native float GetVectorDistance(const float vec1[3], const float vec2[3], bool squared=false); /** * Calculates the dot product of two vectors. * - * @param vec1 First vector. - * @param vec2 Second vector. - * @return Dot product of the two vectors. + * @param vec1 First vector. + * @param vec2 Second vector. + * @return Dot product of the two vectors. */ native float GetVectorDotProduct(const float vec1[3], const float vec2[3]); /** - * Computes the cross product of two vectors. Any input array can be the same + * Computes the cross product of two vectors. Any input array can be the same * as the output array. * - * @param vec1 First vector. - * @param vec2 Second vector. - * @param result Resultant vector. + * @param vec1 First vector. + * @param vec2 Second vector. + * @param result Resultant vector. */ native void GetVectorCrossProduct(const float vec1[3], const float vec2[3], float result[3]); /** * Normalizes a vector. The input array can be the same as the output array. * - * @param vec Vector. - * @param result Resultant vector. - * @return Vector length. + * @param vec Vector. + * @param result Resultant vector. + * @return Vector length. */ native float NormalizeVector(const float vec[3], float result[3]); /** * Returns vectors in the direction of an angle. * - * @param angle Angle. - * @param fwd Forward vector buffer or NULL_VECTOR. - * @param right Right vector buffer or NULL_VECTOR. - * @param up Up vector buffer or NULL_VECTOR. + * @param angle Angle. + * @param fwd Forward vector buffer or NULL_VECTOR. + * @param right Right vector buffer or NULL_VECTOR. + * @param up Up vector buffer or NULL_VECTOR. */ native void GetAngleVectors(const float angle[3], float fwd[3], float right[3], float up[3]); /** * Returns angles from a vector. * - * @param vec Vector. - * @param angle Angle buffer. + * @param vec Vector. + * @param angle Angle buffer. */ native void GetVectorAngles(const float vec[3], float angle[3]); /** * Returns direction vectors from a vector. * - * @param vec Vector. - * @param right Right vector buffer or NULL_VECTOR. - * @param up Up vector buffer or NULL_VECTOR. + * @param vec Vector. + * @param right Right vector buffer or NULL_VECTOR. + * @param up Up vector buffer or NULL_VECTOR. */ native void GetVectorVectors(const float vec[3], float right[3], float up[3]); /** - * Adds two vectors. It is safe to use either input buffer as an output + * Adds two vectors. It is safe to use either input buffer as an output * buffer. - * - * @param vec1 First vector. - * @param vec2 Second vector. - * @param result Result buffer. + * + * @param vec1 First vector. + * @param vec2 Second vector. + * @param result Result buffer. */ stock void AddVectors(const float vec1[3], const float vec2[3], float result[3]) { @@ -125,12 +125,12 @@ stock void AddVectors(const float vec1[3], const float vec2[3], float result[3]) } /** - * Subtracts a vector from another vector. It is safe to use either input + * Subtracts a vector from another vector. It is safe to use either input * buffer as an output buffer. - * - * @param vec1 First vector. - * @param vec2 Second vector to subtract from first. - * @param result Result buffer. + * + * @param vec1 First vector. + * @param vec2 Second vector to subtract from first. + * @param result Result buffer. */ stock void SubtractVectors(const float vec1[3], const float vec2[3], float result[3]) { @@ -142,8 +142,8 @@ stock void SubtractVectors(const float vec1[3], const float vec2[3], float resul /** * Scales a vector. * - * @param vec Vector. - * @param scale Scale value. + * @param vec Vector. + * @param scale Scale value. */ stock void ScaleVector(float vec[3], float scale) { @@ -155,7 +155,7 @@ stock void ScaleVector(float vec[3], float scale) /** * Negatives a vector. * - * @param vec Vector. + * @param vec Vector. */ stock void NegateVector(float vec[3]) { @@ -167,9 +167,9 @@ stock void NegateVector(float vec[3]) /** * Builds a vector from two points by subtracting the points. * - * @param pt1 First point (to be subtracted from the second). - * @param pt2 Second point. - * @param output Output vector buffer. + * @param pt1 First point (to be subtracted from the second). + * @param pt2 Second point. + * @param output Output vector buffer. */ stock void MakeVectorFromPoints(const float pt1[3], const float pt2[3], float output[3]) { diff --git a/env/include/version.inc b/env/include/version.inc index c0e4020..a86dfb9 100644 --- a/env/include/version.inc +++ b/env/include/version.inc @@ -9,7 +9,7 @@ * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, version 3.0, as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more @@ -29,7 +29,7 @@ * * Version: $Id$ */ - + #if defined _version_included #endinput #endif @@ -38,12 +38,12 @@ #tryinclude #if !defined _auto_version_included -#define SOURCEMOD_V_TAG "manual" -#define SOURCEMOD_V_REV 0 -#define SOURCEMOD_V_CSET "0" -#define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */ -#define SOURCEMOD_V_MINOR 8 /**< SourceMod Minor version */ -#define SOURCEMOD_V_RELEASE 0 /**< SourceMod Release version */ + #define SOURCEMOD_V_TAG "manual" + #define SOURCEMOD_V_REV 0 + #define SOURCEMOD_V_CSET "0" + #define SOURCEMOD_V_MAJOR 1 /**< SourceMod Major version */ + #define SOURCEMOD_V_MINOR 10 /**< SourceMod Minor version */ + #define SOURCEMOD_V_RELEASE 0 /**< SourceMod Release version */ -#define SOURCEMOD_VERSION "1.8.0-manual" /**< SourceMod version string (major.minor.release-tag) */ + #define SOURCEMOD_VERSION "1.10.0-manual" /**< SourceMod version string (major.minor.release-tag) */ #endif diff --git a/env/include/version_auto.inc b/env/include/version_auto.inc index 3e6917b..fe4a667 100644 --- a/env/include/version_auto.inc +++ b/env/include/version_auto.inc @@ -5,11 +5,11 @@ #define _auto_version_included #define SOURCEMOD_V_TAG "" -#define SOURCEMOD_V_CSET "19b0d34" +#define SOURCEMOD_V_CSET "72a4b127" #define SOURCEMOD_V_MAJOR 1 -#define SOURCEMOD_V_MINOR 9 +#define SOURCEMOD_V_MINOR 10 #define SOURCEMOD_V_RELEASE 0 -#define SOURCEMOD_V_REV 5970 +#define SOURCEMOD_V_REV 6457 -#define SOURCEMOD_VERSION "1.9.0.5970" +#define SOURCEMOD_VERSION "1.10.0.6457" \ No newline at end of file diff --git a/env/linux/bin/spcomp b/env/linux/bin/spcomp index 19aa5e03ead34af6d1415d645b45b0a9c65a9785..904e34699c09473aa382b1c9041c1d7e68b71f2c 100755 GIT binary patch literal 331440 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 *@1(;1GrMq5A_DkbaX{{`b?Nxr>8|wrg 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

&r!p$pDnZ*g}X1qh}f|7wA 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 z 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 Dpe9A?37C!Zn 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

=I{; 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 z z?u^FzaL-^4rqwl0#qkVHAIyxpv14<&brYLR<2b^|m6Dn*`DW%c)#Xm|8#Bh?5J4vQ zxtVP!y)mO_b*{;^6YI~-oyBvV8QvcUV*SM0rf@D!O=%H_*Yv!0Z2g!<^u!o*Ip8F% zL0@w2NjPv@k(h>TCJDE+NE*~DxG`Sc%xF>^-W_Ma*dR8K|j+3Tjfx$$yrInj=7xsshW`|0NcKuV+}N^;wo=|y9a1V9oX2!bS-E&(GF%?;KfH>9GQ zI6LlEA9*e_ez-b9k!pE_@S@R$92YX%Cpi?MtrU_$H;sNCQwE*Ki>1?1_YNbJinE*7 zReD8?4`r}Tr0p-oKr_rx1JknA=I?WMiVX+mdaO@jHekw(Fv6sHl zk}{=ySWM@==JzI{x(DEIJTF)r&xiS7z7O6aXoSUT8!com3g_!Rx`*eZ*??4q)(tZ? zWW{@4SCj_}pPIrcarK+srP6Nnc;@pWwhRyQW35wA;LfK)h@PBOPK_rQMtl2ou@!aL-EekIq1DW z7g`e>2_&2fHW(MkK z2}GR|4#UPa1TSgw<92%=MVn|7QrG-z_HcbQTP|;xE1}lEI-ioyaYh|A!AxIi~3W9bS}xB?9PW#s&eV{+s}c%#CWG>ZoCg9)LC? z(};`&HF}EDJxsoQ^ii?V4jOK=5$gC2!w_OAJu_MDj*zPJo|`m`vsbi(fW~o_tkEAb z_4c(bs3&V}XfAp@lGPN82p9%r$6^lJACvQ8V-y3|6VpDMk`+sna;N)M`gYD%FZm3? zHNDqF)ChGKBR4w0+&v}XTol=u=IfW;Ge$Ajm_DI;^yid5Wv-U|dlh`q8uT-!q+DR# zWYvSh#B2q}MaCoGKV>*0#x7hgyQO4L>7E`fx{-Nhif=T7rX!~>ZVWb4Opyw!77N11 zJLx0Si-0UAAgRWB|DXL=}TCi0iVn zK&w7OFXIhtEU{Hpk4B|GKTvEgl8FUf0!wHKJ+#}*2Tw4^(LQQ4Ddz^0N==|O$d^F= z0Sru1rmz{d=iLrsZm({}$c6S#=kq&R(9f{+7nO#^A?yd3Ery_(nzJTVpEDaZ9MjDA zb#;_^Z$Nfyc6Hdycr6mfYH}BS{7BLbPmVGbc17K(F1dY>xz>RJ9tP48hL_5u2-I+uh2SC#9dPm6Dm4=s%qz<#SS} z!~bqwymrR;3Vj4w9c_~o1B-MItqn>xf(m3od&Vr29Oqx&-$Q69z0lBB_k=QGFRytl z&*T#$ofL|UJE!n?qHv&(1j3PSPwB|2+%4~ z36`WS+b9Jg_q0o{zg+Yi>IfqWb%ciB)lnsilN~ym70f8h7mBJ!DY}>Jb+GA~hPuAS zQK|-^z3i;-J}%hrS`e+b7P1W(F=2Kq*lRC1q&iMJmYZ}eH||(&)Un*KW4R7I;r4c5 z376}@5hx1S+h$c88jEp$r)5oZszLObQU{hQ?ZtYJ;kkphZD93U`DKkSkdqm{Hx zX03uTGg%8SZBJdi)`BJ(I};JjPWeP#muIXJssvU(=Z?t9fVCSlcMKmlEnoOU zk;j`BZ{lXri#kfABHH)Dx`~p=9%L}6^Yo4M(lo=i$%(#<+9dB;dLlW~X4x3dK>C!L zq^#I1kr?fg)n*w>yZZ6r9i|xVlfXWk*Db24G9!(}Qj=pCw4^0XH;yxC+LxGi_^`U# z{G@E5F=T?T@dnl>oMzI=V_I7Rzy_Pp*4Pp|a8mPQ0yXRu7*ZccR$G**KRU}-f8hbu zf$HbbV|3-zF*aA$$q~18(UK|sVlS6zrzC@eaP-3anI~&9vLCfjZHgG^;EH`;D#hcMP|RQ|+%j~<^~WVpqyr*!9d zyXBo#A+g=U4|dpO?ibf(`uBMcC$o{f(LUK^Ct2;I&Kqo39~o+@Ka3~^-~nY~W&f^a zU6~~48)>Ib5Cm&%Ptm$a%Sk`~&ShXqtAe7)1ciCc%kbkQTkf$#F4BUJP5hq!M&ZY5q$1IG#z;T4H$w$5IYT%ue%rr9wId@W}4W2^KN1 zdf!(eyw!aiBUoY4hdnwNx&%laKweKdIDici3$#G|c!y0pUK?WD7JFAUbf&T+%!FWg z*N_@=9Zjt@j>fg>gdrfDqOsM8wuBF~(*Lna4_FiENpX6W?H_sefK%(|2@O0%dOcNS zsR`#vGvLpzFBH(0O|q4ha1{skVxTp!>?R`ueV9T+>rzTRo=)-gIo{zM1zan0cIXC+ z{m*;&)OZ;yPFc4g42ez!M_Bm7Q3fZkILP-uHK`h;YWPgmz;@yDnHRBjRaE4RmLgzU zYE^^Up?%U=;HXKq|G7+&W)%*@N2NX!dRd&2s6g(l9#BI#&XNuGnpY|B9Z<~+7yj!# zPByo7 z-PEm4YGOo3+;$iDo>wf4Omc7hF|+{`ArId|GJl~H*)3V^zo4g)=Un{7dRGKtf>=ul?ZT!!i-27iZg9~rjG8q3+!Vtn7Q zrJb+Jt$9=pu5q>#+lTAd@Nh~$y1`?MeE`E`219TmrwVQXh;eXSZa2>_*i^tdIylC8 zznZPrs*NIh*#H|{ov=m2qui<(=3xK)o;%;~US03I$M-GD?{BJOf1W^DU>x#3|1IzC zHW>*hg zuZO6E%}zJvxreL_r~7JI7O2d%?X?LUI|$t_ zxJOp}w0}YHyvQ65*2tb8(B@$cV0D&gBUJ-&F^zT+=~PvhK|cOgE9{7chpz<`xfW>p z?A|dsMCXn%5Wm?m2F;}%W8i8#=6aVr*V+|wB(bJr+9Apv(+bh8V_MO;9aF2<)Hv6o zQ6>j6N=>Y2(0UNNjom=n8`%wy+e+`asB5Sr0T)5KM17;GmgX;L%K9!hXPYje?o80t z{+$-mkRQ`&l?M+{vqaPb{fbP~V{#efXbqV`;QxDtN{L4_a>hJm*w8+OG zmk&O>)hZg*^376FDc{&5%+;z8SCF_Y@ybF4uA3NCz+7@ZwpG9yo7x#mE8i=0TUcJ` zFuoRwZRu97*Mc-Nz7C|ZLp;2%!{hS9%lTyR|DACm~&e12)FUN z2B4YSRe;8h@Qn2;7MBTLj#mM@@w^J>67(^w3fI`&?r2&$U!~lc_ubs9*ikfI*&LuN z?+rj>XSDL(U~yT|f%gXRQr;UlmtZ^73|wP#yQ8^)_lB~=``-1(DUzL%5#4IM{xEk# z?4vRH9VmOZQg4Zc`jmvVkExHxF8T1E&bKz&)WB?9<0M7P4xp;uwZwHHy(^R-Q=-F5 z<|>iiIH`4$(Iz3E5vX%@wnNw=Jy>9esm^O?(`aOJE}X4s>SfFew!wMmT4!!MMCTS7 z8o${>gQmWP<=x&f?e?a$jb3a)?zu8X~rc3+D0 zMX!9pah#oAp7{_4;&DZ|J%5yA zw2@o=T=5fM`&K<^#t!G1xFUf>8^DEyc$J|q48}l$pXqdSGbax^#l;z=&_Z+#3R?L2ut-mlgv4lzrmP0J`I1VM4C35dl& z7LBp4Tb7*DHSROu+@VBG7*G|9RIX?c7~FYj3l#+^;X6Z~+2ts2H-3^wZ2}pwoJP%J2yMsE_fv|45|B)Kz z^l{65NZO~v_4+?f_&2WC|M|LjXVgC|c0(4`o1l=7|1Z8Pt?a)f=@rQbHCb6F<;;LjM)3KF?C_AQPK>^@p3Q9>uk*;T1_LlIa1`0iE zFq?}A8Qn@WnE46_U#mdq2@3y*Fqh8d7^pFSpcM+Kf(r$!7r|*?S$SXu=#Qcn7*MRw zaUBikonfS9vBYCQ3>Mtcr7N8@$4bvkaVZy(DR9?lO@WJx9KN8;cSB{u>=P^suHSNC zj)cTX=9ZmYEk(dyG#VFeBf9-3QOy?g$#bg$MMH@LC(PSw(vvdl-z>VXh4qK zbhTE@Ej}_UiZNo3pXL>wZTZyWDs<5AVsfP8{}5UID%M#aTYXpDWoxeDWmvm&UNgu8bsxpl$IAdz)_vt&fhN`HS=``h*B*kuS9;1`KBRaz2w35I9;qM?yGxAU`xtMfcFHmCH!9I zRty&l`f>JIf*fzI&!_w3^cgMz1TJw(!9Rm*!KV-6wv#b=1M95RN+nH*%yPzn<}_pL zRoW)GQu#6@2TFV(%iIg@EZoZQY9h-zicyXkj>6v=ziGKBJO^=pNx#(nh*(VhbagPd zjLN_YQ6#Cv7kxRDYCE?zAIW~DwI6VFh*gg&65gpNKX2*S#t4IS>(R~S*9 zIOO&&dXHQn8TuY59UV(V!U(sgti+DSV=4dOMTo}U!-9_sEn`H>X)dWNK;dn&R;&^X z8)kh`GCNKvRu%=RE?8Ao^2X^_!%^AWS05{Eu>}?gMq1S;z z_De{Knw4dx_+`ioWmG1cA1&d1LZ?R7M$u}6aA^GiPx8nQ3WkgaIIv7FC5#4mp$CDI zDLfd8o1ew6Yl=Pfi5xX}-i2PwKpX|+rfb5^e+t~rC-#n7vUFq2uMnB3RCN zgXOfQsNW}wKuT{l(f`Y5gpS6`K9nlR>=b@D36H7JGf7ke+fy&}jthS3EP<9_KPR{Z z3SQcHD8M*9M?|5Gq}1^{dXil;pO*jZ;^%L8$OR$vk26x5DI@O;t{>| z^v{}{52(g}o)&J{X-Y#tsm4I8p&CLsDQF)DBtvj4jj0+fP-j>{b18+KpTYWhHhud> z@qsq+I<%9AZ)_^rNu#&x59}2?#inmJ^gb6@D%M>+=8 zLZ|>R*I>&4_E7+uH}c3D<_4?{P~}u{sie42YD3gCzV>>f4O693e|yb_siV^lRi#w9 zFV#k*5ul2{=&#~_RU3&mm?{~SRG#_d z63-f#?3nt;UP6U9RNoPixciy zKfyD@^kak&oBNDIf#UTxEN6G-YfLdV&4=nGc((?JcDUOpm>Oau;|(YT;mel%S|vY% zT3HH-fQSK55rO2ejbF}qTn(nD5r%Ghkdtj|53C0p`)AiVX*6`mrx>T{CeDI)%y z&QN&WiB#(W0izQwDCt4nU2axYEgvBvJNOt9Wu?$y zZ55s97)ze;oJ>b*TsMg~&=H`DRp)7ai_ImKuBkyMxQgm;f%3NZSK$h~&9w}@&GG?w zYgPcbrep^SEBRoXF;JOfJXuv49|i@SSzJxwtF7PUiFDS2#Ze{&iEI^*{@!h_$(lR{R?#=XA@Z7|hV_#ylaX@jX!@vaB_ zO=$tSfQG*zUK&20xB%9gqiZ`VAZ_ii0J^rL0#c>X&lfB9Qpn$krt)2}`>S7%-Nysp zvdLfjW{7J2edYZvXohH_;4aL%w4n~7JB2Q7a48fJwG(D_u~;;sBR~fV?&`7w1s9;8 zP@OBQw*hVIeNbbq`j@cX=(tPRqA^W%b74BrsVsXt(5b)(ow}v6V5=;Zb#ig{%kIlM zJVi@vVKIy7qRy3EdAJ--e7#?Th0pqw?&vZNuY$}6R=QZ`;Yq*!>L+LL>j3(; zXe}{pEiq~>F>Wm}X)Q5rDuJg^vyIq-5e_HK;7#Qik6 zi-*4+Z^Ew+pO>?T8@#{!7=HV-ED{(0zOp~Rg^!EdhkHBe`mfvB=jGGwSFR+EMnjT# z;~Z{Al7<;BYOQgKl+!q2cu3MS?P$2jo_E4DRpy$joc@STA6CK2_GlfmvW)i6-!!`lHHVAg~1c@6s+_P^-S z^97w{7WBhxF3(=xZi`f`DQDJG#QJq&erRbnj<-dHCm2_ZkQd^O!6b8#r{gSQ} zKyd3lzpu$HktavPF}*x$Ts;)Z9_Mj!a3MZsF)p~hhIr=XxTSl5j05z+YE%6l_bhuk zI2Z9HZm^lhP5FzSz?Ia1Q}5})b=oooOU7G-wa05(lCQ`i1izVV3$ugD|8`6`A)?}n zX)6ks8ogJ;yG2B*@lhHDS9BFGWzto0oj6Ocv zBd`4+fhLc`2adJyPkmv5eyJgHU-`*j&Ol@4R&UyJ;3PwVrm?}V+_R#ddMQX0gvQRuj1LJlukJ0 zpW^hzn{p(1<^x{;7e4Gjb;DtUAM|)S9XntQamH7HS%ffN(rArM1OCFxaHIl+Q1+VO zpa_pCNw8ikr!JF3sv;VPt2ubb9Cb@lq!V}Kf3cN_M?xCA*fgF@y-;fuC*??Qet-ct w^6Lw<5=&f>G=s31q+1%Oc9}eZxUNf~GOULXoa0{zh=OByK*q;gKYjZ2KaBi0_5c6? literal 285612 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 afh+X~7FuVOXV0KN0dDEP`G{=XALohkNflMtf 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

vnD^Wit{KlHf^J8p8mlym8Mb)k2^?tR45 z+aFkU_V^xO41MRtZ!QbWuW34e-6>sOsvbLQ-64nG9e%v{)!dj@PyBdQ-S|<#CBN=^ zZ*T37h2Hs7KS?>N%jy#*tc*<`u&n;4wY@uEanD7c*7r&)`tZVm@6K6tL)kIgPwoGE zhf8j)EnIZUuq#fyVcHK*jmpXHyrZML&xHHGxNqCr&+NJWi|37SSbB15t^x?;p~;Cp83@~=Z*2s zuiyK9&kyoWJ+|bN%SU&5&9n8J(6!fIJm7~r->;p#^YM!}PxTF%<{q;Ax=xoIlTh~c zAq!qGRt&kX^uOtwmc{N`@WK(9C!X@yuM^Mk99Q+rRd;q>yky{WbK-CQ_~<#?Umw>n z_R+!b?rzsGb9mvszb`(o_oS23=AL`k;+wzfyY1%*vwFt<`r-VXZ}Q%`*0*uxcQ1Cj zcFMdJTT_Z1qd#uM0dU0^?r&ZBQ?EO2!_M4WXWkjp5eLBY?Oyokk*CU%dl;RvjxL{g z>%DKCxcBMv7j!-J)lC)G$9??fNe@4Fe`?RJqigQ1>if~!!pfX^?c&Pcess?p;n#0F zYuUEremZjTnB9-0J&@7$y!BNRessRI?aKVmM)kj@V8`$+J5QNAdH4-|60`b0{>gW@ zZg~F5oolxqoUwFa&*m<9OUDN~4!v#ibC;fw{ORKBZ%Gi+_G`k!gFVL zOWbsL^#jR+-|Bi*=0hEZeVy^_B^Sm2uW3=$IWvAcEOYDGySJTr`jV21oyWd^dhV#T zSHJb({FDdY-f-dY)UucQpL;>ol~2C>#*Z7$K6*oN)6&Ne`lWlH&ExK$d(mO*0v|q9 z-Q|hZFD{+YZvNV|+aK6d)33)ZUnSQiAAD`^$z=-)4_|)zC$nEXIk@rU8{b=<*(v6t z=EqlkebYUMWS)Q2^IP)@SLfciG1j@Q zFd;uNDbdAh;IzT6!AWUJ9>?&?qIh>&yvOBEj(4RD@gxjMOmeh4s>7-A4s%_}k>~H) zJCyU{>3jF)@cR+JxAQA&MC52UZ;GSc1xCB0I>*FZ!PrSs(-Ms|r?5Hq|>_e)|Yc5$^I z+ok*Pm%79aU)!bg@K?JS!(ZtVBkLtDAS80HtS_;S=IdjOMuK2jLScoO`n)q2WbH}8 zwK2va{AQQ&tu%g5?q{fPH_LJh^-W^1lwYufg%`ybzwX%^Ty;r|A?s!eu81*YElbR$ zF@~(0`I$np^dBFo)Wf>zKI*)Zu$Hia@HOE#g7dl<<8VTMLNZ}AVJe}J zP(@fkSWLK&u#&Kruz~P3;WvV_mir0)3CV=fgsFr=LKR^FVKL!8!b-wg!Un?Egx?6x zMchy5Pe>+=CQKz15~>Ib2#X2#5mpk`5;hRNCj3Tl(%*;cK9{;$eNOxBZN8wR@eAQM z!cM|2!d^lL*8Im148p;LE`+Xx?u6Ip@{LJ?gY#Iz5rkfZqX;i?eJ!C6=f@C^BOFio zZ9d<=yO8graW3CuA3_*GkZ-R~Ae>3qM!bAm{anrq39|@c!uf=Y36~N2lV%~m@_xc1 z!eYW*gyn>X2u~88CCIxA>j@ta&gGs@`28Q@2l8*4-O*T0d7dY%CA>-ambmx%-OjJP z@6ev}&V<7VM-X}wV!8K3em#UCgb{@Cge<}gLOx+8VK$+fFrRQO?<>gnajzyUB799A zH}iW3VJYDOLOo#>;W@%9g!P2?2p~~VFn?G5Fi8z)r3n3SLv{j-`fdc@_vNh6*?R&#KIwbL5@TC?V`^QR0vIM4iHEwg!aCEa0!ZUi|75(cR=zTeO9DTL!Smh=Cg4{4$qGx#n&Cvq-9 zc&so_VOG{P$9K@`PtXDv`VeFlV-2{Z*<4502W+lvWX}P8O?arRfjsXp_N*XGBjgjt zj2t;6e!wVyUVvSZ5)pi!L2lQH=9#?9!{$VKDPMfT;MBpcLE)-0PqHf|DS424KD#Ti zXBS(ymgTdF*ePtx?Pp^lUqb4Mj#l}m4o)28mTWn3ghR4WP&P~9TZ_I6*Ej~VX&0Lt z@>@}E{uWzjvL#!2h`o=375>4)M`X&zq#6~KRSwRp46r>@pujO$5Sz3Wv)jttGV(Kj z*&9g3Sj!RZz(*WKmh|RHi2Y~=%N}6tz`}m&j=_ZhqJpvt(lOXy>?DEZ3-N`0?bqlh~M{{*f{jy3K;F%aCH zbl$jF!>`j1=6Bl3(ej)QZXRr??`5__+n59{w#Dawv%xYZB!0G}A4K{16?`$jO&ep3 z6VW;3d3E51uCc}u5We8&!10u48uts{Ab4`Du~?_y0Zwm@F+Sv1;`?zu?)w;H01p&A zTJXGB<1!sz2+kQ6Yn-U_y9n%k5jm{!E#TVcktkb$fjYlK zP-<$vi7^h<=}!UIogZsV(&@9oaU)`l&N_Y$xR&QvYkUtl{^uAYUYBY6jgglFn+HF!JpO>?XMcpvOI z#j0;F$42lD8~twu@3P_T;26?VeRaQscI;1i;x+CJZhke^7^d6jXt2|k{v>d!tv)H> zrn_Q|k97Lc;283=^3Mi$wAD8cY=A|+2t8GT$AW2Qg>M2+1E*_zFSs^|y;4x*rT!bh z*|zjsz+M~P4IXd9-5IxYSQ|b{V)rzXbMnaT<^6@v;HjFn~RjNY;)wIGVsufldC{)A22M znJs=h_;#=`R7t-Fe4`CZ#6lbH2A%^J`$*FF1~(q;G%nQrbsD%9Y}Icv*lWXnaNVD= z#)Eo1%oY4otnn5vUP${~11=$dtGr9V1-9qk1D;{SkAl5>V~y|VC%OL}aLtxjMbCo2 z0EcY&2XIqOwEvFbx&3VYITc(CHrp@Gu>icp*8kUo9|7|?MPK)TYcAt^&(vS!&!gan ziMPhnGvF((=x8ic>Ej%0!B5%pdk;K~c(Ezv{wDDKw)h{wbvEpT?<@mbY{`C^i-dJ-qcH$V2y`>)3I2|l|A^l>NNAMj^<9>}-f@NX<8*KO}aP#ZzOQGq_1zvB99}0fWhR1?mw&85B_Z_Ekvo3EwIPO)a zak4I77##naGa~;k12;nN6psHr9XEmBx8-*~xC!il;R*j+Dd}zTFH8JWQGU1yeE&*A zkM~}VZQvy~EUzEMuP}`7DUamW6W75aHSz%H-Dmpo zBwYvf7MfX|-<$-M*>1e>x~{WwgIKs5kcLU-T<^P6zmh z967S*4o3&Zqy6Z>8=dx}176`i^ryGcsqBev?YlTm2FHJ6@+-l^z|9#QjViiQa3J)(>{w7-NW?B%(_P#5LU-b1L#!cw9f@Be>9@ujxF8gM5bVWX z6jGA(Pf2=xNdB*a>tgURaW40N3zq#g6TruTk0DXRrWhkz$ESefyW@+}cse-FkAG3) zT(In+DU@(*`#8r<5`Q-GQ`h$q@IvH=@H2`394z~7TF>hS-9p9Ou* z@+E_tcR7tB>v`aGzJnruXDR=s;Km%M(O=_h!Lo;FKd{v2UU1IGvBvAVy`Bcko}yNH zzXR8fVs8x{ze_OBmyy&B`fU$mc^`g3H0{~b(FN>olh5__>n)2kZ@v7fJk~?B}BKQ{d38F~)k0 zKahCnbr3&7uTBU}_CvLBis0{~?SBS12YXWXnw0hnfa5!KG}dW+KDgdSPZxt5d$5nM zj=x&&-|aLeX#6TTeIxd>##_LlapqoalK*yz|I=wq*6}j1(rx|ST?QKMm&%W{?+A%M zEJ~k#a6R_sP4X}y=O%6z2J28v3K?T_2BxOVvI92ei5AW zfK#=XJpWg49PMkhe^*#+V|(^+(dpyC@@=8h!ID1BWWgZXkubIuo&gSh!d|nQ{wl$> zFY|3A&2KIRr_vD|`1G|1V_r8_*0XC5#_n!u?*%GA}@l({TiqikxVA+Gs;s@`7>uvP>3D`O$ zzn{SA$R~4r_jJS{l4^f-8s`!x&yNSY;LkL>!UMo@=SBPPRGSEs{3f)*d0 z-mhbf-MakM;2g%g;>W}yZ9D7aadQdo^nQ`iP|emi+>C{nxijzp)kGCh2YbCFU5~uaJGY$y=UxwBTl^ z;nUa!9t!;my$QdZ0Iqq-X`G|u3&2~TXOWkpkCcGxZ2T|`Zk!)$Jf_nx05{=}tEI!` zc@Ki)pNuswLT(9O36?#zt?}{=*fHK|OxO4S33h4wNS^12Cqf_6K1atp9I}u4A)HHj z2ZJ3GO?zMR9|CT&jlYp#*<;&!UIjSS#&2uD)*<=d5Kp{qd@cp&JnmHXqV)H`W65ut z(F77qM5QkT$5B74J!gY!eNp}A0rri|484Y~ifn25ao5b{ zkKp<@qVo9Kj_cK&rb)ZKN98lmw@Y#7gqTeOFZ;o^=}=xc1pDWo&Yz} zA1ieJUx4fX7Zc%sKY_hZIgODNKR0bfMcK}D|^c%s;-iYdZ-+*1Tk4NACi`>t?^b}L&e>{qM{FgDt zAj&KG4+Vb@z0kdiKa2*;{-#58`T}s{{Z3zDY&^#0>}4at%Z)CBps~}sZTDr8F{pwb1C0E ziAR4E{wMfmxgY(`%CBD17ewo`2JC&`X{?Ji)4vX`w~f!;;Lu5?e_8T72*a<&HeOBu zTZfb zU;PALZ^M6p)c_N5ijiM;KWg{)5pPpD2t? zA5xxE!Q;_CEd8nkEc;o@V?^HF0gi_sTK3K(;F_#Ok@9^6uD98@d%@|*|0z1Y zFN|CEw6^+dI=K1mSYw`!_k-in{{p(d=YSh+^nD4q=2PZpH2=K`Tnqig>-!%9yLg`D zFXed`?ASv8lV0lgIk+GBk-eh#?cfGmd+h-~WwVDmx$$>uf26d>;o$G#pH}~m0b7Uk z=`?U7@0U2rq@tkr)_VC#_ln_J=b z9{4BuNi`+EWN@=>Jj@2CBR_q_%kwV;TSqreYFpuZz>PNk`6#%lw4;$rTDku@aCcjO ztONIk{;l@d1&+i2B4i=yoe*9+_TLzdj|9tJ@}dvO_&o#c?aUs&y1fG6M(nvabo&2* zJKLUjt=wcy{xy9{*?FpfEeN)7UwC7f^i}7jo*LJXVNcmzBY>nub>72{+yNRIF^NEuG zF@p6W>D}N4?Ay+qOZq9`8vL&hX?(84KV!}(%kx)&_U4{ROs{7@@=aVvbiVEiknjp}*#f>Uk$VkOvxz9;fV%GV6u^)&1x&TP-$ z!08*K`tc!Y^au9;a-CmKuysgz27(*#S6k!fG)aF>6psVfZ*v-Xq?Pvafg5e|XC}Cr z{8~kqEX9so!Yuw>%&AqUdcBICMs|zs~_Tq2E~J_YSa&=ZSof`aT4%pViSg zMf0cC;NCWV^g6g1`8!^x{}Al3#eW5^v+0k$Ff`+tFTFvh?+0$MjVBj)8Q*gpK)lpH z4eVw8iN!C*fa6$ya+$vWTyQ%4_AreD;9ajq^|LZ?E%XALQ}l8VxWU#RkAlbA#%BXK z9{XZ~&hHCw+ytjFTjQPJHMaZPLpZhQ&ll_Xp5Qo}JnaW=hW}@4{xTHo#on^YI}+T4 zJ+{ z-N1G58=+@OpCIuz{*x^jdb9YO4;;c?7cnpCXM&q-_R9I-I@@@;6#SV@{;rVwV`7a| z-98(@HHSyrdowuw52sP8^Zym>vdP1}V0(GvMKJ0^+Ak68eZpz{z`5d&;9BS-4=m+< z8Jv!Ne4EDagX?Ydy%B63lHWFP1NyIs9l1X)o%Hap5gH#4USqp|Ft~1y(^#zIz2Ii* zcRU7{+<%_ngJO-nI=&PfXPYm&6I^TKU&{q!FL-qN)nMz8@_m#}|J%m%_h9Rg_&w>= zcS=;gA3PlS3qAEDPUvX>*kNm554g$34~oGq=D$86nUsG4SoUZ*Qr~~OVEP|&f*IX!G^m0rC z$6NdWJQEy;zrL5gzY2VTjoy}nLyfVK`OKAaKk{;hPQMO(vXvk5_yb8lmiacGDE0jc zT=PQI{!bi9e^9?;^!<~--iB!WUEn(WqlfDFhrzNRMrW|_%a_5g+3LSu(lh^W$(wJ$ z-EI2&Zm@kmsrx9(KRH_8cyJB#wFC9@hJal*d2s=_0QoEJEBeMIk{*6`icWtmI0yNf zuJNtlk8I<4DY(|z(MV}$_QydK^kG~1yMsfv`IZ6Tn%=w*M0#nz)4XZ$0O7|4MKj{VDo{(CatgrvEvOojU$c@X5CJI)w){c8$(oX32x~ zA^H1T;W=Oz>$lG%PM%i_uEk$%*#q~sO1~Ps#nwJAgLm25<1KLW_fGXbo#gj9ID|ZT zv%RJ#!8`Hq>GnB<2i2m_P!09`Uf?EYY-IgMnqc^qQ^$`1pKKfNUT_@i1wPjC#o+XA z(fTh0$N%b#=*KI-hVA}Wz}6w{vjJSodIW1cZ2}Lq{2`3*Us|Q_IF|nTA~w=~$AWXv zuPew)>hA%2@fU2=cp|ug`QxD)7fSk0vBu@PJ+7Dd_NM(QBxJlJ=wUx5vq3@&BRN7{lHOutfyljxcObDah87mP_T7Kdw9W# zw)z)S)}j>8TI6#x_6J4_uG@yoU7BUdiC*snPlDGr;k*zr}C!!0As$ z=Np!Tr>|I z`*(u9@LMUi!*%?B!6BPJ>|Jo;z-a$Bfo0F6b9DMn6UhIqSmR^;{665% zZ0&ghcz|s@pA4=ie`|cDf*a9KEdD_T6*#!n{<2?Kh^ zTvYVc8~na){G0&JfxlY(@KmsM2)#IbzB5Kn@r}>S%J%u#x~kk?6bSQrnXjVMmtVqu zR$<3JF8O=~L0?fxkT0A23fQ$d?8~j3!**V!A+>+h;ABrq8aeMHkx$+qGv5aD`O7N! z;=cL*SV3iJ>0EBHA)mZ<)*`8I`t;OLzRxe;-Vb=kk0NF*fBp3{t7lNS**>5X9x1_|pz#S?*MTlG|4+bmP7@*j^ zP~i_(@Pb}muq5nF4g1Vf3a4T{>Sl6f^MG)`+p0W?JSX35rf^^$<=1y521EYxTq>Dc zFtajT5s2pN%{TK+RQdYK{MEc;mtW#F+b&R681z+m$E8#RXZg!~6)n;ROA6YiHB%%N zPzTxWtZhA1Es|9^17!t)a@wA%c*j{qO=cg33Lm?eu>*szjMoXh`Q|O<{({PUKh4dK z3gzsc5Uqn1e}F2O#Y&B)sF)k_^Ll1E6_wL{SF}}nRhmd!sHdhy8{8-FEUH$Ibeg80 zH1n}Sc~V!OJkXn_U~Z8wEE#!RMYON2L3|Kp7;;qaO%g#rgw4+MxXkRN`OVmZKq*NT zv77Z!we?ibmYfrXoOI(R<+2BRMU`AmDhrlZmZ>w9oq4f(c8E7ZiB2xbg$OI;G)3rv zz2sD;DFs1kH4hmEypUg{ssV3`8Zu^eQlKNLUyD+yKDOVZaxeE+NPEb6YHnpkP&R*6 zKpvZ0US#WMhPf(4s$?CmsLW%$+G?$1)6}4k4DmD>;i{da#2i_^R--)2&5)Kys-%J3 zk}%ctlCCv7Fxx*3K3GxWukxz_ofe)I2nEVQm8z}M*kZQAUkWqhQ7TJbtj!CC0~PQy z7?Rsp;-5p?@CK`@vD;l(?)U2<9&JpO)&nCG*5OlRN^#WHWHwgjAtfd73s`em*jsG& zwmUpNz=hnB$(8;}|ENG%_6IDGdy>??w{n&ou9y`lP`pu2D@-Pp5-5yRhx174l#)P2 zK066|z2nShqz0^aamg#S1leHKBbCt}khhk-iifF2iR76^u}W1fD8ux`Kt-^4W=4wq zaF<*f57*7lE%TR@1VZ6Jn8#(L(xio@x#hE@*lw4iM#T~p_6R$*hEufJyyH^Cng}D* zs2Yd-M{>tR83|=YDvKm_C95Jgf7Y4d+#<6#Qt|>7)dAkn7Iv8*tSnQVnh*@R<(@>k zx)h=xT@}cHKt@MNJ|inZ^-fZ8z+di(JX>y3mlE1uN^E;6sqLlYwwF@cUP^6yDXrxt z>8k`)963vjoFzrhk|Sp+k+amu83LTDgi6YaM5eT?y4#2JRn43%)pxsEJleeG-p93; zjbf&2*(%9WShq`_ZJw%bFi$<|sw$C(9;wP`StyS$%cHs^wGzoKVoEVM6R{DGpy_T8 zujS{@@=20lNaZ4I&0=KUK!)3eAQEEGl=?UBNYZ!s!nsw9Uul@X@u0Ly+hfM36y{f= zahR0quFfq-P^$5)DvkIn4Xd~mPT7&uJeOqpdMei$#^s89QwxzxC00y0qr7~)$$h3L zkqo_O9@SK57R5&+Qf1)D-bYf4NOE=68v1V6_}n~yiQ0}-isyC(VFYX*O5Z8$2?xs& z=yQGS?_Ta5SB0Xct|zMN)+lDwM`Dt~{t6#0P!1oJhkIq?)8wg2OUn#Q%<_5MS#wcL zONWbG61Bz~ED7Y#&B(~G)R|<&sc1a#R)3M=$NwOYDn-qSWhim~{Lx8>(^A*JywCkF z@ALf2`x5@;eTo0_zNCMC9~y^G*!{n~GyE^eN1llh@-KQ{?wt9r?o8v(l7gZ_f7w5; zsoWc`7HR#@?{z1H{j)3m7)4kwG?T~%YOieybhIDl~%8JG$74@O4NU~O}!Ih8VV>5{os)OYP zeE0;@3adtvq~*=6@T)5dMdCrz(?pr@RaO+HdaDpk89X0`5(+9s8-+1XKhDBIbV+%< z#!A6L6Ze}oq&pm}EYHWJhmUB^x_qu$fm?=(GLlMj^U;iD%VrGP!az|a>`hq{ z(k@u*YHMa+Aq+bLutTe(06vLANJUC~)nrW+HhmE~k*_ot(sAU;w`mYG73NuqzpMz8 zG_S-*vN;J>pdQ$=|$=V(u14GL`M=5=Mjo9V+?$!10f zsfs{8w<4j#`E0GHpqQ05q#miGS|%(pOH-aNO(;UjH+stO2^qeOiKB2}nBEM1K4$!+ z5yQv(CXF7Qm67es9zJ4xhNNiWRzO>}U(gbC)Y%haAf6;Jj3HjN=Qje^tjU!+(~J^ymImF6!_S09EvJ;%tPx43R!3Kj9Gs7Up}}B zkBdB5m`rkEp%MTQTT|T2dR}=>e*gxH@wh6s%+jVIxxf{cJE;hI?9P;O@&UAamt1DS@K{TeMVAxlp zjC56C7k#ArXOv6zLNYyoUqv-O`YN~l-Bz`_lU9XR!-^s3G3=XOmOImdb1J{0yhN-% z#sa&>gTs}|Pj{ehM&(uAO#Ko9WmWi!e2fjuKCe49+BD{wauBp)ZmJ4y&jf#IuzcXE1F8wgK=bHc!Aiod zAQ^ewG8VIQ;T#7Tk$8$|#6s~fanC=bRFf>^roW{myFEqa!RpMyiEMZ3FUXkbh<1_U zMF%WE>w%S|BzXpom`n&&_nnQ55FSOcWok)&NH$b0GIa&F8;Ptsg|Q{gn_7wwLgbBi zTw1BWRPmqifk+NH7$G_922-hs-j7K!lf1LD_TQd~!Y9xOOpd1+j_rmK__bSbM|Fd6 zN3n4%&Z0$urC2EXNr004Vt**NMU?E1c!bxT_j1-z*3^-NNM5P}guJUJzVp1hTPuON&FeomrNaNYtqAFvb9e)5( z05j1YmYQ1vl+y0UJanhvP=i-Ys;rn)X!06Us(CB|s=x(hD+$@9PGm$%Kbh=XwS@;lm&;1B znqtCNREl3$NqkW}&ZzQD(Q_vwv7jj(S(!v4YN=0o)y5TjO%n71ycs$A{ z!2nPy4B8bMRycr*Yo4efK_$i$@*x!&Wuo#yrf|6Y;&OZLRpGLIsAgmtP*Ny2Pnj}i zj`sT~K!WMu#|DDzD{!3TW1J!7yyIF-RYaWWNs)oAKx}I#GEgXDId$=5Q<334WZ{2M5feQdES+8_c1P#Om_RJC7^_di{bsHGNim-x9|qsm8fQzZNgRTL(H9MdDG14)B|>5YbAiz%nyd< zs+p3gw1QZ@<}?HpsHHpIp;Ski3r-39drfs~m+iMz}5AwcrM=oAe)+*DX_p zVt0#0-%84&)0EPu_5u`&$z|tR;!SoZC?;#;ZPcSAm|MV%c3xpwv>{a5NKebGjqqKY z3DT1D3M0XiQhpRXAIK;_5-&u%AoudHrV;oh2zWg3PMASqt;wB%A>Q!4yUSZc~^=^=Lxx?OfTe;A-Rk4IWw|B83kou(Ow3C2C1)y%lipQUX&4hw&3(9& zwOkgfLyKi7NX?JuirYo(x;&=Wl?@UIEBBP-60BsRpj-&S?TL^VJk4Ys`)5b3Wu4+i z2T;GnZ{*XHZ}PB2>XaRfXrOinLB!6Mbjk~bvx}~l={2p+N=%gRQQX#i4+UQ_MXtAD zQ!O6{}5)d`q(p=FP<8p_-wEmTsSG zR^lL~w6LvFq4ZOmjnGC^*xd;>lUsV2vEG8$q*~8c@>da#&37nV-r>v4o&X(LD{rzV zjFhD~O8Jx;i0CvGc+Ao&(=(N1t_x76Zp#%3+#z)6pRHIAJcLycvk*1D{5iSEnsUFd zDo|cgnJbFFZ6vp;Vr$l|95r@X6y==%s9UK}g2@mg)(9mISLcS@QevjEabns)IZj+TJxSnJMT#m%@p<`OhQCa+o!i=e~LMv=UD!Q6zOLlqTEUsxJN}0tQ%rZJl3M2>N zyCNj=%kvYIrR65hayd~(jCxtyg2#!{V-|=zUu#6}1as+Dpn%C#LYXqx4WW3v$pM79d38TYD zD&F`!UkiIW!J%|`dwmg7(w$b`Q)C{Byi>&`P%3VD$V-X-WcZT5OdNQBEj_MMig;P zsM(dQ#0pOgmY3$1SoRIQG_y1mt+kr8NmBX*you2xvxN~MWIAzd^wMU;M1-YcO4`ZT zN=CSovy=%F)l(1Hv#rHLLR37^t){OG$AnrM5@E+}3TCG#Yb03wxRtKI|4iD{&Jq*J zqYww>!MXbq%gW#oF|4|V2A8JMt3josEi>Fc_FCFAmIG@o*Ync0bx93cQ1=u-dy;qtyb20vO1AP%tgxh zc1PyjBQx}-Ic)m-Z4+nmI3?uNyn>p=f%PiJk)Z0OCNvq_t^HG`ZKoI9%DU2)zI3up zC^P4dQbY-@2r4Z#84Y_*P#JX*LT=N8Z45ZG&r{$$sOK)B7~P~EyT4h)4<>*$#jRXm z{$QcZNh!y@QhC&{PZ7GrqjSIsTDUfrp*cw_ZNyT5@>vmoQ)|WGFEoSJRk9N#tM)38 z5=s=5t3{d-2Fe_^Z;X0>Ks2CMt2d|~)V8Pq6-qoYu!U+m?R zBEglui=%v+mAL_vV`q%I%N>&&0c9b4=NqPvndkf_g2A?e zK<0s@JO_MrM%mOdUC66GSRkT&v8Jhn7aK&g7GJUh_ME4dAV%kgl#Ej^80=rFMpP*! z=~1=!SzYnF<{>&tFsWtoxMkz3g>>F>W(ytRY#}Xe7nrUenq=yn$iL zb6HcuxKZN+r8Z*DW%-if<=%?&eem%EYW{8KZE#YmTG(cftbYI7RJosKIsj*nw6tZ^ z*x5QF+gcG7R=PF9r|oPg-OYb{gSMWc6~cxWtLmw#L21YA%zfA<` z#qktO;*Fd__$*9`>1_2HjytKKl5-IpCIy;IU#4$F9m;3!T(moTK`EGrZdJB}OpZ&r z(q!Rpi7bW}WKPDJo*W@?8Kq2E@pPt(iMAF2O0|@T*}umn($p4FN1HlaQOYYVV%3wU z2L;(&9H8gmwTlur1X8D*7wSl)1$=9za(W89v$Rs?viB{#%;lfribL|UF`ss5VK%q$ zg18*=?t-k`=UKA2sz5KUij3KPi!xE6ER$|O#F!?_Ce)m}_JoP0&#EbgX}&L99Ar_e zT9_+ZBrCv7#)a%77H%Ttt*Df^R(=N$K8SGOFI*4UM)J}XZ>Y*@O{hdBy5~v0=8F}n z$~z#+n)H2Y2^y|?Z7cFZlC(x39Ly(|d`F4-mR+Pt_Ah^If>+VwyAeF_ud?9j)PBSgv*|=f?g#mwo5N#_8-#-ahT6C1cX*V&6%KXYCawkb$ z(drp!h$eYER84tks{Tv;ILgrWUj~Z|qh+AK5vVQ4|KI35oARK2A_vm0TU$>`p_48W zCZov8Xu}Dmkyw>1?`Pxd zFxShp^!7(Q`<7?d?S?lAf$TRgFvRCQV7Q$VI)3msW^jT&xQkkwkyjtY-GQL_1q7?^c+l!pgg)J@QP%1*=(Y z(Ly362(^{-jtlRa%lqx3U58E0yT$qt*tWEfxt?pkrBf3Ciez}dl{RQCOx!+SRq0=_PLBHm8~mf3fag@oz_ z6Rjwi)`E?g|DjiUAJoaZ0ouBNX}y;0Glg!Dh4s1(Er0L+N4%wG%7{;sSqL>ZsQ4nQ zr_|e8(KVzZ9COR&(pbu^sV1T#3*CitNAz%c)MrqsanmXl2(eG__*}wjLcYDl04GOn#J0^N3^PvXf{hxGx!t~1F=HonQpgoA~1uA zPrSwaN<=5i-@PW=9eHdgXpVW}VCz%alm_*94l(cR6NNhB8@w zjp{JGtRM>qsXv1?sLY=*JBRw4F=bq~PevQcaZXwTY-pny+Q~D@Fy>7adH^ zT2>=Map-oY{SaxAzb5K^Hc43CV{75CqXUxE;6wrOT+-9(a@`Kh4+p%&*iOsNvKYkvFE~UXhf-@6}2G zR$^)8k9DQCkB3-ueK@{~vy)&RIgtTCQM! zWlGqAsl&Ela#2+k79q=6>?<>9w?tXfgm;H!VM6p$N?GtC-d8!tsioh{h)f$r7^51p zEgohr34%|XOA8%7zjTpg$$Yt5n4&t>v9HzM(dHgMX(TTnPRW=moJBG~pW;11sh)jF zH!BXqBQbJ^i^~m#Q}g7%?Zr`6Mxj)iTT>ZQ+8Y7;oGo3Ao1-OVu%xr)TUYy5O_YC~ zH^i#dl$l3yXuUp5#zsnsxmw2V+NJLq6)pN+O}I%5Tf#TGV)Gx#LCt=>x#hW~q6_h+ zO^a3EHn({j&Ku!mHp5z86DV)Xl9I)mkdF(nM*)zLmAsIm_%ZH^eaDrHRm7->wkT>5|FCA33Tu{Ue| zs{MUd)A+g%O`t}Ti&f^L94$I2^o2lv8BdoE<$uE3(uVCYP||ccOh0vXl{9+ zs93p-Q3;jzN^ui4BwJ0#%HUBfNqRlaWKMh-$yx@D9aL_9-zwrGHzl&Pqq#V_?fBlO zMm~gnc11+eWPVH31W37az|bn_28AU z_?!}tXo!}LB+INxl8T0<>Mfn2O1aNLAJHEzPoVBnH4{)KHntwB?j*}_)2=`ffg)2( z4G3F;7tgit1W%jQK9`8|s3e4fw2C;!ymyomt$ezbK+oE-9v!Hxt;CwumeB_f`4>yU3i${|m-(#c-F z#iZ+}V$45QIzDyjh$TpV3rV+-bSDGk+jw$FItil)zwO-{lytK9@2UilTJRR zcQ8TH$)3P5+?+#@vXHgPOTNoDl|U9MUBMOXy=pidKg&(}khF5hH&yrQ=gJEQ~QKI`i#7&aM0;9Yt|mLXdPL z2+K&fjC2hYO41!du+m9cq^xpXzFAn%#q1-XI;`hj4zkk8-o>?~tCfQ3L)t{rUQe*n z$sVZje2~!dnUvN%B%K^f2v$1TJ2Csm_Kxl<#{6SF_fDNoa*#bIL!>kAjV846yU&(R z_C}s_Lx+9R%Tu;=vS;$`q^pf)7is6`xJDIK+sj_mC*Nr89Bn4H%J&9PzDp`iA$wT6 z_LFV{@lsz&Cwng^?kC-+#7kdDI@yysm2`5W(19HCTz;t2yiO`32x&tiFm-5M;OQUY>;Fxo_PQ*{VKHbf) z* eO6A*{Ul61olD~`%dw#BWIylD5;Ma$h-~R#eEpq_? diff --git a/env/win32/bin/spcomp.exe b/env/win32/bin/spcomp.exe index b842598bdc0875bc4de508609fbd3bb224c84632..3908db51c655caffc19ae4db7fe6a07d0352692b 100644 GIT binary patch literal 428032 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%0D4K$Dy(?4!% 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 Krt|;gpZ^9TRCfpf literal 345600 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 z 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