core/smn_entities.cpp
author Scott Ehlert <ds@alliedmods.net>
Thu Mar 22 21:50:20 2007 +0000 (2007-03-22)
changeset 653 ef60870067ff
parent 603 a71f010463c4
child 677 e2ae32d5132c
permissions -rw-r--r--
More consistency of some sort...

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