In Source SDK you have to restart after editing a weapon script, this can be a pain when messing around with ammo or custom features you've added. I'm not 100% sure if everything works after reloading the script but it sure helps.
First of all we're going to add a function called ReloadScheme to the basecombatweapon class so in basecombatweapon_shared.h add this in the public section:
virtual void ReloadScheme()
{
ReadWeaponDataFromFileForSlot(filesystem, GetClassname(), &m_hWeaponFileInfo, GetEncryptionKey(), true);
}
also make sure this is at the top:
#include "weapon_parse.h"
in weapon_parse.h add a reset boolean to ReadWeaponDataFromFileForSlot like so:
// The weapon parse function
bool ReadWeaponDataFromFileForSlot( IFileSystem* filesystem, const char *szWeaponName,
WEAPON_FILE_INFO_HANDLE *phandle, const unsigned char *pICEKey = NULL, bool reset = false );
then in the code for the function in weapon_parse.cpp add a check for the reset boolean:
if (reset)
{
unsigned short lookup = m_WeaponInfoDatabase.Find(szWeaponName);
if (lookup != m_WeaponInfoDatabase.InvalidIndex())
{
delete m_WeaponInfoDatabase[lookup];
m_WeaponInfoDatabase.RemoveAt(lookup);
}
}
under the return false at the top of the function. Then to wrap it all together add the console command to the top of the basecombatweapon_shared.cpp file within #if !defined( CLIENT_DLL )
void CC_ReloadScript(void)
{
CBasePlayer* pPlayer = UTIL_GetCommandClient();
if (pPlayer == NULL)
return;
CBaseCombatWeapon *pWeapon = pPlayer->GetActiveWeapon();
if (pWeapon == NULL)
return;
pWeapon->ReloadScheme();
}
static ConCommand weapon_reloadscript("weapon_reloadscript", CC_ReloadScript);