Source

reapi_engine.inc

#if defined _reapi_engine_included
	#endinput
#endif

#define _reapi_engine_included

#include <reapi_engine_const>

/*
* Sets entvars data for an entity.
* Use the var_* EntVars enum
*/
native set_entvar(const index, const EntVars:var, any:...);

/*
* Returns entvar data from an entity.
* Use the var_* EntVars enum
*/
native any:get_entvar(const index, const EntVars:var, any:...);

/*
* Sets usercmd data.
* Use the ucmd_* UCmd enum
*/
native set_ucmd(const ucmd, const UCmd:var, any:...);

/*
* Returns usercmd data from an entity.
* Use the ucmd_* UCmd enum
*/
native any:get_ucmd(const ucmd, const UCmd:var, any:...);

/*
* Sets netchan data.
* Use the net_* NetChan enum
*/
native set_netchan(const index, const NetChan:var, any:...);

/*
* Returns metchan data from an client.
* Use the net_* NetChan enum
*/
native any:get_netchan(const index, const NetChan:var, any:...);

/*
* Sets a NetAdr var.
*
* @param var        The specified mvar, look at the enum NetAdrVars
*
* @return           1 on success.
*/
native set_netadr(const adr, const NetAdrVars:var, any:...);

/*
* Returns a NetAdr var
*
* @param var        The specified mvar, look at the enum NetAdrVars
*
* @return           If an integer or boolean or one byte, array or everything else is passed via the 3rd argument and more, look at the argument list for the specified mvar
*/
native any:get_netadr(const adr, const NetAdrVars:var, any:...);

/*
* Gets value for key in buffer
*
* @param pbuffer    Pointer to buffer
* @param key        Key string
* @param value      Buffer to copy value to
* @param maxlen     Maximum size of the buffer
*
* @return           Number of cells written to buffer
* @error            If invalid buffer handler provided, an error will be thrown.
*/
native get_key_value(const pbuffer, const key[], const value[], const maxlen);

/*
* Sets value for key in buffer
*
* @param pbuffer    Pointer to buffer
* @param key        Key string
* @param value      Value to set
*
* @noreturn
* @error            If invalid buffer handler provided, an error will be thrown.
*/
native set_key_value(const pbuffer, const key[], const value[]);

/*
* Gets an AMXX string buffer from a infobuffer pointer
*
* @param buffer     Info string pointer
* @param value      String to copy value to
* @param maxlen     Maximum size of the output buffer
*
* @return           Returns a string buffer on infobuffer pointer
*/
native get_key_value_buffer(const pbuffer, const output[], const maxlen);

/*
* Sets value string to entire buffer
*
* @param buffer     Pointer to buffer
* @param value      Value to set
* @param maxlen     Maximum size of the value buffer to set, -1 means copy all characters
*
* @return           1 on success, 0 otherwise
*/
native set_key_value_buffer(const pbuffer, const value[], const maxlen = -1);

/*
* Gets the position of the bone
*
* @param entity     Entity index
* @param bone       Number of the bone
* @param vecOrigin  Array to store origin in
* @param vecAngles  Array to store angles in
*
* @return           1 on success, 0 otherwise
* @error            If the index is not within the range of 1 to maxEntities or
*                   the entity is not valid, an error will be thrown.
*/
native GetBonePosition(const entity, const bone, Float:vecOrigin[3], Float:vecAngles[3] = {0.0, 0.0, 0.0});

/*
* Gets the position of the attachment
*
* @param entity     Entity index
* @param attachment Number of the attachment
* @param vecOrigin  Array to store origin in
* @param vecAngles  Array to store angles in
*
* @return           1 on success, 0 otherwise
* @error            If the index is not within the range of 1 to maxEntities or
*                   the entity is not valid, an error will be thrown.
*/
native GetAttachment(const entity, const attachment, Float:vecOrigin[3], Float:vecAngles[3] = {0.0, 0.0, 0.0});

/*
* Sets body group value based on entity's model group
*
* @param entity     Entity index
* @param group      Number of entity's model group index
* @param value      Value to assign
*
* @return           1 on success, 0 otherwise
* @error            If the index is not within the range of 1 to maxEntities or
*                   the entity is not valid, an error will be thrown.
*
*/
native SetBodygroup(const entity, const group, const value);

/*
* Gets body group value based on entity's model group
*
* @param entity     Entity index
* @param group      Number of entity's model group index
*
* @return           Body group value
* @error            If the index is not within the range of 1 to maxEntities or
*                   the entity is not valid, an error will be thrown.
*
*/
native GetBodygroup(const entity, const group);

