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); }
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); } }
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); } } }
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); }
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); }
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; } } }
private void OnOpenStripCancelled(EntityUid uid, StrippableComponent component, OpenStrippingCancelledEvent args) { component.CancelTokens.Remove(args.User); }
private void OnDidEquip(EntityUid uid, StrippableComponent component, DidEquipEvent args) { SendUpdate(uid, component); }
private void OnCuffStateChange(EntityUid uid, StrippableComponent component, ref CuffedStateChangeEvent args) { UpdateState(uid, component); }
private void OnCompInit(EntityUid uid, StrippableComponent component, ComponentInit args) { EnsureComp <ServerInventoryComponent>(uid); SendUpdate(uid, component); }
private void OnCompInit(EntityUid uid, StrippableComponent component, ComponentInit args) { SendUpdate(uid, component); }