plugins/include/sdktools_tempents.inc
author David Anderson <dvander@alliedmods.net>
Sun Jul 06 04:49:55 2008 +0000 (2008-07-06)
branchrefac-jit
changeset 2168 c24a6fa957db
child 2289 44045ead61cd
permissions -rw-r--r--
jit refactoring branch
dvander@2168
     1
/**
dvander@2168
     2
 * vim: set ts=4 :
dvander@2168
     3
 * =============================================================================
dvander@2168
     4
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
dvander@2168
     5
 * =============================================================================
dvander@2168
     6
 *
dvander@2168
     7
 * This file is part of the SourceMod/SourcePawn SDK.
dvander@2168
     8
 *
dvander@2168
     9
 * This program is free software; you can redistribute it and/or modify it under
dvander@2168
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@2168
    11
 * Free Software Foundation.
dvander@2168
    12
 * 
dvander@2168
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@2168
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@2168
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@2168
    16
 * details.
dvander@2168
    17
 *
dvander@2168
    18
 * You should have received a copy of the GNU General Public License along with
dvander@2168
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@2168
    20
 *
dvander@2168
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@2168
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@2168
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@2168
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@2168
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@2168
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@2168
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@2168
    28
 * or <http://www.sourcemod.net/license.php>.
dvander@2168
    29
 *
dvander@2168
    30
 * Version: $Id$
dvander@2168
    31
 */
dvander@2168
    32
dvander@2168
    33
#if defined _sdktools_tempents_included
dvander@2168
    34
 #endinput
dvander@2168
    35
#endif
dvander@2168
    36
#define _sdktools_tempents_included
dvander@2168
    37
dvander@2168
    38
/**
dvander@2168
    39
 * Called when a temp entity is going to be sent.
dvander@2168
    40
 *
dvander@2168
    41
 * @param te_name	TE name.
dvander@2168
    42
 * @param Players	Array containing target player indexes.
dvander@2168
    43
 * @param numClients	Number of players in the array.
dvander@2168
    44
 * @param delay		Delay in seconds to send the TE.
dvander@2168
    45
 * @return		Plugin_Continue to allow the transmission of the TE, Plugin_Stop to block it.
dvander@2168
    46
 */
dvander@2168
    47
functag TEHook Action:public(const String:te_name[], const Players[], numClients, Float:delay);
dvander@2168
    48
dvander@2168
    49
/**
dvander@2168
    50
 * Hooks a temp entity.
dvander@2168
    51
 *
dvander@2168
    52
 * @param te_name	TE name to hook.
dvander@2168
    53
 * @param hook		Function to use as a hook.
dvander@2168
    54
 * @noreturn
dvander@2168
    55
 * @error		Temp Entity name not available or invalid function hook.
dvander@2168
    56
 */
dvander@2168
    57
native AddTempEntHook(const String:te_name[], TEHook:hook);
dvander@2168
    58
dvander@2168
    59
/**
dvander@2168
    60
 * Removes a temp entity hook.
dvander@2168
    61
 *
dvander@2168
    62
 * @param te_name	TE name to unhook.
dvander@2168
    63
 * @param hook		Function used for the hook.
dvander@2168
    64
 * @noreturn
dvander@2168
    65
 * @error		Temp Entity name not available or invalid function hook.
dvander@2168
    66
 */
dvander@2168
    67
native RemoveTempEntHook(const String:te_name[], TEHook:hook);
dvander@2168
    68
dvander@2168
    69
/**
dvander@2168
    70
 * Starts a temp entity transmission.
dvander@2168
    71
 *
dvander@2168
    72
 * @param te_name	TE name.
dvander@2168
    73
 * @noreturn
dvander@2168
    74
 * @error		Temp Entity name not available.
dvander@2168
    75
 */
dvander@2168
    76
native TE_Start(const String:te_name[]);
dvander@2168
    77
dvander@2168
    78
