EjectVendorItems.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Content.Server.VendingMachines;
  2. using Content.Shared.VendingMachines;
  3. namespace Content.Server.Destructible.Thresholds.Behaviors
  4. {
  5. /// <summary>
  6. /// Throws out a specific amount of random items from a vendor
  7. /// </summary>
  8. [Serializable]
  9. [DataDefinition]
  10. public sealed partial class EjectVendorItems : IThresholdBehavior
  11. {
  12. /// <summary>
  13. /// The percent amount of the total inventory that will be ejected.
  14. /// </summary>
  15. [DataField("percent", required: true)]
  16. public float Percent = 0.25f;
  17. /// <summary>
  18. /// The maximum amount of vendor items it can eject
  19. /// useful for high-inventory vendors
  20. /// </summary>
  21. [DataField("max")]
  22. public int Max = 3;
  23. public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null)
  24. {
  25. if (!system.EntityManager.TryGetComponent<VendingMachineComponent>(owner, out var vendingcomp) ||
  26. !system.EntityManager.TryGetComponent<TransformComponent>(owner, out var xform))
  27. return;
  28. var vendingMachineSystem = system.EntityManager.System<VendingMachineSystem>();
  29. var inventory = vendingMachineSystem.GetAvailableInventory(owner, vendingcomp);
  30. if (inventory.Count <= 0)
  31. return;
  32. var toEject = Math.Min(inventory.Count * Percent, Max);
  33. for (var i = 0; i < toEject; i++)
  34. {
  35. vendingMachineSystem.EjectRandom(owner, throwItem: true, forceEject: true, vendingcomp);
  36. }
  37. }
  38. }
  39. }