private void OnActivate(EntityUid uid, SpawnArtifactComponent component, ArtifactActivatedEvent args) { if (component.Prototype == null) { return; } if (component.SpawnsCount >= component.MaxSpawns) { return; } // select spawn position near artifact var artifactCord = Transform(uid).Coordinates; var dx = _random.NextFloat(-component.Range, component.Range); var dy = _random.NextFloat(-component.Range, component.Range); var spawnCord = artifactCord.Offset(new Vector2(dx, dy)); // spawn entity var spawned = EntityManager.SpawnEntity(component.Prototype, spawnCord); component.SpawnsCount++; // if there is an user - try to put spawned item in their hands // doesn't work for spawners if (args.Activator != null && EntityManager.TryGetComponent(args.Activator.Value, out SharedHandsComponent? hands) && EntityManager.HasComponent <ItemComponent>(spawned)) { hands.TryPutInAnyHand(spawned); } }
private void OnActivate(EntityUid uid, GasArtifactComponent component, ArtifactActivatedEvent args) { if (component.SpawnGas == null || component.SpawnTemperature == null) { return; } var transform = Transform(uid); var environment = _atmosphereSystem.GetContainingMixture(uid, false, true); if (environment == null) { return; } if (environment.Pressure >= component.MaxExternalPressure) { return; } var merger = new GasMixture(1) { Temperature = component.SpawnTemperature.Value }; merger.SetMoles(component.SpawnGas.Value, component.SpawnAmount); _atmosphereSystem.Merge(environment, merger); }
/// <summary> /// When activated, blasts everyone in LOS within n tiles /// with a high-probability disease infection attempt /// </summary> private void OnActivate(EntityUid uid, DiseaseArtifactComponent component, ArtifactActivatedEvent args) { if (component.SpawnDisease == null) { return; } var xform = Transform(uid); var carrierQuery = GetEntityQuery <DiseaseCarrierComponent>(); foreach (var entity in _lookup.GetEntitiesInRange(xform.Coordinates, component.Range)) { if (!carrierQuery.TryGetComponent(entity, out var carrier)) { continue; } if (!_interactionSystem.InRangeUnobstructed(uid, entity, component.Range)) { continue; } _disease.TryInfect(carrier, component.SpawnDisease, forced: true); } }
private void OnActivate(EntityUid uid, SpawnArtifactComponent component, ArtifactActivatedEvent args) { if (component.Prototype == null) { return; } if (component.SpawnsCount >= component.MaxSpawns) { return; } // select spawn position near artifact var artifactCord = Transform(uid).Coordinates; var dx = _random.NextFloat(-component.Range, component.Range); var dy = _random.NextFloat(-component.Range, component.Range); var spawnCord = artifactCord.Offset(new Vector2(dx, dy)); // spawn entity var spawned = EntityManager.SpawnEntity(component.Prototype, spawnCord); component.SpawnsCount++; // if there is an user - try to put spawned item in their hands // doesn't work for spawners _handsSystem.PickupOrDrop(args.Activator, spawned); }
private void OnActivated(EntityUid uid, RandomArtifactSpriteComponent component, ArtifactActivatedEvent args) { if (!TryComp(uid, out AppearanceComponent? appearance)) { return; } appearance.SetData(SharedArtifactsVisuals.IsActivated, true); component.ActivationStart = _time.CurTime; }
private void OnActivate(EntityUid uid, RadiateArtifactComponent component, ArtifactActivatedEvent args) { var transform = Transform(uid); var pulseUid = EntityManager.SpawnEntity(component.PulsePrototype, transform.Coordinates); if (!TryComp(pulseUid, out RadiationPulseComponent? pulse)) { return; } pulse.DoPulse(); }
public void ForceActivateArtifact(EntityUid uid, EntityUid?user = null, ArtifactComponent?component = null) { if (!Resolve(uid, ref component)) { return; } component.LastActivationTime = _gameTiming.CurTime; var ev = new ArtifactActivatedEvent() { Activator = user }; RaiseLocalEvent(uid, ev); }
/// <summary> /// When activated, blasts everyone in LOS within 3 tiles /// with a high-probability disease infection attempt /// </summary> private void OnActivate(EntityUid uid, DiseaseArtifactComponent component, ArtifactActivatedEvent args) { var xform = Transform(uid); foreach (var entity in _lookup.GetEntitiesInRange(xform.MapID, xform.WorldPosition, 3f)) { if (!_interactionSystem.InRangeUnobstructed(uid, entity, 3f)) { continue; } if (TryComp <DiseaseCarrierComponent>(entity, out var carrier)) { EntitySystem.Get <DiseaseSystem>().TryInfect(carrier, component.ResolveDisease); } } }
private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args) { var transform = Transform(uid); var center = _atmosphereSystem.GetTileMixture(transform.Coordinates, true); if (center == null) { return; } UpdateTileTemperature(component, center); if (component.EffectAdjacentTiles) { var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.Coordinates, invalidate: true); foreach (var mixture in adjacent) { UpdateTileTemperature(component, mixture); } } }
private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args) { var transform = Transform(uid); var center = _atmosphereSystem.GetContainingMixture(uid, false, true); if (center == null) { return; } UpdateTileTemperature(component, center); if (component.EffectAdjacentTiles && transform.GridUid != null) { var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.GridUid.Value, _transformSystem.GetGridOrMapTilePosition(uid, transform), excite: true); foreach (var mixture in adjacent) { UpdateTileTemperature(component, mixture); } } }
private void OnActivate(EntityUid uid, TelepathicArtifactComponent component, ArtifactActivatedEvent args) { // try to find victims nearby var victims = _lookup.GetEntitiesInRange(uid, component.Range); foreach (var victimUid in victims) { if (!EntityManager.HasComponent <ActorComponent>(victimUid)) { continue; } // roll if msg should be usual or drastic var isDrastic = _random.NextFloat() <= component.DrasticMessageProb; var msgArr = isDrastic ? component.DrasticMessages : component.Messages; // pick a random message var msgId = _random.Pick(msgArr); var msg = Loc.GetString(msgId); // show it as a popup, but only for the victim _popupSystem.PopupEntity(msg, victimUid, Filter.Entities(victimUid)); } }