mirror of
https://github.com/0TheSpy/Seaside.git
synced 2025-01-10 19:22:10 +08:00
216 lines
5.9 KiB
C++
216 lines
5.9 KiB
C++
#ifndef WEAPON_PARSE_H
|
|
#define WEAPON_PARSE_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "shareddefs.h"
|
|
#include "GameEventListener.h"
|
|
#include "utlsortvector.h"
|
|
#include "gamestringpool.h"
|
|
|
|
#ifdef CLIENT_DLL
|
|
#define CEconItemView C_EconItemView
|
|
#endif
|
|
|
|
class IFileSystem;
|
|
class CEconItemView;
|
|
|
|
typedef unsigned short WEAPON_FILE_INFO_HANDLE;
|
|
|
|
|
|
enum WeaponSound_t {
|
|
EMPTY,
|
|
SINGLE,
|
|
SINGLE_ACCURATE,
|
|
SINGLE_NPC,
|
|
WPN_DOUBLE,
|
|
DOUBLE_NPC,
|
|
BURST,
|
|
RELOAD,
|
|
RELOAD_NPC,
|
|
MELEE_MISS,
|
|
MELEE_HIT,
|
|
MELEE_HIT_WORLD,
|
|
SPECIAL1,
|
|
SPECIAL2,
|
|
SPECIAL3,
|
|
TAUNT,
|
|
NEARLYEMPTY,
|
|
FAST_RELOAD,
|
|
|
|
NUM_SHOOT_SOUND_TYPES,
|
|
};
|
|
|
|
int GetWeaponSoundFromString(const char* pszString);
|
|
|
|
#define MAX_SHOOT_SOUNDS 16
|
|
|
|
#define MAX_WEAPON_STRING 80
|
|
#define MAX_WEAPON_PREFIX 16
|
|
#define MAX_WEAPON_AMMO_NAME 32
|
|
|
|
#define WEAPON_PRINTNAME_MISSING "!!! Missing printname on weapon"
|
|
|
|
|
|
class CHudTexture;
|
|
class KeyValues;
|
|
|
|
struct WeaponInfoLookup
|
|
{
|
|
size_t m_nWeaponParseDataOffset;
|
|
_fieldtypes m_fieldType;
|
|
CGameString m_iszAttribClassName;
|
|
|
|
WeaponInfoLookup(void) {}
|
|
WeaponInfoLookup(size_t offset, _fieldtypes p_fieldType, const char* szAttribClassName);
|
|
WeaponInfoLookup(const WeaponInfoLookup& WepInfoLookup);
|
|
};
|
|
|
|
|
|
class CWeaponInfoLookupListLess
|
|
{
|
|
public:
|
|
bool Less(WeaponInfoLookup* const& src1, WeaponInfoLookup* const& src2, void* pCtx)
|
|
{
|
|
if (src1->m_iszAttribClassName.Get() < src2->m_iszAttribClassName.Get())
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
};
|
|
|
|
class FileWeaponInfo_t
|
|
{
|
|
public:
|
|
|
|
FileWeaponInfo_t();
|
|
virtual ~FileWeaponInfo_t() {}
|
|
|
|
virtual void Parse(KeyValues* pKeyValuesData, const char* szWeaponName);
|
|
|
|
virtual void RefreshDynamicParameters() {};
|
|
|
|
public:
|
|
bool bParsedScript;
|
|
bool bLoadedHudElements;
|
|
|
|
char szClassName[MAX_WEAPON_STRING];
|
|
char szPrintName[MAX_WEAPON_STRING];
|
|
|
|
int GetIndexofAttribute(string_t iszAttribClassName) const;
|
|
static CUtlSortVector< WeaponInfoLookup*, CWeaponInfoLookupListLess > ms_vecWeaponInfoLookup;
|
|
|
|
protected:
|
|
char szViewModel[MAX_WEAPON_STRING];
|
|
char szWorldModel[MAX_WEAPON_STRING];
|
|
char szAmmo1[MAX_WEAPON_AMMO_NAME];
|
|
char szWorldDroppedModel[MAX_WEAPON_STRING];
|
|
|
|
static bool ms_bWeaponInfoLookupInitialized;
|
|
|
|
public:
|
|
char szAnimationPrefix[MAX_WEAPON_PREFIX];
|
|
int iSlot;
|
|
int iPosition;
|
|
int iMaxClip1;
|
|
int iMaxClip2;
|
|
int iDefaultClip1;
|
|
int iDefaultClip2;
|
|
int iWeight;
|
|
int iRumbleEffect;
|
|
bool bAutoSwitchTo;
|
|
bool bAutoSwitchFrom;
|
|
int iFlags;
|
|
|
|
char szAmmo2[MAX_WEAPON_AMMO_NAME];
|
|
char szAIAddOn[MAX_WEAPON_STRING];
|
|
|
|
char aShootSounds[NUM_SHOOT_SOUND_TYPES][MAX_WEAPON_STRING];
|
|
|
|
private:
|
|
int iAmmoType;
|
|
int iAmmo2Type;
|
|
|
|
public:
|
|
|
|
bool m_bMeleeWeapon;
|
|
|
|
bool m_bBuiltRightHanded;
|
|
bool m_bAllowFlipping;
|
|
|
|
|
|
virtual int GetPrimaryClipSize(const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f) const { return 0; }
|
|
virtual int GetSecondaryClipSize(const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f) const { return 0; }
|
|
virtual int GetDefaultPrimaryClipSize(const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f) const { return 0; }
|
|
virtual int GetDefaultSecondaryClipSize(const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f) const { return 0; }
|
|
virtual int GetPrimaryReserveAmmoMax(const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f) const { return 0; }
|
|
virtual int GetSecondaryReserveAmmoMax(const CEconItemView* pWepView = NULL, int nAlt = 0, float flScale = 1.0f) const { return 0; }
|
|
|
|
const char* GetWorldModel(const CEconItemView* pWepView = NULL, int iTeam = 0) const;
|
|
const char* GetViewModel(const CEconItemView* pWepView = NULL, int iTeam = 0) const;
|
|
const char* GetWorldDroppedModel(const CEconItemView* pWepView = NULL, int iTeam = 0) const;
|
|
const char* GetPrimaryAmmo(const CEconItemView* pWepView = NULL) const;
|
|
|
|
int GetPrimaryAmmoType(const CEconItemView* pWepView = NULL) const;
|
|
|
|
int iSpriteCount;
|
|
CHudTexture* iconActive;
|
|
CHudTexture* iconInactive;
|
|
CHudTexture* iconAmmo;
|
|
CHudTexture* iconAmmo2;
|
|
CHudTexture* iconCrosshair;
|
|
CHudTexture* iconAutoaim;
|
|
CHudTexture* iconZoomedCrosshair;
|
|
CHudTexture* iconZoomedAutoaim;
|
|
CHudTexture* iconSmall;
|
|
|
|
bool bShowUsageHint;
|
|
|
|
};
|
|
|
|
WEAPON_FILE_INFO_HANDLE LookupWeaponInfoSlot(const char* name);
|
|
FileWeaponInfo_t* GetFileWeaponInfoFromHandle(WEAPON_FILE_INFO_HANDLE handle);
|
|
WEAPON_FILE_INFO_HANDLE GetInvalidWeaponInfoHandle(void);
|
|
|
|
void PrecacheFileWeaponInfoDatabase();
|
|
|
|
|
|
KeyValues* ReadEncryptedKVFile(IFileSystem* filesystem, const char* szFilenameWithoutExtension, const unsigned char* pICEKey, bool bForceReadEncryptedFile = false);
|
|
|
|
|
|
extern FileWeaponInfo_t* CreateWeaponInfo();
|
|
|
|
extern void LoadEquipmentData();
|
|
|
|
class CWeaponDatabase : public CAutoGameSystem, public CGameEventListener
|
|
{
|
|
public:
|
|
CWeaponDatabase();
|
|
|
|
void Reset();
|
|
bool LoadManifest();
|
|
void PrecacheAllWeapons();
|
|
void RefreshAllWeapons();
|
|
|
|
WEAPON_FILE_INFO_HANDLE FindWeaponInfo(const char* name);
|
|
FileWeaponInfo_t* GetFileWeaponInfoFromHandle(WEAPON_FILE_INFO_HANDLE handle);
|
|
|
|
protected:
|
|
friend void LoadEquipmentData();
|
|
|
|
virtual bool Init();
|
|
|
|
WEAPON_FILE_INFO_HANDLE FindOrCreateWeaponInfo(const char* name);
|
|
bool LoadWeaponDataFromFile(IFileSystem* filesystem, const char* szWeaponName, const unsigned char* pICEKey);
|
|
void FireGameEvent(IGameEvent* event);
|
|
|
|
private:
|
|
CUtlDict< FileWeaponInfo_t*, unsigned short > m_WeaponInfoDatabase;
|
|
bool m_bPreCached;
|
|
};
|
|
|
|
extern CWeaponDatabase g_WeaponDatabase;
|
|
|
|
|
|
#endif |