extensions/cstrike/util_cstrike.cpp
author Ruben Gonzalez <drifter01620@gmail.com>
Sat Feb 08 20:04:12 2014 -0500 (2014-02-08)
changeset 4237 5e3965aa4498
parent 4028 4b3d32330007
permissions -rw-r--r--
Update CStrike extension and gamedata on windows for latest CS:GO update (irc, r= psychonic)
rgr_02@3519
     1
/**
rgr_02@3519
     2
 * vim: set ts=4 :
rgr_02@3519
     3
 * =============================================================================
rgr_02@3519
     4
 * SourceMod Counter-Strike:Source Extension
rgr_02@3519
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
rgr_02@3519
     6
 * =============================================================================
rgr_02@3519
     7
 *
rgr_02@3519
     8
 * This program is free software; you can redistribute it and/or modify it under
rgr_02@3519
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
rgr_02@3519
    10
 * Free Software Foundation.
rgr_02@3519
    11
 * 
rgr_02@3519
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
rgr_02@3519
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
rgr_02@3519
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
rgr_02@3519
    15
 * details.
rgr_02@3519
    16
 *
rgr_02@3519
    17
 * You should have received a copy of the GNU General Public License along with
rgr_02@3519
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
rgr_02@3519
    19
 *
rgr_02@3519
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
rgr_02@3519
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
rgr_02@3519
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
rgr_02@3519
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
rgr_02@3519
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
rgr_02@3519
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
rgr_02@3519
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
rgr_02@3519
    27
 * or <http://www.sourcemod.net/license.php>.
rgr_02@3519
    28
 *
rgr_02@3519
    29
 * Version: $Id$
rgr_02@3519
    30
 */
rgr_02@3519
    31
rgr_02@3519
    32
#include "util_cstrike.h"
rgr_02@3519
    33
rgr_02@3519
    34
#include "extension.h"
rgr_02@3519
    35
#include "RegNatives.h"
rgr_02@3519
    36
rgr_02@3519
    37
#define REGISTER_ADDR(name, defaultret, code) \
rgr_02@3519
    38
	void *addr; \
rgr_02@3519
    39
	if (!g_pGameConf->GetMemSig(name, &addr) || !addr) \
rgr_02@3519
    40
	{ \
rgr_02@3519
    41
		g_pSM->LogError(myself, "Failed to locate function."); \
rgr_02@3519
    42
		return defaultret; \
rgr_02@3519
    43
	} \
rgr_02@3519
    44
	code; \
rgr_02@3519
    45
	g_RegNatives.Register(pWrapper);
rgr_02@3519
    46
drifter01620@4237
    47
#define GET_MEMSIG(name, defaultret) \
drifter01620@4237
    48
	if (!g_pGameConf->GetMemSig(name, &addr) || !addr) \
drifter01620@4237
    49
	{ \
drifter01620@4237
    50
		g_pSM->LogError(myself, "Failed to locate function."); \
drifter01620@4237
    51
		return defaultret;\
drifter01620@4237
    52
	}
drifter01620@4237
    53
rgr_02@3519
    54
