I do have the code

Where do you think it could possibly be caused the exception?

internal ObjectWeaponItem DropWeaponItem(SFD.Weapons.WeaponItemType wpnToDrop, int directionToDrop, Microsoft.Xna.Framework.Vector2 power, bool ignoreHolsteredModel, Microsoft.Xna.Framework.Vector2 dropOffset, bool handleCoverObject, Player.DropWeaponItemSource dropWeaponItemSource = Player.DropWeaponItemSource.Other)
		{
			string mapObjectID = "";
			bool pickupable = false;
			bool flag = false;
			SFD.Weapons.WeaponItem weaponItem = null;
			if ((this.CurrentAction == PlayerAction.DrawWeapon || this.CurrentAction == PlayerAction.HipFire || this.CurrentAction == PlayerAction.ManualAim) && this.CurrentWeaponDrawn == wpnToDrop)
			{
				this.CurrentAction = PlayerAction.Idle;
				this.ImportantUpdate = true;
			}
			switch (wpnToDrop)
			{
			case SFD.Weapons.WeaponItemType.NONE:
				return null;
			case SFD.Weapons.WeaponItemType.Handgun:
				if (this.CurrentHandgunWeapon != null)
				{
					mapObjectID = this.CurrentHandgunWeapon.Properties.ModelID;
					pickupable = true;
					flag = (!this.CurrentHandgunWeapon.IsEmpty && this.CurrentHandgunWeapon.Properties.SpawnsInSheath);
					weaponItem = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Handgun, this.CurrentHandgunWeapon);
					goto IL_1FE;
				}
				goto IL_1FE;
			case SFD.Weapons.WeaponItemType.Rifle:
				if (this.CurrentRifleWeapon != null)
				{
					mapObjectID = this.CurrentRifleWeapon.Properties.ModelID;
					pickupable = true;
					flag = (!this.CurrentRifleWeapon.IsEmpty && this.CurrentRifleWeapon.Properties.SpawnsInSheath);
					weaponItem = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Rifle, this.CurrentRifleWeapon);
					goto IL_1FE;
				}
				goto IL_1FE;
			case SFD.Weapons.WeaponItemType.Thrown:
				if (this.CurrentThrownWeapon != null)
				{
					mapObjectID = this.CurrentThrownWeapon.Properties.ModelID;
					pickupable = true;
					flag = this.CurrentThrownWeapon.Properties.SpawnsInSheath;
					weaponItem = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Thrown, this.CurrentThrownWeapon);
					goto IL_1FE;
				}
				goto IL_1FE;
			case SFD.Weapons.WeaponItemType.Melee:
				if (this.CurrentMeleeMakeshiftWeapon != null)
				{
					mapObjectID = this.CurrentMeleeMakeshiftWeapon.Properties.ModelID;
					pickupable = true;
					flag = this.CurrentMeleeMakeshiftWeapon.Properties.SpawnsInSheath;
					weaponItem = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Melee, this.CurrentMeleeMakeshiftWeapon);
					goto IL_1FE;
				}
				if (this.CurrentMeleeWeapon != null)
				{
					mapObjectID = this.CurrentMeleeWeapon.Properties.ModelID;
					pickupable = true;
					flag = this.CurrentMeleeWeapon.Properties.SpawnsInSheath;
					weaponItem = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Melee, this.CurrentMeleeWeapon);
					goto IL_1FE;
				}
				goto IL_1FE;
			case SFD.Weapons.WeaponItemType.Powerup:
				if (this.CurrentPowerupItem != null)
				{
					mapObjectID = this.CurrentPowerupItem.Properties.ModelID;
					pickupable = true;
					flag = this.CurrentPowerupItem.Properties.SpawnsInSheath;
					weaponItem = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Powerup, this.CurrentPowerupItem);
					goto IL_1FE;
				}
				goto IL_1FE;
			}
			return null;
			IL_1FE:
			if (weaponItem == null)
			{
				return null;
			}
			this.WeaponAbortBurstMode();
			this.m_reloadPrepared = false;
			this.RemoveWeaponItem(wpnToDrop, true, false);
			if (!weaponItem.BaseProperties.IsMakeshift && this.IsDead && this.ItemDropMode == Player.ItemDropModeEnum.RemoveOnDeath)
			{
				this.QueueRemovedWeaponCallback(weaponItem.Type, weaponItem.BaseProperties.WeaponID, 0, dropWeaponItemSource == Player.DropWeaponItemSource.ManuallyDropped, false);
				return null;
			}
			SpawnObjectInformation spawnObjectInformation = new SpawnObjectInformation(this.GameWorld.IDCounter.NextObjectData(mapObjectID), this.Position + dropOffset, (weaponItem.BaseProperties.WeaponID == 36) ? (0.7853982f * -(float)this.LastDirectionX) : 0f, (wpnToDrop == SFD.Weapons.WeaponItemType.Powerup) ? 1 : ((short)this.LastDirectionX), new Microsoft.Xna.Framework.Vector2((float)directionToDrop * 3f * power.X, 4f * power.Y), Constants.RANDOM.NextFloat(-3.14f, 3.14f));
			if (handleCoverObject && this.CoverObject != null && this.CoverObject.Body != null && this.CoverObjectCanShootThrough)
			{
				spawnObjectInformation.IgnoreBodyID = this.CoverObject.Body.BodyID;
			}
			flag = (flag && !ignoreHolsteredModel);
			Body body = this.m_gameWorld.CreateWeaponItem(spawnObjectInformation, flag, pickupable, true);
			ObjectData objectData = ObjectData.Read(body.GetFixtureList());
			ObjectWeaponItem objectWeaponItem = (ObjectWeaponItem)objectData;
			if (this.m_modifiers.InfiniteAmmo >= 1 && dropWeaponItemSource != Player.DropWeaponItemSource.ManuallyDropped && weaponItem.RWeaponData != null)
			{
				weaponItem.RWeaponData.RestoreAmmo();
			}
			objectWeaponItem.InternalData = weaponItem;
			objectWeaponItem.DroppedByPlayerID = this.ObjectID;
			objectWeaponItem.DroppedByPlayerSource = dropWeaponItemSource;
			if (!weaponItem.BaseProperties.IsMakeshift)
			{
				objectWeaponItem.SetDespawnTime(Constants.RANDOM.NextFloat(19000f, 21000f), false);
				if ((weaponItem.Type == SFD.Weapons.WeaponItemType.Rifle || weaponItem.Type == SFD.Weapons.WeaponItemType.Handgun) && weaponItem.RWeaponData.IsEmpty)
				{
					objectWeaponItem.QueueItemRemoval();
				}
				if (weaponItem.Type == SFD.Weapons.WeaponItemType.Thrown && weaponItem.TWeaponData is WpnC4Detonator && this.GameWorld.GetObjectDataByID(((WpnC4Detonator)weaponItem.TWeaponData).ConnectedC4ObjectID) == null)
				{
					objectWeaponItem.QueueItemRemoval();
				}
			}
			if (weaponItem.Type == SFD.Weapons.WeaponItemType.Melee & weaponItem.MWeaponData != null)
			{
				objectWeaponItem.Health.Fullness = weaponItem.MWeaponData.Durability.Fullness;
			}
			this.GameWorld.WeaponSpawnManager.RemoveSupplyItemTracking(objectData);
			if (objectData.Tile.CanBeMissile)
			{
				this.GameWorld.AddMissileObject(objectData, ObjectMissileStatus.Dropped, this);
				if (objectData.MissileData != null)
				{
					objectData.MissileData.SetHitCooldown();
				}
			}
			if (this.ItemDropMode == Player.ItemDropModeEnum.Break || this.ItemDropMode == Player.ItemDropModeEnum.RemoveOnDeath)
			{
				objectWeaponItem.QueueBreakOnDrop();
				objectWeaponItem.QueueItemRemoval();
				if (this.IsDead)
				{
					objectWeaponItem.Activateable = false;
					objectWeaponItem.ActivateableHighlightning = false;
				}
			}
			if (this.GameOwner == GameOwnerEnum.Server)
			{
				this.GameWorld.AddBodyToSync(objectData.BodyData);
			}
			this.QueueRemovedWeaponCallback(weaponItem.Type, weaponItem.BaseProperties.WeaponID, objectWeaponItem.ObjectID, dropWeaponItemSource == Player.DropWeaponItemSource.ManuallyDropped, this.InThrowingMode && dropWeaponItemSource == Player.DropWeaponItemSource.Other);
			return objectWeaponItem;
		}