/**
dvander@2168
    79
 * Checks if a certain TE property exists.
dvander@2168
    80
 *
dvander@2168
    81
 * @param prop		Property to use.
dvander@2168
    82
 * @return		True if the property exists, otherwise false.
dvander@2168
    83
 */
dvander@2168
    84
native bool:TE_IsValidProp(const String:prop[]);
dvander@2168
    85
dvander@2168
    86
/**
dvander@2168
    87
 * Sets an integer value in the current temp entity.
dvander@2168
    88
 *
dvander@2168
    89
 * @param prop		Property to use.
dvander@2168
    90
 * @param value		Integer value to set.
dvander@2168
    91
 * @noreturn
dvander@2168
    92
 * @error		Property not found.
dvander@2168
    93
 */
dvander@2168
    94
native TE_WriteNum(const String:prop[], value);
dvander@2168
    95
dvander@2168
    96
/**
dvander@2168
    97
 * Reads an integer value in the current temp entity.
dvander@2168
    98
 *
dvander@2168
    99
 * @param prop		Property to use.
dvander@2168
   100
 * @return		Property value.
dvander@2168
   101
 * @error		Property not found.
dvander@2168
   102
 */
dvander@2168
   103
native TE_ReadNum(const String:prop[]);
dvander@2168
   104
dvander@2168
   105
/**
dvander@2168
   106
 * Sets a floating point number in the current temp entity.
dvander@2168
   107
 *
dvander@2168
   108
 * @param prop		Property to use.
dvander@2168
   109
 * @param value		Floating point number to set.
dvander@2168
   110
 * @noreturn
dvander@2168
   111
 * @error		Property not found.
dvander@2168
   112
 */
dvander@2168
   113
native TE_WriteFloat(const String:prop[], Float:value);
dvander@2168
   114
dvander@2168
   115
/**
dvander@2168
   116
 * Reads a floating point number in the current temp entity.
dvander@2168
   117
 *
dvander@2168
   118
 * @param prop		Property to use.
dvander@2168
   119
 * @noreturn		Property value.
dvander@2168
   120
 * @error		Property not found.
dvander@2168
   121
 */
dvander@2168
   122
native Float:TE_ReadFloat(const String:prop[]);
dvander@2168
   123
dvander@2168
   124
/**
dvander@2168
   125
 * Sets a vector in the current temp entity.
dvander@2168
   126
 *
dvander@2168
   127
 * @param prop		Property to use.
dvander@2168
   128
 * @param vector	Vector to set.
dvander@2168
   129
 * @noreturn
dvander@2168
   130
 * @error		Property not found.
dvander@2168
   131
 */
dvander@2168
   132
native TE_WriteVector(const String:prop[], const Float:vector[3]);
dvander@2168
   133
dvander@2168
   134
/**
dvander@2168
   135
 * Reads a vector in the current temp entity.
dvander@2168
   136
 *
dvander@2168
   137
 * @param prop		Property to use.
dvander@2168
   138
 * @param vector	Vector to read.
dvander@2168
   139
 * @noreturn
dvander@2168
   140
 * @error		Property not found.
dvander@2168
   141
 */
dvander@2168
   142
native TE_ReadVector(const String:prop[], Float:vector[3]);
dvander@2168
   143
dvander@2168
   144
/**
dvander@2168
   145
 * Sets a QAngle in the current temp entity.
dvander@2168
   146
 *
dvander@2168
   147
 * @param prop		Property to use.
dvander@2168
   148
 * @param angles	Angles to set.
dvander@2168
   149
 * @return		True on success, otherwise false.
dvander@2168
   150
 * @error		Property not found.
dvander@2168
   151
 */
dvander@2168
   152
native TE_WriteAngles(const String:prop[], const Float:angles[3]);
dvander@2168
   153
dvander@2168
   154
