Shadow Walker: Fixed bug that replaced custom weapons with crowbars upon loading a saved game

This commit is contained in:
1upD 2018-10-28 22:41:12 -04:00
parent f39b752adc
commit 4368e27adf
5 changed files with 95 additions and 41 deletions

View File

@ -0,0 +1,22 @@
// Custom melee weapon - used by npc_shadow_walker for weapon model overrides
WeaponData
{
// This will be replaced in code
"playermodel" "models/weapons/w_crowbar.mdl"
"anim_prefix" "crowbar"
"clip_size" "-1"
"primary_ammo" "None"
"secondary_ammo" "None"
"weight" "0"
"item_flags" "0"
// Sounds for the weapon. There is a max of 16 sounds per category (i.e. max 16 "single_shot" sounds)
SoundData
{
"melee_hit_world" "Weapon_Crowbar.Melee_HitWorld"
}
}

View File

@ -0,0 +1,24 @@
weapon_manifest
{
"file" "scripts/weapon_357.txt"
"file" "scripts/weapon_alyxgun.txt"
"file" "scripts/weapon_annabelle.txt"
"file" "scripts/weapon_ar2.txt"
"file" "scripts/weapon_bugbait.txt"
"file" "scripts/weapon_citizenpackage.txt"
"file" "scripts/weapon_citizensuitcase.txt"
"file" "scripts/weapon_crossbow.txt"
"file" "scripts/weapon_crowbar.txt"
"file" "scripts/weapon_cubemap.txt"
"file" "scripts/weapon_frag.txt"
"file" "scripts/weapon_physcannon.txt"
"file" "scripts/weapon_physgun.txt"
"file" "scripts/weapon_pistol.txt"
"file" "scripts/weapon_rpg.txt"
"file" "scripts/weapon_shotgun.txt"
"file" "scripts/weapon_smg1.txt"
"file" "scripts/weapon_stunstick.txt"
// Custom
"file" "scripts/weapon_custommelee.txt"
}

View File

@ -127,12 +127,13 @@ void CNPC_ShadowWalker::FixupWeapon()
// If no weapons supplied, give a crowbar // If no weapons supplied, give a crowbar
CBaseCombatWeapon *pWeapon = GetActiveWeapon(); CBaseCombatWeapon *pWeapon = GetActiveWeapon();
if (pWeapon == NULL) { if (pWeapon == NULL) {
CWeaponCustomMelee * pMeleeWeapon = (CWeaponCustomMelee *)CREATE_UNSAVED_ENTITY(CWeaponCustomMelee, "weapon_crowbar"); CWeaponCustomMelee *pMeleeWeapon = (CWeaponCustomMelee*)CreateEntityByName("weapon_custommelee");
// Apply weapon model override // Apply weapon model override
if (&m_iszWeaponModelName && m_iszWeaponModelName != MAKE_STRING("")) { if (&m_iszWeaponModelName && m_iszWeaponModelName != MAKE_STRING("")) {
pMeleeWeapon->m_iszWeaponModelName = this->m_iszWeaponModelName; pMeleeWeapon->m_iszWeaponModelName = this->m_iszWeaponModelName;
} }
// Default custom weapon model
else { else {
pMeleeWeapon->m_iszWeaponModelName = MAKE_STRING("models/props_canal/mattpipe.mdl"); pMeleeWeapon->m_iszWeaponModelName = MAKE_STRING("models/props_canal/mattpipe.mdl");
} }

View File

@ -15,14 +15,21 @@ class CWeaponCustomMelee : public CWeaponCrowbar
DECLARE_CLASS(CWeaponCustomMelee, CWeaponCrowbar); DECLARE_CLASS(CWeaponCustomMelee, CWeaponCrowbar);
const char *GetWorldModel() const { return m_iszWeaponModelName.ToCStr(); } const char *GetWorldModel() const { return m_iszWeaponModelName.ToCStr(); }
void SetPickupTouch(void) { /* do nothing */ } virtual void Drop(const Vector &vecVelocity);
public: public:
string_t m_iszWeaponModelName; string_t m_iszWeaponModelName;
DECLARE_DATADESC(); DECLARE_DATADESC();
}; };
void CWeaponCustomMelee::Drop(const Vector &vecVelocity)
{
BaseClass::Drop(vecVelocity);
AddSpawnFlags(SF_WEAPON_NO_PLAYER_PICKUP);
}
LINK_ENTITY_TO_CLASS(weapon_custommelee, CWeaponCustomMelee);
BEGIN_DATADESC(CWeaponCustomMelee) BEGIN_DATADESC(CWeaponCustomMelee)
DEFINE_FIELD(m_iszWeaponModelName, FIELD_STRING) DEFINE_FIELD(m_iszWeaponModelName, FIELD_STRING)
END_DATADESC() END_DATADESC()