|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#ifndef CS_WEAPON_PARSE_H
#define CS_WEAPON_PARSE_H
#ifdef _WIN32
#pragma once
#endif
#ifdef CLIENT_DLL
#define CWeaponCSBase C_WeaponCSBase
#endif
#include "weapon_parse.h"
#include "econ_item_constants.h"
class CWeaponCSBase;
//--------------------------------------------------------------------------------------------------------
enum CSWeaponType { WEAPONTYPE_KNIFE=0, WEAPONTYPE_PISTOL, WEAPONTYPE_SUBMACHINEGUN, WEAPONTYPE_RIFLE, WEAPONTYPE_SHOTGUN, WEAPONTYPE_SNIPER_RIFLE, WEAPONTYPE_MACHINEGUN, WEAPONTYPE_C4, WEAPONTYPE_GRENADE, WEAPONTYPE_EQUIPMENT, WEAPONTYPE_STACKABLEITEM, WEAPONTYPE_UNKNOWN };
/*
NOTE!!!! Please try not to change the order. If you need to add something, please add it to the end. Anytime the order of the weaponID's change, we need to updated a bunch of tables in a couple DB's. Also, changing the order can invalidate saved queries and in general makes using the OGS stats difficult. */ //--------------------------------------------------------------------------------------------------------
enum CSWeaponID { WEAPON_NONE = 0,
WEAPON_FIRST,
WEAPON_DEAGLE = WEAPON_FIRST, WEAPON_ELITE, WEAPON_FIVESEVEN, WEAPON_GLOCK, WEAPON_P228, WEAPON_USP,
WEAPON_AK47, WEAPON_AUG, WEAPON_AWP, WEAPON_FAMAS, WEAPON_G3SG1, WEAPON_GALIL, WEAPON_GALILAR, WEAPON_M249, WEAPON_M3, WEAPON_M4A1, WEAPON_MAC10, WEAPON_MP5NAVY, WEAPON_P90, WEAPON_SCOUT, WEAPON_SG550, WEAPON_SG552, WEAPON_TMP, WEAPON_UMP45, WEAPON_XM1014,
WEAPON_BIZON, WEAPON_MAG7, WEAPON_NEGEV, WEAPON_SAWEDOFF, WEAPON_TEC9, WEAPON_TASER,
WEAPON_HKP2000, WEAPON_MP7, WEAPON_MP9, WEAPON_NOVA, WEAPON_P250, WEAPON_SCAR17, WEAPON_SCAR20, WEAPON_SG556, WEAPON_SSG08, WEAPON_LAST = WEAPON_SSG08,
ITEM_FIRST, WEAPON_KNIFE_GG = ITEM_FIRST, WEAPON_KNIFE,
WEAPON_FLASHBANG, WEAPON_HEGRENADE, WEAPON_SMOKEGRENADE, WEAPON_MOLOTOV, WEAPON_DECOY, WEAPON_INCGRENADE, WEAPON_TAGRENADE, WEAPON_C4, ITEM_MAX = WEAPON_C4,
EQUIPMENT_FIRST, ITEM_KEVLAR = EQUIPMENT_FIRST, ITEM_ASSAULTSUIT, ITEM_HEAVYASSAULTSUIT, ITEM_NVG, ITEM_DEFUSER, ITEM_CUTTERS, EQUIPMENT_MAX,
WEAPON_HEALTHSHOT,
WEAPON_MAX = EQUIPMENT_MAX, // number of weapons weapon index
};
#define MAX_EQUIPMENT (EQUIPMENT_MAX - EQUIPMENT_FIRST)
enum { ITEM_PRICE_KEVLAR = 650, ITEM_PRICE_HELMET = 350, ITEM_PRICE_ASSAULTSUIT = ITEM_PRICE_KEVLAR + ITEM_PRICE_HELMET, ITEM_PRICE_HEAVYASSAULTSUIT = 1250, ITEM_PRICE_DEFUSEKIT = 400, ITEM_PRICE_NVG = 1250, };
struct WeaponPaintableMaterial_t;
void PrepareEquipmentInfo( void );
class WeaponRecoilData { public:
WeaponRecoilData(); ~WeaponRecoilData();
void GetRecoilOffsets( CWeaponCSBase *pWeapon, int iMode, int iIndex, float& fAngle, float &fMagnitude ); void GenerateRecoilPatternForItemDefinition( item_definition_index_t idx );
private:
struct RecoilOffset { float fAngle; float fMagnitude; };
struct RecoilData { item_definition_index_t iItemDefIndex; RecoilOffset recoilTable[2][64]; };
CUtlMap< item_definition_index_t, RecoilData* > m_mapRecoilTables;
void GenerateRecoilTable( RecoilData *data );
};
//--------------------------------------------------------------------------------------------------------
class CCSWeaponInfo : public FileWeaponInfo_t { public: DECLARE_CLASS_GAMEROOT( CCSWeaponInfo, FileWeaponInfo_t ); CCSWeaponInfo(); virtual void Parse( ::KeyValues *pKeyValuesData, const char *szWeaponName );
// recoiltable in csweaponinfo is obsolete. remove this once confirmed that the new implementation generates the same result.
virtual void RefreshDynamicParameters() { GenerateRecoilTable(); }
const char *GetZoomInSound( void ) const { return m_szZoomINSound; } const char *GetZoomOutSound( void ) const { return m_szZoomOUTSound; }
const Vector& GetSmokeColor() const { return m_vSmokeColor; }
// recoiltable in csweaponinfo is obsolete. remove this once confirmed that the new implementation generates the same result.
void GetRecoilOffsets( int iMode, int iIndex, float& fAngle, float &fMagnitude ) const;
protected:
CSWeaponType m_WeaponType; int m_iTeam; // Which team can have this weapon. TEAM_UNASSIGNED if both can have it.
public:
CSWeaponID m_weaponId;
int GetWeaponPrice ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool IsFullAuto ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool HasSilencer ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetBullets ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetCycleTime ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetHeatPerShot ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoveryTimeCrouch ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoveryTimeStand ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoveryTimeCrouchFinal ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoveryTimeStandFinal ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetRecoveryTransitionStartBullet( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetRecoveryTransitionEndBullet ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
int GetRecoilSeed ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetFlinchVelocityModifierLarge ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetFlinchVelocityModifierSmall ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetTimeToIdleAfterFire ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetIdleInterval ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRange ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRangeModifier ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetDamage ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetPenetration ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetCrosshairDeltaDistance ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetCrosshairMinDistance ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
float GetInaccuracyAltSwitch ( void ) const { return m_fInaccuracyAltSwitch; };
float GetInaccuracyPitchShift ( void ) const { return m_fInaccuracyPitchShift; } float GetInaccuracyAltSoundThreshhold ( void ) const { return m_fInaccuracyAltSoundThreshold; }
float GetMaxSpeed ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
float GetSpread ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyCrouch ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyStand ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyJumpInitial ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyJump ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyLand ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyLadder ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyFire ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const; float GetInaccuracyMove ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const;
float GetInaccuracyReload ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 0.001f ) const;
float GetRecoilAngle ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoilAngleVariance ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoilMagnitude ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetRecoilMagnitudeVariance ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetTracerFrequency ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
int GetPrimaryClipSize ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetSecondaryClipSize ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetDefaultPrimaryClipSize ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetDefaultSecondaryClipSize ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
int GetKillAward ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool HasBurstMode ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool IsRevolver ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool HasAlternateFastSlowReload ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetArmorRatio ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool HasTraditionalScope ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool CannotShootUnderwater ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool DoesUnzoomAfterShot ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; bool DoesHideViewModelWhenZoomed ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetBucketSlot ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetZoomLevels ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
int GetZoomFOV1 ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetZoomFOV2 ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetZoomTime0 ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetZoomTime1 ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; float GetZoomTime2 ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
int GetPrimaryReserveAmmoMax ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const; int GetSecondaryReserveAmmoMax ( const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f ) const;
CSWeaponType GetWeaponType ( const CEconItemView* pWepView = NULL ) const; const char* GetAddonLocation ( const CEconItemView* pWepView = NULL ) const; const char* GetEjectBrassEffectName ( const CEconItemView* pWepView = NULL ) const; const char* GetTracerEffectName ( const CEconItemView* pWepView = NULL ) const; const char* GetMuzzleFlashEffectName_1stPerson ( const CEconItemView* pWepView = NULL ) const; const char* GetMuzzleFlashEffectName_1stPersonAlt ( const CEconItemView* pWepView = NULL ) const; const char* GetMuzzleFlashEffectName_3rdPerson ( const CEconItemView* pWepView = NULL ) const; const char* GetMuzzleFlashEffectName_3rdPersonAlt ( const CEconItemView* pWepView = NULL ) const; const char* GetHeatEffectName ( const CEconItemView* pWepView = NULL ) const; const char* GetPlayerAnimationExtension ( const CEconItemView* pWepView = NULL ) const; void SetUsedByTeam ( int nTeam ) { m_iTeam = nTeam; } int GetUsedByTeam ( const CEconItemView* pWepView = NULL ) const;
bool CanBeUsedWithShield() const { return m_bCanUseWithShield; } float GetBotAudibleRange() const { return m_flBotAudibleRange; } const char* GetWrongTeamMsg() const { return m_WrongTeamMsg; } const char* GetAnimExtension() const { return m_szAnimExtension; } const char* GetShieldViewModel() const { return m_szShieldViewModel; } const char* GetSilencerModel() const { return m_szSilencerModel; } float GetAddonScale() const { return m_flAddonScale; } float GetThrowVelocity() const { return m_fThrowVelocity; }
const char* GetAddonModel ( const CEconItemView* pWepView = NULL ) const; const CUtlVector< WeaponPaintableMaterial_t >* GetPaintData( const CEconItemView* pWepView = NULL ) const;
// recoiltable in csweaponinfo is obsolete. remove this once confirmed that the new implementation generates the same result.
void GenerateRecoilTable();
void SetWeaponPrice( int price ) { m_iWeaponPrice = price; }; void SetWeaponType( CSWeaponType type ) { m_WeaponType = type; };
private: static bool m_bCSWeaponInfoLookupInitialized;
bool m_bFullAuto; // is this a fully automatic weapon?
float m_flHeatPerShot; int m_iWeaponPrice; float m_flArmorRatio; float m_flMaxSpeed[2]; // How fast the player can run while this is his primary weapon.
int m_iCrosshairMinDistance; int m_iCrosshairDeltaDistance;
// Parameters for FX_FireBullets:
float m_flPenetration; int m_iDamage; float m_flRange; float m_flRangeModifier; int m_iBullets; float m_flCycleTime; float m_flCycleTimeAlt;
char m_szHeatEffectName[MAX_WEAPON_STRING];
Vector m_vSmokeColor;
char m_szMuzzleFlashEffectName_1stPerson[MAX_WEAPON_STRING]; char m_szMuzzleFlashEffectName_3rdPerson[MAX_WEAPON_STRING]; char m_szEjectBrassEffectName[MAX_WEAPON_STRING]; char m_szTracerEffectName[MAX_WEAPON_STRING]; int m_iTracerFequency;
// variables for new accuracy model
float m_fSpread[2]; float m_fInaccuracyCrouch[2]; float m_fInaccuracyStand[2]; float m_fInaccuracyJump[2]; float m_fInaccuracyLand[2]; float m_fInaccuracyLadder[2]; float m_fInaccuracyImpulseFire[2]; float m_fInaccuracyMove[2]; float m_fRecoveryTimeStand; float m_fRecoveryTimeCrouch; float m_fRecoveryTimeStandFinal; float m_fRecoveryTimeCrouchFinal; float m_fInaccuracyReload; float m_fInaccuracyAltSwitch; float m_fInaccuracyPitchShift; float m_fInaccuracyAltSoundThreshold; float m_fRecoilAngle[2]; float m_fRecoilAngleVariance[2]; float m_fRecoilMagnitude[2]; float m_fRecoilMagnitudeVariance[2]; int m_iRecoilSeed;
float m_fFlinchVelocityModifierLarge; // velocity modifier for anyone hit by this weapon
float m_fFlinchVelocityModifierSmall; // velocity modifier for anyone hit by this weapon
// Delay until the next idle animation after shooting.
float m_flTimeToIdleAfterFire; float m_flIdleInterval;
// recoiltable in csweaponinfo is obsolete. remove this once confirmed that the new implementation generates the same result.
struct RecoilOffset { float fAngle; float fMagnitude; }; RecoilOffset m_recoilTable[2][64];
int m_iZoomLevels; int m_iZoomFov[ 3 ]; float m_fZoomTime[ 3 ]; bool m_bHideViewModelZoomed; char m_szZoomINSound[ MAX_WEAPON_STRING ]; char m_szZoomOUTSound[ MAX_WEAPON_STRING ];
float m_flBotAudibleRange; // How far away a bot can hear this weapon.
bool m_bCanUseWithShield;
char m_WrongTeamMsg[ 32 ]; // Reference to a string describing the error if someone tries to buy
// this weapon but they're on the wrong team to have it.
// Zero-length if no specific message for this weapon.
char m_szAnimExtension[ 16 ]; char m_szShieldViewModel[ 64 ];
char m_szAddonModel[ MAX_WEAPON_STRING ]; // If this is set, it is used as the addon model. Otherwise, szWorldModel is used.
char m_szAddonLocation[ MAX_WEAPON_STRING ]; //If this is set, the weapon will look for an attachment location with this name. Otherwize the default is used based on weapon type.
char m_szSilencerModel[ MAX_WEAPON_STRING ]; // Alternate model with silencer attached
float m_flAddonScale;
// grenade throw parameters
float m_fThrowVelocity;
int m_iKillAward;
};
//--------------------------------------------------------------------------------------------------------
// Utility conversion functions
//--------------------------------------------------------------------------------------------------------
const char* WeaponClassAsString( CSWeaponType weaponType ); CSWeaponType WeaponClassFromString( const char * weaponType ); CSWeaponType WeaponClassFromWeaponID( CSWeaponID weaponID ); const char* WeaponIdAsString( CSWeaponID weaponID ); CSWeaponID WeaponIdFromString( const char *szWeaponName ); const char *WeaponIDToAlias( int id ); CSWeaponID AliasToWeaponID( const char *szAlias ); const CCSWeaponInfo* GetWeaponInfo( CSWeaponID weaponID ); bool IsGunWeapon( CSWeaponType weaponType );
#endif // CS_WEAPON_PARSE_H
|