core/smn_entities.cpp
author Borja Ferrer <faluco@alliedmods.net>
Sat Mar 10 13:36:38 2007 +0000 (2007-03-10)
changeset 588 d8ee541ca75e
parent 561 49f639ad7d5e
child 591 86e97f3eda1f
permissions -rw-r--r--
NULL'ed this or something
dvander@555
     1
/**
dvander@555
     2
 * ===============================================================
dvander@555
     3
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@555
     4
 * ===============================================================
dvander@555
     5
 *
dvander@555
     6
 * This file is not open source and may not be copied without explicit
dvander@555
     7
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@555
     8
 * in whole or significant part.
dvander@555
     9
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@555
    10
 *
dvander@555
    11
 * Version: $Id$
dvander@555
    12
 */
dvander@555
    13
dvander@555
    14
#include "sm_globals.h"
dvander@555
    15
#include "sourcemod.h"
dvander@555
    16
#include "sourcemm_api.h"
dvander@556
    17
#include "server_class.h"
dvander@556
    18
#include "CPlayerManager.h"
dvander@561
    19
#include "CHalfLife2.h"
dvander@555
    20
dvander@555
    21
inline edict_t *GetEdict(cell_t num)
dvander@555
    22
{
dvander@555
    23
	edict_t *pEdict = engine->PEntityOfEntIndex(num);
dvander@555
    24
	if (!pEdict || pEdict->IsFree())
dvander@555
    25
	{
dvander@555
    26
		return NULL;
dvander@555
    27
	}
dvander@556
    28
	if (num > 0 && num < g_Players.GetMaxClients())
dvander@556
    29
	{
dvander@556
    30
		CPlayer *pPlayer = g_Players.GetPlayerByIndex(num);
dvander@556
    31
		if (!pPlayer || !pPlayer->IsConnected())
dvander@556
    32
		{
dvander@556
    33
			return NULL;
dvander@556
    34
		}
dvander@556
    35
	}
dvander@555
    36
	return pEdict;
dvander@555
    37
}
dvander@555
    38
dvander@557
    39
inline edict_t *GetEntity(cell_t num, CBaseEntity **pData)
dvander@557
    40
{
dvander@557
    41
	edict_t *pEdict = engine->PEntityOfEntIndex(num);
dvander@557
    42
	if (!pEdict || pEdict->IsFree())
dvander@557
    43
	{
dvander@557
    44
		return NULL;
dvander@557
    45
	}
dvander@557
    46
	if (num > 0 && num < g_Players.GetMaxClients())
dvander@557
    47
	{
dvander@557
    48
		CPlayer *pPlayer = g_Players.GetPlayerByIndex(num);
dvander@557
    49
		if (!pPlayer || !pPlayer->IsConnected())
dvander@557
    50
		{
dvander@557
    51
			return NULL;
dvander@557
    52
		}
dvander@557
    53
	}
dvander@557
    54
	IServerUnknown *pUnk;
dvander@557
    55
	if ((pUnk=pEdict->GetUnknown()) == NULL)
dvander@557
    56
	{
dvander@557
    57
		return NULL;
dvander@557
    58
	}
dvander@557
    59
	*pData = pUnk->GetBaseEntity();
dvander@557
    60
	return pEdict;
dvander@557
    61
}
dvander@557
    62
dvander@555
    63
static cell_t GetMaxEntities(IPluginContext *pContext, const cell_t *params)
dvander@555
    64
{
dvander@555
    65
	return gpGlobals->maxEntities;
dvander@555
    66
}
dvander@555
    67
dvander@555
    68
static cell_t CreateEdict(IPluginContext *pContext, const cell_t *params)
dvander@555
    69
{
dvander@555
    70
	edict_t *pEdict = engine->CreateEdict();
dvander@555
    71
dvander@555
    72
	if (!pEdict)
dvander@555
    73
	{
dvander@555
    74
		return 0;
dvander@555
    75
	}
dvander@555
    76
dvander@555
    77
	return engine->IndexOfEdict(pEdict);
dvander@555
    78
}
dvander@555
    79
dvander@555
    80
