private void OnSelfDispense(EntityUid uid, VendingMachineComponent component, VendingMachineSelfDispenseEvent args)
        {
            if (args.Handled)
            {
                return;
            }

            args.Handled = true;
            EjectRandom(uid, true, component);
        }
        private void OnEmagged(EntityUid uid, VendingMachineComponent component, GotEmaggedEvent args)
        {
            if (component.Emagged || component.EmaggedInventory.Count == 0)
            {
                return;
            }

            component.Emagged = true;
            args.Handled      = true;
        }
        private void OnDamage(EntityUid uid, VendingMachineComponent component, DamageChangedEvent args)
        {
            if (component.DispenseOnHitChance == null || args.DamageDelta == null)
            {
                return;
            }

            if (args.DamageDelta.Total >= component.DispenseOnHitThreshold && _random.Prob(component.DispenseOnHitChance.Value))
            {
                EjectRandom(uid, true, component);
            }
        }
        private void OnInventoryEjectMessage(EntityUid uid, VendingMachineComponent component, VendingMachineEjectMessage args)
        {
            if (!this.IsPowered(uid, EntityManager))
            {
                return;
            }

            if (args.Session.AttachedEntity is not {
                Valid : true
            } entity || Deleted(entity))
            {
                return;
            }

            AuthorizedVend(uid, entity, args.Type, args.ID, component);
        }
        private void OnComponentInit(EntityUid uid, VendingMachineComponent component, ComponentInit args)
        {
            base.Initialize();

            if (TryComp <ApcPowerReceiverComponent>(component.Owner, out var receiver))
            {
                TryUpdateVisualState(uid, null, component);
            }

            if (component.Action != null)
            {
                var action = new InstantAction(_prototypeManager.Index <InstantActionPrototype>(component.Action));
                _action.AddAction(uid, action, uid);
            }

            InitializeFromPrototype(uid, component);
        }
        private void OnInventoryRequestMessage(EntityUid uid, VendingMachineComponent component, InventorySyncRequestMessage args)
        {
            if (!this.IsPowered(uid, EntityManager))
            {
                return;
            }

            var inventory = new List <VendingMachineInventoryEntry>(component.Inventory);

            if (component.Emagged)
            {
                inventory.AddRange(component.EmaggedInventory);
            }
            if (component.Contraband)
            {
                inventory.AddRange(component.ContrabandInventory);
            }

            component.UserInterface?.SendMessage(new VendingMachineInventoryMessage(inventory));
        }
 public void AuthorizedVend(EntityUid uid, EntityUid sender, InventoryType type, string itemId, VendingMachineComponent component)
 {
     if (IsAuthorized(uid, sender, component))
     {
         TryEjectVendorItem(uid, type, itemId, component.CanShoot, component);
     }
 }
 private void OnBreak(EntityUid uid, VendingMachineComponent vendComponent, BreakageEventArgs eventArgs)
 {
     vendComponent.Broken = true;
     TryUpdateVisualState(uid, VendingMachineVisualState.Broken, vendComponent);
 }
 private void OnPowerChanged(EntityUid uid, VendingMachineComponent component, PowerChangedEvent args)
 {
     TryUpdateVisualState(uid, null, component);
 }