/*
* Gets sequence information based on entity's model current sequence index
*
* @param entity             Entity index
* @param piFlags            Sequence flags (1 = sequence loops)
* @param pflFrameRate       Sequence framerate
* @param pflGroundSpeed     Sequence ground speed
*
* @return                   True on success, false otherwise
* @error                    If the index is not within the range of 1 to maxEntities or
*                           the entity is not valid, an error will be thrown.
*
*/
native bool:GetSequenceInfo(const entity, &piFlags, &Float:pflFrameRate, &Float:pflGroundSpeed);

/*
* Test visibility of an entity from a given origin using either PVS or PAS
*
* @param entity     Entity index
* @param origin     Vector representing the origin from which visibility is checked
* @param type       Type of visibility check: VisibilityInPVS (Potentially Visible Set) or VisibilityInPAS (Potentially Audible Set)
*
* @return           0 - Not visible
*                   1 - Visible, passed by a leafnum
*                   2 - Visible, passed by a headnode
*
* @remarks          This function checks the visibility of the specified entity from the given origin, using either
*                   the Potentially Visible Set (PVS) or the Potentially Audible Set (PAS) depending on the provided type
*/
native CheckVisibilityInOrigin(const ent, Float:origin[3], CheckVisibilityType:type = VisibilityInPVS);

/*
* Sets the name of the map.
*
* @param mapname    New map name.
*
* @noreturn
*/
native rh_set_mapname(const mapname[]);

/*
* Gets the name of the map.
*
* @param output     Buffer to copy map name to
* @param len        Maximum buffer size
* @param type       MNT_SET will return the name of the current map
*                   MNT_TRUE will return the original map name independant of the name set with via rh_set_mapname
*
* @noreturn
*/
native rh_get_mapname(output[], len, MapNameType:type = MNT_SET);

/*
* Reverts back the original map name.
*
* @noreturn
*/
native rh_reset_mapname();

/*
* Emits a sound from an entity from the engine.
*
* @param entity     Entity index or use 0 to emit from worldspawn at the specified position
* @param recipient  Recipient index or use 0 to make all clients hear it
* @param channel    Channel to emit from
* @param sample     Sound file to emit
* @param vol        Volume in percents
* @param attn       Sound attenuation
* @param flags      Emit flags
* @param pitch      Sound pitch
* @param emitFlags  Additional Emit2 flags, look at the defines like SND_EMIT2_*
* @param origin     Specify origin and only on "param" entity worldspawn that is 0
*
* @return           true if the emission was successfull, false otherwise
*/
native bool:rh_emit_sound2(const entity, const recipient, const channel, const sample[], Float:vol = VOL_NORM, Float:attn = ATTN_NORM, const flags = 0, const pitch = PITCH_NORM, emitFlags = 0, const Float:origin[3] = {0.0,0.0,0.0});

/*
* Forces an userinfo update
*
* @param index      Client index
*
* @noreturn
*/
native rh_update_user_info(const index);

/*
* Kicks a client from server with message
*
* @param index      Client index
* @param message    Message that will be sent to client when it is deleted from server
*
* @noreturn
*
*/
native rh_drop_client(const index, const message[] = "");

/*
* -
*
* @param output     Buffer to copy the ip address
* @param len        Maximum buffer size
*
* @noreturn
*
*/
native rh_get_net_from(output[], len);

/*
* Returns client's netchan playing time in seconds.
*
* @param index      Client index
*
* @return           Netchan connection time in seconds or 0 if client index is invalid or client is not connected
*/
native rh_get_client_connect_time(const index);

/*
* Checks if a specific entity is present in the host's outgoing entity table for a given frame,
* indicating it has passed the visibility check (AddToFullPack) and is ready for client transmission.
*
* @param host       Host index for whom we are checking the entity. (Host cannot be a fake client)
* @param entity     Entity index to find in the table of entities for the given frame.
* @param frame      Frame index where to look. Default is -1, which checks the previous frame.
* @note             To check in the current frame, this native should be called at the end of the server frame.
*
* @return           Returns true if the entity is present in the host's outgoing entity table and
*                   ready to be sent to all clients in the given frame, otherwise false.
*/
native bool:rh_is_entity_fullpacked(const host, const entity, const frame = -1);

/*
* Get real game time throughout the entire server lifecycle.
*
* @return           Real game time
*/
native Float:rh_get_realtime();

enum MessageHook
{
	INVALID_MESSAGEHOOK = 0
};

/**
* Registers a callback function to be called when a game message with the specified ID is received.
*
* @param msg_id     The ID of the message to register the callback for.
* @param callback   The name of the callback function.
* @param post       Whether the callback should be invoked before or after processing the message. (optional)
*
* @note The callback arguments have:
*   msg_id          - Message id
*   msg_dest        - Destination type (see MSG_* constants in messages_const.inc)
*   msg_entity      - Entity receiving the message
*
* @note             You can modify the message content using SetMessageData native before the original function is invoked.
*                   Also can reading the message content using GetMessageData native.
*
*                   In the callback function, use the return values from Hookchain return types, such as HC_CONTINUE, HC_SUPERCEDE, etc.
*                   to control the flow of message processing.
*
* @return           Returns a handle to the registered message hook.
*/
native MessageHook:RegisterMessage(const msg_id, const callback[], post = 0);