static cell_t RemoveEdict(IPluginContext *pContext, const cell_t *params)
dvander@555
    81
{
dvander@555
    82
	edict_t *pEdict = engine->PEntityOfEntIndex(params[1]);
dvander@555
    83
dvander@555
    84
	if (!pEdict)
dvander@555
    85
	{
dvander@555
    86
		return pContext->ThrowNativeError("Edict %d is not a valid edict", params[1]);
dvander@555
    87
	}
dvander@555
    88
dvander@555
    89
	engine->RemoveEdict(pEdict);
dvander@555
    90
dvander@555
    91
	return 1;
dvander@555
    92
}
dvander@555
    93
dvander@555
    94
static cell_t IsValidEdict(IPluginContext *pContext, const cell_t *params)
dvander@555
    95
{
dvander@556
    96
	edict_t *pEdict = GetEdict(params[1]);
dvander@555
    97
dvander@555
    98
	if (!pEdict)
dvander@555
    99
	{
dvander@555
   100
		return 0;
dvander@555
   101
	}
dvander@555
   102
dvander@555
   103
	/* Shouldn't be necessary... not sure though */
dvander@555
   104
	return pEdict->IsFree() ? 0 : 1;
dvander@555
   105
}
dvander@555
   106
dvander@555
   107
static cell_t IsValidEntity(IPluginContext *pContext, const cell_t *params)
dvander@555
   108
{
dvander@556
   109
	edict_t *pEdict = GetEdict(params[1]);
dvander@555
   110
dvander@556
   111
	if (!pEdict)
dvander@555
   112
	{
dvander@555
   113
		return 0;
dvander@555
   114
	}
dvander@555
   115
dvander@555
   116
	IServerUnknown *pUnknown = pEdict->GetUnknown();
dvander@555
   117
	if (!pUnknown)
dvander@555
   118
	{
dvander@555
   119
		return 0;
dvander@555
   120
	}
dvander@555
   121
dvander@555
   122
	CBaseEntity *pEntity = pUnknown->GetBaseEntity();
dvander@555
   123
	return (pEntity != NULL) ? 1 : 0;
dvander@555
   124
}
dvander@555
   125
dvander@555
   126
static cell_t IsEntNetworkable(IPluginContext *pContext, const cell_t *params)
dvander@555
   127
{
dvander@556
   128
	edict_t *pEdict = GetEdict(params[1]);
dvander@555
   129
dvander@556
   130
	if (!pEdict)
dvander@555
   131
	{
dvander@555
   132
		return 0;
dvander@555
   133
	}
dvander@555
   134
dvander@555
   135
	return (pEdict->GetNetworkable() != NULL) ? 1 : 0;
dvander@555
   136
}
dvander@555
   137
dvander@555
   138
static cell_t GetEntityCount(IPluginContext *pContext, const cell_t *params)
dvander@555
   139
{
dvander@555
   140
	return engine->GetEntityCount();
dvander@555
   141
}
dvander@555
   142
dvander@555
   143
static cell_t GetEdictFlags(IPluginContext *pContext, const cell_t *params)
dvander@555
   144
{
dvander@555
   145
	edict_t *pEdict = GetEdict(params[1]);
dvander@555
   146
dvander@555
   147
	if (!pEdict)
dvander@555
   148
	{
dvander@555
   149
		return pContext->ThrowNativeError("Invalid edict (%d)", params[1]);
dvander@555
   150
	}
dvander@555
   151
dvander@555
   152
	return pEdict->m_fStateFlags;
dvander@555
   153
}
dvander@555
   154
dvander@555
   155
static cell_t SetEdictFlags(IPluginContext *pContext, const cell_t *params)
dvander@555
   156
{
dvander@555
   157
	edict_t *pEdict = GetEdict(params[1]);
dvander@555
   158
dvander@555
   159
	if (!pEdict)
dvander@555
   160
	{
dvander@555
   161
		return pContext->ThrowNativeError("Invalid edict (%d)", params[1]);
dvander@555
   162
	}
dvander@555
   163
dvander@555
   164
	pEdict->m_fStateFlags = params[2];
dvander@555
   165
dvander@555
   166
	return 1;
dvander@555
   167
}
dvander@555
   168