public ObjectData DropThrowable(Microsoft.Xna.Framework.Vector2 velocity)
		{
			if (this.CurrentWeaponDrawn == SFD.Weapons.WeaponItemType.Thrown && (this.CurrentAction == PlayerAction.ManualAim || this.FullLanding || (!this.m_throwFullyPerformed && this.ThrowableIsActivated)))
			{
				ObjectData result = this.ReleaseThrow(this.GetThrowLocation(true), velocity, Constants.RANDOM.NextFloat(-3f, 3f), false);
				this.ThrowCharging = false;
				this.CurrentAction = PlayerAction.Idle;
				return result;
			}
			return null;
		}

public void ReleaseThrow()
		{
			if (this.InThrowingMode && this.GameOwner != GameOwnerEnum.Server)
			{
				SoundHandler.PlaySound("Throw", this.Position, this.GameWorld);
			}
			if (this.GameOwner == GameOwnerEnum.Client)
			{
				if (this.InThrowingMode)
				{
					return;
				}
				if (this.CurrentThrownWeapon != null)
				{
					TWeaponOnThrowArgs e = new TWeaponOnThrowArgs(this, this.CurrentThrownWeapon, null, 0f, this.ThrowableIsActivated);
					this.CurrentThrownWeapon.OnThrow(e);
					return;
				}
			}
			else
			{
				float num = -(float)this.LastDirectionX * Constants.RANDOM.NextFloat(1.5f, 2f);
				if (this.InThrowingMode)
				{
					num *= 14f;
				}
				this.ReleaseThrow(this.GetThrowLocation(false), this.GetThrowVector(), num, true);
			}
		}