/**
* Unregisters a game message hook identified by the specified handle.
*
* @param handle     The handle of the message hook to unregister.
*
* @return           Returns true if the message hook is successfully unregistered, otherwise false.
*/
native bool:UnregisterMessage(const MessageHook:handle);

/**
* Enables a game message hook identified by the specified handle.
*
* @param handle     The handle of the message hook to enable.
*
* @return           Returns true if the message hook is successfully enabled, otherwise false.
*/
native bool:EnableHookMessage(const MessageHook:handle);

/**
* Disables a game message hook identified by the specified handle.
*
* @param handle     The handle of the message hook to disable.
*
* @return           Returns true if the message hook is successfully disabled, otherwise false.
*/
native bool:DisableHookMessage(const MessageHook:handle);

/**
* Sets the message data in the current game message.
*
* @param type       The type of the message data that can be changed
* @param ...        Additional args depending on the type of the message argument being retrieved (For more details, look at the enum MsgArgType)
*
* @return           Returns true if the message data is successfully set, otherwise false.
*/
native bool:SetMessageData(const MsgDataType:type, any:...);

/**
* Gets the message data value in the current game message
*
* @param type       The type of message data that can be get
* @param ...        Additional args depending on the type of the message argument being retrieved (For more details, look at the enum MsgArgType)
*
* @return           Returns value of argument in the current message
*/
native any:GetMessageData(const MsgDataType:type, any:...);

/**
* Gets the message data original value in the current game message.
*
* @param type       The type of message data that can be get
* @param ...        Additional args depending on the type of the message argument being retrieved (For more details, look at the enum MsgArgType)
*
* @return           Returns original value of argument in the current message
*/
native any:GetMessageOrigData(const MsgDataType:type, any:...);

/**
* Retrieves the type of the argument at the specified number in the current game message.
*
* @param number     The number of the argument to retrieve the type for.
*
* @return           Returns the type of the argument, look at the enum MsgArgType
*/
native MsgArgType:GetMessageArgType(const number);

/**
* Retrieves the number of argument in the current game message.
*
* @return           Returns the number of argument in the current game message.
*/
native GetMessageArgsNum();

/**
* Sets the block type for the specified message ID.
*
* @param msgid      The ID of the message to set the block type for.
* @param type       The type of block to set for the message, look at the enum MsgBlockType
*
* @return           Returns true if the block type is successfully set, otherwise false.
*/
native bool:SetMessageBlock(const msgid, MsgBlockType:type);

/**
* Retrieves the block type for the specified message ID.
*
* @param msgid      The ID of the message to retrieve the block type for.
*
* @return           Returns the block type of the specified message, look at the enum MsgBlockType
*/
native MsgBlockType:GetMessageBlock(const msgid);

/**
* Checks if the specified type of message data has been modified
*
* This native allows you to check if any part of the message data, such as its
* destination, type, origin, receiver, or any the specific argument of the message, has been modified
*
* @param type       The type of the data to check for modification
* This can be one of the following:
*                   - MsgAny:      Check if any part of the message has been modified
*                   - MsgDest:     Check if the destination has been modified
*                   - MsgIndex:    Check if the message ID has been modified
*                   - MsgOrigin:   Check if the origin has been modified
*                   - MsgTargetId: Check if the index of the recipient client has been modified
*                   - MsgArg:      Check if a specific argument of the message has been modified
*
* @param number     The number of the argument to check for modification (used only when type is MsgDataType:MsgArg)
*                   Default value is -1, which means the argument number is not applicable
*
* @return           Returns true if the specified data type has been modified, false otherwise
*/
native bool:IsMessageDataModified(MsgDataType:type = MsgAny, const number = -1);

/**
* Resets a specific type of message data to its original value
*
* @param type       The type of the data to check for modification
* This can be one of the following:
*                   - MsgAny:      Reset all modified message data to its original values
*                   - MsgDest:     Reset the destination to its original value
*                   - MsgIndex:    Reset the message ID to its original value
*                   - MsgOrigin:   Reset the origin to its original value
*                   - MsgTargetId: Reset the index of the recipient client to its original value
*                   - MsgArg:      Reset a specific argument of the message to its original value
*
* @param number     The number of the argument to reset (used only when type is MsgDataType:MsgArg)
*                   Default value is -1, which means all arguments will be reset.
*
* @return           Returns true if the modified data type was reset, otherwise false.
*/
native bool:ResetModifiedMessageData(MsgDataType:type = MsgAny, const number = -1);