dvander@556
   169
static cell_t GetEdictClassname(IPluginContext *pContext, const cell_t *params)
dvander@556
   170
{
dvander@556
   171
	edict_t *pEdict = GetEdict(params[1]);
dvander@556
   172
dvander@556
   173
	if (!pEdict)
dvander@556
   174
	{
dvander@556
   175
		return pContext->ThrowNativeError("Invalid edict (%d)", params[1]);
dvander@556
   176
	}
dvander@556
   177
dvander@556
   178
	const char *cls = pEdict->GetClassName();
dvander@556
   179
dvander@556
   180
	if (!cls || cls[0] == '\0')
dvander@556
   181
	{
dvander@556
   182
		return 0;
dvander@556
   183
	}
dvander@556
   184
dvander@556
   185
	pContext->StringToLocal(params[2], params[3], cls);
dvander@556
   186
dvander@556
   187
	return 1;
dvander@556
   188
}
dvander@556
   189
dvander@556
   190
static cell_t GetEntityNetClass(IPluginContext *pContext, const cell_t *params)
dvander@556
   191
{
dvander@556
   192
	edict_t *pEdict = GetEdict(params[1]);
dvander@556
   193
dvander@556
   194
	if (!pEdict)
dvander@556
   195
	{
dvander@556
   196
		return pContext->ThrowNativeError("Invalid edict (%d)", params[1]);
dvander@556
   197
	}
dvander@556
   198
dvander@556
   199
	IServerNetworkable *pNet = pEdict->GetNetworkable();
dvander@556
   200
	if (!pNet)
dvander@556
   201
	{
dvander@556
   202
		return 0;
dvander@556
   203
	}
dvander@556
   204
dvander@556
   205
	ServerClass *pClass = pNet->GetServerClass();
dvander@556
   206
dvander@556
   207
	pContext->StringToLocal(params[2], params[3], pClass->GetName());
dvander@556
   208
dvander@556
   209
	return 1;
dvander@556
   210
}
dvander@556
   211
dvander@557
   212
static cell_t GetEntData(IPluginContext *pContext, const cell_t *params)
dvander@557
   213
{
dvander@557
   214
	CBaseEntity *pEntity;
dvander@557
   215
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   216
dvander@557
   217
	if (!pEdict || !pEntity)
dvander@557
   218
	{
dvander@557
   219
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   220
	}
dvander@557
   221
dvander@557
   222
	int offset = params[2];
dvander@557
   223
	if (offset < 0 || offset > 32768)
dvander@557
   224
	{
dvander@557
   225
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   226
	}
dvander@557
   227
dvander@557
   228
	switch (params[3])
dvander@557
   229
	{
dvander@557
   230
	case 4:
dvander@557
   231
		return *(int *)((uint8_t *)pEntity + offset);
dvander@557
   232
	case 2:
dvander@557
   233
		return *(short *)((uint8_t *)pEntity + offset);
dvander@557
   234
	case 1:
dvander@557
   235
		return *((uint8_t *)pEntity + offset);
dvander@557
   236
	default:
dvander@557
   237
		return pContext->ThrowNativeError("Integer size %d is invalid", params[3]);
dvander@557
   238
	}
dvander@557
   239
}
dvander@557
   240
dvander@557
   241
