2022-12-24 18:59:49 -06:00
using Content.Server.Administration.Logs ;
2021-07-25 08:41:50 -07:00
using Content.Server.Storage.Components ;
2022-12-24 18:59:49 -06:00
using Content.Shared.Database ;
2022-03-17 20:13:31 +13:00
using Content.Shared.Hands.EntitySystems ;
2022-03-13 01:33:23 +13:00
using Content.Shared.Interaction.Events ;
2022-03-28 09:58:13 -07:00
using Content.Shared.Storage ;
2021-07-25 08:41:50 -07:00
using Robust.Shared.Audio ;
using Robust.Shared.Player ;
using Robust.Shared.Random ;
namespace Content.Server.Storage.EntitySystems
{
2022-02-16 00:23:23 -07:00
public sealed class SpawnItemsOnUseSystem : EntitySystem
2021-07-25 08:41:50 -07:00
{
[Dependency] private readonly IRobustRandom _random = default ! ;
2022-12-24 18:59:49 -06:00
[Dependency] private readonly IAdminLogManager _adminLogger = default ! ;
2022-03-17 20:13:31 +13:00
[Dependency] private readonly SharedHandsSystem _handsSystem = default ! ;
2021-07-25 08:41:50 -07:00
public override void Initialize ( )
{
base . Initialize ( ) ;
SubscribeLocalEvent < SpawnItemsOnUseComponent , UseInHandEvent > ( OnUseInHand ) ;
}
private void OnUseInHand ( EntityUid uid , SpawnItemsOnUseComponent component , UseInHandEvent args )
{
if ( args . Handled )
return ;
2022-03-28 09:58:13 -07:00
var coords = Transform ( args . User ) . Coordinates ;
var spawnEntities = EntitySpawnCollection . GetSpawns ( component . Items , _random ) ;
2021-12-26 15:32:45 +13:00
EntityUid ? entityToPlaceInHands = null ;
2021-07-25 08:41:50 -07:00
2022-03-28 09:58:13 -07:00
foreach ( var proto in spawnEntities )
{
entityToPlaceInHands = Spawn ( proto , coords ) ;
2022-12-24 18:59:49 -06:00
_adminLogger . Add ( LogType . EntitySpawn , LogImpact . Low , $"{ToPrettyString(args.User)} used {ToPrettyString(component.Owner)} which spawned {ToPrettyString(entityToPlaceInHands.Value)}" ) ;
2021-07-25 08:41:50 -07:00
}
if ( component . Sound ! = null )
2022-06-12 19:45:47 -04:00
SoundSystem . Play ( component . Sound . GetSound ( ) , Filter . Pvs ( uid ) , uid ) ;
2021-07-25 08:41:50 -07:00
component . Uses - - ;
if ( component . Uses = = 0 )
{
args . Handled = true ;
2021-12-05 18:09:01 +01:00
EntityManager . DeleteEntity ( uid ) ;
2021-07-25 08:41:50 -07:00
}
2022-03-17 20:13:31 +13:00
if ( entityToPlaceInHands ! = null )
2021-07-25 08:41:50 -07:00
{
2022-03-17 20:13:31 +13:00
_handsSystem . PickupOrDrop ( args . User , entityToPlaceInHands . Value ) ;
2021-07-25 08:41:50 -07:00
}
}
}
}