コード例 #1
0
        public void StartOpeningStripper(EntityUid user, StrippableComponent component)
        {
            if (component.CancelTokens.ContainsKey(user))
            {
                return;
            }

            if (TryComp <ActorComponent>(user, out var actor))
            {
                if (component.Owner.GetUIOrNull(StrippingUiKey.Key)?.SessionHasOpen(actor.PlayerSession) == true)
                {
                    return;
                }
            }

            var token = new CancellationTokenSource();

            var doAfterArgs = new DoAfterEventArgs(user, component.OpenDelay, token.Token, component.Owner)
            {
                BreakOnStun          = true,
                BreakOnDamage        = true,
                BreakOnTargetMove    = true,
                BreakOnUserMove      = true,
                NeedHand             = true,
                TargetCancelledEvent = new OpenStrippingCancelledEvent(user),
                TargetFinishedEvent  = new OpenStrippingCompleteEvent(user),
            };

            component.CancelTokens[user] = token;
            _doAfterSystem.DoAfter(doAfterArgs);
        }
コード例 #2
0
        private void OnStripHandMessage(EntityUid uid, StrippableComponent component, StrippingHandButtonPressed args)
        {
            if (args.Session.AttachedEntity is not {
                Valid : true
            } user ||
                !TryComp <HandsComponent>(user, out var userHands))
            {
                return;
            }

            var placingItem = userHands.ActiveHandEntity != null;

            if (TryComp <HandsComponent>(component.Owner, out var hands))
            {
                if (hands.Hands.TryGetValue(args.Hand, out var hand) && !hand.IsEmpty)
                {
                    placingItem = false;
                }

                if (placingItem)
                {
                    PlaceActiveHandItemInHands(user, args.Hand, component);
                }
                else
                    TakeItemFromHands(user, args.Hand, component);
            }
        }
コード例 #3
0
        private void OnStripInvButtonMessage(EntityUid uid, StrippableComponent component, StrippingInventoryButtonPressed args)
        {
            if (args.Session.AttachedEntity is not {
                Valid : true
            } user ||
                !TryComp <HandsComponent>(user, out var userHands))
            {
                return;
            }

            var placingItem = userHands.ActiveHandEntity != null;

            if (TryComp <InventoryComponent>(component.Owner, out var inventory))
            {
                if (_inventorySystem.TryGetSlotEntity(component.Owner, args.Slot, out _, inventory))
                {
                    placingItem = false;
                }

                if (placingItem)
                {
                    PlaceActiveHandItemInInventory(user, args.Slot, component);
                }
                else
                {
                    TakeItemFromInventory(user, args.Slot, component);
                }
            }
        }
コード例 #4
0
        private void OnOpenStripComplete(EntityUid uid, StrippableComponent component, OpenStrippingCompleteEvent args)
        {
            component.CancelTokens.Remove(args.User);

            if (!TryComp <ActorComponent>(args.User, out var actor))
            {
                return;
            }

            uid.GetUIOrNull(StrippingUiKey.Key)?.Open(actor.PlayerSession);
        }
コード例 #5
0
        private void AddStripVerb(EntityUid uid, StrippableComponent component, GetOtherVerbsEvent args)
        {
            if (args.Hands == null || !args.CanAccess || !args.CanInteract || args.Target == args.User)
            {
                return;
            }

            if (!args.User.TryGetComponent(out ActorComponent? actor))
            {
                return;
            }

            Verb verb = new();

            verb.Text        = Loc.GetString("strip-verb-get-data-text");
            verb.IconTexture = "/Textures/Interface/VerbIcons/outfit.svg.192dpi.png";
            verb.Act         = () => component.OpenUserInterface(actor.PlayerSession);
            args.Verbs.Add(verb);
        }
コード例 #6
0
        private void OnStripHandcuffMessage(EntityUid uid, StrippableComponent component, StrippingHandcuffButtonPressed args)
        {
            if (args.Session.AttachedEntity is not {
                Valid : true
            } user)
            {
                return;
            }

            if (TryComp <CuffableComponent>(component.Owner, out var cuffed))
            {
                foreach (var entity in cuffed.StoredEntities)
                {
                    if (entity != args.Handcuff)
                    {
                        continue;
                    }
                    cuffed.TryUncuff(user, entity);
                    return;
                }
            }
        }
コード例 #7
0
 private void OnOpenStripCancelled(EntityUid uid, StrippableComponent component, OpenStrippingCancelledEvent args)
 {
     component.CancelTokens.Remove(args.User);
 }
コード例 #8
0
 private void OnDidEquip(EntityUid uid, StrippableComponent component, DidEquipEvent args)
 {
     SendUpdate(uid, component);
 }
コード例 #9
0
 private void OnCuffStateChange(EntityUid uid, StrippableComponent component, ref CuffedStateChangeEvent args)
 {
     UpdateState(uid, component);
 }
コード例 #10
0
 private void OnCompInit(EntityUid uid, StrippableComponent component, ComponentInit args)
 {
     EnsureComp <ServerInventoryComponent>(uid);
     SendUpdate(uid, component);
 }
コード例 #11
0
 private void OnCompInit(EntityUid uid, StrippableComponent component, ComponentInit args)
 {
     SendUpdate(uid, component);
 }