void *GetWeaponInfo(int weaponID)
rgr_02@3519
    55
{
drifter01620@4237
    56
	void *info;
drifter01620@4237
    57
#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
rgr_02@3519
    58
	static ICallWrapper *pWrapper = NULL;
rgr_02@3519
    59
	if (!pWrapper)
rgr_02@3519
    60
	{
rgr_02@3519
    61
		REGISTER_ADDR("GetWeaponInfo", NULL,
rgr_02@3519
    62
			PassInfo pass[1]; \
rgr_02@3519
    63
			PassInfo retpass; \
rgr_02@3519
    64
			pass[0].flags = PASSFLAG_BYVAL; \
rgr_02@3519
    65
			pass[0].type = PassType_Basic; \
rgr_02@3519
    66
			pass[0].size = sizeof(int); \
rgr_02@3519
    67
			retpass.flags = PASSFLAG_BYVAL; \
rgr_02@3519
    68
			retpass.type = PassType_Basic; \
rgr_02@3519
    69
			retpass.size = sizeof(void *); \
rgr_02@3519
    70
			pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
rgr_02@3519
    71
	}
rgr_02@3519
    72
rgr_02@3519
    73
	unsigned char vstk[sizeof(int)];
rgr_02@3519
    74
	unsigned char *vptr = vstk;
rgr_02@3519
    75
rgr_02@3519
    76
	*(int *)vptr = weaponID;
rgr_02@3519
    77
rgr_02@3519
    78
	pWrapper->Execute(vstk, &info);
rgr_02@3519
    79
drifter01620@4237
    80
	
drifter01620@4237
    81
#else
drifter01620@4237
    82
	static void *addr = NULL;
drifter01620@4237
    83
drifter01620@4237
    84
	if(!addr)
drifter01620@4237
    85
	{
drifter01620@4237
    86
		GET_MEMSIG("GetWeaponInfo", 0);
drifter01620@4237
    87
	}
drifter01620@4237
    88
drifter01620@4237
    89
	__asm
drifter01620@4237
    90
	{
drifter01620@4237
    91
		mov ecx, weaponID
drifter01620@4237
    92
		call addr
drifter01620@4237
    93
		mov info, eax
drifter01620@4237
    94
	}
drifter01620@4237
    95
#endif
rgr_02@3519
    96
	return info;
rgr_02@3519
    97
}
rgr_02@3519
    98
rgr_02@3519
    99
const char *GetTranslatedWeaponAlias(const char *weapon)
rgr_02@3519
   100
{
drifter01620@4237
   101
	const char *alias = NULL;
drifter01620@4237
   102
drifter01620@4237
   103
#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
rgr_02@3519
   104
	static ICallWrapper *pWrapper = NULL;
rgr_02@3519
   105
rgr_02@3519
   106
	if (!pWrapper)
rgr_02@3519
   107
	{
rgr_02@3519
   108
		REGISTER_ADDR("GetTranslatedWeaponAlias", weapon,
rgr_02@3519
   109
			PassInfo pass[1]; \
rgr_02@3519
   110
			PassInfo retpass; \
rgr_02@3519
   111
			pass[0].flags = PASSFLAG_BYVAL; \
rgr_02@3519
   112
			pass[0].type = PassType_Basic; \
rgr_02@3519
   113
			pass[0].size = sizeof(const char *); \
rgr_02@3519
   114
			retpass.flags = PASSFLAG_BYVAL; \
rgr_02@3519
   115
			retpass.type = PassType_Basic; \
rgr_02@3519
   116
			retpass.size = sizeof(const char *); \
rgr_02@3519
   117
			pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
rgr_02@3519
   118
	}
rgr_02@3519
   119
rgr_02@3519
   120
	unsigned char vstk[sizeof(const char *)];
rgr_02@3519
   121
	unsigned char *vptr = vstk;
rgr_02@3519
   122
rgr_02@3519
   123
	*(const char **)vptr = weapon;
rgr_02@3519
   124
drifter01620@4237
   125
	pWrapper->Execute(vstk, &alias);
drifter01620@4237
   126
#else
drifter01620@4237
   127
	static void *addr = NULL;
drifter01620@4237
   128
drifter01620@4237
   129
	if(!addr)
drifter01620@4237
   130
	{
drifter01620@4237
   131
		GET_MEMSIG("GetTranslatedWeaponAlias", weapon);
drifter01620@4237
   132
	}
rgr_02@3519
   133
drifter01620@4237
   134
	__asm
drifter01620@4237
   135
	{
drifter01620@4237
   136
		mov ecx, weapon
drifter01620@4237
   137
		call addr
drifter01620@4237
   138
		mov alias, eax
drifter01620@4237
   139
	}
drifter01620@4237
   140
#endif
drifter01620@4237
   141
	return alias;
rgr_02@3519
   142
}
rgr_02@3519
   143
rgr_02@3519
   144
int AliasToWeaponID(const char *weapon)
rgr_02@3519
   145
{
drifter01620@4237
   146
	int weaponID = 0;
drifter01620@4237
   147
#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
rgr_02@3519
   148
	static ICallWrapper *pWrapper = NULL;
rgr_02@3519
   149
rgr_02@3519
   150
	if (!pWrapper)
rgr_02@3519
   151
	{
rgr_02@3519
   152
		REGISTER_ADDR("AliasToWeaponID", 0,
rgr_02@3519
   153
			PassInfo pass[1]; \
rgr_02@3519
   154
			PassInfo retpass; \
rgr_02@3519
   155
			pass[0].flags = PASSFLAG_BYVAL; \
rgr_02@3519
   156
			pass[0].type = PassType_Basic; \
rgr_02@3519
   157
			pass[0].size = sizeof(const char *); \
rgr_02@3519
   158
			retpass.flags = PASSFLAG_BYVAL; \
rgr_02@3519
   159
			retpass.type = PassType_Basic; \
rgr_02@3519
   160
			retpass.size = sizeof(int); \
rgr_02@3519
   161
			pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
rgr_02@3519
   162
	}
rgr_02@3519
   163
rgr_02@3519
   164
	unsigned char vstk[sizeof(const char *)];
rgr_02@3519
   165
	unsigned char *vptr = vstk;
rgr_02@3519
   166
rgr_02@3519
   167
	*(const char **)vptr = weapon;
rgr_02@3519
   168
rgr_02@3519
   169
	pWrapper->Execute(vstk, &weaponID);
drifter01620@4237
   170
#else
drifter01620@4237
   171
	static void *addr = NULL;
rgr_02@3519
   172
drifter01620@4237
   173
	if(!addr)
drifter01620@4237
   174
	{
drifter01620@4237
   175
		GET_MEMSIG("AliasToWeaponID", 0);
drifter01620@4237
   176
	}
drifter01620@4237
   177
drifter01620@4237
   178
	__asm
drifter01620@4237
   179
	{
drifter01620@4237
   180
		mov ecx, weapon
drifter01620@4237
   181
		call addr
drifter01620@4237
   182
		mov weaponID, eax
drifter01620@4237
   183
	}
drifter01620@4237
   184
#endif
rgr_02@3519
   185
	return weaponID;
kyle@3702
   186
}
kyle@3702
   187
kyle@3702
   188
const char *WeaponIDToAlias(int weaponID)
kyle@3702
   189
{
drifter01620@4237
   190
	const char *alias = NULL;
drifter01620@4237
   191
#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
kyle@3702
   192
	static ICallWrapper *pWrapper = NULL;
kyle@3702
   193
kyle@3702
   194
	if (!pWrapper)
kyle@3702
   195
	{
kyle@3702
   196
		REGISTER_ADDR("WeaponIDToAlias", 0,
kyle@3702
   197
			PassInfo pass[1]; \
kyle@3702
   198
			PassInfo retpass; \
kyle@3702
   199
			pass[0].flags = PASSFLAG_BYVAL; \
kyle@3702
   200
			pass[0].type = PassType_Basic; \
kyle@3702
   201
			pass[0].size = sizeof(int); \
kyle@3702
   202
			retpass.flags = PASSFLAG_BYVAL; \
kyle@3702
   203
			retpass.type = PassType_Basic; \
kyle@3702
   204
			retpass.size = sizeof(const char *); \
kyle@3702
   205
			pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
kyle@3702
   206
	}
kyle@3702
   207
	
kyle@3702
   208
	unsigned char vstk[sizeof(int)];
kyle@3702
   209
	unsigned char *vptr = vstk;
kyle@3702
   210
kyle@3702
   211
	*(int *)vptr = GetRealWeaponID(weaponID);
kyle@3702
   212
drifter01620@4237
   213
	pWrapper->Execute(vstk, &alias);
drifter01620@4237
   214
#else
drifter01620@4237
   215
	static void *addr = NULL;
drifter01620@4237
   216
drifter01620@4237
   217
	if(!addr)
drifter01620@4237
   218
	{
drifter01620@4237
   219
		GET_MEMSIG("WeaponIDToAlias", 0);
drifter01620@4237
   220
	}
drifter01620@4237
   221
drifter01620@4237
   222
	int realWeaponID = GetRealWeaponID(weaponID);
drifter01620@4237
   223
	__asm
drifter01620@4237
   224
	{
drifter01620@4237
   225
		mov ecx, realWeaponID
drifter01620@4237
   226
		call addr
drifter01620@4237
   227
		mov alias, eax
drifter01620@4237
   228
	}
drifter01620@4237
   229
#endif
drifter01620@4237
   230
	return alias;
rgr_02@3519
   231
}
rgr_02@3519
   232
int GetRealWeaponID(int weaponId)
rgr_02@3519
   233
{
rgr_02@3519
   234
#if SOURCE_ENGINE == SE_CSGO
rgr_02@3519
   235
	switch((SMCSWeapon)weaponId)
rgr_02@3519
   236
	{
rgr_02@3519
   237
		case SMCSWeapon_NONE:
rgr_02@3519
   238
			return (int)CSGOWeapon_NONE;
rgr_02@3519
   239
		case SMCSWeapon_DEAGLE:
rgr_02@3519
   240
			return (int)CSGOWeapon_DEAGLE;
rgr_02@3519
   241
		case SMCSWeapon_ELITE:
rgr_02@3519
   242
			return (int)CSGOWeapon_ELITE;
rgr_02@3519
   243
		case SMCSWeapon_FIVESEVEN:
rgr_02@3519
   244
			return (int)CSGOWeapon_FIVESEVEN;
rgr_02@3519
   245
		case SMCSWeapon_GLOCK:
rgr_02@3519
   246
			return (int)CSGOWeapon_GLOCK;
rgr_02@3519
   247
		case SMCSWeapon_P228:
rgr_02@3519
   248
			return (int)CSGOWeapon_P228;
rgr_02@3519
   249
		case SMCSWeapon_USP:
rgr_02@3519
   250
			return (int)CSGOWeapon_USP;
rgr_02@3519
   251
		case SMCSWeapon_AK47:
rgr_02@3519
   252
			return (int)CSGOWeapon_AK47;
rgr_02@3519
   253
		case SMCSWeapon_AUG:
rgr_02@3519
   254
			return (int)CSGOWeapon_AUG;
rgr_02@3519
   255
		case SMCSWeapon_AWP:
rgr_02@3519
   256
			return (int)CSGOWeapon_AWP;
rgr_02@3519
   257
		case SMCSWeapon_FAMAS:
rgr_02@3519
   258
			return (int)CSGOWeapon_FAMAS;
rgr_02@3519
   259
		case SMCSWeapon_G3SG1:
rgr_02@3519
   260
			return (int)CSGOWeapon_G3SG1;
rgr_02@3519
   261
		case SMCSWeapon_GALIL:
rgr_02@3519
   262
			return (int)CSGOWeapon_GALIL;
rgr_02@3519
   263
		case SMCSWeapon_GALILAR:
rgr_02@3519
   264
			return (int)CSGOWeapon_GALILAR;
rgr_02@3519
   265
		case SMCSWeapon_M249:
rgr_02@3519
   266
			return (int)CSGOWeapon_M249;
rgr_02@3519
   267
		case SMCSWeapon_M3:
rgr_02@3519
   268
			return (int)CSGOWeapon_M3;
rgr_02@3519
   269
		case SMCSWeapon_M4A1:
rgr_02@3519
   270
			return (int)CSGOWeapon_M4A1;
rgr_02@3519
   271
		case SMCSWeapon_MAC10:
rgr_02@3519
   272
			return (int)CSGOWeapon_MAC10;
rgr_02@3519
   273
		case SMCSWeapon_MP5NAVY:
rgr_02@3519
   274
			return (int)CSGOWeapon_MP5NAVY;
rgr_02@3519
   275
		case SMCSWeapon_P90:
rgr_02@3519
   276
			return (int)CSGOWeapon_P90;
rgr_02@3519
   277
		case SMCSWeapon_SCOUT:
rgr_02@3519
   278
			return (int)CSGOWeapon_SCOUT;
rgr_02@3519
   279
		case SMCSWeapon_SG550:
rgr_02@3519
   280
			return (int)CSGOWeapon_SG550;
rgr_02@3519
   281
		case SMCSWeapon_SG552:
rgr_02@3519
   282
			return (int)CSGOWeapon_SG552;
rgr_02@3519
   283
		case SMCSWeapon_TMP:
rgr_02@3519
   284
			return (int)CSGOWeapon_TMP;
rgr_02@3519
   285
		case SMCSWeapon_UMP45:
rgr_02@3519
   286
			return (int)CSGOWeapon_UMP45;
rgr_02@3519
   287
		case SMCSWeapon_XM1014:
rgr_02@3519
   288
			return (int)CSGOWeapon_XM1014;
rgr_02@3519
   289
		case SMCSWeapon_BIZON:
rgr_02@3519
   290
			return (int)CSGOWeapon_BIZON;
rgr_02@3519
   291
		case SMCSWeapon_MAG7:
rgr_02@3519
   292
			return (int)CSGOWeapon_MAG7;
rgr_02@3519
   293
		case SMCSWeapon_NEGEV:
rgr_02@3519
   294
			return (int)CSGOWeapon_NEGEV;
rgr_02@3519
   295
		case SMCSWeapon_SAWEDOFF:
rgr_02@3519
   296
			return (int)CSGOWeapon_SAWEDOFF;
rgr_02@3519
   297
		case SMCSWeapon_TEC9:
rgr_02@3519
   298
			return (int)CSGOWeapon_TEC9;
rgr_02@3519
   299
		case SMCSWeapon_TASER:
rgr_02@3519
   300
			return (int)CSGOWeapon_TASER;
rgr_02@3519
   301
		case SMCSWeapon_HKP2000:
rgr_02@3519
   302
			return (int)CSGOWeapon_HKP2000;
rgr_02@3519
   303
		case SMCSWeapon_MP7:
rgr_02@3519
   304
			return (int)CSGOWeapon_MP7;
rgr_02@3519
   305
		case SMCSWeapon_MP9:
rgr_02@3519
   306
			return (int)CSGOWeapon_MP9;
rgr_02@3519
   307
		case SMCSWeapon_NOVA:
rgr_02@3519
   308
			return (int)CSGOWeapon_NOVA;
rgr_02@3519
   309
		case SMCSWeapon_P250:
rgr_02@3519
   310
			return (int)CSGOWeapon_P250;
rgr_02@3519
   311
		case SMCSWeapon_SCAR17:
rgr_02@3519
   312
			return (int)CSGOWeapon_SCAR17;
rgr_02@3519
   313
		case SMCSWeapon_SCAR20:
rgr_02@3519
   314
			return (int)CSGOWeapon_SCAR20;
rgr_02@3519
   315
		case SMCSWeapon_SG556:
rgr_02@3519
   316
			return (int)CSGOWeapon_SG556;
rgr_02@3519
   317
		case SMCSWeapon_SSG08:
rgr_02@3519
   318
			return (int)CSGOWeapon_SSG08;
rgr_02@3519
   319
		case SMCSWeapon_KNIFE_GG:
rgr_02@3519
   320
			return (int)CSGOWeapon_KNIFE_GG;
rgr_02@3519
   321
		case SMCSWeapon_KNIFE:
rgr_02@3519
   322
			return (int)CSGOWeapon_KNIFE;
rgr_02@3519
   323
		case SMCSWeapon_FLASHBANG:
rgr_02@3519
   324
			return (int)CSGOWeapon_FLASHBANG;
rgr_02@3519
   325
		case SMCSWeapon_HEGRENADE:
rgr_02@3519
   326
			return (int)CSGOWeapon_HEGRENADE;
rgr_02@3519
   327
		case SMCSWeapon_SMOKEGRENADE:
rgr_02@3519
   328
			return (int)CSGOWeapon_SMOKEGRENADE;
rgr_02@3519
   329
		case SMCSWeapon_MOLOTOV:
rgr_02@3519
   330
			return (int)CSGOWeapon_MOLOTOV;
rgr_02@3519
   331
		case SMCSWeapon_DECOY:
rgr_02@3519
   332
			return (int)CSGOWeapon_DECOY;
rgr_02@3519
   333
		case SMCSWeapon_INCGRENADE:
rgr_02@3519
   334
			return (int)CSGOWeapon_INCGRENADE;
rgr_02@3519
   335
		case SMCSWeapon_C4:
rgr_02@3519
   336
			return (int)CSGOWeapon_C4;
rgr_02@3519
   337
		case SMCSWeapon_KEVLAR:
rgr_02@3519
   338
			return (int)CSGOWeapon_KEVLAR;
rgr_02@3519
   339
		case SMCSWeapon_ASSAULTSUIT:
rgr_02@3519
   340
			return (int)CSGOWeapon_ASSAULTSUIT;
rgr_02@3519
   341
		case SMCSWeapon_NIGHTVISION:
rgr_02@3519
   342
			return (int)CSGOWeapon_NVG;
rgr_02@3519
   343
		case SMCSWeapon_DEFUSER:
rgr_02@3519
   344
			return (int)CSGOWeapon_DEFUSER;
rgr_02@3519
   345
		default:
kyle@4028
   346
			return (int)CSGOWeapon_NONE;
rgr_02@3519
   347
	}
rgr_02@3519
   348
#else
kyle@4028
   349
	if (weaponId > (int)SMCSWeapon_NIGHTVISION || weaponId < (int)SMCSWeapon_NONE)
kyle@4028
   350
		return (int)SMCSWeapon_NONE;
rgr_02@3519
   351
	else
rgr_02@3519
   352
		return weaponId;
rgr_02@3519
   353
#endif
rgr_02@3519
   354
}
rgr_02@3519
   355
rgr_02@3519
   356
int GetFakeWeaponID(int weaponId)
rgr_02@3519
   357
{
rgr_02@3519
   358
#if SOURCE_ENGINE == SE_CSGO
rgr_02@3519
   359
	switch((CSGOWeapon)weaponId)
rgr_02@3519
   360
	{
rgr_02@3519
   361
		case CSGOWeapon_NONE:
rgr_02@3519
   362
			return (int)SMCSWeapon_NONE;
rgr_02@3519
   363
		case CSGOWeapon_DEAGLE:
rgr_02@3519
   364
			return (int)SMCSWeapon_DEAGLE;
rgr_02@3519
   365
		case CSGOWeapon_ELITE:
rgr_02@3519
   366
			return (int)SMCSWeapon_ELITE;
rgr_02@3519
   367
		case CSGOWeapon_FIVESEVEN:
rgr_02@3519
   368
			return (int)SMCSWeapon_FIVESEVEN;
rgr_02@3519
   369
		case CSGOWeapon_GLOCK:
rgr_02@3519
   370
			return (int)SMCSWeapon_GLOCK;
rgr_02@3519
   371
		case CSGOWeapon_P228:
rgr_02@3519
   372
			return (int)SMCSWeapon_P228;
rgr_02@3519
   373
		case CSGOWeapon_USP:
rgr_02@3519
   374
			return (int)SMCSWeapon_USP;
rgr_02@3519
   375
		case CSGOWeapon_AK47:
rgr_02@3519
   376
			return (int)SMCSWeapon_AK47;
rgr_02@3519
   377
		case CSGOWeapon_AUG:
rgr_02@3519
   378
			return (int)SMCSWeapon_AUG;
rgr_02@3519
   379
		case CSGOWeapon_AWP:
rgr_02@3519
   380
			return (int)SMCSWeapon_AWP;
rgr_02@3519
   381
		case CSGOWeapon_FAMAS:
rgr_02@3519
   382
			return (int)SMCSWeapon_FAMAS;
rgr_02@3519
   383
		case CSGOWeapon_G3SG1:
rgr_02@3519
   384
			return (int)SMCSWeapon_G3SG1;
rgr_02@3519
   385
		case CSGOWeapon_GALIL:
rgr_02@3519
   386
			return (int)SMCSWeapon_GALIL;
rgr_02@3519
   387
		case CSGOWeapon_GALILAR:
rgr_02@3519
   388
			return (int)SMCSWeapon_GALILAR;
rgr_02@3519
   389
		case CSGOWeapon_M249:
rgr_02@3519
   390
			return (int)SMCSWeapon_M249;
rgr_02@3519
   391
		case CSGOWeapon_M3:
rgr_02@3519
   392
			return (int)SMCSWeapon_M3;
rgr_02@3519
   393
		case CSGOWeapon_M4A1:
rgr_02@3519
   394
			return (int)SMCSWeapon_M4A1;
rgr_02@3519
   395
		case CSGOWeapon_MAC10:
rgr_02@3519
   396
			return (int)SMCSWeapon_MAC10;
rgr_02@3519
   397
		case CSGOWeapon_MP5NAVY:
rgr_02@3519
   398
			return (int)SMCSWeapon_MP5NAVY;
rgr_02@3519
   399
		case CSGOWeapon_P90:
rgr_02@3519
   400
			return (int)SMCSWeapon_P90;
rgr_02@3519
   401
		case CSGOWeapon_SCOUT:
rgr_02@3519
   402
			return (int)SMCSWeapon_SCOUT;
rgr_02@3519
   403
		case CSGOWeapon_SG550:
rgr_02@3519
   404
			return (int)SMCSWeapon_SG550;
rgr_02@3519
   405
		case CSGOWeapon_SG552:
rgr_02@3519
   406
			return (int)SMCSWeapon_SG552;
rgr_02@3519
   407
		case CSGOWeapon_TMP:
rgr_02@3519
   408
			return (int)SMCSWeapon_TMP;
rgr_02@3519
   409
		case CSGOWeapon_UMP45:
rgr_02@3519
   410
			return (int)SMCSWeapon_UMP45;
rgr_02@3519
   411
		case CSGOWeapon_XM1014:
rgr_02@3519
   412
			return (int)SMCSWeapon_XM1014;
rgr_02@3519
   413
		case CSGOWeapon_BIZON:
rgr_02@3519
   414
			return (int)SMCSWeapon_BIZON;
rgr_02@3519
   415
		case CSGOWeapon_MAG7:
rgr_02@3519
   416
			return (int)SMCSWeapon_MAG7;
rgr_02@3519
   417
		case CSGOWeapon_NEGEV:
rgr_02@3519
   418
			return (int)SMCSWeapon_NEGEV;
rgr_02@3519
   419
		case CSGOWeapon_SAWEDOFF:
rgr_02@3519
   420
			return (int)SMCSWeapon_SAWEDOFF;
rgr_02@3519
   421
		case CSGOWeapon_TEC9:
rgr_02@3519
   422
			return (int)SMCSWeapon_TEC9;
rgr_02@3519
   423
		case CSGOWeapon_TASER:
rgr_02@3519
   424
			return (int)SMCSWeapon_TASER;
rgr_02@3519
   425
		case CSGOWeapon_HKP2000:
rgr_02@3519
   426
			return (int)SMCSWeapon_HKP2000;
rgr_02@3519
   427
		case CSGOWeapon_MP7:
rgr_02@3519
   428
			return (int)SMCSWeapon_MP7;
rgr_02@3519
   429
		case CSGOWeapon_MP9:
rgr_02@3519
   430
			return (int)SMCSWeapon_MP9;
rgr_02@3519
   431
		case CSGOWeapon_NOVA:
rgr_02@3519
   432
			return (int)SMCSWeapon_NOVA;
rgr_02@3519
   433
		case CSGOWeapon_P250:
rgr_02@3519
   434
			return (int)SMCSWeapon_P250;
rgr_02@3519
   435
		case CSGOWeapon_SCAR17:
rgr_02@3519
   436
			return (int)SMCSWeapon_SCAR17;
rgr_02@3519
   437
		case CSGOWeapon_SCAR20:
rgr_02@3519
   438
			return (int)SMCSWeapon_SCAR20;
rgr_02@3519
   439
		case CSGOWeapon_SG556:
rgr_02@3519
   440
			return (int)SMCSWeapon_SG556;
rgr_02@3519
   441
		case CSGOWeapon_SSG08:
rgr_02@3519
   442
			return (int)SMCSWeapon_SSG08;
rgr_02@3519
   443
		case CSGOWeapon_KNIFE_GG:
rgr_02@3519
   444
			return (int)SMCSWeapon_KNIFE_GG;
rgr_02@3519
   445
		case CSGOWeapon_KNIFE:
rgr_02@3519
   446
			return (int)SMCSWeapon_KNIFE;
rgr_02@3519
   447
		case CSGOWeapon_FLASHBANG:
rgr_02@3519
   448
			return (int)SMCSWeapon_FLASHBANG;
rgr_02@3519
   449
		case CSGOWeapon_HEGRENADE:
rgr_02@3519
   450
			return (int)SMCSWeapon_HEGRENADE;
rgr_02@3519
   451
		case CSGOWeapon_SMOKEGRENADE:
rgr_02@3519
   452
			return (int)SMCSWeapon_SMOKEGRENADE;
rgr_02@3519
   453
		case CSGOWeapon_MOLOTOV:
rgr_02@3519
   454
			return (int)SMCSWeapon_MOLOTOV;
rgr_02@3519
   455
		case CSGOWeapon_DECOY:
rgr_02@3519
   456
			return (int)SMCSWeapon_DECOY;
rgr_02@3519
   457
		case CSGOWeapon_INCGRENADE:
rgr_02@3519
   458
			return (int)SMCSWeapon_INCGRENADE;
rgr_02@3519
   459
		case CSGOWeapon_C4:
rgr_02@3519
   460
			return (int)SMCSWeapon_C4;
rgr_02@3519
   461
		case CSGOWeapon_KEVLAR:
rgr_02@3519
   462
			return (int)SMCSWeapon_KEVLAR;
rgr_02@3519
   463
		case CSGOWeapon_ASSAULTSUIT:
rgr_02@3519
   464
			return (int)SMCSWeapon_ASSAULTSUIT;
rgr_02@3519
   465
		case CSGOWeapon_NVG:
rgr_02@3519
   466
			return (int)SMCSWeapon_NIGHTVISION;
rgr_02@3519
   467
		case CSGOWeapon_DEFUSER:
rgr_02@3519
   468
			return (int)SMCSWeapon_DEFUSER;
rgr_02@3519
   469
		default:
kyle@4028
   470
			return (int)SMCSWeapon_NONE;
rgr_02@3519
   471
	}
rgr_02@3519
   472
#else
kyle@4028
   473
	if (weaponId > (int)SMCSWeapon_NIGHTVISION || weaponId < (int)SMCSWeapon_NONE)
kyle@4028
   474
		return (int)SMCSWeapon_NONE;
rgr_02@3519
   475
	else
rgr_02@3519
   476
		return weaponId;
rgr_02@3519
   477
#endif
rgr_02@3519
   478
}
drifter01620@3965
   479
bool IsValidWeaponID(int id)
drifter01620@3965
   480
{
kyle@4028
   481
	if (id <= (int)SMCSWeapon_NONE)
drifter01620@3965
   482
		return false;
drifter01620@3965
   483
	//Why are these even HERE!?! They dont exist in CS:GO but have valid ID's still
drifter01620@3965
   484
#if SOURCE_ENGINE == SE_CSGO
kyle@4028
   485
	else if (id > (int)SMCSWeapon_DEFUSER || id == (int)SMCSWeapon_P228 || id == (int)SMCSWeapon_SCOUT || id == (int)SMCSWeapon_SG550 || id == (int)SMCSWeapon_GALIL ||
kyle@4028
   486
			id == (int)SMCSWeapon_SCAR17 || id == (int)SMCSWeapon_USP || id == (int)SMCSWeapon_M3 || id == (int)SMCSWeapon_MP5NAVY || id == (int)SMCSWeapon_TMP || id == (int)SMCSWeapon_SG552)
drifter01620@3965
   487
			return false;
drifter01620@3965
   488
#else
kyle@4028
   489
	else if (id > (int)SMCSWeapon_NIGHTVISION)
drifter01620@3965
   490
		return false;
drifter01620@3965
   491
#endif
drifter01620@3965
   492
	return true;
drifter01620@3965
   493
}