static cell_t SetEntData(IPluginContext *pContext, const cell_t *params)
dvander@557
   242
{
dvander@557
   243
	CBaseEntity *pEntity;
dvander@557
   244
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   245
dvander@557
   246
	if (!pEdict || !pEntity)
dvander@557
   247
	{
dvander@557
   248
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   249
	}
dvander@557
   250
dvander@557
   251
	int offset = params[2];
dvander@557
   252
	if (offset < 0 || offset > 32768)
dvander@557
   253
	{
dvander@557
   254
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   255
	}
dvander@557
   256
dvander@561
   257
	if (params[5])
dvander@561
   258
	{
dvander@561
   259
		pEdict->StateChanged(offset);
dvander@561
   260
	}
dvander@561
   261
dvander@557
   262
	switch (params[4])
dvander@557
   263
	{
dvander@557
   264
	case 4:
dvander@557
   265
		{
dvander@557
   266
			*(int *)((uint8_t *)pEntity + offset) = params[3];
dvander@557
   267
			break;
dvander@557
   268
		}
dvander@557
   269
	case 2:
dvander@557
   270
		{
dvander@557
   271
			*(short *)((uint8_t *)pEntity + offset) = params[3];
dvander@557
   272
			break;
dvander@557
   273
		}
dvander@557
   274
	case 1:
dvander@557
   275
		{
dvander@557
   276
			*((uint8_t *)pEntity + offset) = params[3];
dvander@557
   277
			break;
dvander@557
   278
		}
dvander@557
   279
	default:
dvander@557
   280
		return pContext->ThrowNativeError("Integer size %d is invalid", params[4]);
dvander@557
   281
	}
dvander@557
   282
dvander@557
   283
	return 1;
dvander@557
   284
}
dvander@557
   285
dvander@557
   286
static cell_t GetEntDataFloat(IPluginContext *pContext, const cell_t *params)
dvander@557
   287
{
dvander@557
   288
	CBaseEntity *pEntity;
dvander@557
   289
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   290
dvander@557
   291
	if (!pEdict || !pEntity)
dvander@557
   292
	{
dvander@557
   293
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   294
	}
dvander@557
   295
dvander@557
   296
	int offset = params[2];
dvander@557
   297
	if (offset < 0 || offset > 32768)
dvander@557
   298
	{
dvander@557
   299
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   300
	}
dvander@557
   301
dvander@557
   302
	float f = *(float *)((uint8_t *)pEntity + offset);
dvander@557
   303
dvander@557
   304
	return sp_ftoc(f);
dvander@557
   305
}
dvander@557
   306
dvander@557
   307
static cell_t SetEntDataFloat(IPluginContext *pContext, const cell_t *params)
dvander@557
   308
{
dvander@557
   309
	CBaseEntity *pEntity;
dvander@557
   310
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   311
dvander@557
   312
	if (!pEdict || !pEntity)
dvander@557
   313
	{
dvander@557
   314
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   315
	}
dvander@557
   316
dvander@557
   317
	int offset = params[2];
dvander@557
   318
	if (offset < 0 || offset > 32768)
dvander@557
   319
	{
dvander@557
   320
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   321
	}
dvander@557
   322
dvander@557
   323
	*(float *)((uint8_t *)pEntity + offset) = sp_ctof(params[3]);
dvander@557
   324
dvander@561
   325
	if (params[4])
dvander@561
   326
	{
dvander@561
   327
		pEdict->StateChanged(offset);
dvander@561
   328
	}
dvander@561
   329
dvander@557
   330
	return 1;
dvander@557
   331
}
dvander@557
   332
dvander@557
   333
static cell_t GetEntDataVector(IPluginContext *pContext, const cell_t *params)
dvander@557
   334
{
dvander@557
   335
	CBaseEntity *pEntity;
dvander@557
   336
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   337
dvander@557
   338
	if (!pEdict || !pEntity)
dvander@557
   339
	{
dvander@557
   340
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   341
	}
dvander@557
   342
dvander@557
   343
	int offset = params[2];
dvander@557
   344
	if (offset < 0 || offset > 32768)
dvander@557
   345
	{
dvander@557
   346
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   347
	}
dvander@557
   348
dvander@557
   349
	Vector *v = (Vector *)((uint8_t *)pEntity + offset);
dvander@557
   350
dvander@557
   351
	cell_t *vec;
dvander@557
   352
	pContext->LocalToPhysAddr(params[3], &vec);
dvander@557
   353
dvander@557
   354
	vec[0] = v->x;
dvander@557
   355
	vec[1] = v->y;
dvander@557
   356
	vec[2] = v->z;
dvander@557
   357
dvander@557
   358
	return 1;
dvander@557
   359
}
dvander@557
   360
dvander@557
   361
