{"action":"created","comment":{"url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/comments/29656914","id":29656914,"diff_hunk":"@@ -24,242 +24,1271 @@\n \t#pragma loadlib engine\n #endif\n \n-native traceresult(type,any:...);\n+/**\n+ * Retrieves a result from the global trace handle.\n+ *\n+ * @note For a list of trace results available see the TR_* constants in\n+ *       engine_const.inc.\n+ * @note Usage examples:\n+ *       value = traceresult(TR_AllSolid);\n+ *       traceresult(TR_Fraction, floatvalue);\n+ *       traceresult(TR_EndPos, vector);\n+ *\n+ * @param type      Result to retrieve\n+ * @param ...       Depending on the result type a different number of\n+ *                  additional parameters should be provided:\n+ *                     int      - Returns the result integer value directly, no\n+ *                                additional parameters required\n+ *                     float    - Stores the result float value into the\n+ *                                variable provided as the second parameter\n+ *                     vector   - Copies the result vector to the Float:array[3]\n+ *                                provided in the second parameter\n+ *\n+ * @return          Changes depending on the result type:\n+ *                     int      - Returns the result integer value\n+ *                     float    - Returns 1\n+ *                     vector   - Returns 1\n+ */\n+native traceresult(type, any:...);\n \n-/* Registers a client impulse to a function.  Function is passed the ID of the user. */\n+/**\n+ * Registers a function to be called on a client impulse.\n+ *\n+ * @note The function will be called in the following manner:\n+ *\n+ * public impulse_handler(client, impulse)\n+ *\n+ *   client     - Client index\n+ *   impulse    - Impulse triggered by the client\n+ *\n+ * @note The callback should return PLUGIN_CONTINUE to ignore the impulse,\n+ *       PLUGIN_HANDLED or higher to nullify it (CmdStart() is not blocked).\n+ * @note When returning PLUGIN_HANDLED or higher from the callback, Engine will\n+ *       still fire other impulse functions. This includes the client_impulse()\n+ *       and client_cmdStart() forwards.\n+ *\n+ * @param impulse   Impulse to hook\n+ * @param function  Name of callback function\n+ *\n+ * @noreturn\n+ */\n native register_impulse(impulse, const function[]);\n \n-/* Registers a touch action to a function by classnames.  Use * to specify any classname. */\n+/**\n+ * Registers a function to be called on a touch action between entities of\n+ * specified classes.\n+ *\n+ * @note The function will be called in the following manner:\n+ *\n+ * public touch_handler(touched, toucher)\n+ *\n+ *   touched    - Index of entity being touched\n+ *   toucher    - Index of entity touching\n+ *\n+ * @note The callback should return PLUGIN_CONTINUE to ignore the touch,\n+ *       PLUGIN_HANDLED or higher to block it.\n+ * @note When returning PLUGIN_HANDLED from the callback, Engine will still fire\n+ *       other touch functions like the pfn_touch() forward before actually\n+ *       blocking the touch. To immediately block return PLUGIN_HANDLED_MAIN\n+ *       instead.\n+ *\n+ * @param Touched   Entity classname being touched, \"*\" or \"\" for any class\n+ * @param Toucher   Entity classname touching, \"*\" or \"\" for any class\n+ * @param function  Name of callback function\n+ *\n+ * @noreturn\n+ */\n native register_touch(const Touched[], const Toucher[], const function[]);\n \n-/* Registers a think action to a function by classname. */\n+/**\n+ * Registers a function to be called on entity think on all entities of a\n+ * specified class.\n+ *\n+ * @note The function will be called in the following manner:\n+ *\n+ * public think_handler(entity)\n+ *\n+ *   entity    - Index of entity thinking\n+ *\n+ * @note The callback should return PLUGIN_CONTINUE to ignore the think,\n+ *       PLUGIN_HANDLED or higher to block it.\n+ * @note When returning PLUGIN_HANDLED from the callback, Engine will still fire\n+ *       other think functions like the pfn_think() forward before actually\n+ *       blocking the think. To immediately block return PLUGIN_HANDLED_MAIN\n+ *       instead.\n+ *\n+ * @param Touched   Entity classname to hook\n+ * @param function  Name of callback function\n+ *\n+ * @noreturn\n+ */\n native register_think(const Classname[], const function[]);\n \n-/* NOTE: In old engine versions, this was not the case.  Values are now WINDOWS values.\n- * You must pass with the windows offset (e.g. if 230 on windows, pass 230 no matter what) \n- * The module will automatically add +5 for Linux.\n+/**\n+ * Precaches an event file.\n+ *\n+ * @note The event type should always be 1.\n+ * @note Contrary to the other precache_* natives, this can be used outside of\n+ *       the plugin_precache() forward, e.g. in plugin_init() or plugin_cfg().\n+ *       A bug in some clients makes this necessary, as plugin_precache() is\n+ *       called before the mod has precached its own, default event files. This\n+ *       can cause the event table to be misaligned on the client, leading to\n+ *       visual and audio bugs that are hard to diagnose.\n+ *\n+ * @param type  Event type\n+ * @param Name  Formatting rules, path to the event file\n+ * @param ...   Variable number of formatting parameters\n+ *\n+ * @return      Unique cache id of the event\n  */\n-\n-/* Precaches an event. */\n native precache_event(type, const Name[], any:...);\n \n-/* set/get a user's speak flags */\n+/**\n+ * Sets the engine module speak flags on a client.\n+ *\n+ * @note For a list of available flags see the SPEAK_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex        Client index\n+ * @param iSpeakFlags   New flags to set\n+ *\n+ * @noreturn\n+ * @error               If the client index is not within the range of 1 to\n+ *                      MaxClients, or the client is not connected, an error\n+ *                      will be thrown.\n+ */\n native set_speak(iIndex, iSpeakFlags);\n+\n+/**\n+ * Returns the engine module speak flags currently set on a client.\n+ *\n+ * @note For a list of available flags see the SPEAK_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Client index\n+ *\n+ * @return          Client speak flags\n+ * @error           If the client index is not within the range of 1 to\n+ *                  MaxClients, or the client is not connected, an error will be\n+ *                  thrown.\n+ */\n native get_speak(iIndex);\n \n-/* Drops an entity to the floor (work?) */\n+/**\n+ * Uses the DROP_TO_FLOOR() engine function on an entity, which attempts to put\n+ * it down on the floor.\n+ *\n+ * @note This engine function traces 256 units straight downwards from the\n+ *       entity origin. If the trace hits the floor, the origin is updated to\n+ *       the end position of the trace, FL_ONGROUND is added to the flags and\n+ *       EV_ENT_groundentity is updated. When the trace does not hit anything or\n+ *       the entity would be stuck inside something, the process fails.\n+ *\n+ * @param entity    Entity index\n+ *\n+ * @return          1 if entity is on the floor, 0 otherwise\n+ */\n native drop_to_floor(entity);\n \n-/* Get whole buffer containing keys and their data. */\n+/**\n+ * Retrieves keyvalue buffer from a client or the server.\n+ *\n+ * @note There are three different types of keyvalue buffers, depending on the\n+ *       index passed:\n+ *           -1 - \"local\" buffer (various server information and config values)\n+ *            0 - server buffer (usually contains \"*gamedir\" only)\n+ *           >0 - client buffer (\"name\", \"rate\" and other client info)\n+ * @note The buffer is formatted as \"\\key1\\value1\\key2\\value2\\...\\keyN\\valueN\"\n+ *\n+ * @param id        Server/client index\n+ * @param buffer    Buffer to copy keybuffer to\n+ * @param length    Maximum size of buffer\n+ *\n+ * @return          Number of cells written to buffer\n+ * @error           If an invalid entity index is provided or, if the index is a\n+ *                  client index, the client is not connected, an error will be\n+ *                  thrown.\n+ */\n native get_info_keybuffer(id, buffer[], length);\n \n-/* Use an entity with another entity. \"entUsed\" could be a hostage, \"entUser\" a player. */\n+/**\n+ * Forces an entity (such as a player) to use another entity (such as a button).\n+ *\n+ * @param entUsed   Index of entity being used\n+ * @param entUser   Index of entity using\n+ *\n+ * @noreturn\n+ * @error           If an invalid entity index is provided or, if the index is a\n+ *                  client index, the client is not connected, an error will be\n+ *                  thrown.\n+ */\n native force_use(entUsed, entUser);\n \n-/* Get globals from server. */\n+/**\n+ * Returns a float type value from the server globals.\n+ *\n+ * @note For a list of valid float type entries, see the GL_* constants in\n+ *       engine_const.inc under the \"Float\" section.\n+ *\n+ * @param variable  Entry to retrieve from\n+ *\n+ * @return          Value of specified entry\n+ * @error           If an invalid entry is provided, an error will be thrown.\n+ */\n native Float:get_global_float(variable);\n+\n+/**\n+ * Returns a integer type value from the server globals.\n+ *\n+ * @note For a list of valid integer type entries, see the GL_* constants in\n+ *       engine_const.inc under the \"Int\" section.\n+ *\n+ * @param variable  Entry to retrieve from\n+ *\n+ * @return          Value of specified entry\n+ * @error           If an invalid entry is provided, an error will be thrown.\n+ */\n native get_global_int(variable);\n+\n+/**\n+ * Retrieves a global string type value from the server.\n+ *\n+ * @note For a list of valid string type entries, see the GL_* constants in\n+ *       engine_const.inc under the \"String\" section.\n+ *\n+ * @param variable  Entry to retrieve from\n+ * @param string    Buffer to copy value to\n+ * @param maxlen    Maximum size of buffer\n+ *\n+ * @return          Number of cells written to buffer\n+ * @error           If an invalid entry is provided, an error will be thrown.\n+ */\n native get_global_string(variable, string[], maxlen);\n+\n+/**\n+ * Returns a vector type value from the server globals.\n+ *\n+ * @note For a list of valid vector type entries, see the GL_* constants in\n+ *       engine_const.inc under the \"Vector\" section.\n+ *\n+ * @param variable  Entry to retrieve from\n+ * @param vector    Array to store vector in\n+ *\n+ * @noreturn\n+ * @error           If an invalid entry is provided, an error will be thrown.\n+ */\n native get_global_vector(variable, Float:vector[3]);\n+\n+/**\n+ * Returns a edict type value from the server globals.\n+ *\n+ * @note For a list of valid edict type entries, see the GL_* constants in\n+ *       engine_const.inc under the \"Edict\" section.\n+ * @note This native returns 0 as an error value if the edict retrieved is an\n+ *       invalid entity. As 0 is an entity index that is considered to be a\n+ *       valid value for some globals (\"worldspawn\"), this native can\n+ *       potentially return a misleading value. Use get_global_edict2() for a\n+ *       safe version.\n+ *\n+ * @param variable  Entry to retrieve from\n+ *\n+ * @return          Value of specified entry\n+ * @error           If an invalid entry is provided, an error will be thrown.\n+ */\n native get_global_edict(variable);\n \n-/* Set entity bounds. */\n+/**\n+ * Sets the size of the entity bounding box, as described by the minimum and\n+ * maximum vectors relative to the origin.\n+ *\n+ * @param index     Entity index\n+ * @param mins      Vector containing the minimum point relative to the origin\n+ * @param maxs      Vector containing the maximum point relative to the origin\n+ *\n+ * @noreturn\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_set_size(index, const Float:mins[3], const Float:maxs[3]);\n \n-/* Get decal index */\n+/**\n+ * Returns the index of a decal.\n+ *\n+ * @param szDecalName   Decal name\n+ *\n+ * @return              Decal index >= 0, or -1 if decal was not found\n+ */\n native get_decal_index(const szDecalName[]);\n \n-/* Returns the distance between two entities. */\n-native Float:entity_range(ida,idb);\n+/**\n+ * Returns the distance between two entities.\n+ *\n+ * @param ida   Entity index 1\n+ * @param idb   Entity index 2\n+ *\n+ * @return      Distance between the entities\n+ * @error       If an invalid entity index is provided or, if the index is a\n+ *              client index, the client is not connected, an error will be\n+ *              thrown.\n+ */\n+native Float:entity_range(ida, idb);\n \n-/* Sets/gets things in an entities Entvars Struct. */\n+/**\n+ * Returns an integer type value from an entities entvar struct.\n+ *\n+ * @note For a list of valid integer type entries, see the EV_INT_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to retrieve from\n+ *\n+ * @return          Value of specified entry\n+ * @error           If an invalid entity index or entry is provided, an error\n+ *                  will be thrown.\n+ */\n native entity_get_int(iIndex, iKey);\n+\n+/**\n+ * Sets an integer type value in an entities entvar struct.\n+ *\n+ * @note For a list of valid integer type entries, see the EV_INT_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to write to\n+ * @param iVal      Value to set\n+ *\n+ * @return          1 if value was sucessfully set, 0 if an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_set_int(iIndex, iKey, iVal);\n+\n+/**\n+ * Returns a float type value from an entities entvar struct.\n+ *\n+ * @note For a list of valid float type entries, see the EV_FL_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to retrieve from\n+ *\n+ * @return          Value of specified entry, or 0 if an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native Float:entity_get_float(iIndex, iKey);\n+\n+/**\n+ * Sets a float type value in an entities entvar struct.\n+ *\n+ * @note For a list of valid float type entries, see the EV_FL_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to write to\n+ * @param iVal      Value to set\n+ *\n+ * @return          1 if value was sucessfully set, 0 if an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_set_float(iIndex, iKey, Float:iVal);\n+\n+/**\n+ * Retrieves a vector type value from an entities entvar struct.\n+ *\n+ * @note For a list of valid vector type entries, see the EV_VEC_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex        Entity index\n+ * @param iKey          Entry to retrieve from\n+ * @param vRetVector    Array to store vector in\n+ *\n+ * @return              1 if value was sucessfully retrieved, 0 if an invalid\n+ *                      entry was specified\n+ * @error               If an invalid entity index is provided, an error will be\n+ *                      thrown.\n+ */\n native entity_get_vector(iIndex, iKey, Float:vRetVector[3]);\n+\n+/**\n+ * Sets a vector type value in an entities entvar struct.\n+ *\n+ * @note For a list of valid vector type entries, see the EV_VEC_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex        Entity index\n+ * @param iKey          Entry to write to\n+ * @param vNewVector    Array to copy to the entity\n+ *\n+ * @return              1 if value was sucessfully set, 0 if an invalid entry\n+ *                      was specified\n+ * @error               If an invalid entity index is provided, an error will be\n+ *                      thrown.\n+ */\n native entity_set_vector(iIndex, iKey, const Float:vNewVector[3]);\n+\n+/**\n+ * Returns an edict type value from an entities entvar struct.\n+ *\n+ * @note For a list of valid edict type entries, see the EV_ENT_* constants in\n+ *       engine_const.inc\n+ * @note This native returns 0 as an error value if the edict retrieved from the\n+ *       entvar is an invalid entity. As 0 is an entity index that is\n+ *       considered to be a valid value for some entvars (\"worldspawn\"), this\n+ *       native can potentially return a misleading value. Use\n+ *       entity_get_edict2() for a safe version.\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to retrieve from\n+ *\n+ * @return          Entity index in specified entry, 0 if the edict in the\n+ *                  entvar is not a valid entity or an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_get_edict(iIndex, iKey);\n+\n+/**\n+ * Sets an edict type value in an entities entvar struct.\n+ *\n+ * @note For a list of valid edict type entries, see the EV_ENT_* constants in\n+ *       engine_const.inc\n+ * @note This native will crash the server if an invalid entity index is\n+ *       provided in iNewIndex.\n+ *\n+ * @param iIndex        Entity index\n+ * @param iKey          Entry to write to\n+ * @param iNewIndex     Entity index to set\n+ *\n+ * @return              1 if value was sucessfully set, 0 if an invalid entry\n+ *                      was specified\n+ * @error               If an invalid entity index is provided, an error will be\n+ *                      thrown.\n+ */\n native entity_set_edict(iIndex, iKey, iNewIndex);\n+\n+/**\n+ * Retrieves a string type value from an entities entvar struct.\n+ *\n+ * @note For a list of valid string type entries, see the EV_SZ_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to retrieve from\n+ * @param szReturn  Buffer to copy value to\n+ * @param iRetLen   Maximum size of buffer\n+ *\n+ * @return          Number of cells written to buffer,  0 if an invalid entry\n+ *                  was specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_get_string(iIndex, iKey, szReturn[], iRetLen);\n+\n+/**\n+ * Sets a string type value in an entities entvar struct.\n+ *\n+ * @note For a list of valid string type entries, see the EV_SZ_* constants in\n+ *       engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to retrieve from\n+ * @param szNewVal  String to copy to the entity\n+ *\n+ * @return          1 if value was sucessfully set, 0 if an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_set_string(iIndex, iKey, const szNewVal[]);\n+\n+/**\n+ * Returns a bytearray type value from an entities entvar struct.\n+ *\n+ * @note For a list of valid bytearray type entries, see the EV_BYTE_* constants\n+ *       in engine_const.inc\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to retrieve from\n+ *\n+ * @return          Value of specified entry, 0 if an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_get_byte(iIndex, iKey);\n+\n+/**\n+ * Sets a bytearray type value in an entities entvar struct.\n+ *\n+ * @note For a list of valid bytearray type entries, see the EV_BYTE_* constants\n+ *       in engine_const.inc\n+ * @note The value is automatically clamped to [0,255].\n+ *\n+ * @param iIndex    Entity index\n+ * @param iKey      Entry to write to\n+ * @param iVal      Value to set\n+ *\n+ * @return          1 if value was sucessfully set, 0 if an invalid entry was\n+ *                  specified\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native entity_set_byte(iIndex, iKey, iVal);\n \n-/* Creates an entity, will return the index of the created entity. ClassName must be valid. */\n+/**\n+ * Creates an entity.\n+ *\n+ * @note When creating an entity the classname has to be valid in the mod, as\n+ *       the engine needs to link the entity to an existing class internally.\n+ *       The classname string that is stored in the entvar struct\n+ *       (EV_SZ_classname) is separate from this association and can later be\n+ *       freely changed to serve other purposes.\n+ *\n+ * @param szClassname   Entity classname\n+ *\n+ * @return              Entity index > 0 on success, 0 otherwise\n+ */\n native create_entity(const szClassname[]);\n \n-/* Finds an entity in the world, will return 0 if nothing is found */\n+/**\n+ * Searches entities in the world, starting at a specified index and matching by\n+ * classname.\n+ *\n+ * @param iIndex    Entity index to start from\n+ * @param szClass   Classname to match\n+ *\n+ * @return          Entity index if an entity was found, 0 otherwise\n+ */\n native find_ent_by_class(iIndex, const szClass[]);\n-//optionally you can set a jghg2 type\n-// 1: target, 2:targetname, 0:classname (default)\n-native find_ent_by_owner(iIndex, const szClass[], iOwner, iJghgType=0);\n+\n+/**\n+ * Searches entities in the world, starting at a specified index, matching by\n+ * owner and a configurable entity field.\n+ *\n+ * @param iIndex        Entity index to start from\n+ * @param szClass       String to match\n+ * @param iOwner        Owner entity index to match\n+ * @param iJghgType     Entity field to match string against:\n+ *                          0 - Classname\n+ *                          1 - Target\n+ *                          2 - Targetname\n+ *\n+ * @return              Entity index if an entity was found, 0 otherwise\n+ */\n+native find_ent_by_owner(iIndex, const szClass[], iOwner, iJghgType = 0);\n+\n+/**\n+ * Searches entities in the world, starting at a specified index and matching by\n+ * target.\n+ *\n+ * @param iIndex    Entity index to start from\n+ * @param szClass   Target to match\n+ *\n+ * @return          Entity index if an entity was found, 0 otherwise\n+ */\n native find_ent_by_target(iIndex, const szClass[]);\n+\n+/**\n+ * Searches entities in the world, starting at a specified index and matching by\n+ * targetname.\n+ *\n+ * @param iIndex    Entity index to start from\n+ * @param szClass   Targetname to match\n+ *\n+ * @return          Entity index if an entity was found, 0 otherwise\n+ */\n native find_ent_by_tname(iIndex, const szClass[]);\n+\n+/**\n+ * Searches entities in the world, starting at a specified index and matching by\n+ * classname and model.\n+ *\n+ * @param iIndex    Entity index to start from\n+ * @param szClass   Classname to match\n+ * @param szModel   Model to match\n+ *\n+ * @return          Entity index if an entity was found, 0 otherwise\n+ */\n native find_ent_by_model(iIndex, const szClass[], const szModel[]);\n+\n+/**\n+ * Searches for entities inside a sphere, starting at a specified index.\n+ *\n+ * @param start_from_ent    Entity index to start from\n+ * @param origin            Center of sphere\n+ * @param radius            Sphere radius\n+ *\n+ * @return                  Entity index if an entity was found, 0 otherwise\n+ */\n native find_ent_in_sphere(start_from_ent, const Float:origin[3], Float:radius);\n \n-//this will CBaseEntity::Think() or something from the entity\n+/**\n+ * Calls the DispatchThink() game DLL function on an entity, triggering it to\n+ * think if applicable.\n+ *\n+ * @note DispatchThink() checks the entity for the FL_DORMANT flag - if it is\n+ *       set, the entity will not proceed to think. It will first call the\n+ *       class-specific think function and eventually CBaseEntity::Think(), thus\n+ *       triggering other think hooks and forwards.\n+ *\n+ * @param entity    Entity index\n+ *\n+ * @noreturn\n+ * @error           If an invalid entity index is provided, an error will be\n+ *                  thrown.\n+ */\n native call_think(entity);\n \n-/* Is entity valid? */\n+/**\n+ * Returns if an entity index is valid (as required by other engine natives).\n+ *\n+ * @note Engine considers an entity index valid if it is in the range between 1\n+ *       and the maximum number of entities possible. The index also has to\n+ *       point to an existing entity or, if it is a client index, the client has\n+ *       to be connected.\n+ *\n+ * @param iIndex    Entity index\n+ *\n+ * @return          1 if entity is valid, 0 otherwise\n+ */\n native is_valid_ent(iIndex);\n \n-/* Proper origin setting, keeps updated with Half-Life engine. */\n+/**\n+ * Sets the origin of an entity.\n+ *\n+ * @note This native uses engine functions to set the origin, keeping it","path":"plugins/include/engine.inc","position":670,"original_position":670,"commit_id":"a54350f804bb32542e684e342621c3a925f3addb","original_commit_id":"a54350f804bb32542e684e342621c3a925f3addb","user":{"login":"xPaw","id":613331,"avatar_url":"https://avatars.githubusercontent.com/u/613331?v=3","gravatar_id":"","url":"https://api.github.com/users/xPaw","html_url":"https://github.com/xPaw","followers_url":"https://api.github.com/users/xPaw/followers","following_url":"https://api.github.com/users/xPaw/following{/other_user}","gists_url":"https://api.github.com/users/xPaw/gists{/gist_id}","starred_url":"https://api.github.com/users/xPaw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xPaw/subscriptions","organizations_url":"https://api.github.com/users/xPaw/orgs","repos_url":"https://api.github.com/users/xPaw/repos","events_url":"https://api.github.com/users/xPaw/events{/privacy}","received_events_url":"https://api.github.com/users/xPaw/received_events","type":"User","site_admin":false},"body":"Why plural engine functions?","created_at":"2015-05-05T10:13:33Z","updated_at":"2015-05-05T10:13:33Z","html_url":"https://github.com/alliedmodders/amxmodx/pull/239#discussion_r29656914","pull_request_url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239","_links":{"self":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/comments/29656914"},"html":{"href":"https://github.com/alliedmodders/amxmodx/pull/239#discussion_r29656914"},"pull_request":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239"}}},"pull_request":{"url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239","id":34674566,"html_url":"https://github.com/alliedmodders/amxmodx/pull/239","diff_url":"https://github.com/alliedmodders/amxmodx/pull/239.diff","patch_url":"https://github.com/alliedmodders/amxmodx/pull/239.patch","issue_url":"https://api.github.com/repos/alliedmodders/amxmodx/issues/239","number":239,"state":"open","locked":false,"title":"Update include documentation #3 (mostly engine.inc)","user":{"login":"Nextra","id":670853,"avatar_url":"https://avatars.githubusercontent.com/u/670853?v=3","gravatar_id":"","url":"https://api.github.com/users/Nextra","html_url":"https://github.com/Nextra","followers_url":"https://api.github.com/users/Nextra/followers","following_url":"https://api.github.com/users/Nextra/following{/other_user}","gists_url":"https://api.github.com/users/Nextra/gists{/gist_id}","starred_url":"https://api.github.com/users/Nextra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Nextra/subscriptions","organizations_url":"https://api.github.com/users/Nextra/orgs","repos_url":"https://api.github.com/users/Nextra/repos","events_url":"https://api.github.com/users/Nextra/events{/privacy}","received_events_url":"https://api.github.com/users/Nextra/received_events","type":"User","site_admin":false},"body":"Third time's a charm (#208 followup).\r\n\r\nThis one mostly touches engine.inc, which was awkward and took way too much time. A lot of old, weird API, some of it close to being impossible to document (`trace_forward` is a real gem, take a look - I tried my best).\r\n\r\nSome of the comments already reference improvements and modifications that I will bring to the engine module soon-ish.\r\n\r\nThere are probably mistakes in here, and a ton of awkwardness. Feedback welcomed.","created_at":"2015-05-04T20:58:46Z","updated_at":"2015-05-05T10:13:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e2b3596e7f93ddec2e448c6b9f88b2539b6176b9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239/commits","review_comments_url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239/comments","review_comment_url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/alliedmodders/amxmodx/issues/239/comments","statuses_url":"https://api.github.com/repos/alliedmodders/amxmodx/statuses/a54350f804bb32542e684e342621c3a925f3addb","head":{"label":"Nextra:inc-doc3","ref":"inc-doc3","sha":"a54350f804bb32542e684e342621c3a925f3addb","user":{"login":"Nextra","id":670853,"avatar_url":"https://avatars.githubusercontent.com/u/670853?v=3","gravatar_id":"","url":"https://api.github.com/users/Nextra","html_url":"https://github.com/Nextra","followers_url":"https://api.github.com/users/Nextra/followers","following_url":"https://api.github.com/users/Nextra/following{/other_user}","gists_url":"https://api.github.com/users/Nextra/gists{/gist_id}","starred_url":"https://api.github.com/users/Nextra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Nextra/subscriptions","organizations_url":"https://api.github.com/users/Nextra/orgs","repos_url":"https://api.github.com/users/Nextra/repos","events_url":"https://api.github.com/users/Nextra/events{/privacy}","received_events_url":"https://api.github.com/users/Nextra/received_events","type":"User","site_admin":false},"repo":{"id":19426788,"name":"amxmodx","full_name":"Nextra/amxmodx","owner":{"login":"Nextra","id":670853,"avatar_url":"https://avatars.githubusercontent.com/u/670853?v=3","gravatar_id":"","url":"https://api.github.com/users/Nextra","html_url":"https://github.com/Nextra","followers_url":"https://api.github.com/users/Nextra/followers","following_url":"https://api.github.com/users/Nextra/following{/other_user}","gists_url":"https://api.github.com/users/Nextra/gists{/gist_id}","starred_url":"https://api.github.com/users/Nextra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Nextra/subscriptions","organizations_url":"https://api.github.com/users/Nextra/orgs","repos_url":"https://api.github.com/users/Nextra/repos","events_url":"https://api.github.com/users/Nextra/events{/privacy}","received_events_url":"https://api.github.com/users/Nextra/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Nextra/amxmodx","description":"AMX Mod X - Half-Life 1 Scripting and Administration","fork":true,"url":"https://api.github.com/repos/Nextra/amxmodx","forks_url":"https://api.github.com/repos/Nextra/amxmodx/forks","keys_url":"https://api.github.com/repos/Nextra/amxmodx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Nextra/amxmodx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Nextra/amxmodx/teams","hooks_url":"https://api.github.com/repos/Nextra/amxmodx/hooks","issue_events_url":"https://api.github.com/repos/Nextra/amxmodx/issues/events{/number}","events_url":"https://api.github.com/repos/Nextra/amxmodx/events","assignees_url":"https://api.github.com/repos/Nextra/amxmodx/assignees{/user}","branches_url":"https://api.github.com/repos/Nextra/amxmodx/branches{/branch}","tags_url":"https://api.github.com/repos/Nextra/amxmodx/tags","blobs_url":"https://api.github.com/repos/Nextra/amxmodx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Nextra/amxmodx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Nextra/amxmodx/git/refs{/sha}","trees_url":"https://api.github.com/repos/Nextra/amxmodx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Nextra/amxmodx/statuses/{sha}","languages_url":"https://api.github.com/repos/Nextra/amxmodx/languages","stargazers_url":"https://api.github.com/repos/Nextra/amxmodx/stargazers","contributors_url":"https://api.github.com/repos/Nextra/amxmodx/contributors","subscribers_url":"https://api.github.com/repos/Nextra/amxmodx/subscribers","subscription_url":"https://api.github.com/repos/Nextra/amxmodx/subscription","commits_url":"https://api.github.com/repos/Nextra/amxmodx/commits{/sha}","git_commits_url":"https://api.github.com/repos/Nextra/amxmodx/git/commits{/sha}","comments_url":"https://api.github.com/repos/Nextra/amxmodx/comments{/number}","issue_comment_url":"https://api.github.com/repos/Nextra/amxmodx/issues/comments{/number}","contents_url":"https://api.github.com/repos/Nextra/amxmodx/contents/{+path}","compare_url":"https://api.github.com/repos/Nextra/amxmodx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Nextra/amxmodx/merges","archive_url":"https://api.github.com/repos/Nextra/amxmodx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Nextra/amxmodx/downloads","issues_url":"https://api.github.com/repos/Nextra/amxmodx/issues{/number}","pulls_url":"https://api.github.com/repos/Nextra/amxmodx/pulls{/number}","milestones_url":"https://api.github.com/repos/Nextra/amxmodx/milestones{/number}","notifications_url":"https://api.github.com/repos/Nextra/amxmodx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Nextra/amxmodx/labels{/name}","releases_url":"https://api.github.com/repos/Nextra/amxmodx/releases{/id}","created_at":"2014-05-04T13:13:48Z","updated_at":"2015-04-06T11:32:22Z","pushed_at":"2015-05-05T10:04:20Z","git_url":"git://github.com/Nextra/amxmodx.git","ssh_url":"git@github.com:Nextra/amxmodx.git","clone_url":"https://github.com/Nextra/amxmodx.git","svn_url":"https://github.com/Nextra/amxmodx","homepage":"http://www.amxmodx.org/","size":161505,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"alliedmodders:master","ref":"master","sha":"9fd0f1c2310d8387cb2a8a8e948dab9bb904e9bd","user":{"login":"alliedmodders","id":6601917,"avatar_url":"https://avatars.githubusercontent.com/u/6601917?v=3","gravatar_id":"","url":"https://api.github.com/users/alliedmodders","html_url":"https://github.com/alliedmodders","followers_url":"https://api.github.com/users/alliedmodders/followers","following_url":"https://api.github.com/users/alliedmodders/following{/other_user}","gists_url":"https://api.github.com/users/alliedmodders/gists{/gist_id}","starred_url":"https://api.github.com/users/alliedmodders/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alliedmodders/subscriptions","organizations_url":"https://api.github.com/users/alliedmodders/orgs","repos_url":"https://api.github.com/users/alliedmodders/repos","events_url":"https://api.github.com/users/alliedmodders/events{/privacy}","received_events_url":"https://api.github.com/users/alliedmodders/received_events","type":"Organization","site_admin":false},"repo":{"id":16622063,"name":"amxmodx","full_name":"alliedmodders/amxmodx","owner":{"login":"alliedmodders","id":6601917,"avatar_url":"https://avatars.githubusercontent.com/u/6601917?v=3","gravatar_id":"","url":"https://api.github.com/users/alliedmodders","html_url":"https://github.com/alliedmodders","followers_url":"https://api.github.com/users/alliedmodders/followers","following_url":"https://api.github.com/users/alliedmodders/following{/other_user}","gists_url":"https://api.github.com/users/alliedmodders/gists{/gist_id}","starred_url":"https://api.github.com/users/alliedmodders/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alliedmodders/subscriptions","organizations_url":"https://api.github.com/users/alliedmodders/orgs","repos_url":"https://api.github.com/users/alliedmodders/repos","events_url":"https://api.github.com/users/alliedmodders/events{/privacy}","received_events_url":"https://api.github.com/users/alliedmodders/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/alliedmodders/amxmodx","description":"AMX Mod X - Half-Life 1 Scripting and Administration","fork":false,"url":"https://api.github.com/repos/alliedmodders/amxmodx","forks_url":"https://api.github.com/repos/alliedmodders/amxmodx/forks","keys_url":"https://api.github.com/repos/alliedmodders/amxmodx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/alliedmodders/amxmodx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/alliedmodders/amxmodx/teams","hooks_url":"https://api.github.com/repos/alliedmodders/amxmodx/hooks","issue_events_url":"https://api.github.com/repos/alliedmodders/amxmodx/issues/events{/number}","events_url":"https://api.github.com/repos/alliedmodders/amxmodx/events","assignees_url":"https://api.github.com/repos/alliedmodders/amxmodx/assignees{/user}","branches_url":"https://api.github.com/repos/alliedmodders/amxmodx/branches{/branch}","tags_url":"https://api.github.com/repos/alliedmodders/amxmodx/tags","blobs_url":"https://api.github.com/repos/alliedmodders/amxmodx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/alliedmodders/amxmodx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/alliedmodders/amxmodx/git/refs{/sha}","trees_url":"https://api.github.com/repos/alliedmodders/amxmodx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/alliedmodders/amxmodx/statuses/{sha}","languages_url":"https://api.github.com/repos/alliedmodders/amxmodx/languages","stargazers_url":"https://api.github.com/repos/alliedmodders/amxmodx/stargazers","contributors_url":"https://api.github.com/repos/alliedmodders/amxmodx/contributors","subscribers_url":"https://api.github.com/repos/alliedmodders/amxmodx/subscribers","subscription_url":"https://api.github.com/repos/alliedmodders/amxmodx/subscription","commits_url":"https://api.github.com/repos/alliedmodders/amxmodx/commits{/sha}","git_commits_url":"https://api.github.com/repos/alliedmodders/amxmodx/git/commits{/sha}","comments_url":"https://api.github.com/repos/alliedmodders/amxmodx/comments{/number}","issue_comment_url":"https://api.github.com/repos/alliedmodders/amxmodx/issues/comments{/number}","contents_url":"https://api.github.com/repos/alliedmodders/amxmodx/contents/{+path}","compare_url":"https://api.github.com/repos/alliedmodders/amxmodx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/alliedmodders/amxmodx/merges","archive_url":"https://api.github.com/repos/alliedmodders/amxmodx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/alliedmodders/amxmodx/downloads","issues_url":"https://api.github.com/repos/alliedmodders/amxmodx/issues{/number}","pulls_url":"https://api.github.com/repos/alliedmodders/amxmodx/pulls{/number}","milestones_url":"https://api.github.com/repos/alliedmodders/amxmodx/milestones{/number}","notifications_url":"https://api.github.com/repos/alliedmodders/amxmodx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/alliedmodders/amxmodx/labels{/name}","releases_url":"https://api.github.com/repos/alliedmodders/amxmodx/releases{/id}","created_at":"2014-02-07T17:32:31Z","updated_at":"2015-05-05T10:01:29Z","pushed_at":"2015-05-05T10:01:29Z","git_url":"git://github.com/alliedmodders/amxmodx.git","ssh_url":"git@github.com:alliedmodders/amxmodx.git","clone_url":"https://github.com/alliedmodders/amxmodx.git","svn_url":"https://github.com/alliedmodders/amxmodx","homepage":"http://www.amxmodx.org/","size":218285,"stargazers_count":69,"watchers_count":69,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":38,"mirror_url":null,"open_issues_count":3,"forks":38,"open_issues":3,"watchers":69,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239"},"html":{"href":"https://github.com/alliedmodders/amxmodx/pull/239"},"issue":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/issues/239"},"comments":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/issues/239/comments"},"review_comments":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239/comments"},"review_comment":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/pulls/239/commits"},"statuses":{"href":"https://api.github.com/repos/alliedmodders/amxmodx/statuses/a54350f804bb32542e684e342621c3a925f3addb"}}}}