rgr_02@3519: /**
rgr_02@3519: * vim: set ts=4 :
rgr_02@3519: * =============================================================================
rgr_02@3519: * SourceMod Counter-Strike:Source Extension
rgr_02@3519: * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
rgr_02@3519: * =============================================================================
rgr_02@3519: *
rgr_02@3519: * This program is free software; you can redistribute it and/or modify it under
rgr_02@3519: * the terms of the GNU General Public License, version 3.0, as published by the
rgr_02@3519: * Free Software Foundation.
rgr_02@3519: *
rgr_02@3519: * This program is distributed in the hope that it will be useful, but WITHOUT
rgr_02@3519: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
rgr_02@3519: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
rgr_02@3519: * details.
rgr_02@3519: *
rgr_02@3519: * You should have received a copy of the GNU General Public License along with
rgr_02@3519: * this program. If not, see .
rgr_02@3519: *
rgr_02@3519: * As a special exception, AlliedModders LLC gives you permission to link the
rgr_02@3519: * code of this program (as well as its derivative works) to "Half-Life 2," the
rgr_02@3519: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
rgr_02@3519: * by the Valve Corporation. You must obey the GNU General Public License in
rgr_02@3519: * all respects for all other code used. Additionally, AlliedModders LLC grants
rgr_02@3519: * this exception to all derivative works. AlliedModders LLC defines further
rgr_02@3519: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
rgr_02@3519: * or .
rgr_02@3519: *
rgr_02@3519: * Version: $Id$
rgr_02@3519: */
rgr_02@3519:
rgr_02@3519: #include "util_cstrike.h"
rgr_02@3519:
rgr_02@3519: #include "extension.h"
rgr_02@3519: #include "RegNatives.h"
rgr_02@3519:
rgr_02@3519: #define REGISTER_ADDR(name, defaultret, code) \
rgr_02@3519: void *addr; \
rgr_02@3519: if (!g_pGameConf->GetMemSig(name, &addr) || !addr) \
rgr_02@3519: { \
rgr_02@3519: g_pSM->LogError(myself, "Failed to locate function."); \
rgr_02@3519: return defaultret; \
rgr_02@3519: } \
rgr_02@3519: code; \
rgr_02@3519: g_RegNatives.Register(pWrapper);
rgr_02@3519:
rgr_02@3519: void *GetWeaponInfo(int weaponID)
rgr_02@3519: {
rgr_02@3519: static ICallWrapper *pWrapper = NULL;
rgr_02@3519: if (!pWrapper)
rgr_02@3519: {
rgr_02@3519: REGISTER_ADDR("GetWeaponInfo", NULL,
rgr_02@3519: PassInfo pass[1]; \
rgr_02@3519: PassInfo retpass; \
rgr_02@3519: pass[0].flags = PASSFLAG_BYVAL; \
rgr_02@3519: pass[0].type = PassType_Basic; \
rgr_02@3519: pass[0].size = sizeof(int); \
rgr_02@3519: retpass.flags = PASSFLAG_BYVAL; \
rgr_02@3519: retpass.type = PassType_Basic; \
rgr_02@3519: retpass.size = sizeof(void *); \
rgr_02@3519: pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
rgr_02@3519: }
rgr_02@3519:
rgr_02@3519: void *info;
rgr_02@3519:
rgr_02@3519: unsigned char vstk[sizeof(int)];
rgr_02@3519: unsigned char *vptr = vstk;
rgr_02@3519:
rgr_02@3519: *(int *)vptr = weaponID;
rgr_02@3519:
rgr_02@3519: pWrapper->Execute(vstk, &info);
rgr_02@3519:
rgr_02@3519: return info;
rgr_02@3519: }
rgr_02@3519:
rgr_02@3519: const char *GetTranslatedWeaponAlias(const char *weapon)
rgr_02@3519: {
rgr_02@3519: static ICallWrapper *pWrapper = NULL;
rgr_02@3519:
rgr_02@3519: if (!pWrapper)
rgr_02@3519: {
rgr_02@3519: REGISTER_ADDR("GetTranslatedWeaponAlias", weapon,
rgr_02@3519: PassInfo pass[1]; \
rgr_02@3519: PassInfo retpass; \
rgr_02@3519: pass[0].flags = PASSFLAG_BYVAL; \
rgr_02@3519: pass[0].type = PassType_Basic; \
rgr_02@3519: pass[0].size = sizeof(const char *); \
rgr_02@3519: retpass.flags = PASSFLAG_BYVAL; \
rgr_02@3519: retpass.type = PassType_Basic; \
rgr_02@3519: retpass.size = sizeof(const char *); \
rgr_02@3519: pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
rgr_02@3519: }
kyle@3634: const char *ret = NULL;
rgr_02@3519:
rgr_02@3519: unsigned char vstk[sizeof(const char *)];
rgr_02@3519: unsigned char *vptr = vstk;
rgr_02@3519:
rgr_02@3519: *(const char **)vptr = weapon;
rgr_02@3519:
rgr_02@3519: pWrapper->Execute(vstk, &ret);
rgr_02@3519:
rgr_02@3519: return ret;
rgr_02@3519: }
rgr_02@3519:
rgr_02@3519: int AliasToWeaponID(const char *weapon)
rgr_02@3519: {
rgr_02@3519: static ICallWrapper *pWrapper = NULL;
rgr_02@3519:
rgr_02@3519: if (!pWrapper)
rgr_02@3519: {
rgr_02@3519: REGISTER_ADDR("AliasToWeaponID", 0,
rgr_02@3519: PassInfo pass[1]; \
rgr_02@3519: PassInfo retpass; \
rgr_02@3519: pass[0].flags = PASSFLAG_BYVAL; \
rgr_02@3519: pass[0].type = PassType_Basic; \
rgr_02@3519: pass[0].size = sizeof(const char *); \
rgr_02@3519: retpass.flags = PASSFLAG_BYVAL; \
rgr_02@3519: retpass.type = PassType_Basic; \
rgr_02@3519: retpass.size = sizeof(int); \
rgr_02@3519: pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
rgr_02@3519: }
rgr_02@3519: int weaponID = 0;
rgr_02@3519:
rgr_02@3519: unsigned char vstk[sizeof(const char *)];
rgr_02@3519: unsigned char *vptr = vstk;
rgr_02@3519:
rgr_02@3519: *(const char **)vptr = weapon;
rgr_02@3519:
rgr_02@3519: pWrapper->Execute(vstk, &weaponID);
rgr_02@3519:
rgr_02@3519: return weaponID;
kyle@3702: }
kyle@3702:
kyle@3702: const char *WeaponIDToAlias(int weaponID)
kyle@3702: {
kyle@3702: static ICallWrapper *pWrapper = NULL;
kyle@3702:
kyle@3702: if (!pWrapper)
kyle@3702: {
kyle@3702: REGISTER_ADDR("WeaponIDToAlias", 0,
kyle@3702: PassInfo pass[1]; \
kyle@3702: PassInfo retpass; \
kyle@3702: pass[0].flags = PASSFLAG_BYVAL; \
kyle@3702: pass[0].type = PassType_Basic; \
kyle@3702: pass[0].size = sizeof(int); \
kyle@3702: retpass.flags = PASSFLAG_BYVAL; \
kyle@3702: retpass.type = PassType_Basic; \
kyle@3702: retpass.size = sizeof(const char *); \
kyle@3702: pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
kyle@3702: }
kyle@3702: const char *ret = NULL;
kyle@3702:
kyle@3702: unsigned char vstk[sizeof(int)];
kyle@3702: unsigned char *vptr = vstk;
kyle@3702:
kyle@3702: *(int *)vptr = GetRealWeaponID(weaponID);
kyle@3702:
kyle@3702: pWrapper->Execute(vstk, &ret);
kyle@3702:
kyle@3702: return ret;
rgr_02@3519: }
rgr_02@3519: int GetRealWeaponID(int weaponId)
rgr_02@3519: {
rgr_02@3519: #if SOURCE_ENGINE == SE_CSGO
rgr_02@3519: switch((SMCSWeapon)weaponId)
rgr_02@3519: {
rgr_02@3519: case SMCSWeapon_NONE:
rgr_02@3519: return (int)CSGOWeapon_NONE;
rgr_02@3519: case SMCSWeapon_DEAGLE:
rgr_02@3519: return (int)CSGOWeapon_DEAGLE;
rgr_02@3519: case SMCSWeapon_ELITE:
rgr_02@3519: return (int)CSGOWeapon_ELITE;
rgr_02@3519: case SMCSWeapon_FIVESEVEN:
rgr_02@3519: return (int)CSGOWeapon_FIVESEVEN;
rgr_02@3519: case SMCSWeapon_GLOCK:
rgr_02@3519: return (int)CSGOWeapon_GLOCK;
rgr_02@3519: case SMCSWeapon_P228:
rgr_02@3519: return (int)CSGOWeapon_P228;
rgr_02@3519: case SMCSWeapon_USP:
rgr_02@3519: return (int)CSGOWeapon_USP;
rgr_02@3519: case SMCSWeapon_AK47:
rgr_02@3519: return (int)CSGOWeapon_AK47;
rgr_02@3519: case SMCSWeapon_AUG:
rgr_02@3519: return (int)CSGOWeapon_AUG;
rgr_02@3519: case SMCSWeapon_AWP:
rgr_02@3519: return (int)CSGOWeapon_AWP;
rgr_02@3519: case SMCSWeapon_FAMAS:
rgr_02@3519: return (int)CSGOWeapon_FAMAS;
rgr_02@3519: case SMCSWeapon_G3SG1:
rgr_02@3519: return (int)CSGOWeapon_G3SG1;
rgr_02@3519: case SMCSWeapon_GALIL:
rgr_02@3519: return (int)CSGOWeapon_GALIL;
rgr_02@3519: case SMCSWeapon_GALILAR:
rgr_02@3519: return (int)CSGOWeapon_GALILAR;
rgr_02@3519: case SMCSWeapon_M249:
rgr_02@3519: return (int)CSGOWeapon_M249;
rgr_02@3519: case SMCSWeapon_M3:
rgr_02@3519: return (int)CSGOWeapon_M3;
rgr_02@3519: case SMCSWeapon_M4A1:
rgr_02@3519: return (int)CSGOWeapon_M4A1;
rgr_02@3519: case SMCSWeapon_MAC10:
rgr_02@3519: return (int)CSGOWeapon_MAC10;
rgr_02@3519: case SMCSWeapon_MP5NAVY:
rgr_02@3519: return (int)CSGOWeapon_MP5NAVY;
rgr_02@3519: case SMCSWeapon_P90:
rgr_02@3519: return (int)CSGOWeapon_P90;
rgr_02@3519: case SMCSWeapon_SCOUT:
rgr_02@3519: return (int)CSGOWeapon_SCOUT;
rgr_02@3519: case SMCSWeapon_SG550:
rgr_02@3519: return (int)CSGOWeapon_SG550;
rgr_02@3519: case SMCSWeapon_SG552:
rgr_02@3519: return (int)CSGOWeapon_SG552;
rgr_02@3519: case SMCSWeapon_TMP:
rgr_02@3519: return (int)CSGOWeapon_TMP;
rgr_02@3519: case SMCSWeapon_UMP45:
rgr_02@3519: return (int)CSGOWeapon_UMP45;
rgr_02@3519: case SMCSWeapon_XM1014:
rgr_02@3519: return (int)CSGOWeapon_XM1014;
rgr_02@3519: case SMCSWeapon_BIZON:
rgr_02@3519: return (int)CSGOWeapon_BIZON;
rgr_02@3519: case SMCSWeapon_MAG7:
rgr_02@3519: return (int)CSGOWeapon_MAG7;
rgr_02@3519: case SMCSWeapon_NEGEV:
rgr_02@3519: return (int)CSGOWeapon_NEGEV;
rgr_02@3519: case SMCSWeapon_SAWEDOFF:
rgr_02@3519: return (int)CSGOWeapon_SAWEDOFF;
rgr_02@3519: case SMCSWeapon_TEC9:
rgr_02@3519: return (int)CSGOWeapon_TEC9;
rgr_02@3519: case SMCSWeapon_TASER:
rgr_02@3519: return (int)CSGOWeapon_TASER;
rgr_02@3519: case SMCSWeapon_HKP2000:
rgr_02@3519: return (int)CSGOWeapon_HKP2000;
rgr_02@3519: case SMCSWeapon_MP7:
rgr_02@3519: return (int)CSGOWeapon_MP7;
rgr_02@3519: case SMCSWeapon_MP9:
rgr_02@3519: return (int)CSGOWeapon_MP9;
rgr_02@3519: case SMCSWeapon_NOVA:
rgr_02@3519: return (int)CSGOWeapon_NOVA;
rgr_02@3519: case SMCSWeapon_P250:
rgr_02@3519: return (int)CSGOWeapon_P250;
rgr_02@3519: case SMCSWeapon_SCAR17:
rgr_02@3519: return (int)CSGOWeapon_SCAR17;
rgr_02@3519: case SMCSWeapon_SCAR20:
rgr_02@3519: return (int)CSGOWeapon_SCAR20;
rgr_02@3519: case SMCSWeapon_SG556:
rgr_02@3519: return (int)CSGOWeapon_SG556;
rgr_02@3519: case SMCSWeapon_SSG08:
rgr_02@3519: return (int)CSGOWeapon_SSG08;
rgr_02@3519: case SMCSWeapon_KNIFE_GG:
rgr_02@3519: return (int)CSGOWeapon_KNIFE_GG;
rgr_02@3519: case SMCSWeapon_KNIFE:
rgr_02@3519: return (int)CSGOWeapon_KNIFE;
rgr_02@3519: case SMCSWeapon_FLASHBANG:
rgr_02@3519: return (int)CSGOWeapon_FLASHBANG;
rgr_02@3519: case SMCSWeapon_HEGRENADE:
rgr_02@3519: return (int)CSGOWeapon_HEGRENADE;
rgr_02@3519: case SMCSWeapon_SMOKEGRENADE:
rgr_02@3519: return (int)CSGOWeapon_SMOKEGRENADE;
rgr_02@3519: case SMCSWeapon_MOLOTOV:
rgr_02@3519: return (int)CSGOWeapon_MOLOTOV;
rgr_02@3519: case SMCSWeapon_DECOY:
rgr_02@3519: return (int)CSGOWeapon_DECOY;
rgr_02@3519: case SMCSWeapon_INCGRENADE:
rgr_02@3519: return (int)CSGOWeapon_INCGRENADE;
rgr_02@3519: case SMCSWeapon_C4:
rgr_02@3519: return (int)CSGOWeapon_C4;
rgr_02@3519: case SMCSWeapon_KEVLAR:
rgr_02@3519: return (int)CSGOWeapon_KEVLAR;
rgr_02@3519: case SMCSWeapon_ASSAULTSUIT:
rgr_02@3519: return (int)CSGOWeapon_ASSAULTSUIT;
rgr_02@3519: case SMCSWeapon_NIGHTVISION:
rgr_02@3519: return (int)CSGOWeapon_NVG;
rgr_02@3519: case SMCSWeapon_DEFUSER:
rgr_02@3519: return (int)CSGOWeapon_DEFUSER;
rgr_02@3519: default:
kyle@4028: return (int)CSGOWeapon_NONE;
rgr_02@3519: }
rgr_02@3519: #else
kyle@4028: if (weaponId > (int)SMCSWeapon_NIGHTVISION || weaponId < (int)SMCSWeapon_NONE)
kyle@4028: return (int)SMCSWeapon_NONE;
rgr_02@3519: else
rgr_02@3519: return weaponId;
rgr_02@3519: #endif
rgr_02@3519: }
rgr_02@3519:
rgr_02@3519: int GetFakeWeaponID(int weaponId)
rgr_02@3519: {
rgr_02@3519: #if SOURCE_ENGINE == SE_CSGO
rgr_02@3519: switch((CSGOWeapon)weaponId)
rgr_02@3519: {
rgr_02@3519: case CSGOWeapon_NONE:
rgr_02@3519: return (int)SMCSWeapon_NONE;
rgr_02@3519: case CSGOWeapon_DEAGLE:
rgr_02@3519: return (int)SMCSWeapon_DEAGLE;
rgr_02@3519: case CSGOWeapon_ELITE:
rgr_02@3519: return (int)SMCSWeapon_ELITE;
rgr_02@3519: case CSGOWeapon_FIVESEVEN:
rgr_02@3519: return (int)SMCSWeapon_FIVESEVEN;
rgr_02@3519: case CSGOWeapon_GLOCK:
rgr_02@3519: return (int)SMCSWeapon_GLOCK;
rgr_02@3519: case CSGOWeapon_P228:
rgr_02@3519: return (int)SMCSWeapon_P228;
rgr_02@3519: case CSGOWeapon_USP:
rgr_02@3519: return (int)SMCSWeapon_USP;
rgr_02@3519: case CSGOWeapon_AK47:
rgr_02@3519: return (int)SMCSWeapon_AK47;
rgr_02@3519: case CSGOWeapon_AUG:
rgr_02@3519: return (int)SMCSWeapon_AUG;
rgr_02@3519: case CSGOWeapon_AWP:
rgr_02@3519: return (int)SMCSWeapon_AWP;
rgr_02@3519: case CSGOWeapon_FAMAS:
rgr_02@3519: return (int)SMCSWeapon_FAMAS;
rgr_02@3519: case CSGOWeapon_G3SG1:
rgr_02@3519: return (int)SMCSWeapon_G3SG1;
rgr_02@3519: case CSGOWeapon_GALIL:
rgr_02@3519: return (int)SMCSWeapon_GALIL;
rgr_02@3519: case CSGOWeapon_GALILAR:
rgr_02@3519: return (int)SMCSWeapon_GALILAR;
rgr_02@3519: case CSGOWeapon_M249:
rgr_02@3519: return (int)SMCSWeapon_M249;
rgr_02@3519: case CSGOWeapon_M3:
rgr_02@3519: return (int)SMCSWeapon_M3;
rgr_02@3519: case CSGOWeapon_M4A1:
rgr_02@3519: return (int)SMCSWeapon_M4A1;
rgr_02@3519: case CSGOWeapon_MAC10:
rgr_02@3519: return (int)SMCSWeapon_MAC10;
rgr_02@3519: case CSGOWeapon_MP5NAVY:
rgr_02@3519: return (int)SMCSWeapon_MP5NAVY;
rgr_02@3519: case CSGOWeapon_P90:
rgr_02@3519: return (int)SMCSWeapon_P90;
rgr_02@3519: case CSGOWeapon_SCOUT:
rgr_02@3519: return (int)SMCSWeapon_SCOUT;
rgr_02@3519: case CSGOWeapon_SG550:
rgr_02@3519: return (int)SMCSWeapon_SG550;
rgr_02@3519: case CSGOWeapon_SG552:
rgr_02@3519: return (int)SMCSWeapon_SG552;
rgr_02@3519: case CSGOWeapon_TMP:
rgr_02@3519: return (int)SMCSWeapon_TMP;
rgr_02@3519: case CSGOWeapon_UMP45:
rgr_02@3519: return (int)SMCSWeapon_UMP45;
rgr_02@3519: case CSGOWeapon_XM1014:
rgr_02@3519: return (int)SMCSWeapon_XM1014;
rgr_02@3519: case CSGOWeapon_BIZON:
rgr_02@3519: return (int)SMCSWeapon_BIZON;
rgr_02@3519: case CSGOWeapon_MAG7:
rgr_02@3519: return (int)SMCSWeapon_MAG7;
rgr_02@3519: case CSGOWeapon_NEGEV:
rgr_02@3519: return (int)SMCSWeapon_NEGEV;
rgr_02@3519: case CSGOWeapon_SAWEDOFF:
rgr_02@3519: return (int)SMCSWeapon_SAWEDOFF;
rgr_02@3519: case CSGOWeapon_TEC9:
rgr_02@3519: return (int)SMCSWeapon_TEC9;
rgr_02@3519: case CSGOWeapon_TASER:
rgr_02@3519: return (int)SMCSWeapon_TASER;
rgr_02@3519: case CSGOWeapon_HKP2000:
rgr_02@3519: return (int)SMCSWeapon_HKP2000;
rgr_02@3519: case CSGOWeapon_MP7:
rgr_02@3519: return (int)SMCSWeapon_MP7;
rgr_02@3519: case CSGOWeapon_MP9:
rgr_02@3519: return (int)SMCSWeapon_MP9;
rgr_02@3519: case CSGOWeapon_NOVA:
rgr_02@3519: return (int)SMCSWeapon_NOVA;
rgr_02@3519: case CSGOWeapon_P250:
rgr_02@3519: return (int)SMCSWeapon_P250;
rgr_02@3519: case CSGOWeapon_SCAR17:
rgr_02@3519: return (int)SMCSWeapon_SCAR17;
rgr_02@3519: case CSGOWeapon_SCAR20:
rgr_02@3519: return (int)SMCSWeapon_SCAR20;
rgr_02@3519: case CSGOWeapon_SG556:
rgr_02@3519: return (int)SMCSWeapon_SG556;
rgr_02@3519: case CSGOWeapon_SSG08:
rgr_02@3519: return (int)SMCSWeapon_SSG08;
rgr_02@3519: case CSGOWeapon_KNIFE_GG:
rgr_02@3519: return (int)SMCSWeapon_KNIFE_GG;
rgr_02@3519: case CSGOWeapon_KNIFE:
rgr_02@3519: return (int)SMCSWeapon_KNIFE;
rgr_02@3519: case CSGOWeapon_FLASHBANG:
rgr_02@3519: return (int)SMCSWeapon_FLASHBANG;
rgr_02@3519: case CSGOWeapon_HEGRENADE:
rgr_02@3519: return (int)SMCSWeapon_HEGRENADE;
rgr_02@3519: case CSGOWeapon_SMOKEGRENADE:
rgr_02@3519: return (int)SMCSWeapon_SMOKEGRENADE;
rgr_02@3519: case CSGOWeapon_MOLOTOV:
rgr_02@3519: return (int)SMCSWeapon_MOLOTOV;
rgr_02@3519: case CSGOWeapon_DECOY:
rgr_02@3519: return (int)SMCSWeapon_DECOY;
rgr_02@3519: case CSGOWeapon_INCGRENADE:
rgr_02@3519: return (int)SMCSWeapon_INCGRENADE;
rgr_02@3519: case CSGOWeapon_C4:
rgr_02@3519: return (int)SMCSWeapon_C4;
rgr_02@3519: case CSGOWeapon_KEVLAR:
rgr_02@3519: return (int)SMCSWeapon_KEVLAR;
rgr_02@3519: case CSGOWeapon_ASSAULTSUIT:
rgr_02@3519: return (int)SMCSWeapon_ASSAULTSUIT;
rgr_02@3519: case CSGOWeapon_NVG:
rgr_02@3519: return (int)SMCSWeapon_NIGHTVISION;
rgr_02@3519: case CSGOWeapon_DEFUSER:
rgr_02@3519: return (int)SMCSWeapon_DEFUSER;
rgr_02@3519: default:
kyle@4028: return (int)SMCSWeapon_NONE;
rgr_02@3519: }
rgr_02@3519: #else
kyle@4028: if (weaponId > (int)SMCSWeapon_NIGHTVISION || weaponId < (int)SMCSWeapon_NONE)
kyle@4028: return (int)SMCSWeapon_NONE;
rgr_02@3519: else
rgr_02@3519: return weaponId;
rgr_02@3519: #endif
rgr_02@3519: }
drifter01620@3965: bool IsValidWeaponID(int id)
drifter01620@3965: {
kyle@4028: if (id <= (int)SMCSWeapon_NONE)
drifter01620@3965: return false;
drifter01620@3965: //Why are these even HERE!?! They dont exist in CS:GO but have valid ID's still
drifter01620@3965: #if SOURCE_ENGINE == SE_CSGO
kyle@4028: else if (id > (int)SMCSWeapon_DEFUSER || id == (int)SMCSWeapon_P228 || id == (int)SMCSWeapon_SCOUT || id == (int)SMCSWeapon_SG550 || id == (int)SMCSWeapon_GALIL ||
kyle@4028: 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: return false;
drifter01620@3965: #else
kyle@4028: else if (id > (int)SMCSWeapon_NIGHTVISION)
drifter01620@3965: return false;
drifter01620@3965: #endif
drifter01620@3965: return true;
drifter01620@3965: }