Ejemplo n.º 1
0
        private void InteractionActivate(IEntity user, IEntity used)
        {
            var activateMsg = new ActivateInWorldMessage(user, used);

            RaiseLocalEvent(activateMsg);
            if (activateMsg.Handled)
            {
                return;
            }

            if (!used.TryGetComponent(out IActivate activateComp))
            {
                return;
            }

            // all activates should only fire when in range / unbostructed
            var activateEventArgs = new ActivateEventArgs {
                User = user, Target = used
            };

            if (InteractionChecks.InRangeUnobstructed(activateEventArgs))
            {
                activateComp.Activate(activateEventArgs);
            }
        }
Ejemplo n.º 2
0
        private void InteractionActivate(IEntity user, IEntity used)
        {
            var activateMsg = new ActivateInWorldMessage(user, used);

            RaiseEvent(activateMsg);
            if (activateMsg.Handled)
            {
                return;
            }

            if (!used.TryGetComponent(out IActivate activateComp))
            {
                return;
            }

            activateComp.Activate(new ActivateEventArgs {
                User = user
            });
        }
Ejemplo n.º 3
0
        private void HandleUseItemInWorld(ICommonSession session, GridCoordinates coords, EntityUid uid)
        {
            if (!EntityManager.TryGetEntity(uid, out var used))
            {
                return;
            }

            var playerEnt = ((IPlayerSession)session).AttachedEntity;

            if (playerEnt == null || !playerEnt.IsValid())
            {
                return;
            }

            if (!playerEnt.Transform.GridPosition.InRange(_mapManager, used.Transform.GridPosition, INTERACTION_RANGE))
            {
                return;
            }

            var activateMsg = new ActivateInWorldMessage(playerEnt, used);

            RaiseEvent(activateMsg);
            if (activateMsg.Handled)
            {
                return;
            }

            if (!used.TryGetComponent(out IActivate activateComp))
            {
                return;
            }

            activateComp.Activate(new ActivateEventArgs {
                User = playerEnt
            });
        }
        private async void HandleActivateInWorld(EntityUid uid, DisassembleOnActivateComponent component, ActivateInWorldMessage args)
        {
            if (string.IsNullOrEmpty(component.Prototype))
            {
                return;
            }
            if (!args.User.InRangeUnobstructed(args.Activated))
            {
                return;
            }

            if (component.DoAfterTime > 0 && TryGet <DoAfterSystem>(out var doAfterSystem))
            {
                var doAfterArgs = new DoAfterEventArgs(args.User, component.DoAfterTime, component.TokenSource.Token)
                {
                    BreakOnUserMove = true,
                    BreakOnStun     = true,
                };
                var result = await doAfterSystem.DoAfter(doAfterArgs);

                if (result != DoAfterStatus.Finished)
                {
                    return;
                }
                component.TokenSource.Cancel();
            }

            if (component.Deleted || component.Owner.Deleted)
            {
                return;
            }

            var entity = EntityManager.SpawnEntity(component.Prototype, component.Owner.Transform.Coordinates);

            if (args.User.TryGetComponent <HandsComponent>(out var hands) &&
                entity.TryGetComponent <ItemComponent>(out var item))
            {
                hands.PutInHandOrDrop(item);
            }

            component.Owner.Delete();

            return;
        }