static cell_t SetEntDataVector(IPluginContext *pContext, const cell_t *params)
dvander@557
   362
{
dvander@557
   363
	CBaseEntity *pEntity;
dvander@557
   364
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   365
dvander@557
   366
	if (!pEdict || !pEntity)
dvander@557
   367
	{
dvander@557
   368
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   369
	}
dvander@557
   370
dvander@557
   371
	int offset = params[2];
dvander@557
   372
	if (offset < 0 || offset > 32768)
dvander@557
   373
	{
dvander@557
   374
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   375
	}
dvander@557
   376
dvander@557
   377
	Vector *v = (Vector *)((uint8_t *)pEntity + offset);
dvander@557
   378
dvander@557
   379
	cell_t *vec;
dvander@557
   380
	pContext->LocalToPhysAddr(params[3], &vec);
dvander@557
   381
dvander@557
   382
	v->x = vec[0];
dvander@557
   383
	v->y = vec[1];
dvander@557
   384
	v->z = vec[2];
dvander@557
   385
dvander@561
   386
	if (params[4])
dvander@561
   387
	{
dvander@561
   388
		pEdict->StateChanged(offset);
dvander@561
   389
	}
dvander@561
   390
dvander@557
   391
	return 1;
dvander@557
   392
}
dvander@557
   393
dvander@557
   394
static cell_t GetEntDataEnt(IPluginContext *pContext, const cell_t *params)
dvander@557
   395
{
dvander@557
   396
	CBaseEntity *pEntity;
dvander@557
   397
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   398
dvander@557
   399
	if (!pEdict || !pEntity)
dvander@557
   400
	{
dvander@557
   401
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   402
	}
dvander@557
   403
dvander@557
   404
	int offset = params[2];
dvander@557
   405
	if (offset < 0 || offset > 32768)
dvander@557
   406
	{
dvander@557
   407
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   408
	}
dvander@557
   409
dvander@557
   410
	CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset);
dvander@557
   411
dvander@557
   412
	if (!hndl.IsValid())
dvander@557
   413
	{
dvander@557
   414
		return 0;
dvander@557
   415
	}
dvander@557
   416
dvander@557
   417
	/* :TODO: check serial no.? */
dvander@557
   418
dvander@557
   419
	return hndl.GetEntryIndex();
dvander@557
   420
}
dvander@557
   421
dvander@557
   422
static cell_t SetEntDataEnt(IPluginContext *pContext, const cell_t *params)
dvander@557
   423
{
dvander@557
   424
	CBaseEntity *pEntity;
dvander@557
   425
	edict_t *pEdict = GetEntity(params[1], &pEntity);
dvander@557
   426
dvander@557
   427
	if (!pEdict || !pEntity)
dvander@557
   428
	{
dvander@557
   429
		return pContext->ThrowNativeError("Entity %d is invalid", params[1]);
dvander@557
   430
	}
dvander@557
   431
dvander@557
   432
	int offset = params[2];
dvander@557
   433
	if (offset < 0 || offset > 32768)
dvander@557
   434
	{
dvander@557
   435
		return pContext->ThrowNativeError("Offset %d is invalid", offset);
dvander@557
   436
	}
dvander@557
   437
dvander@557
   438
	CBaseHandle &hndl = *(CBaseHandle *)((uint8_t *)pEntity + offset);
dvander@557
   439
dvander@557
   440
	if (params[3] == 0)
dvander@557
   441
	{
dvander@557
   442
		hndl.Set(NULL);
dvander@557
   443
	} else {
dvander@557
   444
		edict_t *pEdict = GetEdict(params[3]);
dvander@557
   445
		if (!pEdict)
dvander@557
   446
		{
dvander@557
   447
			return pContext->ThrowNativeError("Entity %d is invalid", params[3]);
dvander@557
   448
		}
dvander@557
   449
		IServerEntity *pEntOther = pEdict->GetIServerEntity();
dvander@557
   450
		hndl.Set(pEntOther);
dvander@557
   451
	}
dvander@557
   452
dvander@561
   453
	if (params[4])
dvander@561
   454
	{
dvander@561
   455
		pEdict->StateChanged(offset);
dvander@561
   456
	}
dvander@561
   457
dvander@557
   458
	return 1;
dvander@557
   459
}
dvander@557
   460
