What I think is happening is the OnTriggerEnter in the WeaponPickup.cs script is calling multiple times before the gameObject is destroyed. This can be fixed by adding a hasWeapon bool, which you can check with an IF statement before calling the EquipWeapon() method.