public ObjectData ReleaseThrow(Microsoft.Xna.Framework.Vector2 throwLocation, Microsoft.Xna.Framework.Vector2 throwLinearVelocity, float angularVelocity, bool isThrowTOrDropF)
		{
			ObjectData result = null;
			if (this.InThrowingMode)
			{
				float angle = (float)Math.Atan2((double)throwLinearVelocity.Y, (double)throwLinearVelocity.X) + ((this.LastDirectionX == 1) ? 0f : 3.1415927f);
				throwLinearVelocity *= this.ThrowForceModifier;
				ObjectWeaponItem objectWeaponItem = this.DropWeaponItem(this.CurrentWeaponDrawn, this.LastDirectionX, Microsoft.Xna.Framework.Vector2.Zero, true, Microsoft.Xna.Framework.Vector2.Zero, true, Player.DropWeaponItemSource.Other);
				if (objectWeaponItem != null)
				{
					this.Statisticts.m_TotalItemsThrown++;
					objectWeaponItem.Body.SetTransform(Converter.WorldToBox2D(throwLocation), angle);
					objectWeaponItem.Body.SetLinearVelocity(throwLinearVelocity + this.AirControlBaseVelocity);
					objectWeaponItem.Body.SetAngularVelocity(angularVelocity);
					this.TimeSequence.TimeThrowCooldown = 425f;
					this.AddMissileObjectAndIgnoreTeammates(objectWeaponItem, ObjectMissileStatus.Thrown, false);
					SFD.Weapons.WeaponItem weaponItem = objectWeaponItem.GetWeaponItem();
					switch (weaponItem.Type)
					{
					case SFD.Weapons.WeaponItemType.Handgun:
						weaponItem.RWeaponData.OnThrowWeaponItem(this, objectWeaponItem);
						break;
					case SFD.Weapons.WeaponItemType.Rifle:
						weaponItem.RWeaponData.OnThrowWeaponItem(this, objectWeaponItem);
						break;
					case SFD.Weapons.WeaponItemType.Thrown:
						weaponItem.TWeaponData.OnThrowWeaponItem(this, objectWeaponItem);
						break;
					case SFD.Weapons.WeaponItemType.Melee:
						weaponItem.MWeaponData.OnThrowWeaponItem(this, objectWeaponItem);
						break;
					case SFD.Weapons.WeaponItemType.Powerup:
						weaponItem.PItemData.OnThrowWeaponItem(this, objectWeaponItem);
						break;
					}
				}
				result = objectWeaponItem;
				this.InThrowingMode = false;
			}
			else if (this.CurrentThrownWeapon != null)
			{
				this.Statisticts.m_TotalItemsThrown++;
				bool flag = isThrowTOrDropF || this.ThrowableIsActivated;
				string mapObjectID = this.CurrentThrownWeapon.Properties.ThrowObjectID;
				if (!flag)
				{
					mapObjectID = this.CurrentThrownWeapon.Properties.ModelID;
				}
				SpawnObjectInformation spawnObjectInformation = new SpawnObjectInformation(this.GameWorld.IDCounter.NextObjectData(mapObjectID), throwLocation, 0f, (short)this.LastDirectionX, throwLinearVelocity * this.ThrowForceModifier, angularVelocity);
				if (this.CoverObject != null && this.CoverObject.Body != null && this.CoverObjectCanShootThrough)
				{
					spawnObjectInformation.IgnoreBodyID = this.CoverObject.Body.BodyID;
				}
				Body body;
				if (flag)
				{
					body = this.m_gameWorld.CreateTile(spawnObjectInformation);
				}
				else
				{
					body = this.m_gameWorld.CreateWeaponItem(spawnObjectInformation, false, true, true);
				}
				ObjectData objectData = ObjectData.Read(body);
				result = objectData;
				TWeaponOnThrowArgs tweaponOnThrowArgs = new TWeaponOnThrowArgs(this, this.CurrentThrownWeapon, objectData, this.FireSequence.ThrowableDeadlineTimer, flag);
				this.TimeSequence.TimeThrowCooldown = 425f;
				if (isThrowTOrDropF)
				{
					if (objectData.Tile.CanBeMissile)
					{
						this.AddMissileObjectAndIgnoreTeammates(objectData, ObjectMissileStatus.Thrown, false);
					}
				}
				else if (objectData.Tile.CanBeMissile)
				{
					this.AddMissileObjectAndIgnoreTeammates(objectData, ObjectMissileStatus.Dropped, false);
				}
				if (!flag)
				{
					TWeapon tweapon = this.CurrentThrownWeapon.Copy();
					tweapon.NumberOfThrowablesLeft = 1;
					objectData.InternalData = new SFD.Weapons.WeaponItem(SFD.Weapons.WeaponItemType.Thrown, tweapon);
				}
				this.SetCurrentThrownAmmo((int)(this.InfiniteAmmo ? this.CurrentThrownWeapon.NumberOfThrowablesLeft : (this.CurrentThrownWeapon.NumberOfThrowablesLeft - 1)), objectData);
				if (isThrowTOrDropF)
				{
					tweaponOnThrowArgs.ThrowableWeapon.OnThrow(tweaponOnThrowArgs);
				}
				else
				{
					tweaponOnThrowArgs.ThrowableWeapon.OnDrop(tweaponOnThrowArgs);
				}
			}
			this.FireSequence.ThrowableDeadlineTimer = 0f;
			this.m_throwFullyPerformed = true;
			return result;
		}