private void OnEmergencyRepealAll(EntityUid uid, EmergencyShuttleConsoleComponent component, EmergencyShuttleRepealAllMessage args) { var player = args.Session.AttachedEntity; if (player == null) { return; } if (!_reader.FindAccessTags(player.Value).Contains(EmergencyRepealAllAccess)) { _popup.PopupCursor(Loc.GetString("emergency-shuttle-console-denied"), Filter.Entities(player.Value), PopupType.Medium); return; } if (component.AuthorizedEntities.Count == 0) { return; } _logger.Add(LogType.EmergencyShuttle, LogImpact.High, $"Emergency shuttle early launch REPEAL ALL by {args.Session:user}"); _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("emergency-shuttle-console-auth-revoked", ("remaining", component.AuthorizationsRequired))); component.AuthorizedEntities.Clear(); UpdateAllEmergencyConsoles(); }
private void UserSplit(EntityUid uid, EntityUid userUid, int amount, StackComponent?stack = null, TransformComponent?userTransform = null) { if (!Resolve(uid, ref stack)) { return; } if (!Resolve(userUid, ref userTransform)) { return; } if (amount <= 0) { _popupSystem.PopupCursor(Loc.GetString("comp-stack-split-too-small"), Filter.Entities(userUid)); return; } if (Split(uid, amount, userTransform.Coordinates, stack) is not { } split) { return; } if (TryComp <HandsComponent>(userUid, out var hands) && TryComp <ItemComponent>(split, out var item)) { hands.PutInHandOrDrop(item); } _popupSystem.PopupCursor(Loc.GetString("comp-stack-split"), Filter.Entities(userUid)); }
private void UserSplit(EntityUid uid, EntityUid userUid, int amount, StackComponent?stack = null, TransformComponent?userTransform = null) { if (!Resolve(uid, ref stack)) { return; } if (!Resolve(userUid, ref userTransform)) { return; } if (amount <= 0) { _popupSystem.PopupCursor(Loc.GetString("comp-stack-split-too-small"), Filter.Entities(userUid)); return; } if (Split(uid, amount, userTransform.Coordinates, stack) is not { } split) { return; } _handsSystem.PickupOrDrop(userUid, split); _popupSystem.PopupCursor(Loc.GetString("comp-stack-split"), Filter.Entities(userUid)); }
private void OnUnanchorAttempt(EntityUid uid, AtmosUnsafeUnanchorComponent component, UnanchorAttemptEvent args) { if (!component.Enabled || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodes)) { return; } if (_atmosphereSystem.GetTileMixture(EntityManager.GetComponent <TransformComponent>(component.Owner).Coordinates) is not { } environment) { return; } foreach (var node in nodes.Nodes.Values) { if (node is not PipeNode pipe) { continue; } if ((pipe.Air.Pressure - environment.Pressure) > 2 * Atmospherics.OneAtmosphere) { args.Delay += 1.5f; _popupSystem.PopupCursor(Loc.GetString("comp-atmos-unsafe-unanchor-warning"), Filter.Entities(args.User)); return; // Show the warning only once. } } }
/// <summary> /// Execute actions associated with the given verb. /// </summary> /// <remarks> /// Unless this is a client-exclusive verb, this will also tell the server to run the same verb. However, if the verb /// is disabled and has a tooltip, this function will only generate a pop-up-message instead of executing anything. /// </remarks> public void ExecuteVerb(EntityUid target, Verb verb, VerbType verbType) { if (verb.Disabled) { if (verb.Message != null) { _popupSystem.PopupCursor(verb.Message); } return; } var user = _playerManager.LocalPlayer?.ControlledEntity; if (user == null) { return; } ExecuteVerb(verb, user.Value, target); if (!verb.ClientExclusive) { RaiseNetworkEvent(new ExecuteVerbEvent(target, verb, verbType)); } }
private void OnToggleMainBreaker(EntityUid uid, ApcComponent component, ApcToggleMainBreakerMessage args) { TryComp <AccessReaderComponent>(uid, out var access); if (args.Session.AttachedEntity == null) { return; } if (access == null || _accessReader.IsAllowed(args.Session.AttachedEntity.Value, access)) { ApcToggleBreaker(uid, component); } else { _popupSystem.PopupCursor(Loc.GetString("apc-component-insufficient-access"), Filter.Entities(args.Session.AttachedEntity.Value), PopupType.Medium); } }
private void OnToggleMainBreaker(EntityUid uid, ApcComponent component, ApcToggleMainBreakerMessage args) { TryComp <AccessReaderComponent>(uid, out var access); if (args.Session.AttachedEntity == null) { return; } if (access == null || _accessReader.IsAllowed(access, args.Session.AttachedEntity.Value)) { component.MainBreakerEnabled = !component.MainBreakerEnabled; Comp <PowerNetworkBatteryComponent>(uid).CanDischarge = component.MainBreakerEnabled; UpdateUIState(uid, component); SoundSystem.Play(Filter.Pvs(uid), component.OnReceiveMessageSound.GetSound(), uid, AudioParams.Default.WithVolume(-2f)); } else { _popupSystem.PopupCursor(Loc.GetString("apc-component-insufficient-access"), Filter.Entities(args.Session.AttachedEntity.Value)); } }
private void OnInteractUsing(EntityUid uid, PlantHolderComponent component, InteractUsingEvent args) { if (TryComp(args.Used, out SeedComponent? seeds)) { if (component.Seed == null) { if (!_botanySystem.TryGetSeed(seeds, out var seed)) { return; } _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-plant-success-message", ("seedName", seed.Name), ("seedNoun", seed.Noun)), Filter.Entities(args.User), PopupType.Medium); component.Seed = seed; component.Dead = false; component.Age = 1; component.Health = component.Seed.Endurance; component.LastCycle = _gameTiming.CurTime; EntityManager.QueueDeleteEntity(args.Used); component.CheckLevelSanity(); component.UpdateSprite(); return; } _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-already-seeded-message", ("name", Comp <MetaDataComponent>(uid).EntityName)), Filter.Entities(args.User), PopupType.Medium); return; } if (_tagSystem.HasTag(args.Used, "Hoe")) { if (component.WeedLevel > 0) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-remove-weeds-message", ("name", Comp <MetaDataComponent>(uid).EntityName)), Filter.Entities(args.User), PopupType.Medium); _popupSystem.PopupEntity(Loc.GetString("plant-holder-component-remove-weeds-others-message", ("otherName", Comp <MetaDataComponent>(args.User).EntityName)), uid, Filter.PvsExcept(args.User)); component.WeedLevel = 0; component.UpdateSprite(); } else { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-no-weeds-message"), Filter.Entities(args.User)); } return; } if (_tagSystem.HasTag(args.Used, "Shovel")) { if (component.Seed != null) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-remove-plant-message", ("name", Comp <MetaDataComponent>(uid).EntityName)), Filter.Entities(args.User), PopupType.Medium); _popupSystem.PopupEntity(Loc.GetString("plant-holder-component-remove-plant-others-message", ("name", Comp <MetaDataComponent>(args.User).EntityName)), uid, Filter.PvsExcept(args.User)); component.RemovePlant(); } else { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-no-plant-message", ("name", Comp <MetaDataComponent>(uid).EntityName)), Filter.Entities(args.User)); } return; } if (_solutionSystem.TryGetDrainableSolution(args.Used, out var solution) && _solutionSystem.TryGetSolution(uid, component.SoilSolutionName, out var targetSolution) && TryComp(args.Used, out SprayComponent? spray)) { var amount = FixedPoint2.New(1); var targetEntity = uid; var solutionEntity = args.Used; SoundSystem.Play(spray.SpraySound.GetSound(), Filter.Pvs(args.Used), args.Used, AudioHelpers.WithVariation(0.125f)); var split = _solutionSystem.Drain(solutionEntity, solution, amount); if (split.TotalVolume == 0) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-no-plant-message", ("owner", args.Used)), Filter.Entities(args.User)); return; } _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-spray-message", ("owner", uid), ("amount", split.TotalVolume)), Filter.Entities(args.User), PopupType.Medium); _solutionSystem.TryAddSolution(targetEntity, targetSolution, split); component.ForceUpdateByExternalCause(); return; } if (_tagSystem.HasTag(args.Used, "PlantSampleTaker")) { if (component.Seed == null) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), Filter.Entities(args.User)); return; } if (component.Sampled) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-already-sampled-message"), Filter.Entities(args.User)); return; } if (component.Dead) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-dead-plant-message"), Filter.Entities(args.User)); return; } component.Seed.Unique = false; var seed = _botanySystem.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates); seed.RandomOffset(0.25f); _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message", ("seedName", component.Seed.DisplayName)), Filter.Entities(args.User)); component.Health -= (_random.Next(3, 5) * 10); if (_random.Prob(0.3f)) { component.Sampled = true; } // Just in case. component.CheckLevelSanity(); component.ForceUpdateByExternalCause(); return; } if (HasComp <SharpComponent>(args.Used)) { component.DoHarvest(args.User); } if (TryComp <ProduceComponent?>(args.Used, out var produce)) { _popupSystem.PopupCursor(Loc.GetString("plant-holder-component-compost-message", ("owner", uid), ("usingItem", args.Used)), Filter.Entities(args.User), PopupType.Medium); _popupSystem.PopupEntity(Loc.GetString("plant-holder-component-compost-others-message", ("user", Identity.Entity(args.User, EntityManager)), ("usingItem", args.Used), ("owner", uid)), uid, Filter.PvsExcept(args.User)); if (_solutionSystem.TryGetSolution(args.Used, produce.SolutionName, out var solution2)) { // This deliberately discards overfill. _solutionSystem.TryAddSolution(args.Used, solution2, _solutionSystem.SplitSolution(args.Used, solution2, solution2.TotalVolume)); component.ForceUpdateByExternalCause(); } EntityManager.QueueDeleteEntity(args.Used); } }
private void ConsolePopup(ICommonSession session, string text) { _popup.PopupCursor(text, Filter.SinglePlayer(session)); }