class DropAction extends BaseItemAction { public override function CompleteAction( gameInstance : GameInstance ) { var itemID : ItemID; var instructions : array< DropInstruction >; var orientation : Quaternion; var upAxisAddition : Vector4; var position : Vector4; if( GetItemData().HasTag( 'UnequipBlocked' ) || GetItemData().HasTag( 'Quest' ) ) { return; } itemID = GetItemData().GetID(); GameInstance.GetTelemetrySystem( m_executor.GetGame() ).LogItemDrop( m_executor, itemID ); super.CompleteAction( gameInstance ); RPGManager.ReturnRetrievableWeaponMods( GetItemData(), m_executor ); upAxisAddition = Vector4( 0.0, 0.0, 0.40000001, 0.0 ); position = GetExecutor().GetWorldPosition() + upAxisAddition; orientation = GetExecutor().GetWorldOrientation() * Quaternion.Rand( 0.0, 360.0 ); if( ( ( RPGManager.GetItemCategory( itemID ) == gamedataItemCategory.Clothing || !( IsNameValid( RPGManager.GetItemRecord( itemID ).EntityName() ) ) ) || RPGManager.GetItemCategory( itemID ) == gamedataItemCategory.General ) || RPGManager.GetItemCategory( itemID ) == gamedataItemCategory.Consumable ) { instructions.PushBack( DropInstruction.Create( itemID, 1 ) ); GameInstance.GetLootManager( gameInstance ).SpawnItemDropOfManyItems( GetExecutor(), instructions, 'playerDropBag', position ); } else { GameInstance.GetLootManager( gameInstance ).SpawnItemDrop( GetExecutor(), itemID, position + Quaternion.GetForward( GetExecutor().GetWorldOrientation() ), orientation ); } } }