/**
dvander@2168
   155
 * Sets an array of floats in the current temp entity.
dvander@2168
   156
 *
dvander@2168
   157
 * @param prop		Property to use.
dvander@2168
   158
 * @param array		Array of values to copy.
dvander@2168
   159
 * @param arraySize	Number of values to copy.
dvander@2168
   160
 * @return		True on success, otherwise false.
dvander@2168
   161
 * @error		Property not found.
dvander@2168
   162
 */
dvander@2168
   163
native TE_WriteFloatArray(const String:prop[], const Float:array[], arraySize);
dvander@2168
   164
dvander@2168
   165
/**
dvander@2168
   166
 * Sends the current temp entity to one or more clients.
dvander@2168
   167
 *
dvander@2168
   168
 * @param clients	Array containing player indexes to broadcast to.
dvander@2168
   169
 * @param numClients	Number of players in the array.
dvander@2168
   170
 * @param delay		Delay in seconds to send the TE.
dvander@2168
   171
 * @noreturn
dvander@2168
   172
 * @error		Invalid client index or client not in game.
dvander@2168
   173
 */
dvander@2168
   174
native TE_Send(clients[], numClients, Float:delay=0.0);
dvander@2168
   175
dvander@2168
   176
/**
dvander@2168
   177
 * Sets an encoded entity index in the current temp entity.
dvander@2168
   178
 * (This is usually used for m_nStartEntity and m_nEndEntity).
dvander@2168
   179
 *
dvander@2168
   180
 * @param prop		Property to use.
dvander@2168
   181
 * @param value		Value to set.
dvander@2168
   182
 * @noreturn
dvander@2168
   183
 * @error		Property not found.
dvander@2168
   184
 */
dvander@2168
   185
stock TE_WriteEncodedEnt(const String:prop[], value)
dvander@2168
   186
{
dvander@2168
   187
	new encvalue = (value & 0x0FFF) | ((1 & 0xF)<<12);
dvander@2168
   188
	return TE_WriteNum(prop, encvalue);
dvander@2168
   189
}
dvander@2168
   190
dvander@2168
   191
/**
dvander@2168
   192
 * Broadcasts the current temp entity to all clients.
dvander@2168
   193
 * @note See TE_Start().
dvander@2168
   194
 *
dvander@2168
   195
 * @param delay		Delay in seconds to send the TE.
dvander@2168
   196
 * @noreturn
dvander@2168
   197
 */
dvander@2168
   198
stock TE_SendToAll(Float:delay=0.0)
dvander@2168
   199
{
dvander@2168
   200
	new maxClients = GetMaxClients();
dvander@2168
   201
	new total = 0;
dvander@2168
   202
	new clients[maxClients];
dvander@2168
   203
	for (new i=1; i<=maxClients; i++)
dvander@2168
   204
	{
dvander@2168
   205
		if (IsClientInGame(i))
dvander@2168
   206
		{
dvander@2168
   207
			clients[total++] = i;
dvander@2168
   208
		}
dvander@2168
   209
	}
dvander@2168
   210
	return TE_Send(clients, total, delay);
dvander@2168
   211
}
dvander@2168
   212
dvander@2168
   213
/**
dvander@2168
   214
 * Sends the current TE to only a client.
dvander@2168
   215
 * @note See TE_Start().
dvander@2168
   216
 *
dvander@2168
   217
 * @param client	Client to send to.
dvander@2168
   218
 * @param delay		Delay in seconds to send the TE.
dvander@2168
   219
 * @noreturn
dvander@2168
   220
 * @error		Invalid client index or client not in game.
dvander@2168
   221
 */
dvander@2168
   222
stock TE_SendToClient(client, Float:delay=0.0)
dvander@2168
   223
{
dvander@2168
   224
	new players[1];
dvander@2168
   225
dvander@2168
   226
	players[0] = client;
dvander@2168
   227
dvander@2168
   228
	return TE_Send(players, 1, delay);
dvander@2168
   229
}