dvander@558
   461
IChangeInfoAccessor *CBaseEdict::GetChangeAccessor()
dvander@558
   462
{
dvander@558
   463
	return engine->GetChangeAccessor( (const edict_t *)this );
dvander@558
   464
}
dvander@558
   465
dvander@558
   466
CSharedEdictChangeInfo *g_pSharedChangeInfo = NULL;
dvander@558
   467
dvander@558
   468
static cell_t ChangeEdictState(IPluginContext *pContext, const cell_t *params)
dvander@558
   469
{
dvander@558
   470
	edict_t *pEdict = GetEdict(params[1]);
dvander@558
   471
dvander@558
   472
	if (!pEdict)
dvander@558
   473
	{
dvander@558
   474
		return pContext->ThrowNativeError("Edict %d is invalid", params[1]);
dvander@558
   475
	}
dvander@558
   476
dvander@558
   477
	if (!g_pSharedChangeInfo)
dvander@558
   478
	{
dvander@558
   479
		g_pSharedChangeInfo = engine->GetSharedEdictChangeInfo();
dvander@558
   480
	}
dvander@558
   481
dvander@558
   482
	if (params[2])
dvander@558
   483
	{
dvander@558
   484
		pEdict->StateChanged(params[2]);
dvander@558
   485
	} else {
dvander@558
   486
		pEdict->StateChanged();
dvander@558
   487
	}
dvander@558
   488
dvander@558
   489
	return 1;
dvander@558
   490
}
dvander@558
   491
dvander@561
   492
static cell_t FindSendPropOffs(IPluginContext *pContext, const cell_t *params)
dvander@561
   493
{
dvander@561
   494
	char *cls, *prop;
dvander@561
   495
	pContext->LocalToString(params[1], &cls);
dvander@561
   496
	pContext->LocalToString(params[2], &prop);
dvander@561
   497
dvander@561
   498
	SendProp *pSend = g_HL2.FindInSendTable(cls, prop);
dvander@561
   499
dvander@561
   500
	if (!pSend)
dvander@561
   501
	{
dvander@561
   502
		return -1;
dvander@561
   503
	}
dvander@561
   504
dvander@561
   505
	return pSend->GetOffset();
dvander@561
   506
}
dvander@561
   507
dvander@555
   508
REGISTER_NATIVES(entityNatives)
dvander@555
   509
{
dvander@558
   510
	{"ChangeEdictState",		ChangeEdictState},
dvander@555
   511
	{"CreateEdict",				CreateEdict},
dvander@561
   512
	{"FindSendPropOffs",		FindSendPropOffs},
dvander@556
   513
	{"GetEdictClassname",		GetEdictClassname},
dvander@555
   514
	{"GetEdictFlags",			GetEdictFlags},
dvander@557
   515
	{"GetEntData",				GetEntData},
dvander@557
   516
	{"GetEntDataEnt",			GetEntDataEnt},
dvander@557
   517
	{"GetEntDataFloat",			GetEntDataFloat},
dvander@557
   518
	{"GetEntDataVector",		GetEntDataVector},
dvander@556
   519
	{"GetEntityNetClass",		GetEntityNetClass},
dvander@555
   520
	{"GetMaxEntities",			GetMaxEntities},
dvander@555
   521
	{"IsEntNetworkable",		IsEntNetworkable},
dvander@555
   522
	{"IsValidEdict",			IsValidEdict},
dvander@555
   523
	{"IsValidEntity",			IsValidEntity},
dvander@555
   524
	{"RemoveEdict",				RemoveEdict},
dvander@555
   525
	{"SetEdictFlags",			SetEdictFlags},
dvander@557
   526
	{"SetEntData",				SetEntData},
dvander@557
   527
	{"SetEntDataEnt",			SetEntDataEnt},
dvander@557
   528
	{"SetEntDataFloat",			SetEntDataFloat},
dvander@557
   529
	{"SetEntDataVector",		SetEntDataVector},
faluco@588
   530
	{NULL,						NULL}
dvander@555
   531
};